Skip to content

Commit aafa08d

Browse files
joyeecheungtargos
authored andcommitted
bootstrap: load perf_hooks eagerly during bootstrap
PR-URL: #38971 Refs: #35711 Reviewed-By: James M Snell <[email protected]>
1 parent 6e46eb1 commit aafa08d

File tree

3 files changed

+11
-24
lines changed

3 files changed

+11
-24
lines changed

Diff for: lib/internal/bootstrap/node.js

+7-16
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,9 @@ if (!config.noBrowserGlobals) {
241241

242242
defineOperation(globalThis, 'queueMicrotask', queueMicrotask);
243243

244-
defineLazyGlobal(globalThis, 'performance', () => {
245-
const { performance } = require('perf_hooks');
246-
return performance;
247-
});
244+
// https://www.w3.org/TR/hr-time-2/#the-performance-attribute
245+
defineReplacableAttribute(globalThis, 'performance',
246+
require('perf_hooks').performance);
248247

249248
// Non-standard extensions:
250249
defineOperation(globalThis, 'clearImmediate', timers.clearImmediate);
@@ -494,20 +493,12 @@ function defineOperation(target, name, method) {
494493
});
495494
}
496495

497-
function defineLazyGlobal(target, name, loader) {
498-
let value;
499-
let overridden = false;
496+
// https://heycam.github.io/webidl/#Replaceable
497+
function defineReplacableAttribute(target, name, value) {
500498
ObjectDefineProperty(target, name, {
499+
writable: true,
501500
enumerable: true,
502501
configurable: true,
503-
get() {
504-
if (value === undefined && !overridden)
505-
value = loader();
506-
return value;
507-
},
508-
set(val) {
509-
value = val;
510-
overridden = true;
511-
}
502+
value,
512503
});
513504
}

Diff for: lib/internal/event_target.js

+2-8
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,7 @@ const kRemoveListener = Symbol('kRemoveListener');
5959
const kIsNodeStyleListener = Symbol('kIsNodeStyleListener');
6060
const kTrustEvent = Symbol('kTrustEvent');
6161

62-
// Lazy load perf_hooks to avoid the additional overhead on startup
63-
let perf_hooks;
64-
function lazyNow() {
65-
if (perf_hooks === undefined)
66-
perf_hooks = require('perf_hooks');
67-
return perf_hooks.performance.now();
68-
}
62+
const { now } = require('internal/perf/utils');
6963

7064
// TODO(joyeecheung): V8 snapshot does not support instance member
7165
// initializers for now:
@@ -98,7 +92,7 @@ class Event {
9892
this[kComposed] = !!composed;
9993
this[kType] = `${type}`;
10094
this[kDefaultPrevented] = false;
101-
this[kTimestamp] = lazyNow();
95+
this[kTimestamp] = now();
10296
this[kPropagationStopped] = false;
10397
if (options?.[kTrustEvent]) {
10498
isTrustedSet.add(this);

Diff for: test/parallel/test-bootstrap-modules.js

+2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ const expectedModules = new Set([
7979
'NativeModule internal/modules/esm/translators',
8080
'NativeModule internal/process/esm_loader',
8181
'NativeModule internal/options',
82+
'NativeModule internal/perf/event_loop_delay',
8283
'NativeModule internal/perf/event_loop_utilization',
8384
'NativeModule internal/perf/nodetiming',
8485
'NativeModule internal/perf/observe',
@@ -126,6 +127,7 @@ const expectedModules = new Set([
126127
'NativeModule internal/blob',
127128
'NativeModule async_hooks',
128129
'NativeModule path',
130+
'NativeModule perf_hooks',
129131
'NativeModule querystring',
130132
'NativeModule stream',
131133
'NativeModule stream/promises',

0 commit comments

Comments
 (0)