1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tracing.test_utils');
8 tvcm.require('tracing.timeline_track_view');
9 tvcm.require('tracing.tracks.thread_track');
10 tvcm.require('tvcm.ui.dom_helpers');
12 tvcm.unittest.testSuite('tracing.tracks.thread_track_test', function() {
13 var Process = tracing.trace_model.Process;
14 var Selection = tracing.Selection;
15 var Thread = tracing.trace_model.Thread;
16 var ThreadSlice = tracing.trace_model.ThreadSlice;
17 var ThreadTrack = tracing.tracks.ThreadTrack;
18 var Viewport = tracing.TimelineViewport;
19 var newAsyncSlice = tracing.test_utils.newAsyncSlice;
20 var newAsyncSliceNamed = tracing.test_utils.newAsyncSliceNamed;
21 var newSliceNamed = tracing.test_utils.newSliceNamed;
23 test('selectionHitTestingWithThreadTrack', function() {
24 var model = new tracing.TraceModel();
25 var p1 = model.getOrCreateProcess(1);
26 var t1 = p1.getOrCreateThread(1);
27 t1.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 4));
28 t1.sliceGroup.pushSlice(new ThreadSlice('', 'b', 0, 5.1, {}, 4));
30 var testEl = document.createElement('div');
31 testEl.appendChild(tvcm.ui.createScopedStyle('heading { width: 100px; }'));
32 testEl.style.width = '600px';
34 var viewport = new Viewport(testEl);
35 var drawingContainer = new tracing.tracks.DrawingContainer(viewport);
36 testEl.appendChild(drawingContainer);
38 var track = new ThreadTrack(viewport);
39 drawingContainer.appendChild(track);
40 drawingContainer.updateCanvasSizeIfNeeded_();
43 var y = track.getBoundingClientRect().top;
44 var h = track.getBoundingClientRect().height;
46 var vW = drawingContainer.canvas.getBoundingClientRect().width;
47 var dt = new tracing.TimelineDisplayTransform();
48 dt.xSetWorldBounds(0, wW, vW);
49 track.viewport.setDisplayTransformImmediately(dt);
51 var selection = new Selection();
52 var x = (1.5 / wW) * vW;
53 track.addIntersectingItemsInRangeToSelection(x, x + 1, y, y + 1, selection);
54 assertEquals(t1.sliceGroup.slices[0], selection[0]);
56 var selection = new Selection();
57 track.addIntersectingItemsInRangeToSelection(
58 (1.5 / wW) * vW, (1.8 / wW) * vW,
60 assertEquals(t1.sliceGroup.slices[0], selection[0]);
63 test('filterThreadSlices', function() {
64 var model = new tracing.TraceModel();
65 var thread = new Thread(new Process(model, 7), 1);
66 thread.sliceGroup.pushSlice(newSliceNamed('a', 0, 0));
67 thread.asyncSliceGroup.push(newAsyncSliceNamed('a', 0, 5, t, t));
69 var t = new ThreadTrack(new tracing.TimelineViewport());
72 assertEquals(t.tracks_.length, 2);
73 assertTrue(t.tracks_[0] instanceof tracing.tracks.AsyncSliceGroupTrack);
74 assertTrue(t.tracks_[1] instanceof tracing.tracks.SliceGroupTrack);
77 test('sampleThreadSlices', function() {
78 var model = new tracing.TraceModel();
79 var thread = new Thread(new Process(model, 7), 1);
80 thread.addSample('a', 'b', 0);
81 thread.addSample('a', 'c', 5);
82 thread.addSample('aa', 'd', 10);
83 thread.addSample('aa', 'e', 15);
84 var t = new ThreadTrack(new tracing.TimelineViewport());
86 assertEquals(1, t.tracks_.length);
87 assertTrue(t.tracks_[0] instanceof tracing.tracks.SliceTrack);
88 assertTrue(4, t.tracks_[0].slices.length);
89 var slices = t.tracks_[0].slices;
90 assertTrue(4, slices.length);
91 assertTrue(slices[0] instanceof tracing.trace_model.Sample);
92 assertTrue(slices[1] instanceof tracing.trace_model.Sample);
93 assertTrue(slices[2] instanceof tracing.trace_model.Sample);
94 assertTrue(slices[3] instanceof tracing.trace_model.Sample);