| '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(); |