Skip to content

Commit

Permalink
perf_hooks: make nodeTiming a first-class object
Browse files Browse the repository at this point in the history
Render all properties of nodeTiming enumerable
so JSON.stringify and Object.keys can access them

Fixes: nodejs#35936
  • Loading branch information
mmomtchev committed Nov 5, 2020
1 parent eb24573 commit e0b8f00
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 33 deletions.
105 changes: 72 additions & 33 deletions lib/perf_hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,50 +166,89 @@ function getMilestoneTimestamp(milestoneIdx) {
}

class PerformanceNodeTiming extends PerformanceEntry {
get name() {
return 'node';
}
constructor() {
super();

get entryType() {
return 'node';
}
ObjectDefineProperties(this, {
name: {
enumerable: true,
get() {
return 'node';
}
},

get startTime() {
return 0;
}
entryType: {
enumerable: true,
get() {
return 'node';
}
},

get duration() {
return now() - timeOrigin;
}
startTime: {
enumerable: true,
get() {
return 0;
}
},

get nodeStart() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_NODE_START);
}
duration: {
enumerable: true,
get() {
return now() - timeOrigin;
}
},

get v8Start() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_V8_START);
}
nodeStart: {
enumerable: true,
get() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_NODE_START);
}
},

get environment() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_ENVIRONMENT);
}
v8Start: {
enumerable: true,
get() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_V8_START);
}
},

get loopStart() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_START);
}
environment: {
enumerable: true,
get() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_ENVIRONMENT);
}
},

get loopExit() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_EXIT);
}
loopStart: {
enumerable: true,
get() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_START);
}
},

get bootstrapComplete() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE);
}
loopExit: {
enumerable: true,
get() {
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_EXIT);
}
},

get idleTime() {
return loopIdleTime();
}
bootstrapComplete: {
enumerable: true,
get() {
return getMilestoneTimestamp(
NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE);
}
},

idleTime: {
enumerable: true,
get() {
return loopIdleTime();
}
}
});
}
[kInspect]() {
return {
name: 'node',
Expand Down
6 changes: 6 additions & 0 deletions test/parallel/test-performance-eventlooputil.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ if (nodeTiming.loopStart === -1) {
{ idle: 0, active: 0, utilization: 0 });
}

for (const p of ['name', 'entryType', 'startTime', 'duration',
'nodeStart', 'v8Start', 'environment', 'loopStart', 'loopExit',
'bootstrapComplete', 'idleTime'])
assert.ok(typeof JSON.parse(JSON.stringify(nodeTiming))[p] ===
typeof nodeTiming[p]);

setTimeout(mustCall(function r() {
const t = Date.now();
const elu1 = eventLoopUtilization();
Expand Down

0 comments on commit e0b8f00

Please sign in to comment.