< prev index next >

src/hotspot/share/gc/g1/g1Trace.cpp

Print this page
rev 56145 : 8230431: Move G1 trace code from gcTrace* to G1 directory
Reviewed-by:
rev 56146 : 8209802: Garbage collectors should register JFR types themselves to avoid build errors.

@@ -22,14 +22,57 @@
  *
  */
 
 #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);
 }
 
< prev index next >