diff --git a/lib/perf_hooks.js b/lib/perf_hooks.js index 3fd7e7eded0352..a2a4cb4f7fa8a4 100644 --- a/lib/perf_hooks.js +++ b/lib/perf_hooks.js @@ -166,50 +166,94 @@ function getMilestoneTimestamp(milestoneIdx) { } class PerformanceNodeTiming extends PerformanceEntry { - get name() { - return 'node'; - } + constructor() { + super(); - get entryType() { - return 'node'; - } + ObjectDefineProperties(this, { + name: { + enumerable: true, + configurable: true, + value: 'node' + }, - get startTime() { - return 0; - } + entryType: { + enumerable: true, + configurable: true, + value: 'node' + }, - get duration() { - return now() - timeOrigin; - } + startTime: { + enumerable: true, + configurable: true, + value: 0 + }, - get nodeStart() { - return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_NODE_START); - } + duration: { + enumerable: true, + configurable: true, + get() { + return now() - timeOrigin; + } + }, - get v8Start() { - return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_V8_START); - } + nodeStart: { + enumerable: true, + configurable: true, + get() { + return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_NODE_START); + } + }, - get environment() { - return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_ENVIRONMENT); - } + v8Start: { + enumerable: true, + configurable: true, + get() { + return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_V8_START); + } + }, - get loopStart() { - return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_START); - } + environment: { + enumerable: true, + configurable: true, + get() { + return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_ENVIRONMENT); + } + }, - get loopExit() { - return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_EXIT); - } + loopStart: { + enumerable: true, + configurable: true, + get() { + return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_START); + } + }, - get bootstrapComplete() { - return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE); - } + loopExit: { + enumerable: true, + configurable: true, + get() { + return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_EXIT); + } + }, - get idleTime() { - return loopIdleTime(); - } + bootstrapComplete: { + enumerable: true, + configurable: true, + get() { + return getMilestoneTimestamp( + NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE); + } + }, + idleTime: { + enumerable: true, + configurable: true, + get() { + return loopIdleTime(); + } + } + }); + } [kInspect]() { return { name: 'node', diff --git a/test/parallel/test-performance-eventlooputil.js b/test/parallel/test-performance-eventlooputil.js index 6e62a666443289..9ce7212729d574 100644 --- a/test/parallel/test-performance-eventlooputil.js +++ b/test/parallel/test-performance-eventlooputil.js @@ -22,6 +22,13 @@ if (nodeTiming.loopStart === -1) { { idle: 0, active: 0, utilization: 0 }); } +const nodeTimingProps = ['name', 'entryType', 'startTime', 'duration', + 'nodeStart', 'v8Start', 'environment', 'loopStart', + 'loopExit', 'bootstrapComplete', 'idleTime']; +for (const p of nodeTimingProps) + assert.ok(typeof JSON.parse(JSON.stringify(nodeTiming))[p] === + typeof nodeTiming[p]); + setTimeout(mustCall(function r() { const elu1 = eventLoopUtilization();