提交 7b66ed50 编写于 作者: J jbachorik

8027294: Prepare hotspot for non TOD based uptime counter

Summary: Use HR timer when available for os::elapsed_counter() on linux/bsd. Add a new counter for the JVM uptime.
Reviewed-by: dholmes, sla
上级 1fe1a455
...@@ -945,17 +945,15 @@ extern "C" Thread* get_thread() { ...@@ -945,17 +945,15 @@ extern "C" Thread* get_thread() {
// Used by VMSelfDestructTimer and the MemProfiler. // Used by VMSelfDestructTimer and the MemProfiler.
double os::elapsedTime() { double os::elapsedTime() {
return (double)(os::elapsed_counter()) * 0.000001; return ((double)os::elapsed_counter()) / os::elapsed_frequency();
} }
jlong os::elapsed_counter() { jlong os::elapsed_counter() {
timeval time; return javaTimeNanos() - initial_time_count;
int status = gettimeofday(&time, NULL);
return jlong(time.tv_sec) * 1000 * 1000 + jlong(time.tv_usec) - initial_time_count;
} }
jlong os::elapsed_frequency() { jlong os::elapsed_frequency() {
return (1000 * 1000); return NANOSECS_PER_SEC; // nanosecond resolution
} }
bool os::supports_vtime() { return true; } bool os::supports_vtime() { return true; }
...@@ -3582,7 +3580,7 @@ void os::init(void) { ...@@ -3582,7 +3580,7 @@ void os::init(void) {
Bsd::_main_thread = pthread_self(); Bsd::_main_thread = pthread_self();
Bsd::clock_init(); Bsd::clock_init();
initial_time_count = os::elapsed_counter(); initial_time_count = javaTimeNanos();
#ifdef __APPLE__ #ifdef __APPLE__
// XXXDARWIN // XXXDARWIN
......
...@@ -1333,17 +1333,15 @@ void os::Linux::capture_initial_stack(size_t max_size) { ...@@ -1333,17 +1333,15 @@ void os::Linux::capture_initial_stack(size_t max_size) {
// Used by VMSelfDestructTimer and the MemProfiler. // Used by VMSelfDestructTimer and the MemProfiler.
double os::elapsedTime() { double os::elapsedTime() {
return (double)(os::elapsed_counter()) * 0.000001; return ((double)os::elapsed_counter()) / os::elapsed_frequency(); // nanosecond resolution
} }
jlong os::elapsed_counter() { jlong os::elapsed_counter() {
timeval time; return javaTimeNanos() - initial_time_count;
int status = gettimeofday(&time, NULL);
return jlong(time.tv_sec) * 1000 * 1000 + jlong(time.tv_usec) - initial_time_count;
} }
jlong os::elapsed_frequency() { jlong os::elapsed_frequency() {
return (1000 * 1000); return NANOSECS_PER_SEC; // nanosecond resolution
} }
bool os::supports_vtime() { return true; } bool os::supports_vtime() { return true; }
...@@ -4750,7 +4748,7 @@ void os::init(void) { ...@@ -4750,7 +4748,7 @@ void os::init(void) {
Linux::_main_thread = pthread_self(); Linux::_main_thread = pthread_self();
Linux::clock_init(); Linux::clock_init();
initial_time_count = os::elapsed_counter(); initial_time_count = javaTimeNanos();
// pthread_condattr initialization for monotonic clock // pthread_condattr initialization for monotonic clock
int status; int status;
......
...@@ -78,6 +78,7 @@ typedef enum { ...@@ -78,6 +78,7 @@ typedef enum {
JMM_COMPILE_TOTAL_TIME_MS = 8, /* Total accumulated time spent in compilation */ JMM_COMPILE_TOTAL_TIME_MS = 8, /* Total accumulated time spent in compilation */
JMM_GC_TIME_MS = 9, /* Total accumulated time spent in collection */ JMM_GC_TIME_MS = 9, /* Total accumulated time spent in collection */
JMM_GC_COUNT = 10, /* Total number of collections */ JMM_GC_COUNT = 10, /* Total number of collections */
JMM_JVM_UPTIME_MS = 11, /* The JVM uptime in milliseconds */
JMM_INTERNAL_ATTRIBUTE_INDEX = 100, JMM_INTERNAL_ATTRIBUTE_INDEX = 100,
JMM_CLASS_LOADED_BYTES = 101, /* Number of bytes loaded instance classes */ JMM_CLASS_LOADED_BYTES = 101, /* Number of bytes loaded instance classes */
......
...@@ -1032,6 +1032,9 @@ static jlong get_long_attribute(jmmLongAttribute att) { ...@@ -1032,6 +1032,9 @@ static jlong get_long_attribute(jmmLongAttribute att) {
case JMM_JVM_INIT_DONE_TIME_MS: case JMM_JVM_INIT_DONE_TIME_MS:
return Management::vm_init_done_time(); return Management::vm_init_done_time();
case JMM_JVM_UPTIME_MS:
return Management::ticks_to_ms(os::elapsed_counter());
case JMM_COMPILE_TOTAL_TIME_MS: case JMM_COMPILE_TOTAL_TIME_MS:
return Management::ticks_to_ms(CompileBroker::total_compilation_ticks()); return Management::ticks_to_ms(CompileBroker::total_compilation_ticks());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册