1 | 'use strict'
|
2 |
|
3 | const test = require('tap').test
|
4 | const endpoint = require('endpoint')
|
5 | const startpoint = require('startpoint')
|
6 | const SystemInfoDecoder = require('../format/system-info-decoder.js')
|
7 | const TraceEventDecoder = require('../format/trace-event-decoder.js')
|
8 |
|
9 | function traceEvent (data) {
|
10 |
|
11 | return Object.assign({ pid: 10, tid: 1, ph: 'X', cat: 'v8' }, data, { args: {} })
|
12 | }
|
13 |
|
14 | test('Format - trace event - combine', function (t) {
|
15 | const data = [
|
16 | traceEvent({ name: 'V8.GCScavenger', ts: 1400, dur: 500 }),
|
17 | traceEvent({ name: 'V8.GCIncrementalMarkingStart', ts: 2400, dur: 50 }),
|
18 | traceEvent({ name: 'V8.GCIncrementalMarking', ts: 3400, dur: 1000 }),
|
19 | traceEvent({ name: 'V8.GCIncrementalMarking', ts: 4400, dur: 1000 }),
|
20 | traceEvent({ name: 'V8.GCIncrementalMarkingFinalize', ts: 5400, dur: 50 }),
|
21 | traceEvent({ name: 'V8.Execute', ts: 5400, dur: 500 }),
|
22 | traceEvent({ name: 'V8.Execute', ts: 6400, dur: 500 }),
|
23 | traceEvent({ name: 'V8.GCFinalizeMC', ts: 7400, dur: 1000 }),
|
24 | traceEvent({ name: 'V8.GCScavenger', ts: 8400, dur: 500 })
|
25 | ]
|
26 |
|
27 | const timeOffset = 33000000
|
28 | const systemInfoReader = new SystemInfoDecoder()
|
29 | systemInfoReader.end(JSON.stringify({
|
30 | clock: {
|
31 | hrtime: [0, 400000],
|
32 | unixtime: timeOffset
|
33 | },
|
34 | nodeVersions: process.versions,
|
35 | toolVersion: require('../package').version
|
36 | }))
|
37 | const decoder = new TraceEventDecoder(systemInfoReader)
|
38 |
|
39 | decoder.pipe(endpoint({ objectMode: true }, function (err, data) {
|
40 | if (err) return t.ifError(err)
|
41 |
|
42 | t.strictDeepEqual(data, [
|
43 | {
|
44 | pid: 10,
|
45 | tid: 1,
|
46 | ph: 'X',
|
47 | cat: 'v8',
|
48 | name: 'V8.GCScavenger',
|
49 | ts: 1400,
|
50 | dur: 500,
|
51 | args: {
|
52 | startTimestamp: 1 + timeOffset,
|
53 | endTimestamp: 1.5 + timeOffset
|
54 | }
|
55 | },
|
56 | {
|
57 | pid: 10,
|
58 | tid: 1,
|
59 | ph: 'X',
|
60 | cat: 'v8',
|
61 | name: 'V8.GCIncrementalMarkingStart',
|
62 | ts: 2400,
|
63 | dur: 50,
|
64 | args: {
|
65 | startTimestamp: 2 + timeOffset,
|
66 | endTimestamp: 2.05 + timeOffset
|
67 | }
|
68 | },
|
69 | {
|
70 | pid: 10,
|
71 | tid: 1,
|
72 | ph: 'X',
|
73 | cat: 'v8',
|
74 | name: 'V8.GCIncrementalMarking',
|
75 | ts: 3400,
|
76 | dur: 1000,
|
77 | args: {
|
78 | startTimestamp: 3 + timeOffset,
|
79 | endTimestamp: 4 + timeOffset
|
80 | }
|
81 | },
|
82 | {
|
83 | pid: 10,
|
84 | tid: 1,
|
85 | ph: 'X',
|
86 | cat: 'v8',
|
87 | name: 'V8.GCIncrementalMarking',
|
88 | ts: 4400,
|
89 | dur: 1000,
|
90 | args: {
|
91 | startTimestamp: 4 + timeOffset,
|
92 | endTimestamp: 5 + timeOffset
|
93 | }
|
94 | },
|
95 | {
|
96 | pid: 10,
|
97 | tid: 1,
|
98 | ph: 'X',
|
99 | cat: 'v8',
|
100 | name: 'V8.GCIncrementalMarkingFinalize',
|
101 | ts: 5400,
|
102 | dur: 50,
|
103 | args: {
|
104 | startTimestamp: 5 + timeOffset,
|
105 | endTimestamp: 5.05 + timeOffset
|
106 | }
|
107 | },
|
108 | {
|
109 | pid: 10,
|
110 | tid: 1,
|
111 | ph: 'X',
|
112 | cat: 'v8',
|
113 | name: 'V8.GCFinalizeMC',
|
114 | ts: 7400,
|
115 | dur: 1000,
|
116 | args: {
|
117 | startTimestamp: 7 + timeOffset,
|
118 | endTimestamp: 8 + timeOffset
|
119 | }
|
120 | },
|
121 | {
|
122 | pid: 10,
|
123 | tid: 1,
|
124 | ph: 'X',
|
125 | cat: 'v8',
|
126 | name: 'V8.GCScavenger',
|
127 | ts: 8400,
|
128 | dur: 500,
|
129 | args: {
|
130 | startTimestamp: 8 + timeOffset,
|
131 | endTimestamp: 8.5 + timeOffset
|
132 | }
|
133 | }
|
134 | ])
|
135 | t.end()
|
136 | }))
|
137 |
|
138 | decoder.end(JSON.stringify({
|
139 | traceEvents: data
|
140 | }))
|
141 | })
|
142 |
|
143 | test('Format - trace event - error', function (t) {
|
144 | const systemInfoReader = startpoint(
|
145 | new Error('expected error'),
|
146 | { objectMode: true }
|
147 | )
|
148 | const decoder = new TraceEventDecoder(systemInfoReader)
|
149 |
|
150 | decoder.pipe(endpoint({ objectMode: true }, function (err, data) {
|
151 | t.strictDeepEqual(err, new Error('expected error'))
|
152 | t.end()
|
153 | }))
|
154 |
|
155 | decoder.end(JSON.stringify({
|
156 | traceEvents: []
|
157 | }))
|
158 | })
|