Html程序  |  181行  |  6.05 KB

<!DOCTYPE HTML>
<html>
<!--
Copyright (c) 2012 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.
-->
<head i18n-values="dir:textdirection;">
<title>Track tests</title>
<style>
.container {
  border: 1px solid red;
}
</style>
<script src="/src/base.js"></script>
<script>
  base.require('unittest');
  base.require('test_utils');
  base.require('timeline_track_view');
  base.require('tracks.thread_track');
</script>
</head>
<body>
<script>
  'use strict';

  var Process = tracing.model.Process;
  var Selection = tracing.Selection;
  var Thread = tracing.model.Thread;
  var ThreadSlice = tracing.model.ThreadSlice;
  var ThreadTrack = tracing.tracks.ThreadTrack;
  var Viewport = tracing.TimelineViewport;
  var newAsyncSlice = test_utils.newAsyncSlice;
  var newAsyncSliceNamed = test_utils.newAsyncSliceNamed;
  var newSliceNamed = test_utils.newSliceNamed;

  function testSelectionHitTestingWithThreadTrack() {
    var model = new tracing.Model();
    var p1 = model.getOrCreateProcess(1);
    var t1 = p1.getOrCreateThread(1);
    t1.pushSlice(new tracing.model.ThreadSlice('', 'a', 0, 1, {}, 4));
    t1.pushSlice(new tracing.model.ThreadSlice('', 'b', 0, 5.1, {}, 4));

    var testEl = this.addHTMLOutput();
    testEl.style.width = '600px';
    var track = new ThreadTrack();
    testEl.appendChild(track);
    track.heading = 'testSelectionHitTestingWithThreadTrack';
    track.headingWidth = '100px';
    track.thread = t1;

    var y = track.getBoundingClientRect().top;
    var h = track.getBoundingClientRect().height;
    var wW = 10;
    var vW = track.firstCanvas.getBoundingClientRect().width;
    track.viewport = new Viewport(testEl);
    track.viewport.xSetWorldBounds(0, wW, vW);

    var selection = new Selection();
    track.addIntersectingItemsToSelection((1.5/wW)*vW, y, selection);
    assertEquals(t1.slices[0], selection[0].slice);

    var selection = new Selection();
    track.addIntersectingItemsInRangeToSelection(
        (1.5/wW)*vW, (1.8/wW)*vW,
        y, y + h, selection);
    assertEquals(t1.slices[0], selection[0].slice);
  }

  function testThreadTrackWithRegularSlices() {
    var testEl = this.addHTMLOutput();
    var track = ThreadTrack();
    testEl.appendChild(track);
    track.heading = 'testThreadTrackWithRegularSlices';
    var thread = new Thread(new Process(7), 1);
    thread.pushSlices([
        new ThreadSlice('', 'a', 0, 1, {}, 1),
        new ThreadSlice('', 'b', 1, 2.1, {}, 4.8),
        new ThreadSlice('', 'b', 1, 7, {}, 0.5),
        new ThreadSlice('', 'c', 2, 7.6, {}, 0.4),
        new ThreadSlice('', 'd', 3, 1.1, {}, 0.8),
        new ThreadSlice('', 'e', 4, 7.1, {}, 0.3)
    ]);
    thread.updateBounds();
    track.heading = 'thread regular';
    track.headingWidth = '150px';
    track.toolTip = thread.userFriendlyDetails + ':';
    track.thread = thread;
    track.viewport = new Viewport(testEl);
    track.viewport.xSetWorldBounds(0, 8.2, track.clientWidth);
  }

  function testThreadTrackWithTallSlices() {
    var testEl = this.addHTMLOutput();
    var track = ThreadTrack();
    testEl.appendChild(track);
    track.heading = 'testThreadTrackWithTallSlices';
    var thread = new Thread(new Process(7), 1);
    thread.pushSlices([
      new ThreadSlice('', 'a', 1, 0, {}, 1),
      new ThreadSlice('', 'b', 2, 0.1, {}, 0.8),
      new ThreadSlice('', 'c', 3, 0.15, {}, 0.70),
      new ThreadSlice('', 'd', 4, 0.20, {}, 0.50),
      new ThreadSlice('', 'e', 5, 0.30, {}, 0.28),
      new ThreadSlice('', 'e', 6, 0.35, {}, 0.20),
      new ThreadSlice('', 'f', 7, 0.40, {}, 0.10)
    ]);
    thread.updateBounds();
    track.heading = 'thread tall';
    track.headingWidth = '150px';
    track.toolTip = thread.userFriendlyDetails + ':';
    track.thread = thread;
    track.viewport = new Viewport(testEl);
    track.viewport.xSetWorldBounds(0, 1.1, track.clientWidth);
  }

  function testThreadTrackWithRegularAndAsyncSlices() {
    var testEl = this.addHTMLOutput();
    var track = ThreadTrack();
    testEl.appendChild(track);
    var thread = new Thread(new Process(7), 1);
    thread.pushSlices([
        new ThreadSlice('', 'a', 0, 1, {}, 1),
        new ThreadSlice('', 'b', 1, 2.1, {}, 4.8),
        new ThreadSlice('', 'b', 1, 7, {}, 0.5),
        new ThreadSlice('', 'c', 2, 7.6, {}, 0.4),
        new ThreadSlice('', 'd', 3, 1.1, {}, 0.8),
        new ThreadSlice('', 'e', 4, 7.1, {}, 0.3)
    ]);
    thread.asyncSlices.push(newAsyncSlice(1.2, 7.2 - 1.2, thread, thread));
    thread.asyncSlices.push(newAsyncSlice(1.3, 7.3 - 1.3, thread, thread));
    thread.updateBounds();
    track.heading = 'thread regular + async';
    track.headingWidth = '150px';
    track.toolTip = thread.userFriendlyDetails + ':';
    track.thread = thread;
    track.viewport = new Viewport(testEl);
    track.viewport.xSetWorldBounds(0, 8.15, track.clientWidth);
  }

  function testFilterThreadSlices() {
    var thread = new Thread(new Process(7), 1);
    thread.pushSlice(newSliceNamed('a', 0, 0));
    thread.asyncSlices.push(newAsyncSliceNamed('a', 0, 5, t, t));

    var t = new ThreadTrack();
    t.thread = thread;

    assertTrue(t.tracks_[1].visible);
    assertEquals(1, t.tracks_[1].tracks_.length);
    assertTrue(t.tracks_[1].visible);
    assertEquals(1, t.tracks_[2].tracks_.length);

    t.categoryFilter = new tracing.TitleFilter('x');
    assertFalse(t.tracks_[1].visible);
    assertFalse(t.tracks_[1].visible);

    t.categoryFilter = new tracing.TitleFilter('a');
    assertTrue(t.tracks_[1].visible);
    assertEquals(1, t.tracks_[1].tracks_.length);
    assertTrue(t.tracks_[1].visible);
    assertEquals(1, t.tracks_[2].tracks_.length);
  }

  function testSampleThreadSlices() {
    var thread = new Thread(new Process(7), 1);
    thread.addSample('a', 'b', 0);
    thread.addSample('a', 'c', 5);
    thread.addSample('aa', 'd', 10);
    thread.addSample('aa', 'e', 15);
    var t = new ThreadTrack();
    t.thread = thread;
    // Track is visible.
    assertTrue(t.tracks_[3].visible);
    // Track has 4 slices.
    assertEquals(t.tracks_[3].slices.length, 4);
  }
</script>
</body>
</html>