frame_track_test.html revision cef7893435aa41160dd1255c43cb8498279738cc
1<!DOCTYPE html>
2<!--
3Copyright (c) 2015 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/core/test_utils.html">
9<link rel="import" href="/tracing/model/event_set.html">
10<link rel="import" href="/tracing/model/frame.html">
11<link rel="import" href="/tracing/ui/timeline_viewport.html">
12<link rel="import" href="/tracing/ui/tracks/drawing_container.html">
13<link rel="import" href="/tracing/ui/tracks/frame_track.html">
14
15<script>
16'use strict';
17
18tr.b.unittest.testSuite(function() {
19  var Frame = tr.model.Frame;
20  var FrameTrack = tr.ui.tracks.FrameTrack;
21  var EventSet = tr.model.EventSet;
22  var SelectionState = tr.model.SelectionState;
23  var Viewport = tr.ui.TimelineViewport;
24
25  var createFrames = function() {
26    var frames = undefined;
27    var model = tr.c.TestUtils.newModel(function(model) {
28      var process = model.getOrCreateProcess(1);
29      var thread = process.getOrCreateThread(1);
30      for (var i = 1; i < 5; i++) {
31        var slice = tr.c.TestUtils.newSliceEx(
32            {title: 'work for frame', start: i * 20, duration: 10});
33        thread.sliceGroup.pushSlice(slice);
34        var events = [slice];
35        var threadTimeRanges =
36            [{thread: thread, start: slice.start, end: slice.end}];
37        process.frames.push(new Frame(events, threadTimeRanges));
38      }
39      frames = process.frames;
40    });
41    return frames;
42  };
43
44  test('instantiate', function() {
45    var frames = createFrames();
46    frames[1].selectionState = SelectionState.SELECTED;
47
48    var div = document.createElement('div');
49    var viewport = new Viewport(div);
50    var drawingContainer = new tr.ui.tracks.DrawingContainer(viewport);
51    div.appendChild(drawingContainer);
52
53    var track = FrameTrack(viewport);
54    drawingContainer.appendChild(track);
55
56    this.addHTMLOutput(div);
57    drawingContainer.invalidate();
58
59    track.frames = frames;
60    var dt = new tr.ui.TimelineDisplayTransform();
61    dt.xSetWorldBounds(0, 50, track.clientWidth);
62    track.viewport.setDisplayTransformImmediately(dt);
63
64    assert.equal(track.items[0].start, 20);
65  });
66
67  test('modelMapping', function() {
68    var frames = createFrames();
69
70    var div = document.createElement('div');
71    var viewport = new Viewport(div);
72    var track = FrameTrack(viewport);
73    track.frames = frames;
74
75    var a0 = track.items[0].modelItem;
76    assert.equal(a0, frames[0]);
77  });
78
79  test('selectionMapping', function() {
80    var frames = createFrames();
81
82    var div = document.createElement('div');
83    var viewport = new Viewport(div);
84    var track = FrameTrack(viewport);
85    track.frames = frames;
86
87    var selection = new EventSet();
88    track.items[0].addToSelection(selection);
89
90    // select both frame, but not its component slice
91    assert.equal(selection.length, 1);
92
93    var frameCount = 0;
94    var eventCount = 0;
95    selection.forEach(function(event) {
96      if (event instanceof Frame) {
97        assert.equal(event, frames[0]);
98        frameCount++;
99      } else
100        eventCount++;
101    });
102    assert.equal(frameCount, 1);
103    assert.equal(eventCount, 0);
104  });
105});
106</script>
107