47
47
extern char ** environ;
48
48
#endif
49
49
50
+ constexpr int NANOS_PER_SEC = 1000 * 1000 * 1000 ;
51
+ constexpr double SEC_PER_MICROS = 1e-6 ;
52
+
50
53
namespace report {
51
54
using node::arraysize;
52
55
using node::Environment;
@@ -489,20 +492,19 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) {
489
492
#ifndef _WIN32
490
493
// Report resource usage (Linux/OSX only).
491
494
static 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);
497
498
if (uptime == 0 ) uptime = 1 ; // avoid division by zero.
498
499
499
500
// Process and current thread usage statistics
500
501
struct rusage stats;
501
502
writer->json_objectstart (" resourceUsage" );
502
503
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 ;
504
506
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 ;
506
508
writer->json_keyvalue (" userCpuSeconds" , user_cpu);
507
509
writer->json_keyvalue (" kernelCpuSeconds" , kernel_cpu);
508
510
double cpu_abs = user_cpu + kernel_cpu;
@@ -522,9 +524,10 @@ static void PrintResourceUsage(JSONWriter* writer) {
522
524
#ifdef RUSAGE_THREAD
523
525
if (getrusage (RUSAGE_THREAD, &stats) == 0 ) {
524
526
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 ;
526
529
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 ;
528
531
writer->json_keyvalue (" userCpuSeconds" , user_cpu);
529
532
writer->json_keyvalue (" kernelCpuSeconds" , kernel_cpu);
530
533
double cpu_abs = user_cpu + kernel_cpu;
0 commit comments