1994 WB_ENTRY(jboolean, WB_IsJFRIncludedInVmBuild(JNIEnv* env))
1995 #if INCLUDE_JFR
1996 return true;
1997 #else
1998 return false;
1999 #endif // INCLUDE_JFR
2000 WB_END
2001
2002 #if INCLUDE_CDS
2003
2004 WB_ENTRY(jint, WB_GetOffsetForName(JNIEnv* env, jobject o, jstring name))
2005 ResourceMark rm;
2006 char* c_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
2007 int result = CDSOffsets::find_offset(c_name);
2008 return (jint)result;
2009 WB_END
2010
2011 #endif // INCLUDE_CDS
2012
2013 WB_ENTRY(jint, WB_HandshakeWalkStack(JNIEnv* env, jobject wb, jobject thread_handle, jboolean all_threads))
2014 class TraceSelfClosure : public ThreadClosure {
2015 jint _num_threads_completed;
2016
2017 void do_thread(Thread* th) {
2018 assert(th->is_Java_thread(), "sanity");
2019 JavaThread* jt = (JavaThread*)th;
2020 ResourceMark rm;
2021
2022 jt->print_on(tty);
2023 jt->print_stack_on(tty);
2024 tty->cr();
2025 Atomic::inc(&_num_threads_completed);
2026 }
2027
2028 public:
2029 TraceSelfClosure() : _num_threads_completed(0) {}
2030
2031 jint num_threads_completed() const { return _num_threads_completed; }
2032 };
2033 TraceSelfClosure tsc;
2034
2035 if (all_threads) {
2036 Handshake::execute(&tsc);
2037 } else {
2038 oop thread_oop = JNIHandles::resolve(thread_handle);
2039 if (thread_oop != NULL) {
2040 JavaThread* target = java_lang_Thread::thread(thread_oop);
2041 Handshake::execute(&tsc, target);
2042 }
2043 }
2044 return tsc.num_threads_completed();
2045 WB_END
2046
2047 //Some convenience methods to deal with objects from java
2048 int WhiteBox::offset_for_field(const char* field_name, oop object,
2049 Symbol* signature_symbol) {
|
1994 WB_ENTRY(jboolean, WB_IsJFRIncludedInVmBuild(JNIEnv* env))
1995 #if INCLUDE_JFR
1996 return true;
1997 #else
1998 return false;
1999 #endif // INCLUDE_JFR
2000 WB_END
2001
2002 #if INCLUDE_CDS
2003
2004 WB_ENTRY(jint, WB_GetOffsetForName(JNIEnv* env, jobject o, jstring name))
2005 ResourceMark rm;
2006 char* c_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
2007 int result = CDSOffsets::find_offset(c_name);
2008 return (jint)result;
2009 WB_END
2010
2011 #endif // INCLUDE_CDS
2012
2013 WB_ENTRY(jint, WB_HandshakeWalkStack(JNIEnv* env, jobject wb, jobject thread_handle, jboolean all_threads))
2014 class TraceSelfClosure : public HandshakeClosure {
2015 jint _num_threads_completed;
2016
2017 void do_thread(Thread* th) {
2018 assert(th->is_Java_thread(), "sanity");
2019 JavaThread* jt = (JavaThread*)th;
2020 ResourceMark rm;
2021
2022 jt->print_on(tty);
2023 jt->print_stack_on(tty);
2024 tty->cr();
2025 Atomic::inc(&_num_threads_completed);
2026 }
2027
2028 public:
2029 TraceSelfClosure() : HandshakeClosure("WB_TraceSelf"), _num_threads_completed(0) {}
2030
2031 jint num_threads_completed() const { return _num_threads_completed; }
2032 };
2033 TraceSelfClosure tsc;
2034
2035 if (all_threads) {
2036 Handshake::execute(&tsc);
2037 } else {
2038 oop thread_oop = JNIHandles::resolve(thread_handle);
2039 if (thread_oop != NULL) {
2040 JavaThread* target = java_lang_Thread::thread(thread_oop);
2041 Handshake::execute(&tsc, target);
2042 }
2043 }
2044 return tsc.num_threads_completed();
2045 WB_END
2046
2047 //Some convenience methods to deal with objects from java
2048 int WhiteBox::offset_for_field(const char* field_name, oop object,
2049 Symbol* signature_symbol) {
|