Home | History | Annotate | Download | only in etw
      1 <!DOCTYPE html>
      2 <!--
      3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
      4 Use of this source code is governed by a BSD-style license that can be
      5 found in the LICENSE file.
      6 -->
      7 
      8 <link rel="import" href="/tracing/extras/importer/etw/parser.html">
      9 
     10 <script>
     11 'use strict';
     12 
     13 /**
     14  * @fileoverview Parses EventTrace events in the Windows event trace format.
     15  */
     16 
     17 tr.exportTo('tr.e.importer.etw', function() {
     18   var Parser = tr.e.importer.etw.Parser;
     19 
     20   // Constants for EventTrace events.
     21   var guid = '68FDD900-4A3E-11D1-84F4-0000F80464E3';
     22   var kEventTraceHeaderOpcode = 0;
     23 
     24   /**
     25    * Parses Windows EventTrace trace events.
     26    * @constructor
     27    */
     28   function EventTraceParser(importer) {
     29     Parser.call(this, importer);
     30 
     31     // Register handlers.
     32     importer.registerEventHandler(guid, kEventTraceHeaderOpcode,
     33         EventTraceParser.prototype.decodeHeader.bind(this));
     34   }
     35 
     36   EventTraceParser.prototype = {
     37     __proto__: Parser.prototype,
     38 
     39     decodeFields: function(header, decoder) {
     40       if (header.version != 2)
     41         throw new Error('Incompatible EventTrace event version.');
     42 
     43       var bufferSize = decoder.decodeUInt32();
     44       var version = decoder.decodeUInt32();
     45       var providerVersion = decoder.decodeUInt32();
     46       var numberOfProcessors = decoder.decodeUInt32();
     47       var endTime = decoder.decodeUInt64ToString();
     48       var timerResolution = decoder.decodeUInt32();
     49       var maxFileSize = decoder.decodeUInt32();
     50       var logFileMode = decoder.decodeUInt32();
     51       var buffersWritten = decoder.decodeUInt32();
     52       var startBuffers = decoder.decodeUInt32();
     53       var pointerSize = decoder.decodeUInt32();
     54       var eventsLost = decoder.decodeUInt32();
     55       var cpuSpeed = decoder.decodeUInt32();
     56       var loggerName = decoder.decodeUInteger(header.is64);
     57       var logFileName = decoder.decodeUInteger(header.is64);
     58       var timeZoneInformation = decoder.decodeTimeZoneInformation();
     59       var padding = decoder.decodeUInt32();
     60       var bootTime = decoder.decodeUInt64ToString();
     61       var perfFreq = decoder.decodeUInt64ToString();
     62       var startTime = decoder.decodeUInt64ToString();
     63       var reservedFlags = decoder.decodeUInt32();
     64       var buffersLost = decoder.decodeUInt32();
     65       var sessionNameString = decoder.decodeW16String();
     66       var logFileNameString = decoder.decodeW16String();
     67 
     68       return {
     69         bufferSize: bufferSize,
     70         version: version,
     71         providerVersion: providerVersion,
     72         numberOfProcessors: numberOfProcessors,
     73         endTime: endTime,
     74         timerResolution: timerResolution,
     75         maxFileSize: maxFileSize,
     76         logFileMode: logFileMode,
     77         buffersWritten: buffersWritten,
     78         startBuffers: startBuffers,
     79         pointerSize: pointerSize,
     80         eventsLost: eventsLost,
     81         cpuSpeed: cpuSpeed,
     82         loggerName: loggerName,
     83         logFileName: logFileName,
     84         timeZoneInformation: timeZoneInformation,
     85         bootTime: bootTime,
     86         perfFreq: perfFreq,
     87         startTime: startTime,
     88         reservedFlags: reservedFlags,
     89         buffersLost: buffersLost,
     90         sessionNameString: sessionNameString,
     91         logFileNameString: logFileNameString
     92       };
     93     },
     94 
     95     decodeHeader: function(header, decoder) {
     96       var fields = this.decodeFields(header, decoder);
     97       // TODO(etienneb): Update the Model with |fields|.
     98       return true;
     99     }
    100 
    101   };
    102 
    103   Parser.register(EventTraceParser);
    104 
    105   return {
    106     EventTraceParser: EventTraceParser
    107   };
    108 });
    109 </script>
    110 
    111