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