mirror of
https://github.com/nodejs/node.git
synced 2025-05-05 19:08:17 +00:00

PR-URL: https://github.com/nodejs/node/pull/46697 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
161 lines
3.4 KiB
JavaScript
161 lines
3.4 KiB
JavaScript
'use strict';
|
|
|
|
const {
|
|
ObjectDefineProperties,
|
|
ObjectSetPrototypeOf,
|
|
} = primordials;
|
|
|
|
const { PerformanceEntry } = require('internal/perf/performance_entry');
|
|
|
|
const {
|
|
now,
|
|
getMilestoneTimestamp,
|
|
} = require('internal/perf/utils');
|
|
|
|
const {
|
|
customInspectSymbol: kInspect,
|
|
} = require('internal/util');
|
|
|
|
const { inspect } = require('util');
|
|
|
|
const {
|
|
constants: {
|
|
NODE_PERFORMANCE_MILESTONE_NODE_START,
|
|
NODE_PERFORMANCE_MILESTONE_V8_START,
|
|
NODE_PERFORMANCE_MILESTONE_LOOP_START,
|
|
NODE_PERFORMANCE_MILESTONE_LOOP_EXIT,
|
|
NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE,
|
|
NODE_PERFORMANCE_MILESTONE_ENVIRONMENT,
|
|
},
|
|
loopIdleTime,
|
|
} = internalBinding('performance');
|
|
|
|
class PerformanceNodeTiming {
|
|
constructor() {
|
|
ObjectDefineProperties(this, {
|
|
name: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
value: 'node',
|
|
},
|
|
|
|
entryType: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
value: 'node',
|
|
},
|
|
|
|
startTime: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
value: 0,
|
|
},
|
|
|
|
duration: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get: now,
|
|
},
|
|
|
|
nodeStart: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get() {
|
|
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_NODE_START);
|
|
},
|
|
},
|
|
|
|
v8Start: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get() {
|
|
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_V8_START);
|
|
},
|
|
},
|
|
|
|
environment: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get() {
|
|
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_ENVIRONMENT);
|
|
},
|
|
},
|
|
|
|
loopStart: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get() {
|
|
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_START);
|
|
},
|
|
},
|
|
|
|
loopExit: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get() {
|
|
return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_LOOP_EXIT);
|
|
},
|
|
},
|
|
|
|
bootstrapComplete: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get() {
|
|
return getMilestoneTimestamp(
|
|
NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE);
|
|
},
|
|
},
|
|
|
|
idleTime: {
|
|
__proto__: null,
|
|
enumerable: true,
|
|
configurable: true,
|
|
get: loopIdleTime,
|
|
},
|
|
});
|
|
}
|
|
|
|
[kInspect](depth, options) {
|
|
if (depth < 0) return this;
|
|
|
|
const opts = {
|
|
...options,
|
|
depth: options.depth == null ? null : options.depth - 1,
|
|
};
|
|
|
|
return `PerformanceNodeTiming ${inspect(this.toJSON(), opts)}`;
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
name: 'node',
|
|
entryType: 'node',
|
|
startTime: this.startTime,
|
|
duration: this.duration,
|
|
nodeStart: this.nodeStart,
|
|
v8Start: this.v8Start,
|
|
bootstrapComplete: this.bootstrapComplete,
|
|
environment: this.environment,
|
|
loopStart: this.loopStart,
|
|
loopExit: this.loopExit,
|
|
idleTime: this.idleTime,
|
|
};
|
|
}
|
|
}
|
|
|
|
ObjectSetPrototypeOf(
|
|
PerformanceNodeTiming.prototype,
|
|
PerformanceEntry.prototype);
|
|
|
|
module.exports = new PerformanceNodeTiming();
|