4747extern char ** environ;
4848#endif
4949
50+ constexpr int NANOS_PER_SEC = 1000 * 1000 * 1000 ;
51+ constexpr double SEC_PER_MICROS = 1e-6 ;
52+
5053namespace report {
5154using node::arraysize;
5255using node::Environment;
@@ -489,20 +492,19 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) {
489492#ifndef _WIN32
490493// Report resource usage (Linux/OSX only).
491494static void PrintResourceUsage (JSONWriter* writer) {
492- time_t current_time; // current time absolute
493- time (¤t_time);
494- size_t boot_time = static_cast <time_t >(node::per_process::prog_start_time /
495- (1000 * 1000 * 1000 ));
496- auto uptime = difftime (current_time, boot_time);
495+ // Get process uptime in seconds
496+ uint64_t uptime =
497+ (uv_hrtime () - node::per_process::node_start_time) / (NANOS_PER_SEC);
497498 if (uptime == 0 ) uptime = 1 ; // avoid division by zero.
498499
499500 // Process and current thread usage statistics
500501 struct rusage stats;
501502 writer->json_objectstart (" resourceUsage" );
502503 if (getrusage (RUSAGE_SELF, &stats) == 0 ) {
503- double user_cpu = stats.ru_utime .tv_sec + 0.000001 * stats.ru_utime .tv_usec ;
504+ double user_cpu =
505+ stats.ru_utime .tv_sec + SEC_PER_MICROS * stats.ru_utime .tv_usec ;
504506 double kernel_cpu =
505- stats.ru_utime .tv_sec + 0.000001 * stats.ru_utime .tv_usec ;
507+ stats.ru_utime .tv_sec + SEC_PER_MICROS * stats.ru_utime .tv_usec ;
506508 writer->json_keyvalue (" userCpuSeconds" , user_cpu);
507509 writer->json_keyvalue (" kernelCpuSeconds" , kernel_cpu);
508510 double cpu_abs = user_cpu + kernel_cpu;
@@ -522,9 +524,10 @@ static void PrintResourceUsage(JSONWriter* writer) {
522524#ifdef RUSAGE_THREAD
523525 if (getrusage (RUSAGE_THREAD, &stats) == 0 ) {
524526 writer->json_objectstart (" uvthreadResourceUsage" );
525- double user_cpu = stats.ru_utime .tv_sec + 0.000001 * stats.ru_utime .tv_usec ;
527+ double user_cpu =
528+ stats.ru_utime .tv_sec + SEC_PER_MICROS * stats.ru_utime .tv_usec ;
526529 double kernel_cpu =
527- stats.ru_utime .tv_sec + 0.000001 * stats.ru_utime .tv_usec ;
530+ stats.ru_utime .tv_sec + SEC_PER_MICROS * stats.ru_utime .tv_usec ;
528531 writer->json_keyvalue (" userCpuSeconds" , user_cpu);
529532 writer->json_keyvalue (" kernelCpuSeconds" , kernel_cpu);
530533 double cpu_abs = user_cpu + kernel_cpu;
0 commit comments