perf_hooks: align toStringTag with other Web Performance implementations

This gets `Symbol.toStringTag` on Web Performance APIs to be aligned
with the other runtime implementations.

Signed-off-by: Daeyeon Jeong <daeyeon.dev@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/45157
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Feng Yu <F3n67u@outlook.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Daeyeon Jeong 2022-10-28 08:34:39 +09:00 committed by GitHub
parent b6eba6b72a
commit 631bdb4f3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 12 deletions

View File

@ -29,10 +29,6 @@ class PerformanceResourceTiming extends PerformanceEntry {
throw new ERR_ILLEGAL_CONSTRUCTOR();
}
get [SymbolToStringTag]() {
return 'PerformanceResourceTiming';
}
get name() {
validateInternalField(this, kRequestedUrl, 'PerformanceResourceTiming');
return this[kRequestedUrl];
@ -185,6 +181,11 @@ ObjectDefineProperties(PerformanceResourceTiming.prototype, {
encodedBodySize: kEnumerableProperty,
decodedBodySize: kEnumerableProperty,
toJSON: kEnumerableProperty,
[SymbolToStringTag]: {
__proto__: null,
configurable: true,
value: 'PerformanceResourceTiming',
},
});
function createPerformanceResourceTiming(requestedUrl, initiatorType, timingInfo, cacheMode = '') {

View File

@ -98,10 +98,6 @@ class PerformanceMark {
return this[kDetail];
}
get [SymbolToStringTag]() {
return 'PerformanceMark';
}
toJSON() {
return {
name: this.name,
@ -116,6 +112,11 @@ ObjectSetPrototypeOf(PerformanceMark, PerformanceEntry);
ObjectSetPrototypeOf(PerformanceMark.prototype, PerformanceEntry.prototype);
ObjectDefineProperties(PerformanceMark.prototype, {
detail: kEnumerableProperty,
[SymbolToStringTag]: {
__proto__: null,
configurable: true,
value: 'PerformanceMark',
},
});
class PerformanceMeasure extends PerformanceEntry {
@ -127,13 +128,14 @@ class PerformanceMeasure extends PerformanceEntry {
validateInternalField(this, kDetail, 'PerformanceMeasure');
return this[kDetail];
}
get [SymbolToStringTag]() {
return 'PerformanceMeasure';
}
}
ObjectDefineProperties(PerformanceMeasure.prototype, {
detail: kEnumerableProperty,
[SymbolToStringTag]: {
__proto__: null,
configurable: true,
value: 'PerformanceMeasure',
},
});
function createPerformanceMeasure(name, start, duration, detail) {

View File

@ -17,6 +17,11 @@ assert(PerformanceResourceTiming);
assert(performance.clearResourceTimings);
assert(performance.markResourceTiming);
assert.deepStrictEqual(
Object.getOwnPropertyDescriptor(PerformanceResourceTiming.prototype, Symbol.toStringTag),
{ configurable: true, enumerable: false, value: 'PerformanceResourceTiming', writable: false },
);
function createTimingInfo({
startTime = 0,
redirectStartTime = 0,

View File

@ -6,6 +6,7 @@ const {
PerformanceObserver,
PerformanceEntry,
PerformanceMark,
PerformanceMeasure,
performance,
performance: {
nodeTiming,
@ -18,6 +19,18 @@ assert(PerformanceMark);
assert(performance.mark);
assert(performance.measure);
[PerformanceMark, PerformanceMeasure].forEach((c) => {
assert.deepStrictEqual(
Object.getOwnPropertyDescriptor(c.prototype, Symbol.toStringTag),
{
configurable: true,
enumerable: false,
writable: false,
value: c.name,
}
);
});
[undefined, 'a', 'null', 1, true].forEach((i) => {
const m = performance.mark(i);
assert(m instanceof PerformanceEntry);