blob: 97809a51423dd4c8518c62ff9738d20e9304f68f [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/core/test_utils.html">
<link rel="import" href="/core/timeline_track_view.html">
<link rel="import" href="/core/trace_model/instant_event.html">
<link rel="import" href="/core/tracks/thread_track.html">
<link rel="import" href="/base/ui/dom_helpers.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var HighlightInstantEvent = tv.c.trace_model.ThreadHighlightInstantEvent;
var Process = tv.c.trace_model.Process;
var Selection = tv.c.Selection;
var StackFrame = tv.c.trace_model.StackFrame;
var Sample = tv.c.trace_model.Sample;
var Thread = tv.c.trace_model.Thread;
var ThreadSlice = tv.c.trace_model.ThreadSlice;
var ThreadTrack = tv.c.tracks.ThreadTrack;
var Viewport = tv.c.TimelineViewport;
var newAsyncSlice = tv.c.test_utils.newAsyncSlice;
var newAsyncSliceNamed = tv.c.test_utils.newAsyncSliceNamed;
var newSliceNamed = tv.c.test_utils.newSliceNamed;
test('selectionHitTestingWithThreadTrack', function() {
var model = new tv.c.TraceModel();
var p1 = model.getOrCreateProcess(1);
var t1 = p1.getOrCreateThread(1);
t1.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 4));
t1.sliceGroup.pushSlice(new ThreadSlice('', 'b', 0, 5.1, {}, 4));
var testEl = document.createElement('div');
testEl.appendChild(tv.b.ui.createScopedStyle('heading { width: 100px; }'));
testEl.style.width = '600px';
var viewport = new Viewport(testEl);
var drawingContainer = new tv.c.tracks.DrawingContainer(viewport);
testEl.appendChild(drawingContainer);
var track = new ThreadTrack(viewport);
drawingContainer.appendChild(track);
drawingContainer.updateCanvasSizeIfNeeded_();
track.thread = t1;
var y = track.getBoundingClientRect().top;
var h = track.getBoundingClientRect().height;
var wW = 10;
var vW = drawingContainer.canvas.getBoundingClientRect().width;
var dt = new tv.c.TimelineDisplayTransform();
dt.xSetWorldBounds(0, wW, vW);
track.viewport.setDisplayTransformImmediately(dt);
var selection = new Selection();
var x = (1.5 / wW) * vW;
track.addIntersectingItemsInRangeToSelection(x, x + 1, y, y + 1, selection);
assertEquals(t1.sliceGroup.slices[0], selection[0]);
var selection = new Selection();
track.addIntersectingItemsInRangeToSelection(
(1.5 / wW) * vW, (1.8 / wW) * vW,
y, y + h, selection);
assertEquals(t1.sliceGroup.slices[0], selection[0]);
});
test('filterThreadSlices', function() {
var model = new tv.c.TraceModel();
var thread = new Thread(new Process(model, 7), 1);
thread.sliceGroup.pushSlice(newSliceNamed('a', 0, 0));
thread.asyncSliceGroup.push(newAsyncSliceNamed('a', 0, 5, t, t));
var t = new ThreadTrack(new tv.c.TimelineViewport());
t.thread = thread;
assertEquals(t.tracks_.length, 2);
assertTrue(t.tracks_[0] instanceof tv.c.tracks.AsyncSliceGroupTrack);
assertTrue(t.tracks_[1] instanceof tv.c.tracks.SliceGroupTrack);
});
test('sampleThreadSlices', function() {
var model = new tv.c.TraceModel();
var thread;
var cpu;
model.importTraces([], false, false, function() {
cpu = model.kernel.getOrCreateCpu(1);
thread = model.getOrCreateProcess(1).getOrCreateThread(2);
var fA = model.addStackFrame(new StackFrame(
undefined, 1, 'cat', 'a', 7));
var fAB = model.addStackFrame(new StackFrame(
fA, 2, 'cat', 'b', 7));
var fABC = model.addStackFrame(new StackFrame(
fAB, 3, 'cat', 'c', 7));
var fAD = model.addStackFrame(new StackFrame(
fA, 4, 'cat', 'd', 7));
model.samples.push(new Sample(undefined, thread, 'instructions_retired',
10, fABC, 10));
model.samples.push(new Sample(undefined, thread, 'instructions_retired',
20, fAB, 10));
model.samples.push(new Sample(undefined, thread, 'instructions_retired',
30, fAB, 10));
model.samples.push(new Sample(undefined, thread, 'instructions_retired',
40, fAD, 10));
model.samples.push(new Sample(undefined, thread, 'page_fault',
25, fAB, 10));
model.samples.push(new Sample(undefined, thread, 'page_fault',
35, fAD, 10));
});
var t = new ThreadTrack(new tv.c.TimelineViewport());
t.thread = thread;
assertEquals(2, t.tracks_.length);
// Instructions retired
var t0 = t.tracks_[0];
assertTrue(t0.heading.indexOf('instructions_retired') != -1);
assertTrue(t0 instanceof tv.c.tracks.SampleTrack);
assertTrue(4, t0.samples.length);
t0.samples.forEach(function(s) {
assertTrue(s instanceof tv.c.trace_model.Sample);
});
// page_fault
var t1 = t.tracks_[1];
assertTrue(t1.heading.indexOf('page_fault') != -1);
assertTrue(t1 instanceof tv.c.tracks.SampleTrack);
assertTrue(2, t1.samples.length);
});
});
</script>