src/os/linux/vm/os_linux.cpp
Print this page
*** 99,108 ****
--- 99,114 ----
# include <link.h>
# include <stdint.h>
# include <inttypes.h>
# include <sys/ioctl.h>
+ // if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
+ // getrusage() is prepared to handle the associated failure.
+ #ifndef RUSAGE_THREAD
+ #define RUSAGE_THREAD (1) /* only the calling thread */
+ #endif
+
#define MAX_PATH (2 * K)
// for timer info max values which include all bits
#define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
*** 1334,1352 ****
jlong os::elapsed_frequency() {
return (1000 * 1000);
}
! // For now, we say that linux does not support vtime. I have no idea
! // whether it can actually be made to (DLD, 9/13/05).
!
! bool os::supports_vtime() { return false; }
bool os::enable_vtime() { return false; }
bool os::vtime_enabled() { return false; }
double os::elapsedVTime() {
// better than nothing, but not much
return elapsedTime();
}
jlong os::javaTimeMillis() {
timeval time;
int status = gettimeofday(&time, NULL);
--- 1340,1362 ----
jlong os::elapsed_frequency() {
return (1000 * 1000);
}
! bool os::supports_vtime() { return true; }
bool os::enable_vtime() { return false; }
bool os::vtime_enabled() { return false; }
+
double os::elapsedVTime() {
+ struct rusage usage;
+ int retval = getrusage(RUSAGE_THREAD, &usage);
+ if (retval == 0) {
+ return (double) (usage.ru_utime.tv_sec + usage.ru_stime.tv_sec) + (double) (usage.ru_utime.tv_usec + usage.ru_stime.tv_usec) / (1000 * 1000);
+ } else {
// better than nothing, but not much
return elapsedTime();
+ }
}
jlong os::javaTimeMillis() {
timeval time;
int status = gettimeofday(&time, NULL);