diff --git a/src/nsolid.cc b/src/nsolid.cc index e3b8dd6ba8..736a4e59b1 100644 --- a/src/nsolid.cc +++ b/src/nsolid.cc @@ -285,6 +285,7 @@ ThreadMetrics::ThreadMetrics(SharedEnvInst envinst) stor_.thread_id = thread_id_; stor_.prev_call_time_ = uv_hrtime(); stor_.current_hrtime_ = stor_.prev_call_time_; + stor_.prev_idle_time_ = uv_metrics_idle_time(envinst->event_loop()); } @@ -300,6 +301,8 @@ ThreadMetrics::ThreadMetrics(uint64_t thread_id) stor_.thread_id = thread_id_; stor_.prev_call_time_ = uv_hrtime(); stor_.current_hrtime_ = stor_.prev_call_time_; + // Letting prev_idle_time_ be 0 is ok as this is only used by the EnvInst + // constructor. } diff --git a/test/addons/nsolid-env-metrics/binding.cc b/test/addons/nsolid-env-metrics/binding.cc index c63c865cb9..18270f5d28 100644 --- a/test/addons/nsolid-env-metrics/binding.cc +++ b/test/addons/nsolid-env-metrics/binding.cc @@ -16,6 +16,7 @@ struct Metrics { static void got_env_metrics(SharedThreadMetrics tm_sp, Metrics* m) { assert(tm_sp == m->tm); + assert(tm_sp->Get().loop_utilization <= 1); cb_cntr++; delete m; } diff --git a/test/addons/nsolid-env-metrics/nsolid-env-metrics.js b/test/addons/nsolid-env-metrics/nsolid-env-metrics.js index 4297d91714..2f8b0e2946 100644 --- a/test/addons/nsolid-env-metrics/nsolid-env-metrics.js +++ b/test/addons/nsolid-env-metrics/nsolid-env-metrics.js @@ -37,4 +37,8 @@ for (let i = 0; i < 10; i++) { })); } -binding.getMetrics(); +// Let then main thread be a bit idle so we can check that loop_utilization is +// correctly calculdate. +setTimeout(() => { + binding.getMetrics(); +}, 100);