inspector: improve batch diagnostic channel subscriptions

PR-URL: https://github.com/nodejs/node/pull/60009
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Chengzhong Wu 2025-10-06 21:48:33 +08:00 committed by GitHub
parent 23fa18444f
commit d9b8a3558e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 65 deletions

View File

@ -1,13 +1,16 @@
'use strict'; 'use strict';
const { const {
ArrayPrototypeForEach,
NumberMAX_SAFE_INTEGER, NumberMAX_SAFE_INTEGER,
StringPrototypeToLowerCase, StringPrototypeToLowerCase,
Symbol, Symbol,
} = primordials; } = primordials;
const dc = require('diagnostics_channel');
const { now } = require('internal/perf/utils'); const { now } = require('internal/perf/utils');
const { MIMEType } = require('internal/mime'); const { MIMEType } = require('internal/mime');
const kInspectorRequestId = Symbol('kInspectorRequestId'); const kInspectorRequestId = Symbol('kInspectorRequestId');
// https://chromedevtools.github.io/devtools-protocol/1-3/Network/#type-ResourceType // https://chromedevtools.github.io/devtools-protocol/1-3/Network/#type-ResourceType
@ -67,10 +70,30 @@ function sniffMimeType(contentType) {
}; };
} }
function registerDiagnosticChannels(listenerPairs) {
function enable() {
ArrayPrototypeForEach(listenerPairs, ({ 0: channel, 1: listener }) => {
dc.subscribe(channel, listener);
});
}
function disable() {
ArrayPrototypeForEach(listenerPairs, ({ 0: channel, 1: listener }) => {
dc.unsubscribe(channel, listener);
});
}
return {
enable,
disable,
};
}
module.exports = { module.exports = {
kInspectorRequestId, kInspectorRequestId,
kResourceType, kResourceType,
getMonotonicTime, getMonotonicTime,
getNextRequestId, getNextRequestId,
registerDiagnosticChannels,
sniffMimeType, sniffMimeType,
}; };

View File

@ -13,9 +13,9 @@ const {
kResourceType, kResourceType,
getMonotonicTime, getMonotonicTime,
getNextRequestId, getNextRequestId,
registerDiagnosticChannels,
sniffMimeType, sniffMimeType,
} = require('internal/inspector/network'); } = require('internal/inspector/network');
const dc = require('diagnostics_channel');
const { Network } = require('inspector'); const { Network } = require('inspector');
const kRequestUrl = Symbol('kRequestUrl'); const kRequestUrl = Symbol('kRequestUrl');
@ -129,19 +129,8 @@ function onClientResponseFinish({ request, response }) {
}); });
} }
function enable() { module.exports = registerDiagnosticChannels([
dc.subscribe('http.client.request.created', onClientRequestCreated); ['http.client.request.created', onClientRequestCreated],
dc.subscribe('http.client.request.error', onClientRequestError); ['http.client.request.error', onClientRequestError],
dc.subscribe('http.client.response.finish', onClientResponseFinish); ['http.client.response.finish', onClientResponseFinish],
} ]);
function disable() {
dc.unsubscribe('http.client.request.created', onClientRequestCreated);
dc.unsubscribe('http.client.request.error', onClientRequestError);
dc.unsubscribe('http.client.response.finish', onClientResponseFinish);
}
module.exports = {
enable,
disable,
};

View File

@ -13,9 +13,9 @@ const {
kResourceType, kResourceType,
getMonotonicTime, getMonotonicTime,
getNextRequestId, getNextRequestId,
registerDiagnosticChannels,
sniffMimeType, sniffMimeType,
} = require('internal/inspector/network'); } = require('internal/inspector/network');
const dc = require('diagnostics_channel');
const { Network } = require('inspector'); const { Network } = require('inspector');
const { const {
HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_AUTHORITY,
@ -170,21 +170,9 @@ function onClientStreamClose({ stream }) {
}); });
} }
function enable() { module.exports = registerDiagnosticChannels([
dc.subscribe('http2.client.stream.created', onClientStreamCreated); ['http2.client.stream.created', onClientStreamCreated],
dc.subscribe('http2.client.stream.error', onClientStreamError); ['http2.client.stream.error', onClientStreamError],
dc.subscribe('http2.client.stream.finish', onClientStreamFinish); ['http2.client.stream.finish', onClientStreamFinish],
dc.subscribe('http2.client.stream.close', onClientStreamClose); ['http2.client.stream.close', onClientStreamClose],
} ]);
function disable() {
dc.unsubscribe('http2.client.stream.created', onClientStreamCreated);
dc.unsubscribe('http2.client.stream.error', onClientStreamError);
dc.unsubscribe('http2.client.stream.finish', onClientStreamFinish);
dc.unsubscribe('http2.client.stream.close', onClientStreamClose);
}
module.exports = {
enable,
disable,
};

View File

@ -10,9 +10,9 @@ const {
kResourceType, kResourceType,
getMonotonicTime, getMonotonicTime,
getNextRequestId, getNextRequestId,
registerDiagnosticChannels,
sniffMimeType, sniffMimeType,
} = require('internal/inspector/network'); } = require('internal/inspector/network');
const dc = require('diagnostics_channel');
const { Network } = require('inspector'); const { Network } = require('inspector');
const { Buffer } = require('buffer'); const { Buffer } = require('buffer');
@ -239,31 +239,14 @@ function onWebSocketClose({ websocket }) {
}); });
} }
function enable() { module.exports = registerDiagnosticChannels([
dc.subscribe('undici:request:create', onClientRequestStart); ['undici:request:create', onClientRequestStart],
dc.subscribe('undici:request:error', onClientRequestError); ['undici:request:error', onClientRequestError],
dc.subscribe('undici:request:headers', onClientResponseHeaders); ['undici:request:headers', onClientResponseHeaders],
dc.subscribe('undici:request:trailers', onClientResponseFinish); ['undici:request:trailers', onClientResponseFinish],
dc.subscribe('undici:request:bodyChunkSent', onClientRequestBodyChunkSent); ['undici:request:bodyChunkSent', onClientRequestBodyChunkSent],
dc.subscribe('undici:request:bodySent', onClientRequestBodySent); ['undici:request:bodySent', onClientRequestBodySent],
dc.subscribe('undici:request:bodyChunkReceived', onClientRequestBodyChunkReceived); ['undici:request:bodyChunkReceived', onClientRequestBodyChunkReceived],
dc.subscribe('undici:websocket:open', onWebSocketOpen); ['undici:websocket:open', onWebSocketOpen],
dc.subscribe('undici:websocket:close', onWebSocketClose); ['undici:websocket:close', onWebSocketClose],
} ]);
function disable() {
dc.unsubscribe('undici:request:create', onClientRequestStart);
dc.unsubscribe('undici:request:error', onClientRequestError);
dc.unsubscribe('undici:request:headers', onClientResponseHeaders);
dc.unsubscribe('undici:request:trailers', onClientResponseFinish);
dc.unsubscribe('undici:request:bodyChunkSent', onClientRequestBodyChunkSent);
dc.unsubscribe('undici:request:bodySent', onClientRequestBodySent);
dc.unsubscribe('undici:request:bodyChunkReceived', onClientRequestBodyChunkReceived);
dc.unsubscribe('undici:websocket:open', onWebSocketOpen);
dc.unsubscribe('undici:websocket:close', onWebSocketClose);
}
module.exports = {
enable,
disable,
};