counter_track_perf_test.html revision 4a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724
1<!DOCTYPE html> 2<!-- 3Copyright (c) 2014 The Chromium Authors. All rights reserved. 4Use of this source code is governed by a BSD-style license that can be 5found in the LICENSE file. 6--> 7 8<link rel="import" href="/tracing/ui/extras/full_config.html"> 9<link rel="import" href="/tracing/model/model.html"> 10 11<script> 12'use strict'; 13 14tr.b.unittest.testSuite(function() { 15 function getSynchronous(url) { 16 var req = new XMLHttpRequest(); 17 req.open('GET', url, false); 18 // Without the mime type specified like this, the file's bytes are not 19 // retrieved correctly. 20 req.overrideMimeType('text/plain; charset=x-user-defined'); 21 req.send(null); 22 return req.responseText; 23 } 24 25 var ZOOM_STEPS = 10; 26 var ZOOM_COEFFICIENT = 1.2; 27 28 var model = undefined; 29 30 var drawingContainer; 31 var viewportDiv; 32 33 var viewportWidth; 34 var worldMid; 35 36 var startScale = undefined; 37 38 function timedCounterTrackPerfTest(name, testFn, iterations) { 39 40 function setUpOnce() { 41 if (model !== undefined) 42 return; 43 var fileUrl = '/test_data/counter_tracks.html'; 44 var events = getSynchronous(fileUrl); 45 model = new tr.Model(); 46 model.importTraces([events], true); 47 } 48 49 function setUp() { 50 setUpOnce(); 51 viewportDiv = document.createElement('div'); 52 53 var viewport = new tr.ui.TimelineViewport(viewportDiv); 54 55 drawingContainer = new tr.ui.tracks.DrawingContainer(viewport); 56 viewport.modelTrackContainer = drawingContainer; 57 58 var modelTrack = new tr.ui.tracks.ModelTrack(viewport); 59 drawingContainer.appendChild(modelTrack); 60 61 modelTrack.model = model; 62 63 viewportDiv.appendChild(drawingContainer); 64 65 this.addHTMLOutput(viewportDiv); 66 67 // Size the canvas. 68 drawingContainer.updateCanvasSizeIfNeeded_(); 69 70 // Size the viewport. 71 viewportWidth = drawingContainer.canvas.width; 72 var min = model.bounds.min; 73 var range = model.bounds.range; 74 worldMid = min + range / 2; 75 76 var boost = range * 0.15; 77 var dt = new tr.ui.TimelineDisplayTransform(); 78 dt.xSetWorldBounds(min - boost, min + range + boost, viewportWidth); 79 modelTrack.viewport.setDisplayTransformImmediately(dt); 80 startScale = dt.scaleX; 81 82 // Select half of the counter samples. 83 for (var pid in model.processes) { 84 var counters = model.processes[pid].counters; 85 for (var cid in counters) { 86 var series = counters[cid].series; 87 for (var i = 0; i < series.length; i++) { 88 var samples = series[i].samples; 89 for (var j = Math.floor(samples.length / 2); j < samples.length; 90 j++) { 91 samples[j].selectionState = 92 tr.model.SelectionState.SELECTED; 93 } 94 } 95 } 96 } 97 }; 98 99 function tearDown() { 100 viewportDiv.innerText = ''; 101 drawingContainer = undefined; 102 } 103 104 timedPerfTest(name, testFn, { 105 setUp: setUp, 106 tearDown: tearDown, 107 iterations: iterations 108 }); 109 } 110 111 var n110100 = [1, 10, 100]; 112 n110100.forEach(function(val) { 113 timedCounterTrackPerfTest( 114 'draw_softwareCanvas_' + val, 115 function() { 116 var scale = startScale; 117 for (var i = 0; i < ZOOM_STEPS; i++) { 118 var dt = drawingContainer.viewport.currentDisplayTransform.clone(); 119 scale *= ZOOM_COEFFICIENT; 120 dt.scaleX = scale; 121 dt.xPanWorldPosToViewPos(worldMid, 'center', viewportWidth); 122 drawingContainer.viewport.setDisplayTransformImmediately(dt); 123 drawingContainer.draw_(); 124 } 125 }, val); 126 }); 127}); 128</script> 129 130