mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
perf_hooks: reduce overhead of new resource timings
PR-URL: https://github.com/nodejs/node/pull/49837 Reviewed-By: Stephen Belanger <admin@stephenbelanger.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
This commit is contained in:
committed by
GitHub
parent
0ee9c83ffc
commit
e6e320ecc7
@@ -72,6 +72,6 @@ function main({ n, observe }) {
|
||||
obs.observe({ entryTypes: [observe], buffered: true });
|
||||
|
||||
bench.start();
|
||||
for (let i = 0; i < 1e5; i++)
|
||||
for (let i = 0; i < n; i++)
|
||||
test();
|
||||
}
|
||||
|
||||
@@ -31,10 +31,18 @@ function isPerformanceEntry(obj) {
|
||||
}
|
||||
|
||||
class PerformanceEntry {
|
||||
constructor(skipThrowSymbol = undefined) {
|
||||
constructor(
|
||||
skipThrowSymbol = undefined,
|
||||
name = undefined,
|
||||
type = undefined,
|
||||
start = undefined,
|
||||
duration = undefined,
|
||||
) {
|
||||
if (skipThrowSymbol !== kSkipThrow) {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
|
||||
initPerformanceEntry(this, name, type, start, duration);
|
||||
}
|
||||
|
||||
get name() {
|
||||
@@ -94,11 +102,7 @@ function initPerformanceEntry(entry, name, type, start, duration) {
|
||||
}
|
||||
|
||||
function createPerformanceEntry(name, type, start, duration) {
|
||||
const entry = new PerformanceEntry(kSkipThrow);
|
||||
|
||||
initPerformanceEntry(entry, name, type, start, duration);
|
||||
|
||||
return entry;
|
||||
return new PerformanceEntry(kSkipThrow, name, type, start, duration);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,9 +127,8 @@ class PerformanceNodeEntry extends PerformanceEntry {
|
||||
}
|
||||
|
||||
function createPerformanceNodeEntry(name, type, start, duration, detail) {
|
||||
const entry = new PerformanceNodeEntry(kSkipThrow);
|
||||
const entry = new PerformanceNodeEntry(kSkipThrow, name, type, start, duration);
|
||||
|
||||
initPerformanceEntry(entry, name, type, start, duration);
|
||||
entry[kDetail] = detail;
|
||||
|
||||
return entry;
|
||||
@@ -138,4 +141,5 @@ module.exports = {
|
||||
isPerformanceEntry,
|
||||
PerformanceNodeEntry,
|
||||
createPerformanceNodeEntry,
|
||||
kSkipThrow,
|
||||
};
|
||||
|
||||
@@ -3,19 +3,17 @@
|
||||
|
||||
const {
|
||||
ObjectDefineProperties,
|
||||
ObjectSetPrototypeOf,
|
||||
ReflectConstruct,
|
||||
Symbol,
|
||||
SymbolToStringTag,
|
||||
} = primordials;
|
||||
const { initPerformanceEntry, PerformanceEntry } = require('internal/perf/performance_entry');
|
||||
const assert = require('internal/assert');
|
||||
const { enqueue, bufferResourceTiming } = require('internal/perf/observe');
|
||||
const {
|
||||
codes: {
|
||||
ERR_ILLEGAL_CONSTRUCTOR,
|
||||
},
|
||||
} = require('internal/errors');
|
||||
const { PerformanceEntry, kSkipThrow } = require('internal/perf/performance_entry');
|
||||
const assert = require('internal/assert');
|
||||
const { enqueue, bufferResourceTiming } = require('internal/perf/observe');
|
||||
const { validateInternalField } = require('internal/validators');
|
||||
const { kEnumerableProperty } = require('internal/util');
|
||||
|
||||
@@ -25,8 +23,12 @@ const kTimingInfo = Symbol('kTimingInfo');
|
||||
const kInitiatorType = Symbol('kInitiatorType');
|
||||
|
||||
class PerformanceResourceTiming extends PerformanceEntry {
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
constructor(skipThrowSymbol = undefined, name = undefined, type = undefined) {
|
||||
if (skipThrowSymbol !== kSkipThrow) {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
|
||||
super(skipThrowSymbol, name, type);
|
||||
}
|
||||
|
||||
get name() {
|
||||
@@ -189,16 +191,17 @@ ObjectDefineProperties(PerformanceResourceTiming.prototype, {
|
||||
});
|
||||
|
||||
function createPerformanceResourceTiming(requestedUrl, initiatorType, timingInfo, cacheMode = '') {
|
||||
return ReflectConstruct(function PerformanceResourceTiming() {
|
||||
initPerformanceEntry(this, requestedUrl, 'resource');
|
||||
this[kInitiatorType] = initiatorType;
|
||||
this[kRequestedUrl] = requestedUrl;
|
||||
// https://fetch.spec.whatwg.org/#fetch-timing-info
|
||||
// This class is using timingInfo assuming it's already validated.
|
||||
// The spec doesn't say to validate it in the class construction.
|
||||
this[kTimingInfo] = timingInfo;
|
||||
this[kCacheMode] = cacheMode;
|
||||
}, [], PerformanceResourceTiming);
|
||||
const resourceTiming = new PerformanceResourceTiming(kSkipThrow, requestedUrl, 'resource');
|
||||
|
||||
resourceTiming[kInitiatorType] = initiatorType;
|
||||
resourceTiming[kRequestedUrl] = requestedUrl;
|
||||
// https://fetch.spec.whatwg.org/#fetch-timing-info
|
||||
// This class is using timingInfo assuming it's already validated.
|
||||
// The spec doesn't say to validate it in the class construction.
|
||||
resourceTiming[kTimingInfo] = timingInfo;
|
||||
resourceTiming[kCacheMode] = cacheMode;
|
||||
|
||||
return resourceTiming;
|
||||
}
|
||||
|
||||
// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing
|
||||
@@ -221,7 +224,6 @@ function markResourceTiming(
|
||||
cacheMode,
|
||||
);
|
||||
|
||||
ObjectSetPrototypeOf(resource, PerformanceResourceTiming.prototype);
|
||||
enqueue(resource);
|
||||
bufferResourceTiming(resource);
|
||||
return resource;
|
||||
|
||||
Reference in New Issue
Block a user