< prev index next >

src/hotspot/os/linux/os_linux.cpp

Print this page

        

*** 5570,5587 **** return munmap(addr, bytes) == 0; } static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time); ! static clockid_t thread_cpu_clockid(Thread* thread) { ! pthread_t tid = thread->osthread()->pthread_id(); clockid_t clockid; ! ! // Get thread clockid ! int rc = os::Linux::pthread_getcpuclockid(tid, &clockid); ! assert(rc == 0, "pthread_getcpuclockid is expected to return 0 code"); ! return clockid; } // current_thread_cpu_time(bool) and thread_cpu_time(Thread*, bool) // are used by JVM M&M and JVMTI to get user+sys or user CPU time // of a thread. --- 5570,5592 ---- return munmap(addr, bytes) == 0; } static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time); ! static jlong fast_cpu_time(Thread *thread) { clockid_t clockid; ! int rc = os::Linux::pthread_getcpuclockid(thread->osthread()->pthread_id(), ! &clockid); ! if (rc == 0) { ! return os::Linux::fast_thread_cpu_time(clockid); ! } ! else { ! // It's possible to encounter a terminated native thread that failed ! // to detach itself from the VM - which should result in ESRCH. ! assert_status(rc == ESRCH, rc, "pthread_getcpuclockid failed"); ! return -1; ! } } // current_thread_cpu_time(bool) and thread_cpu_time(Thread*, bool) // are used by JVM M&M and JVMTI to get user+sys or user CPU time // of a thread.
*** 5599,5609 **** } jlong os::thread_cpu_time(Thread* thread) { // consistent with what current_thread_cpu_time() returns if (os::Linux::supports_fast_thread_cpu_time()) { ! return os::Linux::fast_thread_cpu_time(thread_cpu_clockid(thread)); } else { return slow_thread_cpu_time(thread, true /* user + sys */); } } --- 5604,5614 ---- } jlong os::thread_cpu_time(Thread* thread) { // consistent with what current_thread_cpu_time() returns if (os::Linux::supports_fast_thread_cpu_time()) { ! return fast_cpu_time(thread); } else { return slow_thread_cpu_time(thread, true /* user + sys */); } }
*** 5615,5625 **** } } jlong os::thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { if (user_sys_cpu_time && os::Linux::supports_fast_thread_cpu_time()) { ! return os::Linux::fast_thread_cpu_time(thread_cpu_clockid(thread)); } else { return slow_thread_cpu_time(thread, user_sys_cpu_time); } } --- 5620,5630 ---- } } jlong os::thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { if (user_sys_cpu_time && os::Linux::supports_fast_thread_cpu_time()) { ! return fast_cpu_time(thread); } else { return slow_thread_cpu_time(thread, user_sys_cpu_time); } }
< prev index next >