src/hotspot/share/gc/g1/g1Trace.cpp
changeset 58003 a645b2f7bece
parent 58002 01d31583f25c
child 58154 060d9d139109
child 58679 9c3209ff7550
--- a/src/hotspot/share/gc/g1/g1Trace.cpp	Wed Sep 04 09:47:51 2019 +0200
+++ b/src/hotspot/share/gc/g1/g1Trace.cpp	Wed Sep 04 09:47:55 2019 +0200
@@ -24,10 +24,53 @@
 
 #include "precompiled.hpp"
 #include "gc/g1/g1EvacuationInfo.hpp"
+#include "gc/g1/g1HeapRegionTraceType.hpp"
 #include "gc/g1/g1Trace.hpp"
 #include "gc/g1/g1YCTypes.hpp"
 #include "gc/shared/gcHeapSummary.hpp"
 #include "jfr/jfrEvents.hpp"
+#if INCLUDE_JFR
+#include "jfr/metadata/jfrSerializer.hpp"
+#endif
+
+#if INCLUDE_JFR
+class G1HeapRegionTypeConstant : public JfrSerializer {
+public:
+  void serialize(JfrCheckpointWriter& writer) {
+  static const u4 nof_entries = G1HeapRegionTraceType::G1HeapRegionTypeEndSentinel;
+  writer.write_count(nof_entries);
+  for (u4 i = 0; i < nof_entries; ++i) {
+    writer.write_key(i);
+    writer.write(G1HeapRegionTraceType::to_string((G1HeapRegionTraceType::Type)i));
+  }
+}
+};
+
+class G1YCTypeConstant : public JfrSerializer {
+public:
+  void serialize(JfrCheckpointWriter& writer) {
+    static const u4 nof_entries = G1YCTypeEndSentinel;
+    writer.write_count(nof_entries);
+    for (u4 i = 0; i < nof_entries; ++i) {
+      writer.write_key(i);
+      writer.write(G1YCTypeHelper::to_string((G1YCType)i));
+    }
+  }
+};
+
+static void register_jfr_type_constants() {
+  JfrSerializer::register_serializer(TYPE_G1HEAPREGIONTYPE, false, true,
+                                     new G1HeapRegionTypeConstant());
+
+  JfrSerializer::register_serializer(TYPE_G1YCTYPE, false, true,
+                                     new G1YCTypeConstant());
+}
+
+#endif
+
+void G1NewTracer::initialize() {
+  JFR_ONLY(register_jfr_type_constants());
+}
 
 void G1NewTracer::report_yc_type(G1YCType type) {
   _g1_young_gc_info.set_type(type);