diff -r 01d31583f25c -r a645b2f7bece src/hotspot/share/gc/g1/g1Trace.cpp --- 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);