src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp
branchJEP-349-branch
changeset 57882 562f598d303c
parent 57878 bffba8d6611a
child 57934 9c150f2b1fea
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp	Mon Aug 26 13:09:14 2019 +0200
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp	Mon Aug 26 17:59:32 2019 +0200
@@ -141,6 +141,23 @@
   }
 }
 
+static void serialize_threads(JfrCheckpointWriter& writer) {
+  JfrThreadConstantSet thread_set;
+  writer.write_type(TYPE_THREAD);
+  thread_set.serialize(writer);
+}
+
+static void serialize_thread_groups(JfrCheckpointWriter& writer) {
+  JfrThreadGroupConstant thread_group_set;
+  writer.write_type(TYPE_THREADGROUP);
+  thread_group_set.serialize(writer);
+}
+
+void JfrTypeManager::write_threads(JfrCheckpointWriter& writer) {
+  serialize_threads(writer);
+  serialize_thread_groups(writer);
+}
+
 void JfrTypeManager::notify_types_on_rotation() {
   const Iterator iter(types);
   while (iter.has_next()) {
@@ -180,7 +197,7 @@
   ResourceMark rm(t);
   HandleMark hm(t);
   JfrThreadConstant type_thread(t);
-  JfrCheckpointWriter writer(t);
+  JfrCheckpointWriter writer(t, true, THREADS);
   writer.write_type(TYPE_THREAD);
   type_thread.serialize(writer);
   // create and install a checkpoint blob
@@ -193,7 +210,7 @@
   ResourceMark rm(t);
   HandleMark hm(t);
   JfrThreadConstant type_thread(t);
-  JfrCheckpointWriter writer(t);
+  JfrCheckpointWriter writer(t, true, THREADS);
   writer.write_type(TYPE_THREAD);
   type_thread.serialize(writer);
 }
@@ -227,10 +244,6 @@
 
 bool JfrTypeManager::initialize() {
   SerializerRegistrationGuard guard;
-
-  // register non-safepointing type serialization
-  register_type(TYPE_THREADGROUP, false, new JfrThreadGroupConstant());
-  register_type(TYPE_THREAD, false, new JfrThreadConstantSet());
   register_type(TYPE_FLAGVALUEORIGIN, true, new FlagValueOriginConstant());
   register_type(TYPE_INFLATECAUSE, true, new MonitorInflateCauseConstant());
   register_type(TYPE_GCCAUSE, true, new GCCauseConstant());
@@ -247,7 +260,6 @@
   register_type(TYPE_CODEBLOBTYPE, true, new CodeBlobTypeConstant());
   register_type(TYPE_VMOPERATIONTYPE, true, new VMOperationTypeConstant());
   register_type(TYPE_THREADSTATE, true, new ThreadStateConstant());
-
   return true;
 }