< prev index next >

src/share/vm/jfr/support/jfrThreadLocal.cpp

Print this page
rev 9380 : 8237499: JFR: Include stack trace in the ThreadStart event
Reviewed-by: egahlin

@@ -53,11 +53,15 @@
   _cpu_time(0),
   _wallclock_time(os::javaTimeNanos()),
   _stack_trace_hash(0),
   _stackdepth(0),
   _entering_suspend_flag(0),
-  _dead(false) {}
+  _dead(false) {
+
+  Thread* thread = Thread::current_or_null();
+  _parent_trace_id = thread != NULL ? thread->jfr_thread_local()->trace_id() : (traceid)0;
+}
 
 u8 JfrThreadLocal::add_data_lost(u8 value) {
   _data_lost += value;
   return _data_lost;
 }

@@ -76,10 +80,11 @@
 }
 
 static void send_java_thread_start_event(JavaThread* jt) {
   EventThreadStart event;
   event.set_thread(jt->jfr_thread_local()->thread_id());
+  event.set_parentThread(jt->jfr_thread_local()->parent_thread_id());
   event.commit();
 }
 
 void JfrThreadLocal::on_start(Thread* t) {
   assert(t != NULL, "invariant");

@@ -87,10 +92,13 @@
   if (JfrRecorder::is_recording()) {
     if (t->is_Java_thread()) {
       send_java_thread_start_event((JavaThread*)t);
     }
   }
+  if (t->jfr_thread_local()->has_cached_stack_trace()) {
+    t->jfr_thread_local()->clear_cached_stack_trace();
+  }
 }
 
 static void send_java_thread_end_events(traceid id, JavaThread* jt) {
   assert(jt != NULL, "invariant");
   assert(Thread::current() == jt, "invariant");
< prev index next >