blob: 9c6992ca864363fd89eb6b4fb0f1c6bc3b2b3ce1 [file] [log] [blame]
<!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>