Skip to content

Commit 37e4827

Browse files
authored
perf: import node inspector dynamically (#10296)
1 parent a09230d commit 37e4827

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

packages/rspack/src/exports.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ interface Experiments {
355355
export const experiments: Experiments = {
356356
globalTrace: {
357357
async register(filter, layer, output) {
358-
JavaScriptTracer.initJavaScriptTrace(layer, output);
358+
await JavaScriptTracer.initJavaScriptTrace(layer, output);
359359
registerGlobalTrace(filter, layer, output);
360360
// lazy init cpuProfiler to make sure js and rust's timestamp is much aligned
361361
JavaScriptTracer.initCpuProfiler();

packages/rspack/src/trace/index.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import fs from "node:fs";
2-
import inspector from "node:inspector";
2+
33
// following chrome trace event format https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview?tab=t.0#heading=h.uxpopqvbjezh
44
export interface ChromeEvent {
55
name: string;
@@ -17,6 +17,7 @@ export interface ChromeEvent {
1717
global?: string;
1818
};
1919
}
20+
2021
// this is a tracer for nodejs
2122
// FIXME: currently we only support chrome layer and do nothing for logger layer
2223
export class JavaScriptTracer {
@@ -27,15 +28,18 @@ export class JavaScriptTracer {
2728
// tracing file path, same as rust tracing-chrome's
2829
static output: string;
2930
// inspector session for CPU Profiler
30-
static session: inspector.Session;
31-
static initJavaScriptTrace(layer: string, output: string) {
32-
this.session = new inspector.Session();
31+
static session: import("node:inspector").Session;
32+
33+
static async initJavaScriptTrace(layer: string, output: string) {
34+
const { Session } = await import("node:inspector");
35+
this.session = new Session();
3336
this.layer = layer;
3437
this.output = output;
3538
this.events = [];
3639
const hrtime = process.hrtime();
3740
this.startTime = hrtime[0] * 1000000 + Math.round(hrtime[1] / 1000); // use microseconds
3841
}
42+
3943
static initCpuProfiler() {
4044
if (this.layer === "chrome") {
4145
this.session.connect();
@@ -48,8 +52,9 @@ export class JavaScriptTracer {
4852
if (!this.layer.includes("chrome")) {
4953
return;
5054
}
55+
5156
this.session.post("Profiler.stop", (err, param) => {
52-
let cpu_profile: inspector.Profiler.Profile | undefined;
57+
let cpu_profile: import("node:inspector").Profiler.Profile | undefined;
5358
if (err) {
5459
console.error("Error stopping profiler:", err);
5560
} else {

0 commit comments

Comments
 (0)