Skip to content

Commit d9b8a35

Browse files
authored
inspector: improve batch diagnostic channel subscriptions
PR-URL: #60009 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent 23fa184 commit d9b8a35

File tree

4 files changed

+48
-65
lines changed

4 files changed

+48
-65
lines changed

lib/internal/inspector/network.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
'use strict';
22

33
const {
4+
ArrayPrototypeForEach,
45
NumberMAX_SAFE_INTEGER,
56
StringPrototypeToLowerCase,
67
Symbol,
78
} = primordials;
89

10+
const dc = require('diagnostics_channel');
911
const { now } = require('internal/perf/utils');
1012
const { MIMEType } = require('internal/mime');
13+
1114
const kInspectorRequestId = Symbol('kInspectorRequestId');
1215

1316
// https://chromedevtools.github.io/devtools-protocol/1-3/Network/#type-ResourceType
@@ -67,10 +70,30 @@ function sniffMimeType(contentType) {
6770
};
6871
}
6972

73+
function registerDiagnosticChannels(listenerPairs) {
74+
function enable() {
75+
ArrayPrototypeForEach(listenerPairs, ({ 0: channel, 1: listener }) => {
76+
dc.subscribe(channel, listener);
77+
});
78+
}
79+
80+
function disable() {
81+
ArrayPrototypeForEach(listenerPairs, ({ 0: channel, 1: listener }) => {
82+
dc.unsubscribe(channel, listener);
83+
});
84+
}
85+
86+
return {
87+
enable,
88+
disable,
89+
};
90+
}
91+
7092
module.exports = {
7193
kInspectorRequestId,
7294
kResourceType,
7395
getMonotonicTime,
7496
getNextRequestId,
97+
registerDiagnosticChannels,
7598
sniffMimeType,
7699
};

lib/internal/inspector/network_http.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ const {
1313
kResourceType,
1414
getMonotonicTime,
1515
getNextRequestId,
16+
registerDiagnosticChannels,
1617
sniffMimeType,
1718
} = require('internal/inspector/network');
18-
const dc = require('diagnostics_channel');
1919
const { Network } = require('inspector');
2020

2121
const kRequestUrl = Symbol('kRequestUrl');
@@ -129,19 +129,8 @@ function onClientResponseFinish({ request, response }) {
129129
});
130130
}
131131

132-
function enable() {
133-
dc.subscribe('http.client.request.created', onClientRequestCreated);
134-
dc.subscribe('http.client.request.error', onClientRequestError);
135-
dc.subscribe('http.client.response.finish', onClientResponseFinish);
136-
}
137-
138-
function disable() {
139-
dc.unsubscribe('http.client.request.created', onClientRequestCreated);
140-
dc.unsubscribe('http.client.request.error', onClientRequestError);
141-
dc.unsubscribe('http.client.response.finish', onClientResponseFinish);
142-
}
143-
144-
module.exports = {
145-
enable,
146-
disable,
147-
};
132+
module.exports = registerDiagnosticChannels([
133+
['http.client.request.created', onClientRequestCreated],
134+
['http.client.request.error', onClientRequestError],
135+
['http.client.response.finish', onClientResponseFinish],
136+
]);

lib/internal/inspector/network_http2.js

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ const {
1313
kResourceType,
1414
getMonotonicTime,
1515
getNextRequestId,
16+
registerDiagnosticChannels,
1617
sniffMimeType,
1718
} = require('internal/inspector/network');
18-
const dc = require('diagnostics_channel');
1919
const { Network } = require('inspector');
2020
const {
2121
HTTP2_HEADER_AUTHORITY,
@@ -170,21 +170,9 @@ function onClientStreamClose({ stream }) {
170170
});
171171
}
172172

173-
function enable() {
174-
dc.subscribe('http2.client.stream.created', onClientStreamCreated);
175-
dc.subscribe('http2.client.stream.error', onClientStreamError);
176-
dc.subscribe('http2.client.stream.finish', onClientStreamFinish);
177-
dc.subscribe('http2.client.stream.close', onClientStreamClose);
178-
}
179-
180-
function disable() {
181-
dc.unsubscribe('http2.client.stream.created', onClientStreamCreated);
182-
dc.unsubscribe('http2.client.stream.error', onClientStreamError);
183-
dc.unsubscribe('http2.client.stream.finish', onClientStreamFinish);
184-
dc.unsubscribe('http2.client.stream.close', onClientStreamClose);
185-
}
186-
187-
module.exports = {
188-
enable,
189-
disable,
190-
};
173+
module.exports = registerDiagnosticChannels([
174+
['http2.client.stream.created', onClientStreamCreated],
175+
['http2.client.stream.error', onClientStreamError],
176+
['http2.client.stream.finish', onClientStreamFinish],
177+
['http2.client.stream.close', onClientStreamClose],
178+
]);

lib/internal/inspector/network_undici.js

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ const {
1010
kResourceType,
1111
getMonotonicTime,
1212
getNextRequestId,
13+
registerDiagnosticChannels,
1314
sniffMimeType,
1415
} = require('internal/inspector/network');
15-
const dc = require('diagnostics_channel');
1616
const { Network } = require('inspector');
1717
const { Buffer } = require('buffer');
1818

@@ -239,31 +239,14 @@ function onWebSocketClose({ websocket }) {
239239
});
240240
}
241241

242-
function enable() {
243-
dc.subscribe('undici:request:create', onClientRequestStart);
244-
dc.subscribe('undici:request:error', onClientRequestError);
245-
dc.subscribe('undici:request:headers', onClientResponseHeaders);
246-
dc.subscribe('undici:request:trailers', onClientResponseFinish);
247-
dc.subscribe('undici:request:bodyChunkSent', onClientRequestBodyChunkSent);
248-
dc.subscribe('undici:request:bodySent', onClientRequestBodySent);
249-
dc.subscribe('undici:request:bodyChunkReceived', onClientRequestBodyChunkReceived);
250-
dc.subscribe('undici:websocket:open', onWebSocketOpen);
251-
dc.subscribe('undici:websocket:close', onWebSocketClose);
252-
}
253-
254-
function disable() {
255-
dc.unsubscribe('undici:request:create', onClientRequestStart);
256-
dc.unsubscribe('undici:request:error', onClientRequestError);
257-
dc.unsubscribe('undici:request:headers', onClientResponseHeaders);
258-
dc.unsubscribe('undici:request:trailers', onClientResponseFinish);
259-
dc.unsubscribe('undici:request:bodyChunkSent', onClientRequestBodyChunkSent);
260-
dc.unsubscribe('undici:request:bodySent', onClientRequestBodySent);
261-
dc.unsubscribe('undici:request:bodyChunkReceived', onClientRequestBodyChunkReceived);
262-
dc.unsubscribe('undici:websocket:open', onWebSocketOpen);
263-
dc.unsubscribe('undici:websocket:close', onWebSocketClose);
264-
}
265-
266-
module.exports = {
267-
enable,
268-
disable,
269-
};
242+
module.exports = registerDiagnosticChannels([
243+
['undici:request:create', onClientRequestStart],
244+
['undici:request:error', onClientRequestError],
245+
['undici:request:headers', onClientResponseHeaders],
246+
['undici:request:trailers', onClientResponseFinish],
247+
['undici:request:bodyChunkSent', onClientRequestBodyChunkSent],
248+
['undici:request:bodySent', onClientRequestBodySent],
249+
['undici:request:bodyChunkReceived', onClientRequestBodyChunkReceived],
250+
['undici:websocket:open', onWebSocketOpen],
251+
['undici:websocket:close', onWebSocketClose],
252+
]);

0 commit comments

Comments
 (0)