<!DOCTYPE html>
<!--
Copyright 2015 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="/tracing/base/range.html">
<link rel="import" href="/tracing/base/unit.html">
<link rel="import" href="/tracing/mre/function_handle.html">
<link rel="import" href="/tracing/value/histogram.html">

<script>
'use strict';

tr.exportTo('pi.m', function() {
  var COUNT_BOUNDARIES = tr.v.HistogramBinBoundaries.createLinear(0, 5e4, 20);

  function traceStatsFunction(result, model) {
    var canonicalUrl = model.canonicalUrl;
    var eventCount = 0;
    var firstTime = Number.MAX_VALUE;
    var lastTime = 0;
    var categories = {};

    var seconds_counts = {};
    for (var event of model.getDescendantEvents()) {
      eventCount += 1;
      if (event.start < firstTime)
        firstTime = event.start;

      var eventEnd = event.start + event.duration;
      if (eventEnd > lastTime)
        lastTime = eventEnd;

      if (categories[event.category] === undefined)
        categories[event.category] = 0;

      categories[event.category]++;

      var second = Math.round(event.start / 1000);
      if (seconds_counts[second] === undefined)
        seconds_counts[second] = 0;

      seconds_counts[second]++;
    }

    var histogram = new tr.v.Histogram(
        tr.b.Unit.byName.count, COUNT_BOUNDARIES);

    for (var second in seconds_counts)
      histogram.add(seconds_counts[second]);

    var stats = {
      totalEvents: eventCount,
      firstTimeInMS: firstTime,
      lastTimeInMS: lastTime,
      durationInMS: lastTime - firstTime,
      eventsPerSecond: eventCount / (lastTime - firstTime) * 1000,
      categories: categories,
      events_seconds: histogram.asDict()
    };

    result.addPair('stats', stats);
  }

  tr.mre.FunctionRegistry.register(traceStatsFunction);

  //Exporting for tests.
  return {
    traceStatsFunctionForTest: traceStatsFunction
  };
});
</script>
