mirror of https://github.com/nodejs/node.git
perf_hooks: reduce overhead of new user timings
PR-URL: https://github.com/nodejs/node/pull/49914 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
This commit is contained in:
parent
1d220b55ac
commit
0e507d30ac
|
@ -42,7 +42,10 @@ class PerformanceEntry {
|
|||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
|
||||
initPerformanceEntry(this, name, type, start, duration);
|
||||
this[kName] = name;
|
||||
this[kEntryType] = type;
|
||||
this[kStartTime] = start;
|
||||
this[kDuration] = duration;
|
||||
}
|
||||
|
||||
get name() {
|
||||
|
@ -94,13 +97,6 @@ ObjectDefineProperties(PerformanceEntry.prototype, {
|
|||
toJSON: kEnumerableProperty,
|
||||
});
|
||||
|
||||
function initPerformanceEntry(entry, name, type, start, duration) {
|
||||
entry[kName] = name;
|
||||
entry[kEntryType] = type;
|
||||
entry[kStartTime] = start;
|
||||
entry[kDuration] = duration;
|
||||
}
|
||||
|
||||
function createPerformanceEntry(name, type, start, duration) {
|
||||
return new PerformanceEntry(kSkipThrow, name, type, start, duration);
|
||||
}
|
||||
|
@ -135,7 +131,6 @@ function createPerformanceNodeEntry(name, type, start, duration, detail) {
|
|||
}
|
||||
|
||||
module.exports = {
|
||||
initPerformanceEntry,
|
||||
createPerformanceEntry,
|
||||
PerformanceEntry,
|
||||
isPerformanceEntry,
|
||||
|
|
|
@ -2,16 +2,14 @@
|
|||
|
||||
const {
|
||||
ObjectDefineProperties,
|
||||
ObjectSetPrototypeOf,
|
||||
SafeMap,
|
||||
SafeSet,
|
||||
SafeArrayIterator,
|
||||
Symbol,
|
||||
SymbolToStringTag,
|
||||
ReflectConstruct,
|
||||
} = primordials;
|
||||
|
||||
const { initPerformanceEntry, PerformanceEntry } = require('internal/perf/performance_entry');
|
||||
const { PerformanceEntry, kSkipThrow } = require('internal/perf/performance_entry');
|
||||
const { now } = require('internal/perf/utils');
|
||||
const { enqueue, bufferUserTiming } = require('internal/perf/observe');
|
||||
const nodeTiming = require('internal/perf/nodetiming');
|
||||
|
@ -35,7 +33,6 @@ const {
|
|||
|
||||
const { structuredClone } = require('internal/structured_clone');
|
||||
const {
|
||||
kEmptyObject,
|
||||
lazyDOMException,
|
||||
kEnumerableProperty,
|
||||
} = require('internal/util');
|
||||
|
@ -69,27 +66,29 @@ function getMark(name) {
|
|||
return ts;
|
||||
}
|
||||
|
||||
class PerformanceMark {
|
||||
constructor(name, options = kEmptyObject) {
|
||||
class PerformanceMark extends PerformanceEntry {
|
||||
constructor(name, options = undefined) {
|
||||
if (arguments.length === 0) {
|
||||
throw new ERR_MISSING_ARGS('name');
|
||||
}
|
||||
name = `${name}`;
|
||||
options ??= kEmptyObject;
|
||||
if (nodeTimingReadOnlyAttributes.has(name))
|
||||
throw new ERR_INVALID_ARG_VALUE('name', name);
|
||||
validateObject(options, 'options');
|
||||
const startTime = options.startTime ?? now();
|
||||
if (options != null) {
|
||||
validateObject(options, 'options');
|
||||
}
|
||||
const startTime = options?.startTime ?? now();
|
||||
validateNumber(startTime, 'startTime');
|
||||
if (startTime < 0)
|
||||
throw new ERR_PERFORMANCE_INVALID_TIMESTAMP(startTime);
|
||||
markTimings.set(name, startTime);
|
||||
|
||||
let detail = options.detail;
|
||||
let detail = options?.detail;
|
||||
detail = detail != null ?
|
||||
structuredClone(detail) :
|
||||
null;
|
||||
initPerformanceEntry(this, name, 'mark', startTime, 0);
|
||||
|
||||
super(kSkipThrow, name, 'mark', startTime, 0);
|
||||
this[kDetail] = detail;
|
||||
}
|
||||
|
||||
|
@ -108,8 +107,7 @@ class PerformanceMark {
|
|||
};
|
||||
}
|
||||
}
|
||||
ObjectSetPrototypeOf(PerformanceMark, PerformanceEntry);
|
||||
ObjectSetPrototypeOf(PerformanceMark.prototype, PerformanceEntry.prototype);
|
||||
|
||||
ObjectDefineProperties(PerformanceMark.prototype, {
|
||||
detail: kEnumerableProperty,
|
||||
[SymbolToStringTag]: {
|
||||
|
@ -120,8 +118,18 @@ ObjectDefineProperties(PerformanceMark.prototype, {
|
|||
});
|
||||
|
||||
class PerformanceMeasure extends PerformanceEntry {
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
constructor(
|
||||
skipThrowSymbol = undefined,
|
||||
name = undefined,
|
||||
type = undefined,
|
||||
start = undefined,
|
||||
duration = undefined,
|
||||
) {
|
||||
if (skipThrowSymbol !== kSkipThrow) {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
|
||||
super(skipThrowSymbol, name, type, start, duration);
|
||||
}
|
||||
|
||||
get detail() {
|
||||
|
@ -139,10 +147,11 @@ ObjectDefineProperties(PerformanceMeasure.prototype, {
|
|||
});
|
||||
|
||||
function createPerformanceMeasure(name, start, duration, detail) {
|
||||
return ReflectConstruct(function PerformanceMeasure() {
|
||||
initPerformanceEntry(this, name, 'measure', start, duration);
|
||||
this[kDetail] = detail;
|
||||
}, [], PerformanceMeasure);
|
||||
const measure = new PerformanceMeasure(kSkipThrow, name, 'measure', start, duration);
|
||||
|
||||
measure[kDetail] = detail;
|
||||
|
||||
return measure;
|
||||
}
|
||||
|
||||
function mark(name, options) {
|
||||
|
|
Loading…
Reference in New Issue