| <!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="/core/trace_model/trace_model.html"> |
| <link rel="import" href="/extras/full_config.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tv.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 tv.c.TraceModel(); |
| model.importTraces([events], true); |
| } |
| |
| function setUp() { |
| setUpOnce(); |
| viewportDiv = document.createElement('div'); |
| |
| var viewport = new tv.c.TimelineViewport(viewportDiv); |
| |
| drawingContainer = new tv.c.tracks.DrawingContainer(viewport); |
| viewport.modelTrackContainer = drawingContainer; |
| |
| var modelTrack = new tv.c.tracks.TraceModelTrack(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 tv.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 = |
| tv.c.trace_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> |
| |