mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
perf_hooks: only enable GC tracking when it's requested
Previously a GC prologue callback and a GC epilogue callback are always unconditionally enabled during bootstrap when the `performance` binding is loaded, even when the user does not use the performance timeline API to enable GC tracking. This patch makes the callback addition conditional and only enables them when the user explicitly requests `observer.observe(['gc'])` to avoid the overhead. PR-URL: https://github.com/nodejs/node/pull/25853 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
cc5de5a5cc
commit
475c43c1b0
2 changed files with 14 additions and 4 deletions
|
@ -11,7 +11,8 @@ const {
|
|||
timeOrigin,
|
||||
timeOriginTimestamp,
|
||||
timerify,
|
||||
constants
|
||||
constants,
|
||||
setupGarbageCollectionTracking
|
||||
} = internalBinding('performance');
|
||||
|
||||
const {
|
||||
|
@ -273,6 +274,8 @@ class PerformanceObserverEntryList {
|
|||
}
|
||||
}
|
||||
|
||||
let gcTrackingIsEnabled = false;
|
||||
|
||||
class PerformanceObserver extends AsyncResource {
|
||||
constructor(callback) {
|
||||
if (typeof callback !== 'function') {
|
||||
|
@ -334,6 +337,11 @@ class PerformanceObserver extends AsyncResource {
|
|||
if (entryTypes.length === 0) {
|
||||
throw new errors.ERR_VALID_PERFORMANCE_ENTRY_TYPE();
|
||||
}
|
||||
if (entryTypes.includes(NODE_PERFORMANCE_ENTRY_TYPE_GC) &&
|
||||
!gcTrackingIsEnabled) {
|
||||
setupGarbageCollectionTracking();
|
||||
gcTrackingIsEnabled = true;
|
||||
}
|
||||
this.disconnect();
|
||||
this[kBuffer][kEntries] = [];
|
||||
L.init(this[kBuffer][kEntries]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue