UNPKG

4.01 kBJavaScriptView Raw
1'use strict'
2
3const test = require('tap').test
4const endpoint = require('endpoint')
5const startpoint = require('startpoint')
6const SystemInfoDecoder = require('../format/system-info-decoder.js')
7const TraceEventDecoder = require('../format/trace-event-decoder.js')
8
9function traceEvent (data) {
10 // we put args: {}, at the end as the fast parser expects that
11 return Object.assign({ pid: 10, tid: 1, ph: 'X', cat: 'v8' }, data, { args: {} })
12}
13
14test('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
143test('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})