src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp
branchJEP-349-branch
changeset 57870 00860d9caf4d
parent 57360 5d043a159d5c
child 57878 bffba8d6611a
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp	Fri Aug 23 18:47:55 2019 +0200
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp	Sat Aug 24 14:30:27 2019 +0200
@@ -99,7 +99,7 @@
   }
 }
 
-void  JfrSerializerRegistration::on_rotation() const {
+void JfrSerializerRegistration::on_rotation() const {
   _serializer->on_rotation();
 }
 
@@ -147,23 +147,27 @@
 }
 
 void JfrTypeManager::write_type_set() {
-  // can safepoint here because of Module_lock
   assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
-  JfrCheckpointWriter writer(true, true, Thread::current());
+  JfrCheckpointWriter writer;
   TypeSet set;
   set.serialize(writer);
 }
 
 void JfrTypeManager::write_type_set_for_unloaded_classes() {
   assert(SafepointSynchronize::is_at_safepoint(), "invariant");
-  JfrCheckpointWriter writer(false, true, Thread::current());
+  JfrCheckpointWriter writer;
+  const JfrCheckpointContext ctx = writer.context();
   ClassUnloadTypeSet class_unload_set;
   class_unload_set.serialize(writer);
+  if (!Jfr::is_recording()) {
+    // discard anything written
+    writer.set_context(ctx);
+  }
 }
 
 size_t JfrTypeManager::flush_type_set() {
   assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
-  JfrCheckpointWriter writer(true, true, Thread::current());
+  JfrCheckpointWriter writer;
   FlushTypeSet flush;
   flush.serialize(writer);
   return flush.elements();
@@ -172,18 +176,18 @@
 void JfrTypeManager::create_thread_checkpoint(Thread* t) {
   assert(t != NULL, "invariant");
   JfrThreadConstant type_thread(t);
-  JfrCheckpointWriter writer(false, true, t);
+  JfrCheckpointWriter writer(t);
   writer.write_type(TYPE_THREAD);
   type_thread.serialize(writer);
   // create and install a checkpoint blob
-  t->jfr_thread_local()->set_thread_checkpoint(writer.checkpoint_blob());
+  t->jfr_thread_local()->set_thread_checkpoint(writer.move());
   assert(t->jfr_thread_local()->has_thread_checkpoint(), "invariant");
 }
 
 void JfrTypeManager::write_thread_checkpoint(Thread* t) {
   assert(t != NULL, "invariant");
   JfrThreadConstant type_thread(t);
-  JfrCheckpointWriter writer(false, true, t);
+  JfrCheckpointWriter writer(t);
   writer.write_type(TYPE_THREAD);
   type_thread.serialize(writer);
 }
@@ -208,7 +212,7 @@
   assert(!types.in_list(registration), "invariant");
   DEBUG_ONLY(assert_not_registered_twice(id, types);)
   if (Jfr::is_recording()) {
-    JfrCheckpointWriter writer(false, true, Thread::current());
+    JfrCheckpointWriter writer;
     registration->invoke(writer);
   }
   types.prepend(registration);