blob: 206fefbd3e74b67e19c292e8ab36d4f0beda5636 [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="/perf_insights/value/value.html">
<link rel="import"href="/tracing/base/range.html">
<link rel="import"href="/tracing/base/units/histogram.html">
<link rel="import"href="/tracing/base/units/units.html">
<script>
tr.exportTo('pi.m', function() {
function traceStatsFunction(results, run_info, model) {
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.b.u.Histogram.createLinear(
tr.b.u.Units.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()
};
results.addValue(new pi.v.DictValue(run_info, 'stats', stats));
}
pi.FunctionRegistry.register(traceStatsFunction);
//Exporting for tests.
return {
traceStatsFunctionForTest: traceStatsFunction
};
});
</script>