/
Trace.js
121 lines (108 loc) Β· 2.35 KB
/
Trace.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// @flow
import type {Profile} from './Profiler';
import type {Writable} from 'stream';
import {Tracer} from 'chrome-trace-event';
export default class Trace {
tracer: Tracer;
tid: number;
eventId: number;
constructor() {
this.tracer = new Tracer();
this.tid = 0;
this.eventId = 0;
this.init();
}
getEventId() {
return this.eventId++;
}
init() {
this.tracer.instantEvent({
name: 'TracingStartedInPage',
id: this.getEventId(),
cat: ['disabled-by-default-devtools.timeline'],
args: {
data: {
sessionId: '-1',
page: '0xfff',
frames: [
{
frame: '0xfff',
url: 'parcel',
name: '',
},
],
},
},
});
this.tracer.instantEvent({
name: 'TracingStartedInBrowser',
id: this.getEventId(),
cat: ['disabled-by-default-devtools.timeline'],
args: {
data: {
sessionId: '-1',
},
},
});
}
addCPUProfile(name: string, profile: Profile) {
const trace = this.tracer;
const tid = this.tid;
this.tid++;
const cpuStartTime = profile.startTime;
const cpuEndTime = profile.endTime;
trace.instantEvent({
tid,
id: this.getEventId(),
cat: ['toplevel'],
name: 'TaskQueueManager::ProcessTaskFromWorkQueue',
args: {
src_file: '../../ipc/ipc_moji_bootstrap.cc',
src_func: 'Accept',
},
ts: cpuStartTime,
});
trace.completeEvent({
tid,
name: 'EvaluateScript',
id: this.getEventId(),
cat: ['devtools.timeline'],
ts: cpuStartTime,
dur: cpuEndTime - cpuStartTime,
args: {
data: {
url: 'parcel',
lineNumber: 1,
columnNumber: 1,
frame: '0xFFF',
},
},
});
trace.instantEvent({
tid,
ts: 0,
ph: 'M',
cat: ['__metadata'],
name: 'thread_name',
args: {name},
});
trace.instantEvent({
tid,
name: 'CpuProfile',
id: this.getEventId(),
cat: ['disabled-by-default-devtools.timeline'],
ts: cpuEndTime,
args: {
data: {
cpuProfile: profile,
},
},
});
}
pipe(writable: Writable) {
return this.tracer.pipe(writable);
}
flush() {
this.tracer.push(null);
}
}