<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/extras/importer/etw/parser.html">

<script>
'use strict';

/**
 * @fileoverview Parses EventTrace events in the Windows event trace format.
 */

tr.exportTo('tr.e.importer.etw', function() {
  var Parser = tr.e.importer.etw.Parser;

  // Constants for EventTrace events.
  var guid = '68FDD900-4A3E-11D1-84F4-0000F80464E3';
  var kEventTraceHeaderOpcode = 0;

  /**
   * Parses Windows EventTrace trace events.
   * @constructor
   */
  function EventTraceParser(importer) {
    Parser.call(this, importer);

    // Register handlers.
    importer.registerEventHandler(guid, kEventTraceHeaderOpcode,
        EventTraceParser.prototype.decodeHeader.bind(this));
  }

  EventTraceParser.prototype = {
    __proto__: Parser.prototype,

    decodeFields: function(header, decoder) {
      if (header.version != 2)
        throw new Error('Incompatible EventTrace event version.');

      var bufferSize = decoder.decodeUInt32();
      var version = decoder.decodeUInt32();
      var providerVersion = decoder.decodeUInt32();
      var numberOfProcessors = decoder.decodeUInt32();
      var endTime = decoder.decodeUInt64ToString();
      var timerResolution = decoder.decodeUInt32();
      var maxFileSize = decoder.decodeUInt32();
      var logFileMode = decoder.decodeUInt32();
      var buffersWritten = decoder.decodeUInt32();
      var startBuffers = decoder.decodeUInt32();
      var pointerSize = decoder.decodeUInt32();
      var eventsLost = decoder.decodeUInt32();
      var cpuSpeed = decoder.decodeUInt32();
      var loggerName = decoder.decodeUInteger(header.is64);
      var logFileName = decoder.decodeUInteger(header.is64);
      var timeZoneInformation = decoder.decodeTimeZoneInformation();
      var padding = decoder.decodeUInt32();
      var bootTime = decoder.decodeUInt64ToString();
      var perfFreq = decoder.decodeUInt64ToString();
      var startTime = decoder.decodeUInt64ToString();
      var reservedFlags = decoder.decodeUInt32();
      var buffersLost = decoder.decodeUInt32();
      var sessionNameString = decoder.decodeW16String();
      var logFileNameString = decoder.decodeW16String();

      return {
        bufferSize: bufferSize,
        version: version,
        providerVersion: providerVersion,
        numberOfProcessors: numberOfProcessors,
        endTime: endTime,
        timerResolution: timerResolution,
        maxFileSize: maxFileSize,
        logFileMode: logFileMode,
        buffersWritten: buffersWritten,
        startBuffers: startBuffers,
        pointerSize: pointerSize,
        eventsLost: eventsLost,
        cpuSpeed: cpuSpeed,
        loggerName: loggerName,
        logFileName: logFileName,
        timeZoneInformation: timeZoneInformation,
        bootTime: bootTime,
        perfFreq: perfFreq,
        startTime: startTime,
        reservedFlags: reservedFlags,
        buffersLost: buffersLost,
        sessionNameString: sessionNameString,
        logFileNameString: logFileNameString
      };
    },

    decodeHeader: function(header, decoder) {
      var fields = this.decodeFields(header, decoder);
      // TODO(etienneb): Update the Model with |fields|.
      return true;
    }

  };

  Parser.register(EventTraceParser);

  return {
    EventTraceParser: EventTraceParser
  };
});
</script>

