Skip to content

Commit b7690da

Browse files
mscdexcodebytere
authored andcommitted
lib: improve debuglog() performance
PR-URL: #32260 Reviewed-By: James M Snell <[email protected]>
1 parent 24105a7 commit b7690da

28 files changed

+101
-40
lines changed

lib/_http_agent.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ const {
3131

3232
const net = require('net');
3333
const EventEmitter = require('events');
34-
const debug = require('internal/util/debuglog').debuglog('http');
34+
let debug = require('internal/util/debuglog').debuglog('http', (fn) => {
35+
debug = fn;
36+
});
3537
const { async_id_symbol } = require('internal/async_hooks').symbols;
3638
const {
3739
codes: {

lib/_http_common.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ const {
3939
readStop
4040
} = incoming;
4141

42-
const debug = require('internal/util/debuglog').debuglog('http');
42+
let debug = require('internal/util/debuglog').debuglog('http', (fn) => {
43+
debug = fn;
44+
});
4345

4446
const kIncomingMessage = Symbol('IncomingMessage');
4547
const kOnHeaders = HTTPParser.kOnHeaders | 0;

lib/_stream_readable.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ const EE = require('events');
3939
const Stream = require('stream');
4040
const { Buffer } = require('buffer');
4141

42-
const debug = require('internal/util/debuglog').debuglog('stream');
42+
let debug = require('internal/util/debuglog').debuglog('stream', (fn) => {
43+
debug = fn;
44+
});
4345
const BufferList = require('internal/streams/buffer_list');
4446
const destroyImpl = require('internal/streams/destroy');
4547
const {

lib/_tls_wrap.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ const tls = require('tls');
4646
const common = require('_tls_common');
4747
const JSStreamSocket = require('internal/js_stream_socket');
4848
const { Buffer } = require('buffer');
49-
const debug = require('internal/util/debuglog').debuglog('tls');
49+
let debug = require('internal/util/debuglog').debuglog('tls', (fn) => {
50+
debug = fn;
51+
});
5052
const { TCP, constants: TCPConstants } = internalBinding('tcp_wrap');
5153
const tls_wrap = internalBinding('tls_wrap');
5254
const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap');

lib/child_process.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ const {
3737
getSystemErrorName
3838
} = require('internal/util');
3939
const { isArrayBufferView } = require('internal/util/types');
40-
const debug = require('internal/util/debuglog').debuglog('child_process');
40+
let debug = require('internal/util/debuglog').debuglog(
41+
'child_process',
42+
(fn) => {
43+
debug = fn;
44+
}
45+
);
4146
const { Buffer } = require('buffer');
4247
const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap');
4348
const {

lib/https.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ const {
3737
kServerResponse
3838
} = require('_http_server');
3939
const { ClientRequest } = require('_http_client');
40-
const debug = require('internal/util/debuglog').debuglog('https');
40+
let debug = require('internal/util/debuglog').debuglog('https', (fn) => {
41+
debug = fn;
42+
});
4143
const { URL, urlToOptions, searchParamsSymbol } = require('internal/url');
4244
const { IncomingMessage, ServerResponse } = require('http');
4345
const { kIncomingMessage } = require('_http_common');

lib/internal/http2/core.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ const { UV_EOF } = internalBinding('uv');
152152

153153
const { StreamPipe } = internalBinding('stream_pipe');
154154
const { _connectionListener: httpConnectionListener } = http;
155-
const debug = require('internal/util/debuglog').debuglog('http2');
155+
let debug = require('internal/util/debuglog').debuglog('http2', (fn) => {
156+
debug = fn;
157+
});
156158

157159
// TODO(addaleax): See if this can be made more efficient by figuring out
158160
// whether debugging is enabled before we perform any further steps. Currently,

lib/internal/js_stream_socket.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ const assert = require('internal/assert');
99
const { Socket } = require('net');
1010
const { JSStream } = internalBinding('js_stream');
1111
const uv = internalBinding('uv');
12-
const debug = require('internal/util/debuglog').debuglog('stream_socket');
12+
let debug = require('internal/util/debuglog').debuglog(
13+
'stream_socket',
14+
(fn) => {
15+
debug = fn;
16+
}
17+
);
1318
const { owner_symbol } = require('internal/async_hooks').symbols;
1419
const { ERR_STREAM_WRAP } = require('internal/errors').codes;
1520

lib/internal/main/worker_thread.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ const {
4949
} = require('internal/process/execution');
5050

5151
const publicWorker = require('worker_threads');
52-
const debug = require('internal/util/debuglog').debuglog('worker');
52+
let debug = require('internal/util/debuglog').debuglog('worker', (fn) => {
53+
debug = fn;
54+
});
5355

5456
const assert = require('internal/assert');
5557

lib/internal/modules/cjs/helpers.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ const path = require('path');
1616
const { pathToFileURL, fileURLToPath } = require('internal/url');
1717
const { URL } = require('url');
1818

19-
const debug = require('internal/util/debuglog').debuglog('module');
19+
let debug = require('internal/util/debuglog').debuglog('module', (fn) => {
20+
debug = fn;
21+
});
2022

2123
function loadNativeModule(filename, request) {
2224
const mod = NativeModule.map.get(filename);

lib/internal/modules/cjs/loader.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,9 @@ ObjectDefineProperty(Module, 'wrapper', {
231231
}
232232
});
233233

234-
const debug = require('internal/util/debuglog').debuglog('module');
234+
let debug = require('internal/util/debuglog').debuglog('module', (fn) => {
235+
debug = fn;
236+
});
235237
Module._debug = deprecate(debug, 'Module._debug is deprecated.', 'DEP0077');
236238

237239
// Given a module name, and a list of paths to test, returns the first

lib/internal/modules/esm/create_dynamic_module.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ const {
88
Set,
99
} = primordials;
1010

11-
const debug = require('internal/util/debuglog').debuglog('esm');
11+
let debug = require('internal/util/debuglog').debuglog('esm', (fn) => {
12+
debug = fn;
13+
});
1214

1315
function createImport(impt, index) {
1416
const imptPath = JSONStringify(impt);

lib/internal/modules/esm/module_map.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ const ModuleJob = require('internal/modules/esm/module_job');
44
const {
55
SafeMap,
66
} = primordials;
7-
const debug = require('internal/util/debuglog').debuglog('esm');
7+
let debug = require('internal/util/debuglog').debuglog('esm', (fn) => {
8+
debug = fn;
9+
});
810
const { ERR_INVALID_ARG_TYPE } = require('internal/errors').codes;
911
const { validateString } = require('internal/validators');
1012

lib/internal/modules/esm/translators.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ const { defaultTransformSource } = require(
3030
const createDynamicModule = require(
3131
'internal/modules/esm/create_dynamic_module');
3232
const { fileURLToPath, URL } = require('url');
33-
const { debuglog } = require('internal/util/debuglog');
33+
let debug = require('internal/util/debuglog').debuglog('esm', (fn) => {
34+
debug = fn;
35+
});
3436
const { emitExperimentalWarning } = require('internal/util');
3537
const {
3638
ERR_UNKNOWN_BUILTIN_MODULE,
@@ -43,8 +45,6 @@ const { getOptionValue } = require('internal/options');
4345
const experimentalImportMetaResolve =
4446
getOptionValue('--experimental-import-meta-resolve');
4547

46-
const debug = debuglog('esm');
47-
4848
const translators = new SafeMap();
4949
exports.translators = translators;
5050

lib/internal/policy/manifest.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ const {
2121
ERR_MANIFEST_INVALID_RESOURCE_FIELD,
2222
ERR_MANIFEST_UNKNOWN_ONERROR,
2323
} = require('internal/errors').codes;
24-
const debug = require('internal/util/debuglog').debuglog('policy');
24+
let debug = require('internal/util/debuglog').debuglog('policy', (fn) => {
25+
debug = fn;
26+
});
2527
const SRI = require('internal/policy/sri');
2628
const crypto = require('crypto');
2729
const { Buffer } = require('buffer');

lib/internal/repl/history.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ const { Interface } = require('readline');
88
const path = require('path');
99
const fs = require('fs');
1010
const os = require('os');
11-
const debug = require('internal/util/debuglog').debuglog('repl');
11+
let debug = require('internal/util/debuglog').debuglog('repl', (fn) => {
12+
debug = fn;
13+
});
1214
const { clearTimeout, setTimeout } = require('timers');
1315

1416
// XXX(chrisdickinson): The 15ms debounce value is somewhat arbitrary.

lib/internal/repl/utils.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ const {
4040
inspect,
4141
} = require('internal/util/inspect');
4242

43-
const debug = require('internal/util/debuglog').debuglog('repl');
43+
let debug = require('internal/util/debuglog').debuglog('repl', (fn) => {
44+
debug = fn;
45+
});
4446

4547
const previewOptions = {
4648
colors: false,

lib/internal/source_map/prepare_stack_trace.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ const {
44
Error,
55
} = primordials;
66

7-
const debug = require('internal/util/debuglog').debuglog('source_map');
7+
let debug = require('internal/util/debuglog').debuglog('source_map', (fn) => {
8+
debug = fn;
9+
});
810
const { findSourceMap } = require('internal/source_map/source_map_cache');
911
const {
1012
kNoOverride,

lib/internal/source_map/source_map_cache.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ function ObjectGetValueSafe(obj, key) {
2222

2323
// See https://sourcemaps.info/spec.html for SourceMap V3 specification.
2424
const { Buffer } = require('buffer');
25-
const debug = require('internal/util/debuglog').debuglog('source_map');
25+
let debug = require('internal/util/debuglog').debuglog('source_map', (fn) => {
26+
debug = fn;
27+
});
2628
const { dirname, resolve } = require('path');
2729
const fs = require('fs');
2830
const { getOptionValue } = require('internal/options');

lib/internal/stream_base_commons.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ const kAfterAsyncWrite = Symbol('kAfterAsyncWrite');
3737
const kHandle = Symbol('kHandle');
3838
const kSession = Symbol('kSession');
3939

40-
const debug = require('internal/util/debuglog').debuglog('stream');
40+
let debug = require('internal/util/debuglog').debuglog('stream', (fn) => {
41+
debug = fn;
42+
});
4143
const kBuffer = Symbol('kBuffer');
4244
const kBufferGen = Symbol('kBufferGen');
4345
const kBufferCb = Symbol('kBufferCb');

lib/internal/timers.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ const L = require('internal/linkedlist');
113113
const PriorityQueue = require('internal/priority_queue');
114114

115115
const { inspect } = require('internal/util/inspect');
116-
const debug = require('internal/util/debuglog').debuglog('timer');
116+
let debug = require('internal/util/debuglog').debuglog('timer', (fn) => {
117+
debug = fn;
118+
});
117119

118120
// *Must* match Environment::ImmediateInfo::Fields in src/env.h.
119121
const kCount = 0;

lib/internal/util/debuglog.js

+14-11
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ function emitWarningIfNeeded(set) {
3535
}
3636
}
3737

38+
function noop() {}
39+
3840
function debuglogImpl(set) {
3941
set = set.toUpperCase();
4042
if (debugs[set] === undefined) {
@@ -48,7 +50,7 @@ function debuglogImpl(set) {
4850
process.stderr.write(format('%s %s: %s\n', set, coloredPID, msg));
4951
};
5052
} else {
51-
debugs[set] = null;
53+
debugs[set] = noop;
5254
}
5355
}
5456
return debugs[set];
@@ -58,16 +60,17 @@ function debuglogImpl(set) {
5860
// so it needs to be called lazily in top scopes of internal modules
5961
// that may be loaded before these run time states are allowed to
6062
// be accessed.
61-
function debuglog(set) {
62-
let debug;
63-
return function(...args) {
64-
if (debug === undefined) {
65-
// Only invokes debuglogImpl() when the debug function is
66-
// called for the first time.
67-
debug = debuglogImpl(set);
68-
}
69-
if (debug !== null)
70-
debug(...args);
63+
function debuglog(set, cb) {
64+
let debug = (...args) => {
65+
// Only invokes debuglogImpl() when the debug function is
66+
// called for the first time.
67+
debug = debuglogImpl(set);
68+
if (typeof cb === 'function')
69+
cb(debug);
70+
debug(...args);
71+
};
72+
return (...args) => {
73+
debug(...args);
7174
};
7275
}
7376

lib/internal/worker.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ const kOnErrorMessage = Symbol('kOnErrorMessage');
6868
const kParentSideStdio = Symbol('kParentSideStdio');
6969

7070
const SHARE_ENV = SymbolFor('nodejs.worker_threads.SHARE_ENV');
71-
const debug = require('internal/util/debuglog').debuglog('worker');
71+
let debug = require('internal/util/debuglog').debuglog('worker', (fn) => {
72+
debug = fn;
73+
});
7274

7375
let cwdCounter;
7476

lib/internal/worker/io.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ const {
3131
const { Readable, Writable } = require('stream');
3232
const EventEmitter = require('events');
3333
const { inspect } = require('internal/util/inspect');
34-
const debug = require('internal/util/debuglog').debuglog('worker');
34+
let debug = require('internal/util/debuglog').debuglog('worker', (fn) => {
35+
debug = fn;
36+
});
3537

3638
const kIncrementsPortRef = Symbol('kIncrementsPortRef');
3739
const kName = Symbol('kName');

lib/net.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ const {
3535
const EventEmitter = require('events');
3636
const stream = require('stream');
3737
const { inspect } = require('internal/util/inspect');
38-
const debug = require('internal/util/debuglog').debuglog('net');
38+
let debug = require('internal/util/debuglog').debuglog('net', (fn) => {
39+
debug = fn;
40+
});
3941
const { deprecate } = require('internal/util');
4042
const {
4143
isIP,

lib/repl.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ const CJSModule = require('internal/modules/cjs/loader').Module;
8888
let _builtinLibs = [...CJSModule.builtinModules]
8989
.filter((e) => !e.startsWith('_') && !e.includes('/'));
9090
const domain = require('domain');
91-
const debug = require('internal/util/debuglog').debuglog('repl');
91+
let debug = require('internal/util/debuglog').debuglog('repl', (fn) => {
92+
debug = fn;
93+
});
9294
const {
9395
codes: {
9496
ERR_CANNOT_WATCH_SIGINT,

lib/timers.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ const {
5353
promisify: { custom: customPromisify },
5454
deprecate
5555
} = require('internal/util');
56-
const debug = require('internal/util/debuglog').debuglog('timer');
56+
let debug = require('internal/util/debuglog').debuglog('timer', (fn) => {
57+
debug = fn;
58+
});
5759
const { validateCallback } = require('internal/validators');
5860

5961
const {

test/sequential/test-util-debug.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ function child(section) {
118118
value: tty.WriteStream.prototype.hasColors
119119
});
120120
// eslint-disable-next-line no-restricted-syntax
121-
const debug = util.debuglog(section);
121+
const debug = util.debuglog(section, common.mustCall((cb) => {
122+
assert.strictEqual(typeof cb, 'function');
123+
}));
122124
debug('this', { is: 'a' }, /debugging/);
123125
debug('num=%d str=%s obj=%j', 1, 'a', { foo: 'bar' });
124126
console.log('ok');

0 commit comments

Comments
 (0)