Skip to content

Commit af5b8d2

Browse files
committed
refactor: wip
1 parent 0a37c3c commit af5b8d2

File tree

7 files changed

+407
-21
lines changed

7 files changed

+407
-21
lines changed

packages/utils/mocks/multiprocess-profiling/profiler-worker-child.mjs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,42 @@ import { traceEventWalFormat } from '../../src/lib/profiler/wal-json-trace.js';
88
...traceEventWalFormat(),
99
encodePerfEntry: entryToTraceEvents,
1010
},
11+
track: `Track: ${process.pid}`,
12+
trackGroup: 'Multiprocess',
13+
enabled: true, // Explicitly enable profiler
1114
});
1215

13-
profiler.marker(`process-${processId}:process-start`, {
14-
tooltipText: `Process ${processId} started`,
16+
profiler.marker(`process-${process.pid}:process-start`, {
17+
tooltipText: `Process ${process.pid} started`,
1518
});
1619

17-
profiler.measure(`process-${processId}:work`, () => {
18-
const arr = Array.from({ length: 1000 }, (_, i) => i);
19-
return arr.reduce((sum, x) => sum + x, 0);
20+
// Random number of intervals (2-5)
21+
const numIntervals = Math.floor(Math.random() * 4) + 2;
22+
23+
for (let interval = 0; interval < numIntervals; interval++) {
24+
// Random interval delay (50-200ms)
25+
const intervalDelay = Math.floor(Math.random() * 150) + 50;
26+
await new Promise(resolve => setTimeout(resolve, intervalDelay));
27+
28+
// Random number of work packages per interval (1-5)
29+
const numWorkPackages = Math.floor(Math.random() * 5) + 1;
30+
31+
for (let pkg = 0; pkg < numWorkPackages; pkg++) {
32+
// Random work size (100-5000 elements)
33+
const workSize = Math.floor(Math.random() * 5000000);
34+
35+
profiler.measure(
36+
`process-${process.pid}:interval-${interval}:work-${pkg}`,
37+
() => {
38+
const arr = Array.from({ length: workSize }, (_, i) => i);
39+
return arr.reduce((sum, x) => sum + x * Math.random(), 0);
40+
},
41+
);
42+
}
43+
}
44+
45+
profiler.marker(`process-${process.pid}:process-end`, {
46+
tooltipText: `Process ${process.pid} completed ${numIntervals} intervals`,
2047
});
2148

2249
profiler.close();

packages/utils/mocks/multiprocess-profiling/profiler-worker.mjs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { NodejsProfiler } from '../../src/lib/profiler/profiler-node.js';
55
import { entryToTraceEvents } from '../../src/lib/profiler/trace-file-utils.js';
66
import { traceEventWalFormat } from '../../src/lib/profiler/wal-json-trace.js';
77

8-
const [numProcesses] = process.argv.slice(2);
8+
const [numProcesses, measureName] = process.argv.slice(2);
99

1010
if (!numProcesses) {
11-
console.error('Usage: node profiler-worker.mjs <numProcesses>');
11+
console.error('Usage: node profiler-worker.mjs <numProcesses> [measureName]');
1212
process.exit(1);
1313
}
1414

@@ -28,6 +28,9 @@ const profiler = new NodejsProfiler({
2828
...traceEventWalFormat(),
2929
encodePerfEntry: entryToTraceEvents,
3030
},
31+
track: `Track: ${process.pid}`,
32+
trackGroup: 'Multiprocess',
33+
...(measureName && { measureName }),
3134
});
3235

3336
(async () => {

packages/utils/mocks/omit-trace-json.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ function normalizeAndFormatEventsArray(
280280
const tsMap = new Map(
281281
[...new Set(timestamps)]
282282
.sort((a, b) => a - b)
283-
.map((ts, i) => [ts, baseTimestampUs + i]),
283+
.map((ts, i) => [ts, baseTimestampUs + i * 100]),
284284
);
285285

286286
// Normalize events while preserving original order
Lines changed: 167 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,167 @@
1-
{"traceEvents":[{"cat":"devtools.timeline","ph":"i","name":"TracingStartedInBrowser","pid":10001,"tid":1,"ts":1700000005000000,"args":{"data":{"frameTreeNodeId":1000101,"frames":[{"frame":"FRAME0P10001T1","isInPrimaryMainFrame":true,"isOutermostMainFrame":true,"name":"","processId":10001,"url":"generated-trace"}],"persistentIds":true}}},{"cat":"devtools.timeline","pid":10001,"tid":1,"ts":1700000005000000,"ph":"X","name":"[trace padding start]","dur":20000,"args":{}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000001,"name":"write-buffered-j-jl:profiler-enable","ph":"i","args":{"detail":"{\"devtools\":{\"dataType\":\"marker\",\"tooltipText\":\"set enable to true\"}}"}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000002,"name":"write-buffered-j-jl:sync-measure:start","ph":"i","args":{}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000003,"name":"write-buffered-j-jl:sync-measure","ph":"b","id2":{"local":"0x1"},"args":{"data":{"detail":"{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"sync success\\\"\"}}"}}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000004,"name":"write-buffered-j-jl:sync-measure","ph":"e","id2":{"local":"0x1"},"args":{"data":{"detail":"{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"sync success\\\"\"}}"}}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000005,"name":"write-buffered-j-jl:sync-measure:end","ph":"i","args":{}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000006,"name":"write-buffered-j-jl:async-measure:start","ph":"i","args":{}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000007,"name":"write-buffered-j-jl:async-measure","ph":"b","id2":{"local":"0x2"},"args":{"data":{"detail":"{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"async success\\\"\"}}"}}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000008,"name":"write-buffered-j-jl:async-measure","ph":"e","id2":{"local":"0x2"},"args":{"data":{"detail":"{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"async success\\\"\"}}"}}},{"cat":"blink.user_timing","pid":10001,"tid":1,"ts":1700000005000009,"name":"write-buffered-j-jl:async-measure:end","ph":"i","args":{}},{"cat":"devtools.timeline","pid":10001,"tid":1,"ts":1700000005000010,"ph":"X","name":"[trace padding end]","dur":20000,"args":{}}],"displayTimeUnit":"ms","metadata":{"source":"DevTools","startTime":"2026-01-28T14:29:27.995Z","hardwareConcurrency":1,"dataOrigin":"TraceEvents","generatedAt":"2026-01-28T14:29:27.995Z"}}
1+
{
2+
"traceEvents": [
3+
{
4+
"cat": "devtools.timeline",
5+
"ph": "i",
6+
"name": "TracingStartedInBrowser",
7+
"pid": 10001,
8+
"tid": 1,
9+
"ts": 1700000005000000,
10+
"args": {
11+
"data": {
12+
"frameTreeNodeId": 1000101,
13+
"frames": [
14+
{
15+
"frame": "FRAME0P10001T1",
16+
"isInPrimaryMainFrame": true,
17+
"isOutermostMainFrame": true,
18+
"name": "",
19+
"processId": 10001,
20+
"url": "generated-trace"
21+
}
22+
],
23+
"persistentIds": true
24+
}
25+
}
26+
},
27+
{
28+
"cat": "devtools.timeline",
29+
"pid": 10001,
30+
"tid": 1,
31+
"ts": 1700000005000000,
32+
"ph": "X",
33+
"name": "[trace padding start]",
34+
"dur": 20000,
35+
"args": {}
36+
},
37+
{
38+
"cat": "blink.user_timing",
39+
"pid": 10001,
40+
"tid": 1,
41+
"ts": 1700000005000001,
42+
"name": "write-buffered-j-jl:profiler-enable",
43+
"ph": "i",
44+
"args": {
45+
"detail": "{\"devtools\":{\"dataType\":\"marker\",\"tooltipText\":\"set enable to true\"}}"
46+
}
47+
},
48+
{
49+
"cat": "blink.user_timing",
50+
"pid": 10001,
51+
"tid": 1,
52+
"ts": 1700000005000002,
53+
"name": "write-buffered-j-jl:sync-measure:start",
54+
"ph": "i",
55+
"args": {}
56+
},
57+
{
58+
"cat": "blink.user_timing",
59+
"pid": 10001,
60+
"tid": 1,
61+
"ts": 1700000005000003,
62+
"name": "write-buffered-j-jl:sync-measure",
63+
"ph": "b",
64+
"id2": {
65+
"local": "0x1"
66+
},
67+
"args": {
68+
"data": {
69+
"detail": "{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"sync success\\\"\"}}"
70+
}
71+
}
72+
},
73+
{
74+
"cat": "blink.user_timing",
75+
"pid": 10001,
76+
"tid": 1,
77+
"ts": 1700000005000004,
78+
"name": "write-buffered-j-jl:sync-measure",
79+
"ph": "e",
80+
"id2": {
81+
"local": "0x1"
82+
},
83+
"args": {
84+
"data": {
85+
"detail": "{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"sync success\\\"\"}}"
86+
}
87+
}
88+
},
89+
{
90+
"cat": "blink.user_timing",
91+
"pid": 10001,
92+
"tid": 1,
93+
"ts": 1700000005000005,
94+
"name": "write-buffered-j-jl:sync-measure:end",
95+
"ph": "i",
96+
"args": {}
97+
},
98+
{
99+
"cat": "blink.user_timing",
100+
"pid": 10001,
101+
"tid": 1,
102+
"ts": 1700000005000006,
103+
"name": "write-buffered-j-jl:async-measure:start",
104+
"ph": "i",
105+
"args": {}
106+
},
107+
{
108+
"cat": "blink.user_timing",
109+
"pid": 10001,
110+
"tid": 1,
111+
"ts": 1700000005000007,
112+
"name": "write-buffered-j-jl:async-measure",
113+
"ph": "b",
114+
"id2": {
115+
"local": "0x2"
116+
},
117+
"args": {
118+
"data": {
119+
"detail": "{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"async success\\\"\"}}"
120+
}
121+
}
122+
},
123+
{
124+
"cat": "blink.user_timing",
125+
"pid": 10001,
126+
"tid": 1,
127+
"ts": 1700000005000008,
128+
"name": "write-buffered-j-jl:async-measure",
129+
"ph": "e",
130+
"id2": {
131+
"local": "0x2"
132+
},
133+
"args": {
134+
"data": {
135+
"detail": "{\"devtools\":{\"dataType\":\"track-entry\",\"track\":\"Buffered Track\",\"trackGroup\":\"Buffered Track\",\"tooltipText\":\"sync measurement returned :\\\"async success\\\"\"}}"
136+
}
137+
}
138+
},
139+
{
140+
"cat": "blink.user_timing",
141+
"pid": 10001,
142+
"tid": 1,
143+
"ts": 1700000005000009,
144+
"name": "write-buffered-j-jl:async-measure:end",
145+
"ph": "i",
146+
"args": {}
147+
},
148+
{
149+
"cat": "devtools.timeline",
150+
"pid": 10001,
151+
"tid": 1,
152+
"ts": 1700000005000010,
153+
"ph": "X",
154+
"name": "[trace padding end]",
155+
"dur": 20000,
156+
"args": {}
157+
}
158+
],
159+
"displayTimeUnit": "ms",
160+
"metadata": {
161+
"source": "DevTools",
162+
"startTime": "2026-01-28T14:29:27.995Z",
163+
"hardwareConcurrency": 1,
164+
"dataOrigin": "TraceEvents",
165+
"generatedAt": "2026-01-28T14:29:27.995Z"
166+
}
167+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"traceEvents":[{"cat":"devtools.timeline","ph":"i","name":"TracingStartedInBrowser","pid":10001,"tid":1,"ts":1700000005000000,"args":{"data":{"frameTreeNodeId":1000101,"frames":[{"frame":"FRAME0P10001T1","isInPrimaryMainFrame":true,"isOutermostMainFrame":true,"name":"","processId":10001,"url":"empty-trace"}],"persistentIds":true}}},{"cat":"devtools.timeline","pid":10001,"tid":1,"ts":1700000005000000,"ph":"X","name":"[trace padding start]","dur":20000,"args":{}},{"cat":"devtools.timeline","pid":10001,"tid":1,"ts":1700000005000001,"ph":"X","name":"[trace padding end]","dur":20000,"args":{}}],"displayTimeUnit":"ms","metadata":{"source":"DevTools","startTime":"2026-01-28T14:29:27.995Z","hardwareConcurrency":1,"dataOrigin":"TraceEvents","generatedAt":"2026-01-28T14:29:27.995Z"}}
1+
{"traceEvents":[{"cat":"devtools.timeline","ph":"i","name":"TracingStartedInBrowser","pid":10001,"tid":1,"ts":1700000005000000,"args":{"data":{"frameTreeNodeId":1000101,"frames":[{"frame":"FRAME0P10001T1","isInPrimaryMainFrame":true,"isOutermostMainFrame":true,"name":"","processId":10001,"url":"empty-trace"}],"persistentIds":true}}},{"cat":"devtools.timeline","pid":10001,"tid":1,"ts":1700000005000000,"ph":"X","name":"[trace padding start]","dur":20000,"args":{}},{"cat":"devtools.timeline","pid":10001,"tid":1,"ts":1700000005000100,"ph":"X","name":"[trace padding end]","dur":20000,"args":{}}],"displayTimeUnit":"ms","metadata":{"source":"DevTools","startTime":"2026-01-28T14:29:27.995Z","hardwareConcurrency":1,"dataOrigin":"TraceEvents","generatedAt":"2026-01-28T14:29:27.995Z"}}

0 commit comments

Comments
 (0)