<!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>