From f368d697cf3ab9923d035275c592f8c440bbb3b3 Mon Sep 17 00:00:00 2001 From: Nicolai Stange Date: Sun, 29 Nov 2020 03:11:31 +0100 Subject: [PATCH] Revert "perf_hooks: make PerformanceObserver an AsyncResource" This reverts commit 009e41826f47c595ca994f673023f9380198be36. AFAIU the discussion at [1], PerformanceObserver had been made to inherit from AsyncResource more or less as a band-aid in lack of a better async_context candidate to invoke it in. In order to enable access to AsyncLocalStores from PerformanceObservers invoked synchronously through e.g. measure() or mark(), the current async_context, if any, should be retained. Note that this is a breaking change, but - as has been commented at [1], PerformanceObserver being derived from AsyncResource is a "minor divergence from the spec" anyway, - to my knowledge this is an internal implementation detail which has never been documented and - I can't think of a good reason why existing PerformanceObserver implementations would possibly rely on it. OTOH, it's probably worthwhile to not potentially invoke before() and after() async_hooks for each and every PerformanceObserver notification. [1] https://github.com/nodejs/node/pull/18789 Co-Authored-By: ZauberNerd PR-URL: https://github.com/nodejs/node/pull/36343 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott --- lib/perf_hooks.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/perf_hooks.js b/lib/perf_hooks.js index c2b31f55cda282..7429db38fd77ef 100644 --- a/lib/perf_hooks.js +++ b/lib/perf_hooks.js @@ -52,7 +52,6 @@ const { NODE_PERFORMANCE_MILESTONE_ENVIRONMENT } = constants; -const { AsyncResource } = require('async_hooks'); const L = require('internal/linkedlist'); const kInspect = require('internal/util').customInspectSymbol; @@ -340,12 +339,11 @@ class PerformanceObserverEntryList { } } -class PerformanceObserver extends AsyncResource { +class PerformanceObserver { constructor(callback) { if (typeof callback !== 'function') { throw new ERR_INVALID_CALLBACK(callback); } - super('PerformanceObserver'); ObjectDefineProperties(this, { [kTypes]: { enumerable: false, @@ -553,10 +551,7 @@ function getObserversList(type) { function doNotify(observer) { observer[kQueued] = false; - observer.runInAsyncScope(observer[kCallback], - observer, - observer[kBuffer], - observer); + observer[kCallback](observer[kBuffer], observer); observer[kBuffer][kEntries] = []; L.init(observer[kBuffer][kEntries]); }