<!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="/perf_insights/function_handle.html">
<link rel="import" href="/tracing/base/range.html">
<link rel="import" href="/tracing/value/numeric.html">
<link rel="import" href="/tracing/value/unit.html">

<script>
'use strict';

tr.exportTo('pi.m', function() {
  function traceStatsFunction(result, model) {
    var canonicalUrl = model.canonicalUrlThatCreatedThisTrace;
    var eventCount = 0;
    var firstTime = Number.MAX_VALUE;
    var lastTime = 0;
    var categories = {};

    var seconds_counts = {};
    model.iterateAllEvents(function(event) {
      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 = tr.v.Numeric.createLinear(
        tr.v.Unit.byName.unitlessNumber,
        tr.b.Range.fromExplicitRange(0, 50000),
        20);

    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);
  }

  pi.FunctionRegistry.register(traceStatsFunction);

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