From fd0a861cdb3088f60ee56a8adef05fd50b71f817 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Sat, 9 Feb 2019 23:48:14 +0800 Subject: src: unify uptime base used across the code base This patch joins `per_process::prog_start_time` (a double) and `performance::performance_node_start` (a uint64_t) into a `per_process::node_start_time` (a uint64_t) which gets initialized in `node::Start()`. PR-URL: https://github.com/nodejs/node/pull/26016 Reviewed-By: Anna Henningsen --- src/node_report.cc | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/node_report.cc') diff --git a/src/node_report.cc b/src/node_report.cc index d4e332f607..d4f59de84d 100644 --- a/src/node_report.cc +++ b/src/node_report.cc @@ -47,6 +47,9 @@ extern char** environ; #endif +constexpr int NANOS_PER_SEC = 1000 * 1000 * 1000; +constexpr double SEC_PER_MICROS = 1e-6; + namespace report { using node::arraysize; using node::Environment; @@ -489,20 +492,19 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) { #ifndef _WIN32 // Report resource usage (Linux/OSX only). static void PrintResourceUsage(JSONWriter* writer) { - time_t current_time; // current time absolute - time(¤t_time); - size_t boot_time = static_cast(node::per_process::prog_start_time / - (1000 * 1000 * 1000)); - auto uptime = difftime(current_time, boot_time); + // Get process uptime in seconds + uint64_t uptime = + (uv_hrtime() - node::per_process::node_start_time) / (NANOS_PER_SEC); if (uptime == 0) uptime = 1; // avoid division by zero. // Process and current thread usage statistics struct rusage stats; writer->json_objectstart("resourceUsage"); if (getrusage(RUSAGE_SELF, &stats) == 0) { - double user_cpu = stats.ru_utime.tv_sec + 0.000001 * stats.ru_utime.tv_usec; + double user_cpu = + stats.ru_utime.tv_sec + SEC_PER_MICROS * stats.ru_utime.tv_usec; double kernel_cpu = - stats.ru_utime.tv_sec + 0.000001 * stats.ru_utime.tv_usec; + stats.ru_utime.tv_sec + SEC_PER_MICROS * stats.ru_utime.tv_usec; writer->json_keyvalue("userCpuSeconds", user_cpu); writer->json_keyvalue("kernelCpuSeconds", kernel_cpu); double cpu_abs = user_cpu + kernel_cpu; @@ -522,9 +524,10 @@ static void PrintResourceUsage(JSONWriter* writer) { #ifdef RUSAGE_THREAD if (getrusage(RUSAGE_THREAD, &stats) == 0) { writer->json_objectstart("uvthreadResourceUsage"); - double user_cpu = stats.ru_utime.tv_sec + 0.000001 * stats.ru_utime.tv_usec; + double user_cpu = + stats.ru_utime.tv_sec + SEC_PER_MICROS * stats.ru_utime.tv_usec; double kernel_cpu = - stats.ru_utime.tv_sec + 0.000001 * stats.ru_utime.tv_usec; + stats.ru_utime.tv_sec + SEC_PER_MICROS * stats.ru_utime.tv_usec; writer->json_keyvalue("userCpuSeconds", user_cpu); writer->json_keyvalue("kernelCpuSeconds", kernel_cpu); double cpu_abs = user_cpu + kernel_cpu; -- cgit v1.2.3