blob: c621800af8386888b8dfb6dbd058a66409312e6e [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 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="/base/base.html">
<link rel="import" href="/base/xhr.html">
<link rel="import" href="/base/iteration_helpers.html">
<link rel="import" href="/extras/deep_reports/scalar_value.html">
<link rel="import" href="/extras/deep_reports/rail_deep_reporter.html">
<link rel="import" href="/extras/audits/chrome_model_helper.html">
<script>
'use strict';
tv.exportTo('tv.e.deep_reports', function() {
/**
* Runs deep reports on the provided files, and pushes telemetry-style
* values to the results object.
*/
function main(results, filesInDir) {
var lastP = new Promise(function(resolve) { resolve(); });
filesInDir.forEach(function(filename) {
// TODO(nduca): Make this like telemetry page.
var page = {
url: filename
};
lastP = lastP.then(function() {
return loadTraceModelFromFileAsync(filename);
});
lastP = lastP.then(function(model) {
processModel(results, page, model);
});
});
return lastP;
}
function loadTraceModelFromFileAsync(filename) {
return tv.b.getAsync(filename).then(function(trace) {
var io = new tv.c.ImportOptions();
io.shiftWorldToZero = true;
io.pruneEmptyContainers = false;
var m = new tv.c.TraceModel();
try {
m.importTraces([trace], io);
} catch(e) {
throw new Error('While loading ' + filename + ' got: ' + e.toString());
}
return m;
});
}
function processModel(results, page, model) {
/* TODO(nduca): Need eakeufner's Telemetry value system here so we can
* be smart in aggregating results.
*/
results.addValue(tv.e.deep_reports.ScalarValue.fromDict(page, {
type: 'scalar',
name: 'numProcesses', units: 'processes', important: true,
value: model.numProcesses
}));
tv.e.deep_reports.RAILDeepReporter.addResultsForModel(results, page, model);
if (tv.e.audits.ChromeModelHelper.supportsModel(model)) {
var helper = new tv.e.audits.ChromeModelHelper(model);
if (false) {
var latencyEvents = helper.browser.getLatencyEventsInRange(model.bounds);
window.allTitles = window.allTitles || {};
latencyEvents.forEach(function(event) {
window.allTitles[event.title] = true;
});
}
}
}
return {
main: main
};
});
</script>