diff -r aa7b1ea52413 -r a57907813a83 src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp --- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp Fri Aug 30 20:39:38 2019 +0200 +++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp Mon Sep 02 19:42:46 2019 +0200 @@ -24,6 +24,8 @@ #include "precompiled.hpp" #include "jfr/jfr.hpp" +#include "jfr/leakprofiler/leakProfiler.hpp" +#include "jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp" #include "jfr/metadata/jfrSerializer.hpp" #include "jfr/recorder/checkpoint/jfrCheckpointWriter.hpp" #include "jfr/recorder/checkpoint/types/jfrType.hpp" @@ -42,7 +44,7 @@ JfrSerializerRegistration* _next; JfrSerializerRegistration* _prev; JfrSerializer* _serializer; - mutable JfrCheckpointBlobHandle _cache; + mutable JfrBlobHandle _cache; JfrTypeId _id; bool _permit_cache; @@ -171,9 +173,17 @@ void JfrTypeManager::write_type_set() { assert(!SafepointSynchronize::is_at_safepoint(), "invariant"); + if (!LeakProfiler::is_running()) { + JfrCheckpointWriter writer; + TypeSet set; + set.serialize(writer); + return; + } + JfrCheckpointWriter leakp_writer; JfrCheckpointWriter writer; - TypeSet set; + TypeSet set(&leakp_writer); set.serialize(writer); + ObjectSampleCheckpoint::on_type_set(leakp_writer); } void JfrTypeManager::write_type_set_for_unloaded_classes() { @@ -182,6 +192,9 @@ const JfrCheckpointContext ctx = writer.context(); ClassUnloadTypeSet class_unload_set; class_unload_set.serialize(writer); + if (LeakProfiler::is_running()) { + ObjectSampleCheckpoint::on_type_set_unload(writer); + } if (!Jfr::is_recording()) { // discard anything written writer.set_context(ctx); @@ -196,7 +209,7 @@ return flush.elements(); } -void JfrTypeManager::create_thread_checkpoint(Thread* t) { +void JfrTypeManager::create_thread_blob(Thread* t) { assert(t != NULL, "invariant"); ResourceMark rm(t); HandleMark hm(t); @@ -205,8 +218,8 @@ writer.write_type(TYPE_THREAD); type_thread.serialize(writer); // create and install a checkpoint blob - t->jfr_thread_local()->set_thread_checkpoint(writer.move()); - assert(t->jfr_thread_local()->has_thread_checkpoint(), "invariant"); + t->jfr_thread_local()->set_thread_blob(writer.move()); + assert(t->jfr_thread_local()->has_thread_blob(), "invariant"); } void JfrTypeManager::write_thread_checkpoint(Thread* t) {