src/hotspot/share/jfr/recorder/checkpoint/types/jfrThreadState.cpp
branchJEP-349-branch
changeset 58049 10ecdb5d3574
parent 57987 23e3cd901cb6
child 58112 e7754025004b
equal deleted inserted replaced
58020:f082177c5023 58049:10ecdb5d3574
    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 }