blob: de62198f824f19973ff5febb79615013e2744eee [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2014 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="/trace_viewer.html">
<link rel="import" href="/extras/full_config.html">
<link rel="import" href="/model/model.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
function getSynchronous(url) {
var req = new XMLHttpRequest();
req.open('GET', url, false);
// Without the mime type specified like this, the file's bytes are not
// retrieved correctly.
req.overrideMimeType('text/plain; charset=x-user-defined');
req.send(null);
return req.responseText;
}
var ZOOM_STEPS = 10;
var ZOOM_COEFFICIENT = 1.2;
var model = undefined;
var drawingContainer;
var viewportDiv;
var viewportWidth;
var worldMid;
var startScale = undefined;
function timedCounterTrackPerfTest(name, testFn, iterations) {
function setUpOnce() {
if (model !== undefined)
return;
var fileUrl = '/test_data/counter_tracks.html';
var events = getSynchronous(fileUrl);
model = new tr.Model();
model.importTraces([events], true);
}
function setUp() {
setUpOnce();
viewportDiv = document.createElement('div');
var viewport = new tr.c.TimelineViewport(viewportDiv);
drawingContainer = new tr.c.tracks.DrawingContainer(viewport);
viewport.modelTrackContainer = drawingContainer;
var modelTrack = new tr.c.tracks.ModelTrack(viewport);
drawingContainer.appendChild(modelTrack);
modelTrack.model = model;
viewportDiv.appendChild(drawingContainer);
this.addHTMLOutput(viewportDiv);
// Size the canvas.
drawingContainer.updateCanvasSizeIfNeeded_();
// Size the viewport.
viewportWidth = drawingContainer.canvas.width;
var min = model.bounds.min;
var range = model.bounds.range;
worldMid = min + range / 2;
var boost = range * 0.15;
var dt = new tr.c.TimelineDisplayTransform();
dt.xSetWorldBounds(min - boost, min + range + boost, viewportWidth);
modelTrack.viewport.setDisplayTransformImmediately(dt);
startScale = dt.scaleX;
// Select half of the counter samples.
for (var pid in model.processes) {
var counters = model.processes[pid].counters;
for (var cid in counters) {
var series = counters[cid].series;
for (var i = 0; i < series.length; i++) {
var samples = series[i].samples;
for (var j = Math.floor(samples.length / 2); j < samples.length;
j++) {
samples[j].selectionState =
tr.model.SelectionState.SELECTED;
}
}
}
}
};
function tearDown() {
viewportDiv.innerText = '';
drawingContainer = undefined;
}
timedPerfTest(name, testFn, {
setUp: setUp,
tearDown: tearDown,
iterations: iterations
});
}
var n110100 = [1, 10, 100];
n110100.forEach(function(val) {
timedCounterTrackPerfTest(
'draw_softwareCanvas_' + val,
function() {
var scale = startScale;
for (var i = 0; i < ZOOM_STEPS; i++) {
var dt = drawingContainer.viewport.currentDisplayTransform.clone();
scale *= ZOOM_COEFFICIENT;
dt.scaleX = scale;
dt.xPanWorldPosToViewPos(worldMid, 'center', viewportWidth);
drawingContainer.viewport.setDisplayTransformImmediately(dt);
drawingContainer.draw_();
}
}, val);
});
});
</script>