diff --git a/src/hotspot/share/gc/z/zTracer.cpp b/src/hotspot/share/gc/z/zTracer.cpp index 2a0d3e11a793..b7d0bc0a697e 100644 --- a/src/hotspot/share/gc/z/zTracer.cpp +++ b/src/hotspot/share/gc/z/zTracer.cpp @@ -131,3 +131,16 @@ void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Tick e.commit(); } } + +void ZTracer::send_thread_debug(const char* name, const Ticks& start, const Ticks& end) { + NoSafepointVerifier nsv; + + EventZThreadDebug e(UNTIMED); + if (e.should_commit()) { + e.set_gcId(GCId::current_or_undefined()); + e.set_name(name); + e.set_starttime(start); + e.set_endtime(end); + e.commit(); + } +} diff --git a/src/hotspot/share/gc/z/zTracer.hpp b/src/hotspot/share/gc/z/zTracer.hpp index c39a193168ba..3ec97dfa4cbc 100644 --- a/src/hotspot/share/gc/z/zTracer.hpp +++ b/src/hotspot/share/gc/z/zTracer.hpp @@ -39,6 +39,7 @@ class ZTracer : public GCTracer { void send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value); void send_stat_sampler(const ZStatSampler& sampler, uint64_t value); void send_thread_phase(const char* name, const Ticks& start, const Ticks& end); + void send_thread_debug(const char* name, const Ticks& start, const Ticks& end); public: static ZTracer* tracer(); @@ -47,16 +48,18 @@ class ZTracer : public GCTracer { void report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value); void report_stat_sampler(const ZStatSampler& sampler, uint64_t value); void report_thread_phase(const char* name, const Ticks& start, const Ticks& end); + void report_thread_debug(const char* name, const Ticks& start, const Ticks& end); }; -class ZTraceThreadPhase : public StackObj { +// For temporary latency measurements during development and debugging +class ZTraceThreadDebug : public StackObj { private: const Ticks _start; const char* const _name; public: - ZTraceThreadPhase(const char* name); - ~ZTraceThreadPhase(); + ZTraceThreadDebug(const char* name); + ~ZTraceThreadDebug(); }; #endif // SHARE_GC_Z_ZTRACER_HPP diff --git a/src/hotspot/share/gc/z/zTracer.inline.hpp b/src/hotspot/share/gc/z/zTracer.inline.hpp index 143eebb4d3b6..cfaf7b43f0c4 100644 --- a/src/hotspot/share/gc/z/zTracer.inline.hpp +++ b/src/hotspot/share/gc/z/zTracer.inline.hpp @@ -50,12 +50,18 @@ inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, c } } -inline ZTraceThreadPhase::ZTraceThreadPhase(const char* name) : +inline void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) { + if (EventZThreadDebug::is_enabled()) { + send_thread_debug(name, start, end); + } +} + +inline ZTraceThreadDebug::ZTraceThreadDebug(const char* name) : _start(Ticks::now()), _name(name) {} -inline ZTraceThreadPhase::~ZTraceThreadPhase() { - ZTracer::tracer()->report_thread_phase(_name, _start, Ticks::now()); +inline ZTraceThreadDebug::~ZTraceThreadDebug() { + ZTracer::tracer()->report_thread_debug(_name, _start, Ticks::now()); } #endif // SHARE_GC_Z_ZTRACER_INLINE_HPP diff --git a/src/hotspot/share/jfr/metadata/metadata.xml b/src/hotspot/share/jfr/metadata/metadata.xml index 6a1f426785c9..2cc8cc10bea4 100644 --- a/src/hotspot/share/jfr/metadata/metadata.xml +++ b/src/hotspot/share/jfr/metadata/metadata.xml @@ -1034,6 +1034,11 @@ + + + + + diff --git a/src/jdk.jfr/share/conf/jfr/default.jfc b/src/jdk.jfr/share/conf/jfr/default.jfc index b168791f479a..7ffacfc02488 100644 --- a/src/jdk.jfr/share/conf/jfr/default.jfc +++ b/src/jdk.jfr/share/conf/jfr/default.jfc @@ -775,6 +775,11 @@ 0 ms + + true + 0 ms + + true 0 ms diff --git a/src/jdk.jfr/share/conf/jfr/profile.jfc b/src/jdk.jfr/share/conf/jfr/profile.jfc index 8d1bada4638f..03eac2e8669e 100644 --- a/src/jdk.jfr/share/conf/jfr/profile.jfc +++ b/src/jdk.jfr/share/conf/jfr/profile.jfc @@ -775,6 +775,11 @@ 0 ms + + true + 0 ms + + true 0 ms