blob: 8dd1fef4500d3e511adf86d2b1d95b9ab5f7b93f [file] [log] [blame]
<!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>
<title>SliceGroup tests</title>
<script src="/src/base.js"></script>
<script>
base.require('unittest');
base.require('test_utils');
base.require('model.slice_group');
</script>
</head>
<body>
<script>
'use strict';
var Slice = tracing.model.Slice;
var SliceGroup = tracing.model.SliceGroup;
var newSlice = test_utils.newSlice;
var newSliceNamed = test_utils.newSliceNamed;
function testBasicBeginEnd() {
var group = new SliceGroup();
assertEquals(group.openSliceCount, 0);
var sliceA = group.beginSlice('', 'a', 1, {a: 1});
assertEquals(1, group.openSliceCount);
assertEquals('a', sliceA.title);
assertEquals(1, sliceA.start);
assertEquals(1, sliceA.args.a);
var sliceB = group.endSlice(3);
assertEquals(sliceA, sliceB);
assertEquals(2, sliceB.duration);
}
function testNestedBeginEnd() {
var group = new SliceGroup();
assertEquals(group.openSliceCount, 0);
group.beginSlice('', 'a', 1);
group.beginSlice('', 'b', 2);
group.endSlice(2.5);
group.endSlice(3);
assertEquals(2, group.slices.length);
assertEquals('b', group.slices[0].title);
assertEquals(0.5, group.slices[0].duration);
assertEquals('a', group.slices[1].title);
assertEquals(2, group.slices[1].duration);
}
function testBasicMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 1);
a.endSlice(2);
b.beginSlice('', 'two', 3);
b.endSlice(5);
var m = SliceGroup.merge(a, b);
assertEquals(2, m.slices.length);
assertEquals('one', m.slices[0].title);
assertEquals(1, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('two', m.slices[1].title);
assertEquals(3, m.slices[1].start);
assertEquals(2, m.slices[1].duration);
}
function testNestedMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 1);
a.endSlice(4);
b.beginSlice('', 'two', 2);
b.endSlice(3);
var m = SliceGroup.merge(a, b);
assertEquals(2, m.slices.length);
assertEquals('two', m.slices[0].title);
assertEquals(2, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('one', m.slices[1].title);
assertEquals(1, m.slices[1].start);
assertEquals(3, m.slices[1].duration);
}
function testStartSplitMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 2);
a.endSlice(4);
b.beginSlice('', 'two', 1);
b.endSlice(3);
var m = SliceGroup.merge(a, b);
assertEquals(3, m.slices.length);
assertEquals('two', m.slices[0].title);
assertEquals(1, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('two (cont.)', m.slices[1].title);
assertEquals(2, m.slices[1].start);
assertEquals(1, m.slices[1].duration);
assertEquals('one', m.slices[2].title);
assertEquals(2, m.slices[2].start);
assertEquals(2, m.slices[2].duration);
}
function testStartSplitTwoMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 3);
a.endSlice(6);
b.beginSlice('', 'two', 1);
b.beginSlice('', 'three', 2);
b.endSlice(4);
b.endSlice(5);
var m = SliceGroup.merge(a, b);
assertEquals(5, m.slices.length);
assertEquals('three', m.slices[0].title);
assertEquals(2, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('two', m.slices[1].title);
assertEquals(1, m.slices[1].start);
assertEquals(2, m.slices[1].duration);
assertEquals('three (cont.)', m.slices[2].title);
assertEquals(3, m.slices[2].start);
assertEquals(1, m.slices[2].duration);
assertEquals('two (cont.)', m.slices[3].title);
assertEquals(3, m.slices[3].start);
assertEquals(2, m.slices[3].duration);
assertEquals('one', m.slices[4].title);
assertEquals(3, m.slices[4].start);
assertEquals(3, m.slices[4].duration);
}
function testStartSplitTwiceMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 2);
a.beginSlice('', 'two', 3);
a.endSlice(5);
a.endSlice(6);
b.beginSlice('', 'three', 1);
b.endSlice(4);
var m = SliceGroup.merge(a, b);
assertEquals(5, m.slices.length);
assertEquals('three', m.slices[0].title);
assertEquals(1, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('three (cont.)', m.slices[1].title);
assertEquals(2, m.slices[1].start);
assertEquals(1, m.slices[1].duration);
assertEquals('three (cont.)', m.slices[2].title);
assertEquals(3, m.slices[2].start);
assertEquals(1, m.slices[2].duration);
assertEquals('two', m.slices[3].title);
assertEquals(3, m.slices[3].start);
assertEquals(2, m.slices[3].duration);
assertEquals('one', m.slices[4].title);
assertEquals(2, m.slices[4].start);
assertEquals(4, m.slices[4].duration);
}
function testEndSplitMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 1);
a.endSlice(3);
b.beginSlice('', 'two', 2);
b.endSlice(4);
var m = SliceGroup.merge(a, b);
assertEquals(3, m.slices.length);
assertEquals('two', m.slices[0].title);
assertEquals(2, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('one', m.slices[1].title);
assertEquals(1, m.slices[1].start);
assertEquals(2, m.slices[1].duration);
assertEquals('two (cont.)', m.slices[2].title);
assertEquals(3, m.slices[2].start);
assertEquals(1, m.slices[2].duration);
}
function testEndSplitTwoMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 1);
a.endSlice(4);
b.beginSlice('', 'two', 2);
b.beginSlice('', 'three', 3);
b.endSlice(5);
b.endSlice(6);
var m = SliceGroup.merge(a, b);
assertEquals(5, m.slices.length);
assertEquals('three', m.slices[0].title);
assertEquals(3, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('two', m.slices[1].title);
assertEquals(2, m.slices[1].start);
assertEquals(2, m.slices[1].duration);
assertEquals('one', m.slices[2].title);
assertEquals(1, m.slices[2].start);
assertEquals(3, m.slices[2].duration);
assertEquals('three (cont.)', m.slices[3].title);
assertEquals(4, m.slices[3].start);
assertEquals(1, m.slices[3].duration);
assertEquals('two (cont.)', m.slices[4].title);
assertEquals(4, m.slices[4].start);
assertEquals(2, m.slices[4].duration);
}
function testEndSplitTwiceMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 1);
a.beginSlice('', 'two', 2);
a.endSlice(4);
a.endSlice(5);
b.beginSlice('', 'three', 3);
b.endSlice(6);
var m = SliceGroup.merge(a, b);
assertEquals(5, m.slices.length);
assertEquals('three', m.slices[0].title);
assertEquals(3, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('two', m.slices[1].title);
assertEquals(2, m.slices[1].start);
assertEquals(2, m.slices[1].duration);
assertEquals('three (cont.)', m.slices[2].title);
assertEquals(4, m.slices[2].start);
assertEquals(1, m.slices[2].duration);
assertEquals('one', m.slices[3].title);
assertEquals(1, m.slices[3].start);
assertEquals(4, m.slices[3].duration);
assertEquals('three (cont.)', m.slices[4].title);
assertEquals(5, m.slices[4].start);
assertEquals(1, m.slices[4].duration);
}
//
// Input:
// A: | one | | two |
//
// B: | three |
//
// Output:
// | one | three | two |
// | three | | three |
//
function testSplitTwiceMerge() {
var a = new SliceGroup();
var b = new SliceGroup();
a.beginSlice('', 'one', 1);
a.endSlice(3);
a.beginSlice('', 'two', 4);
a.endSlice(6);
b.beginSlice('', 'three', 2);
b.endSlice(5);
var m = SliceGroup.merge(a, b);
assertEquals(5, m.slices.length);
assertEquals('three', m.slices[0].title);
assertEquals(2, m.slices[0].start);
assertEquals(1, m.slices[0].duration);
assertEquals('one', m.slices[1].title);
assertEquals(1, m.slices[1].start);
assertEquals(2, m.slices[1].duration);
assertEquals('three (cont.)', m.slices[2].title);
assertEquals(3, m.slices[2].start);
assertEquals(1, m.slices[2].duration);
assertEquals('three (cont.)', m.slices[3].title);
assertEquals(4, m.slices[3].start);
assertEquals(1, m.slices[3].duration);
assertEquals('two', m.slices[4].title);
assertEquals(4, m.slices[4].start);
assertEquals(2, m.slices[4].duration);
}
function testBounds() {
var group = new SliceGroup();
group.updateBounds();
assertEquals(group.bounds.min, undefined);
assertEquals(group.bounds.max, undefined);
group.pushSlice(newSlice(1, 3));
group.pushSlice(newSlice(7, 2));
group.updateBounds();
assertEquals(1, group.bounds.min);
assertEquals(9, group.bounds.max);
}
function testBoundsWithPartial() {
var group = new SliceGroup();
group.beginSlice('', 'a', 7);
group.updateBounds();
assertEquals(7, group.bounds.min);
assertEquals(7, group.bounds.max);
}
function testBoundsWithTwoPartials() {
var group = new SliceGroup();
group.beginSlice('', 'a', 0);
group.beginSlice('', 'a', 1);
group.updateBounds();
assertEquals(0, group.bounds.min);
assertEquals(1, group.bounds.max);
}
function testBoundsWithBothPartialAndRegular() {
var group = new SliceGroup();
group.updateBounds();
assertEquals(undefined, group.bounds.min);
assertEquals(undefined, group.bounds.max);
group.pushSlice(newSlice(1, 3));
group.beginSlice('', 'a', 7);
group.updateBounds();
assertEquals(1, group.bounds.min);
assertEquals(7, group.bounds.max);
}
function testAutocloserBasic() {
var group = new SliceGroup();
assertEquals(group.openSliceCount, 0);
group.pushSlice(newSliceNamed('a', 1, 0.5));
group.beginSlice('', 'b', 2);
group.beginSlice('', 'c', 2.5);
group.endSlice(3);
group.autoCloseOpenSlices();
group.updateBounds();
assertEquals(1, group.bounds.min);
assertEquals(3, group.bounds.max);
assertEquals(3, group.slices.length);
assertEquals('a', group.slices[0].title);
assertEquals('c', group.slices[1].title);
assertEquals('b', group.slices[2].title);
assertTrue(group.slices[2].didNotFinish);
assertEquals(1, group.slices[2].duration);
}
function testAutocloserWithSubTasks() {
var group = new SliceGroup();
assertEquals(group.openSliceCount, 0);
group.beginSlice('', 'a', 1);
group.beginSlice('', 'b1', 2);
group.endSlice(3);
group.beginSlice('', 'b2', 3);
group.autoCloseOpenSlices();
assertEquals(3, group.slices.length);
assertEquals('b1', group.slices[0].title);
assertEquals('b2', group.slices[1].title);
assertTrue(group.slices[1].didNotFinish);
assertEquals(0, group.slices[1].duration);
assertEquals('a', group.slices[2].title);
assertTrue(group.slices[2].didNotFinish);
assertEquals(2, group.slices[2].duration);
}
// TODO: test cretion of subSlices
</script>
</body>
</html>