equal
deleted
inserted
replaced
21 * questions. |
21 * questions. |
22 * |
22 * |
23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
|
26 #include "classfile/javaClasses.inline.hpp" |
26 #include "jfr/recorder/checkpoint/types/jfrThreadState.hpp" |
27 #include "jfr/recorder/checkpoint/types/jfrThreadState.hpp" |
27 #include "jfr/recorder/checkpoint/jfrCheckpointWriter.hpp" |
28 #include "jfr/recorder/checkpoint/jfrCheckpointWriter.hpp" |
28 #include "jfr/support/jfrThreadLocal.hpp" |
29 #include "jfr/support/jfrThreadLocal.hpp" |
29 #include "jvmtifiles/jvmti.h" |
30 #include "jvmtifiles/jvmti.h" |
30 #include "runtime/osThread.hpp" |
31 #include "runtime/osThread.hpp" |
81 writer.write_key(states[i].id); |
82 writer.write_key(states[i].id); |
82 writer.write(states[i].description); |
83 writer.write(states[i].description); |
83 } |
84 } |
84 } |
85 } |
85 |
86 |
86 const char* JfrThreadName::name(const Thread* t) { |
|
87 assert(t != NULL, "invariant"); |
|
88 if (!t->is_Java_thread()) { |
|
89 return t->name(); |
|
90 } |
|
91 assert(t->is_Java_thread(), "invariant"); |
|
92 const JavaThread* const jt = (JavaThread*)t; |
|
93 return jt->get_thread_name_string(); |
|
94 } |
|
95 |
|
96 traceid JfrThreadId::id(const Thread* t) { |
87 traceid JfrThreadId::id(const Thread* t) { |
97 assert(t != NULL, "invariant"); |
88 assert(t != NULL, "invariant"); |
98 if (!t->is_Java_thread()) { |
89 if (!t->is_Java_thread()) { |
99 return os_id(t); |
90 return os_id(t); |
100 } |
91 } |
111 |
102 |
112 traceid JfrThreadId::jfr_id(const Thread* t) { |
103 traceid JfrThreadId::jfr_id(const Thread* t) { |
113 assert(t != NULL, "invariant"); |
104 assert(t != NULL, "invariant"); |
114 return t->jfr_thread_local()->thread_id(); |
105 return t->jfr_thread_local()->thread_id(); |
115 } |
106 } |
|
107 |
|
108 // caller needs ResourceMark |
|
109 const char* get_java_thread_name(const Thread* t) { |
|
110 assert(t != NULL, "invariant"); |
|
111 assert(t->is_Java_thread(), "invariant"); |
|
112 const JavaThread* const jt = ((JavaThread*)t); |
|
113 const char* name_str = "<no-name - thread name unresolved>"; |
|
114 const oop thread_obj = jt->threadObj(); |
|
115 if (thread_obj != NULL) { |
|
116 const oop name = java_lang_Thread::name(thread_obj); |
|
117 if (name != NULL) { |
|
118 name_str = java_lang_String::as_utf8_string(name); |
|
119 } |
|
120 } else if (jt->is_attaching_via_jni()) { // workaround for 6412693 - see 6404306 |
|
121 name_str = "<no-name - thread is attaching>"; |
|
122 } |
|
123 assert(name_str != NULL, "unexpected NULL thread name"); |
|
124 return name_str; |
|
125 } |
|
126 |
|
127 const char* JfrThreadName::name(const Thread* t) { |
|
128 assert(t != NULL, "invariant"); |
|
129 return t->is_Java_thread() ? get_java_thread_name(t) : t->name(); |
|
130 } |