<!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>AsyncSliceGroupTrack 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('model');
</script>
</head>
<body>
<script>
'use strict';
var AsyncSliceGroup = tracing.model.AsyncSliceGroup;
var AsyncSliceGroupTrack =
tracing.tracks.AsyncSliceGroupTrack;
var Process = tracing.model.Process;
var Thread = tracing.model.Thread;
var newAsyncSlice = test_utils.newAsyncSlice;
function testAsyncSliceGroup_filterSubRows() {
var p1 = new Process(1);
var t1 = new Thread(p1, 1);
var g = new AsyncSliceGroup();
g.slices.push(newAsyncSlice(0, 1, t1, t1));
var track = new AsyncSliceGroupTrack();
track.group = g;
assertEquals(1, track.subRows_.length);
assertTrue(track.visible);
track.categoryFilter = new tracing.TitleFilter('x');
assertFalse(track.visible);
track.categoryFilter = new tracing.TitleFilter('a');
assertTrue(track.visible);
assertEquals(1, track.subRows_.length);
}
function testAsyncSliceGroup_rebuildSubRows_twoNonOverlappingSlices() {
var p1 = new Process(1);
var t1 = new Thread(p1, 1);
var g = new AsyncSliceGroup();
g.slices.push(newAsyncSlice(0, 1, t1, t1));
g.slices.push(newAsyncSlice(1, 1, t1, t1));
var track = new AsyncSliceGroupTrack();
track.group = g;
var subRows = track.subRows_;
assertEquals(1, subRows.length);
assertEquals(2, subRows[0].length);
assertEquals(g.slices[0].subSlices[0], subRows[0][0]);
assertEquals(g.slices[1].subSlices[0], subRows[0][1]);
}
function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
var p1 = new Process(1);
var t1 = new Thread(p1, 1);
var g = new AsyncSliceGroup();
g.slices.push(newAsyncSlice(0, 1, t1, t1));
g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
g.updateBounds();
var track = new AsyncSliceGroupTrack();
track.group = g;
var subRows = track.subRows_;
assertEquals(2, subRows.length);
assertEquals(1, subRows[0].length);
assertEquals(g.slices[0], subRows[0][0]);
assertEquals(1, subRows[1].length);
assertEquals(g.slices[1], subRows[1][0]);
}
function testAsyncSliceGroup_rebuildSubRows_threePartlyOverlappingSlices() {
var p1 = new Process(1);
var t1 = new Thread(p1, 1);
var g = new AsyncSliceGroup();
g.slices.push(newAsyncSlice(0, 1, t1, t1));
g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
g.slices.push(newAsyncSlice(1, 1.5, t1, t1));
g.updateBounds();
var track = new AsyncSliceGroupTrack();
track.group = g;
var subRows = track.subRows_;
assertEquals(2, subRows.length);
assertEquals(2, subRows[0].length);
assertEquals(g.slices[0].subSlices[0], subRows[0][0]);
assertEquals(g.slices[2].subSlices[0], subRows[0][1]);
assertEquals(1, subRows[1].length);
assertEquals(g.slices[1].subSlices[0], subRows[1][0]);
}
function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
var p1 = new Process(1);
var t1 = new Thread(p1, 1);
var g = new AsyncSliceGroup();
g.slices.push(newAsyncSlice(0, 1, t1, t1));
g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
g.slices.push(newAsyncSlice(2, 1, t1, t1));
g.updateBounds();
var track = new AsyncSliceGroupTrack();
track.group = g;
var subRows = track.subRows_;
assertEquals(2, subRows.length);
assertEquals(2, subRows[0].length);
assertEquals(g.slices[0].subSlices[0], subRows[0][0]);
assertEquals(g.slices[2].subSlices[0], subRows[0][1]);
assertEquals(1, subRows[1].length);
assertEquals(g.slices[1].subSlices[0], subRows[1][0]);
}
function testAsyncSliceGroup_computeSubGroups_twoThreadSpecificSlices() {
var p1 = new Process(1);
var t1 = new Thread(p1, 1);
var t2 = new Thread(p1, 2);
var g = new AsyncSliceGroup();
g.slices.push(newAsyncSlice(0, 1, t1, t1));
g.slices.push(newAsyncSlice(0, 1, t2, t2));
var track = new AsyncSliceGroupTrack();
track.group = g;
var subRows = track.subRows_;
var subGroups = g.computeSubGroups();
assertEquals(2, subGroups.length);
assertEquals(g.name, subGroups[0].name);
assertEquals(1, subGroups[0].slices.length);
assertEquals(g.slices[0], subGroups[0].slices[0]);
assertEquals(g.name, subGroups[1].name);
assertEquals(1, subGroups[1].slices.length);
assertEquals(g.slices[1], subGroups[1].slices[0]);
}
</script>
</body>
</html>