mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 12:20:27 +01:00
* Update the user timing implementation to conform to User Timing Level 3. * Reimplement user timing and timerify with pure JavaScript implementations * Simplify the C++ implementation for gc and http2 perf * Runtime deprecate additional perf entry properties in favor of the standard detail argument * Disable the `buffered` option on PerformanceObserver, all entries are queued and dispatched on setImmediate. Only entries with active observers are buffered. * This does remove the user timing and timerify trace events. Because the trace_events are still considered experimental, those can be removed without a deprecation cycle. They are removed to improve performance and reduce complexity. Old: `perf_hooks/usertiming.js n=100000: 92,378.01249733355` New: perf_hooks/usertiming.js n=100000: 270,393.5280638482` PR-URL: https://github.com/nodejs/node/pull/37136 Refs: https://github.com/nodejs/diagnostics/issues/464 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
121 lines
2.5 KiB
JavaScript
121 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
const {
|
|
ObjectDefineProperties,
|
|
ObjectDefineProperty,
|
|
ObjectSetPrototypeOf,
|
|
TypeError,
|
|
} = primordials;
|
|
|
|
const {
|
|
timeOriginTimestamp,
|
|
constants,
|
|
} = internalBinding('performance');
|
|
|
|
const {
|
|
PerformanceEntry,
|
|
now,
|
|
} = require('internal/perf/perf');
|
|
const { PerformanceObserver } = require('internal/perf/observe');
|
|
|
|
const {
|
|
PerformanceMark,
|
|
mark,
|
|
measure,
|
|
clearMarks,
|
|
} = require('internal/perf/usertiming');
|
|
|
|
const {
|
|
createHistogram
|
|
} = require('internal/histogram');
|
|
|
|
const eventLoopUtilization = require('internal/perf/event_loop_utilization');
|
|
const monitorEventLoopDelay = require('internal/perf/event_loop_delay');
|
|
const nodeTiming = require('internal/perf/nodetiming');
|
|
const timerify = require('internal/perf/timerify');
|
|
const { customInspectSymbol: kInspect } = require('internal/util');
|
|
const { inspect } = require('util');
|
|
|
|
class Performance {
|
|
constructor() {
|
|
// eslint-disable-next-line no-restricted-syntax
|
|
throw new TypeError('Illegal constructor');
|
|
}
|
|
|
|
[kInspect](depth, options) {
|
|
if (depth < 0) return this;
|
|
|
|
const opts = {
|
|
...options,
|
|
depth: options.depth == null ? null : options.depth - 1
|
|
};
|
|
|
|
return `Performance ${inspect({
|
|
nodeTiming: this.nodeTiming,
|
|
timeOrigin: this.timeOrigin,
|
|
}, opts)}`;
|
|
}
|
|
}
|
|
|
|
class InternalPerformance {}
|
|
InternalPerformance.prototype.constructor = Performance.prototype.constructor;
|
|
ObjectSetPrototypeOf(InternalPerformance.prototype, Performance.prototype);
|
|
|
|
ObjectDefineProperties(Performance.prototype, {
|
|
clearMarks: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: clearMarks,
|
|
},
|
|
eventLoopUtilization: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: eventLoopUtilization,
|
|
},
|
|
mark: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: mark,
|
|
},
|
|
measure: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: measure,
|
|
},
|
|
nodeTiming: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: nodeTiming,
|
|
},
|
|
now: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: now,
|
|
},
|
|
timerify: {
|
|
configurable: true,
|
|
enumerable: false,
|
|
value: timerify,
|
|
},
|
|
timeOrigin: {
|
|
configurable: true,
|
|
enumerable: true,
|
|
value: timeOriginTimestamp,
|
|
}
|
|
});
|
|
|
|
module.exports = {
|
|
PerformanceEntry,
|
|
PerformanceMark,
|
|
PerformanceObserver,
|
|
monitorEventLoopDelay,
|
|
createHistogram,
|
|
performance: new InternalPerformance(),
|
|
};
|
|
|
|
ObjectDefineProperty(module.exports, 'constants', {
|
|
configurable: false,
|
|
enumerable: true,
|
|
value: constants
|
|
});
|