3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/tracing/test_utils.html">
9 <link rel="import" href="/tracing/timeline_track_view.html">
10 <link rel="import" href="/tracing/trace_model/instant_event.html">
11 <link rel="import" href="/tracing/tracks/thread_track.html">
12 <link rel="import" href="/base/ui/dom_helpers.html">
17 tv.unittest.testSuite(function() {
18 var HighlightInstantEvent = tracing.trace_model.ThreadHighlightInstantEvent;
19 var Process = tracing.trace_model.Process;
20 var Selection = tracing.Selection;
21 var StackFrame = tracing.trace_model.StackFrame;
22 var Sample = tracing.trace_model.Sample;
23 var Thread = tracing.trace_model.Thread;
24 var ThreadSlice = tracing.trace_model.ThreadSlice;
25 var ThreadTrack = tracing.tracks.ThreadTrack;
26 var Viewport = tracing.TimelineViewport;
27 var newAsyncSlice = tracing.test_utils.newAsyncSlice;
28 var newAsyncSliceNamed = tracing.test_utils.newAsyncSliceNamed;
29 var newSliceNamed = tracing.test_utils.newSliceNamed;
31 test('selectionHitTestingWithThreadTrack', function() {
32 var model = new tracing.TraceModel();
33 var p1 = model.getOrCreateProcess(1);
34 var t1 = p1.getOrCreateThread(1);
35 t1.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 4));
36 t1.sliceGroup.pushSlice(new ThreadSlice('', 'b', 0, 5.1, {}, 4));
38 var testEl = document.createElement('div');
39 testEl.appendChild(tv.ui.createScopedStyle('heading { width: 100px; }'));
40 testEl.style.width = '600px';
42 var viewport = new Viewport(testEl);
43 var drawingContainer = new tracing.tracks.DrawingContainer(viewport);
44 testEl.appendChild(drawingContainer);
46 var track = new ThreadTrack(viewport);
47 drawingContainer.appendChild(track);
48 drawingContainer.updateCanvasSizeIfNeeded_();
51 var y = track.getBoundingClientRect().top;
52 var h = track.getBoundingClientRect().height;
54 var vW = drawingContainer.canvas.getBoundingClientRect().width;
55 var dt = new tracing.TimelineDisplayTransform();
56 dt.xSetWorldBounds(0, wW, vW);
57 track.viewport.setDisplayTransformImmediately(dt);
59 var selection = new Selection();
60 var x = (1.5 / wW) * vW;
61 track.addIntersectingItemsInRangeToSelection(x, x + 1, y, y + 1, selection);
62 assertEquals(t1.sliceGroup.slices[0], selection[0]);
64 var selection = new Selection();
65 track.addIntersectingItemsInRangeToSelection(
66 (1.5 / wW) * vW, (1.8 / wW) * vW,
68 assertEquals(t1.sliceGroup.slices[0], selection[0]);
71 test('filterThreadSlices', function() {
72 var model = new tracing.TraceModel();
73 var thread = new Thread(new Process(model, 7), 1);
74 thread.sliceGroup.pushSlice(newSliceNamed('a', 0, 0));
75 thread.asyncSliceGroup.push(newAsyncSliceNamed('a', 0, 5, t, t));
77 var t = new ThreadTrack(new tracing.TimelineViewport());
80 assertEquals(t.tracks_.length, 2);
81 assertTrue(t.tracks_[0] instanceof tracing.tracks.AsyncSliceGroupTrack);
82 assertTrue(t.tracks_[1] instanceof tracing.tracks.SliceGroupTrack);
85 test('sampleThreadSlices', function() {
86 var model = new tracing.TraceModel();
89 model.importTraces([], false, false, function() {
90 cpu = model.kernel.getOrCreateCpu(1);
91 thread = model.getOrCreateProcess(1).getOrCreateThread(2);
93 var fA = model.addStackFrame(new StackFrame(
94 undefined, 1, 'cat', 'a', 7));
95 var fAB = model.addStackFrame(new StackFrame(
96 fA, 2, 'cat', 'b', 7));
97 var fABC = model.addStackFrame(new StackFrame(
98 fAB, 3, 'cat', 'c', 7));
99 var fAD = model.addStackFrame(new StackFrame(
100 fA, 4, 'cat', 'd', 7));
102 model.samples.push(new Sample(undefined, thread, 'instructions_retired',
104 model.samples.push(new Sample(undefined, thread, 'instructions_retired',
106 model.samples.push(new Sample(undefined, thread, 'instructions_retired',
108 model.samples.push(new Sample(undefined, thread, 'instructions_retired',
111 model.samples.push(new Sample(undefined, thread, 'page_fault',
113 model.samples.push(new Sample(undefined, thread, 'page_fault',
117 var t = new ThreadTrack(new tracing.TimelineViewport());
119 assertEquals(2, t.tracks_.length);
121 // Instructions retired
122 var t0 = t.tracks_[0];
123 assertTrue(t0.heading.indexOf('instructions_retired') != -1);
124 assertTrue(t0 instanceof tracing.tracks.SampleTrack);
125 assertTrue(4, t0.samples.length);
126 t0.samples.forEach(function(s) {
127 assertTrue(s instanceof tracing.trace_model.Sample);
131 var t1 = t.tracks_[1];
132 assertTrue(t1.heading.indexOf('page_fault') != -1);
133 assertTrue(t1 instanceof tracing.tracks.SampleTrack);
134 assertTrue(2, t1.samples.length);