Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / etw / eventtrace_parser.js
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.
4
5 'use strict';
6
7 /**
8  * @fileoverview Parses EventTrace events in the Windows event trace format.
9  */
10 tvcm.require('tracing.importer.etw.parser');
11
12 tvcm.exportTo('tracing.importer.etw', function() {
13
14   var Parser = tracing.importer.etw.Parser;
15
16   // Constants for EventTrace events.
17   var guid = '68FDD900-4A3E-11D1-84F4-0000F80464E3';
18   var kEventTraceHeaderOpcode = 0;
19
20   /**
21    * Parses Windows EventTrace trace events.
22    * @constructor
23    */
24   function EventTraceParser(importer) {
25     Parser.call(this, importer);
26
27     // Register handlers.
28     importer.registerEventHandler(guid, kEventTraceHeaderOpcode,
29         EventTraceParser.prototype.decodeHeader.bind(this));
30   }
31
32   EventTraceParser.prototype = {
33     __proto__: Parser.prototype,
34
35     decodeFields: function(header, decoder) {
36       if (header.version != 2)
37         throw new Error('Incompatible EventTrace event version.');
38
39       var bufferSize = decoder.decodeUInt32();
40       var version = decoder.decodeUInt32();
41       var providerVersion = decoder.decodeUInt32();
42       var numberOfProcessors = decoder.decodeUInt32();
43       var endTime = decoder.decodeUInt64ToString();
44       var timerResolution = decoder.decodeUInt32();
45       var maxFileSize = decoder.decodeUInt32();
46       var logFileMode = decoder.decodeUInt32();
47       var buffersWritten = decoder.decodeUInt32();
48       var startBuffers = decoder.decodeUInt32();
49       var pointerSize = decoder.decodeUInt32();
50       var eventsLost = decoder.decodeUInt32();
51       var cpuSpeed = decoder.decodeUInt32();
52       var loggerName = decoder.decodeUInteger(header.is64);
53       var logFileName = decoder.decodeUInteger(header.is64);
54       var timeZoneInformation = decoder.decodeTimeZoneInformation();
55       var padding = decoder.decodeUInt32();
56       var bootTime = decoder.decodeUInt64ToString();
57       var perfFreq = decoder.decodeUInt64ToString();
58       var startTime = decoder.decodeUInt64ToString();
59       var reservedFlags = decoder.decodeUInt32();
60       var buffersLost = decoder.decodeUInt32();
61       var sessionNameString = decoder.decodeW16String();
62       var logFileNameString = decoder.decodeW16String();
63
64       return {
65         bufferSize: bufferSize,
66         version: version,
67         providerVersion: providerVersion,
68         numberOfProcessors: numberOfProcessors,
69         endTime: endTime,
70         timerResolution: timerResolution,
71         maxFileSize: maxFileSize,
72         logFileMode: logFileMode,
73         buffersWritten: buffersWritten,
74         startBuffers: startBuffers,
75         pointerSize: pointerSize,
76         eventsLost: eventsLost,
77         cpuSpeed: cpuSpeed,
78         loggerName: loggerName,
79         logFileName: logFileName,
80         timeZoneInformation: timeZoneInformation,
81         bootTime: bootTime,
82         perfFreq: perfFreq,
83         startTime: startTime,
84         reservedFlags: reservedFlags,
85         buffersLost: buffersLost,
86         sessionNameString: sessionNameString,
87         logFileNameString: logFileNameString
88       };
89     },
90
91     decodeHeader: function(header, decoder) {
92       var fields = this.decodeFields(header, decoder);
93       // TODO(etienneb): Update the TraceModel with |fields|.
94       return true;
95     }
96
97   };
98
99   Parser.registerSubtype(EventTraceParser);
100
101   return {
102     EventTraceParser: EventTraceParser
103   };
104 });