1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tracing.test_utils');
8 tvcm.require('tracing.importer.etw_importer');
9 tvcm.require('tracing.importer.etw.eventtrace_parser');
11 tvcm.unittest.testSuite('tracing.importer.etw.eventtrace_parser_test', function() { // @suppress longLineCheck
13 // Constants for EventTrace events.
14 var guid = '68FDD900-4A3E-11D1-84F4-0000F80464E3';
15 var kEventTraceHeaderOpcode = 0;
17 var kEventTraceHeaderPayload32bitV2 =
18 'AAABAAYBAQWwHQAAEAAAABEs1WHICMwBYWECAGQAAAABAAAAAwAAAAEAAAAEAAAAAAAAA' +
19 'FoJAAAFAAAABgAAACwBAABAAHQAegByAGUAcwAuAGQAbABsACwALQAxADEAMgAAAAAAAA' +
20 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQACAAAAAAAAAAAAAABAAHQ' +
21 'AegByAGUAcwAuAGQAbABsACwALQAxADEAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
22 'AAAAAAAAAAAAAAADAAAAAgACAAAAAAAAAMT///8AAAAAf0Ob368FzAGdrCMAAAAAACw0o' +
23 '2DICMwBAQAAAAAAAABNAGEAawBlACAAVABlAHMAdAAgAEQAYQB0AGEAIABTAGUAcwBzAG' +
24 'kAbwBuAAAAYwA6AFwAcwByAGMAXABzAGEAdwBiAHUAYwBrAFwAdAByAHUAbgBrAFwAcwB' +
25 'yAGMAXABzAGEAdwBiAHUAYwBrAFwAbABvAGcAXwBsAGkAYgBcAHQAZQBzAHQAXwBkAGEA' +
26 'dABhAFwAaQBtAGEAZwBlAF8AZABhAHQAYQBfADMAMgBfAHYAMAAuAGUAdABsAAAA';
28 var kEventTraceHeaderPayload64bitV2 =
29 'AAABAAYBAQWxHQAABAAAADsuzRRYLM8BYWECAAAAAAABAAEAtgEAAAEAAAAIAAAAHwAAA' +
30 'KAGAAAAAAAAAAAAAAAAAAAAAAAALAEAAEAAdAB6AHIAZQBzAC4AZABsAGwALAAtADEAMQ' +
31 'AyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAIAAAAAAAA' +
32 'AAAAAAEAAdAB6AHIAZQBzAC4AZABsAGwALAAtADEAMQAxAAAAAAAAAAAAAAAAAAAAAAAA' +
33 'AAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAIAAAAAAAAAxP///wAAAABZQyWiwCvPAX1GG' +
34 'QAAAAAALWSZBFgszwEBAAAAAAAAAFIAZQBsAG8AZwBnAGUAcgAAAEMAOgBcAGsAZQByAG' +
35 '4AZQBsAC4AZQB0AGwAAAA=';
37 test('DecodeFields', function() {
39 var importer = new tracing.importer.EtwImporter('dummy', []);
40 var decoder = importer.decoder_;
41 var parser = new tracing.importer.etw.EventTraceParser(importer);
45 // Validate a version 2 32-bit payload.
47 guid: guid, opcode: kEventTraceHeaderOpcode, version: 2, is64: 0
49 decoder.reset(kEventTraceHeaderPayload32bitV2);
50 fields = parser.decodeFields(header, decoder);
52 assertTrue(fields.bufferSize == 65536);
53 assertTrue(fields.version == 83951878);
54 assertTrue(fields.providerVersion == 7600);
55 assertTrue(fields.numberOfProcessors == 16);
56 assertTrue(fields.endTime === '01cc08c861d52c11');
57 assertTrue(fields.timerResolution == 156001);
58 assertTrue(fields.maxFileSize == 100);
59 assertTrue(fields.logFileMode == 1);
60 assertTrue(fields.buffersWritten == 3);
61 assertTrue(fields.startBuffers == 1);
62 assertTrue(fields.pointerSize == 4);
63 assertTrue(fields.eventsLost == 0);
64 assertTrue(fields.cpuSpeed == 2394);
65 assertTrue(fields.loggerName == 5);
66 assertTrue(fields.logFileName == 6);
67 assertTrue(fields.timeZoneInformation.standardName === '@tzres.dll,-112');
68 assertTrue(fields.timeZoneInformation.daylightName === '@tzres.dll,-111');
69 assertTrue(fields.bootTime === '01cc05afdf9b437f');
70 assertTrue(fields.perfFreq === '000000000023ac9d');
71 assertTrue(fields.startTime === '01cc08c860a3342c');
72 assertTrue(fields.reservedFlags == 1);
73 assertTrue(fields.buffersLost == 0);
74 assertTrue(fields.sessionNameString === 'Make Test Data Session');
75 assertTrue(fields.logFileNameString ===
76 'c:\\src\\sawbuck\\trunk\\src\\sawbuck\\log_lib\\' +
77 'test_data\\image_data_32_v0.etl');
79 // Validate a version 2 64-bit payload.
81 guid: guid, opcode: kEventTraceHeaderOpcode, version: 2, is64: 1
83 decoder.reset(kEventTraceHeaderPayload64bitV2);
84 fields = parser.decodeFields(header, decoder);
86 assertTrue(fields.bufferSize == 65536);
87 assertTrue(fields.version == 83951878);
88 assertTrue(fields.providerVersion == 7601);
89 assertTrue(fields.numberOfProcessors == 4);
90 assertTrue(fields.endTime === '01cf2c5814cd2e3b');
91 assertTrue(fields.timerResolution == 156001);
92 assertTrue(fields.maxFileSize == 0);
93 assertTrue(fields.logFileMode == 0x10001);
94 assertTrue(fields.buffersWritten == 438);
95 assertTrue(fields.startBuffers == 1);
96 assertTrue(fields.pointerSize == 8);
97 assertTrue(fields.eventsLost == 31);
98 assertTrue(fields.cpuSpeed == 1696);
99 assertTrue(fields.loggerName == 0);
100 assertTrue(fields.logFileName == 0);
101 assertTrue(fields.timeZoneInformation.standardName === '@tzres.dll,-112');
102 assertTrue(fields.timeZoneInformation.daylightName === '@tzres.dll,-111');
103 assertTrue(fields.bootTime === '01cf2bc0a2254359');
104 assertTrue(fields.perfFreq === '000000000019467d');
105 assertTrue(fields.startTime === '01cf2c580499642d');
106 assertTrue(fields.reservedFlags == 1);
107 assertTrue(fields.buffersLost == 0);
108 assertTrue(fields.sessionNameString === 'Relogger');
109 assertTrue(fields.logFileNameString === 'C:\\kernel.etl');