< prev index next > src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp
8196341: Add JFR events for parallel phases of G1
if (_cur_verify_after_time_ms > 0.0) {
debug_time("Verify After", _cur_verify_after_time_ms);
}
}
+const char* G1GCPhaseTimes::phase_name(GCParPhases phase) {
+ static const char* names[] = {
+ "GCWorkerStart",
+ "ExtRootScan",
+ "ThreadRoots",
+ "StringTableRoots",
+ "UniverseRoots",
+ "JNIRoots",
+ "ObjectSynchronizerRoots",
+ "ManagementRoots",
+ "SystemDictionaryRoots",
+ "CLDGRoots",
+ "JVMTIRoots",
+ "CMRefRoots",
+ "WaitForStrongCLD",
+ "WeakCLDRoots",
+ "SATBFiltering",
+ "UpdateRS",
+ "ScanHCC",
+ "ScanRS",
+ "CodeRoots",
+#if INCLUDE_AOT
+ "AOTCodeRoots",
+#endif
+ "ObjCopy",
+ "Termination",
+ "Other",
+ "GCWorkerTotal",
+ "GCWorkerEnd",
+ "StringDedupQueueFixup",
+ "StringDedupTableFixup",
+ "RedirtyCards",
+ "YoungFreeCSet",
+ "NonYoungFreeCSet"
+ //GCParPhasesSentinel only used to tell end of enum
+ };
+
+ STATIC_ASSERT(ARRAY_SIZE(names) == G1GCPhaseTimes::GCParPhasesSentinel); // GCParPhases enum and corresponding string array should have the same "length", this tries to assert it
+
+ return names[phase];
+}
+
G1EvacPhaseWithTrimTimeTracker::G1EvacPhaseWithTrimTimeTracker(G1ParScanThreadState* pss, Tickspan& total_time, Tickspan& trim_time) :
_pss(pss),
_start(Ticks::now()),
_total_time(total_time),
_trim_time(trim_time),
_pss->reset_trim_ticks();
_stopped = true;
}
G1GCParPhaseTimesTracker::G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id) :
- _start_time(), _phase(phase), _phase_times(phase_times), _worker_id(worker_id) {
+ _start_time(), _phase(phase), _phase_times(phase_times), _worker_id(worker_id), _event() {
if (_phase_times != NULL) {
_start_time = Ticks::now();
}
}
G1GCParPhaseTimesTracker::~G1GCParPhaseTimesTracker() {
if (_phase_times != NULL) {
_phase_times->record_time_secs(_phase, _worker_id, (Ticks::now() - _start_time).seconds());
+ _event.commit(GCId::current(), _worker_id, G1GCPhaseTimes::phase_name(_phase));
}
}
G1EvacPhaseTimesTracker::G1EvacPhaseTimesTracker(G1GCPhaseTimes* phase_times,
G1ParScanThreadState* pss,
< prev index next >