perf_hooks,http2: add performance.clear()
Add missing clear() method to `perf_hooks.performance` to remove the entries from the master timeline to prevent that from being a memory leak. PR-URL: https://github.com/nodejs/node/pull/18046 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
47a282293f
commit
20fe04f113
@ -29,6 +29,14 @@ added: v8.5.0
|
|||||||
The `Performance` provides access to performance metric data. A single
|
The `Performance` provides access to performance metric data. A single
|
||||||
instance of this class is provided via the `performance` property.
|
instance of this class is provided via the `performance` property.
|
||||||
|
|
||||||
|
### performance.clearEntries(name)
|
||||||
|
<!-- YAML
|
||||||
|
added: REPLACEME
|
||||||
|
-->
|
||||||
|
|
||||||
|
Remove all performance entry objects with `entryType` equal to `name` from the
|
||||||
|
Performance Timeline.
|
||||||
|
|
||||||
### performance.clearFunctions([name])
|
### performance.clearFunctions([name])
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v8.5.0
|
added: v8.5.0
|
||||||
|
@ -471,6 +471,10 @@ class Performance extends PerformanceObserverEntryList {
|
|||||||
this[kClearEntry]('function', name);
|
this[kClearEntry]('function', name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearEntries(name) {
|
||||||
|
this[kClearEntry](name);
|
||||||
|
}
|
||||||
|
|
||||||
timerify(fn) {
|
timerify(fn) {
|
||||||
if (typeof fn !== 'function') {
|
if (typeof fn !== 'function') {
|
||||||
const errors = lazyErrors();
|
const errors = lazyErrors();
|
||||||
|
@ -6,7 +6,7 @@ if (!common.hasCrypto)
|
|||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const h2 = require('http2');
|
const h2 = require('http2');
|
||||||
|
|
||||||
const { PerformanceObserver } = require('perf_hooks');
|
const { PerformanceObserver, performance } = require('perf_hooks');
|
||||||
|
|
||||||
const obs = new PerformanceObserver(common.mustCall((items) => {
|
const obs = new PerformanceObserver(common.mustCall((items) => {
|
||||||
const entry = items.getEntries()[0];
|
const entry = items.getEntries()[0];
|
||||||
@ -46,6 +46,7 @@ const obs = new PerformanceObserver(common.mustCall((items) => {
|
|||||||
default:
|
default:
|
||||||
assert.fail('invalid entry name');
|
assert.fail('invalid entry name');
|
||||||
}
|
}
|
||||||
|
performance.clearEntries('http2');
|
||||||
}, 4));
|
}, 4));
|
||||||
obs.observe({ entryTypes: ['http2'] });
|
obs.observe({ entryTypes: ['http2'] });
|
||||||
|
|
||||||
@ -100,3 +101,10 @@ server.on('listening', common.mustCall(() => {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
process.on('exit', () => {
|
||||||
|
const entries = performance.getEntries();
|
||||||
|
// There shouldn't be any http2 entries left over.
|
||||||
|
assert.strictEqual(entries.length, 1);
|
||||||
|
assert.strictEqual(entries[0], performance.nodeTiming);
|
||||||
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user