1'use strict';
2
3const nodeTiming = require('internal/perf/nodetiming');
4
5const { now } = require('internal/perf/utils');
6
7function eventLoopUtilization(util1, util2) {
8  const ls = nodeTiming.loopStart;
9
10  if (ls <= 0) {
11    return { idle: 0, active: 0, utilization: 0 };
12  }
13
14  if (util2) {
15    const idle = util1.idle - util2.idle;
16    const active = util1.active - util2.active;
17    return { idle, active, utilization: active / (idle + active) };
18  }
19
20  const idle = nodeTiming.idleTime;
21  const active = now() - ls - idle;
22
23  if (!util1) {
24    return { idle, active, utilization: active / (idle + active) };
25  }
26
27  const idle_delta = idle - util1.idle;
28  const active_delta = active - util1.active;
29  const utilization = active_delta / (idle_delta + active_delta);
30  return { idle: idle_delta, active: active_delta, utilization };
31}
32
33module.exports = eventLoopUtilization;
34