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