mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
631bdb4f3e
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>
202 lines
5.4 KiB
JavaScript
202 lines
5.4 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const {
|
|
PerformanceObserver,
|
|
PerformanceEntry,
|
|
PerformanceMark,
|
|
PerformanceMeasure,
|
|
performance,
|
|
performance: {
|
|
nodeTiming,
|
|
},
|
|
} = require('perf_hooks');
|
|
|
|
assert(PerformanceObserver);
|
|
assert(PerformanceEntry);
|
|
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);
|
|
assert(m instanceof PerformanceMark);
|
|
|
|
assert.strictEqual(m.name, `${i}`);
|
|
assert.strictEqual(m.entryType, 'mark');
|
|
assert.strictEqual(typeof m.startTime, 'number');
|
|
assert.strictEqual(m.duration, 0);
|
|
assert.strictEqual(m.detail, null);
|
|
});
|
|
|
|
performance.clearMarks();
|
|
|
|
assert.throws(() => performance.mark(Symbol('a')), {
|
|
message: /Cannot convert a Symbol value to a string/
|
|
});
|
|
|
|
[undefined, null].forEach((detail) => {
|
|
const m = performance.mark('a', { detail });
|
|
assert.strictEqual(m.name, 'a');
|
|
assert.strictEqual(m.entryType, 'mark');
|
|
assert.strictEqual(m.detail, null);
|
|
});
|
|
[1, 'any', {}, [], /a/].forEach((detail) => {
|
|
const m = performance.mark('a', { detail });
|
|
assert.strictEqual(m.name, 'a');
|
|
assert.strictEqual(m.entryType, 'mark');
|
|
// Value of detail is structured cloned.
|
|
assert.deepStrictEqual(m.detail, detail);
|
|
if (typeof detail === 'object') {
|
|
assert.notStrictEqual(m.detail, detail);
|
|
}
|
|
});
|
|
|
|
performance.clearMarks();
|
|
|
|
{
|
|
const m = performance.mark('a', { startTime: 1 });
|
|
assert.strictEqual(m.startTime, 1);
|
|
}
|
|
|
|
assert.throws(() => performance.mark('a', { startTime: 'a' }), {
|
|
code: 'ERR_INVALID_ARG_TYPE'
|
|
});
|
|
|
|
performance.clearMarks();
|
|
performance.clearMarks(1);
|
|
performance.clearMarks(null);
|
|
|
|
assert.throws(() => performance.clearMarks(Symbol('foo')), {
|
|
message: /Cannot convert a Symbol value to a string/
|
|
});
|
|
|
|
{
|
|
performance.mark('a', { startTime: 0 });
|
|
performance.mark('b', { startTime: 10 });
|
|
|
|
{
|
|
const m3 = performance.measure('foo', 'a', 'b');
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, 0);
|
|
assert.strictEqual(m3.duration, 10);
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', 'a');
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, 0);
|
|
assert(m3.duration > 0); // Duration is non-deterministic here.
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', { start: 'a' });
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, 0);
|
|
assert(m3.duration > 0); // Duration is non-deterministic here.
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', { end: 'b' });
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, 0);
|
|
assert.strictEqual(m3.duration, 10);
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', { duration: 11, end: 'b' });
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, -1);
|
|
assert.strictEqual(m3.duration, 11);
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', { duration: 11, start: 'b' });
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, 10);
|
|
assert.strictEqual(m3.duration, 11);
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', 'nodeStart');
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, nodeTiming.nodeStart);
|
|
assert(m3.duration > 0); // Duration is non-deterministic here.
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', 'nodeStart', 'bootstrapComplete');
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, nodeTiming.nodeStart);
|
|
assert.strictEqual(
|
|
m3.duration,
|
|
nodeTiming.bootstrapComplete - nodeTiming.nodeStart);
|
|
}
|
|
|
|
{
|
|
const m3 = performance.measure('foo', { start: 'nodeStart', duration: 10 });
|
|
assert.strictEqual(m3.name, 'foo');
|
|
assert.strictEqual(m3.entryType, 'measure');
|
|
assert.strictEqual(m3.startTime, nodeTiming.nodeStart);
|
|
assert.strictEqual(m3.duration, 10);
|
|
}
|
|
|
|
performance.clearMarks();
|
|
}
|
|
|
|
{
|
|
const obs = new PerformanceObserver(common.mustCall((list) => {
|
|
{
|
|
const entries = list.getEntries();
|
|
assert.strictEqual(entries.length, 3);
|
|
}
|
|
{
|
|
const entries = list.getEntriesByType('mark');
|
|
assert.strictEqual(entries.length, 2);
|
|
}
|
|
{
|
|
const entries = list.getEntriesByType('measure');
|
|
assert.strictEqual(entries.length, 1);
|
|
}
|
|
{
|
|
const entries = list.getEntriesByName('a');
|
|
assert.strictEqual(entries.length, 1);
|
|
}
|
|
{
|
|
const entries = list.getEntriesByName('b');
|
|
assert.strictEqual(entries.length, 1);
|
|
}
|
|
{
|
|
const entries = list.getEntriesByName('a to b');
|
|
assert.strictEqual(entries.length, 1);
|
|
}
|
|
obs.disconnect();
|
|
}));
|
|
obs.observe({ entryTypes: ['mark', 'measure'] });
|
|
performance.mark('a');
|
|
performance.mark('b');
|
|
performance.measure('a to b', 'a', 'b');
|
|
}
|