UNPKG

3.44 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.GCIncrementalMarking', ts: 6400, dur: 1000 }),
22 traceEvent({ name: 'V8.GCFinalizeMC', ts: 7400, dur: 1000 }),
23 traceEvent({ name: 'V8.GCScavenger', ts: 8400, dur: 500 }),
24 traceEvent({ name: 'V8.GCIncrementalMarking', ts: 9400, dur: 500 }),
25 traceEvent({ name: 'V8.GCCompactor', ts: 10400, dur: 500 })
26 ]
27
28 const timeOffset = 33000000
29 const systemInfoReader = new SystemInfoDecoder()
30 systemInfoReader.end(JSON.stringify({
31 clock: {
32 hrtime: [0, 400000],
33 unixtime: timeOffset
34 }
35 }))
36 const decoder = new TraceEventDecoder(systemInfoReader)
37
38 decoder.pipe(endpoint({ objectMode: true }, function (err, data) {
39 if (err) return t.ifError(err)
40
41 t.strictDeepEqual(data, [
42 {
43 pid: 10,
44 tid: 1,
45 ph: 'X',
46 cat: 'v8',
47 name: 'V8.GCScavenger',
48 ts: 1400,
49 dur: 500,
50 args: {
51 startTimestamp: 1 + timeOffset,
52 endTimestamp: 1.5 + timeOffset
53 }
54 }, {
55 pid: 10,
56 tid: 1,
57 ph: 'X',
58 cat: 'v8',
59 name: 'V8.GCMarkSweepCompact',
60 ts: 2400,
61 dur: 6000,
62 args: {
63 startTimestamp: 2 + timeOffset,
64 endTimestamp: 8 + timeOffset
65 }
66 }, {
67 pid: 10,
68 tid: 1,
69 ph: 'X',
70 cat: 'v8',
71 name: 'V8.GCScavenger',
72 ts: 8400,
73 dur: 500,
74 args: {
75 startTimestamp: 8 + timeOffset,
76 endTimestamp: 8.5 + timeOffset
77 }
78 }, {
79 pid: 10,
80 tid: 1,
81 ph: 'X',
82 cat: 'v8',
83 name: 'V8.GCIncrementalMarking',
84 ts: 9400,
85 dur: 500,
86 args: {
87 startTimestamp: 9 + timeOffset,
88 endTimestamp: 9.5 + timeOffset
89 }
90 }, {
91 pid: 10,
92 tid: 1,
93 ph: 'X',
94 cat: 'v8',
95 name: 'V8.GCCompactor',
96 ts: 10400,
97 dur: 500,
98 args: {
99 startTimestamp: 10 + timeOffset,
100 endTimestamp: 10.5 + timeOffset
101 }
102 }
103 ])
104 t.end()
105 }))
106
107 decoder.end(JSON.stringify({
108 traceEvents: data
109 }))
110})
111
112test('Format - trace event - error', function (t) {
113 const systemInfoReader = startpoint(
114 new Error('expected error'),
115 { objectMode: true }
116 )
117 const decoder = new TraceEventDecoder(systemInfoReader)
118
119 decoder.pipe(endpoint({ objectMode: true }, function (err, data) {
120 t.strictDeepEqual(err, new Error('expected error'))
121 t.end()
122 }))
123
124 decoder.end(JSON.stringify({
125 traceEvents: []
126 }))
127})