<!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>TimelineModel tests</title>
<style>
.timeline-view {
border: 1px solid black;
margin: 10px;
}
.timeline-find-dialog {
border: 1px solid black;
margin: 10px;
}
</style>
<script src="base.js"></script>
<script>
base.require('unittest');
base.require('test_utils');
base.require('timeline_model');
</script>
</head>
<body>
<script>
'use strict';
var TimelineSlice = tracing.TimelineSlice;
var TimelineThreadSlice = tracing.TimelineThreadSlice;
var TimelineThread = tracing.TimelineThread;
var TimelineModel = tracing.TimelineModel;
var TimelineTitleFilter = tracing.TimelineTitleFilter;
function createModelWithOneOfEverything() {
var m = new TimelineModel();
var cpu = m.getOrCreateCpu(1);
cpu.slices.push(test_utils.newSlice(1, 3));
var p = m.getOrCreateProcess(1);
var t = p.getOrCreateThread(1);
t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 4));
t.asyncSlices.push(test_utils.newAsyncSlice(0, 1, t, t));
var c = p.getOrCreateCounter('', 'ProcessCounter');
c.seriesNames.push('a', 'b');
c.seriesColors.push(0, 1);
c.timestamps.push(0, 1, 2, 3);
c.samples.push(5, 10, 6, 15, 5, 12, 7, 16);
var c1 = cpu.getOrCreateCounter('', 'CpuCounter');
c1.seriesNames.push('a', 'b');
c1.seriesColors.push(0, 1);
c1.timestamps.push(0, 1, 2, 3);
c1.samples.push(5, 10, 6, 15, 5, 12, 7, 16);
m.updateBounds();
return m;
}
function testModelBounds_EmptyModel() {
var m = new TimelineModel();
m.updateBounds();
assertEquals(undefined, m.minTimestamp);
assertEquals(undefined, m.maxTimestamp);
}
function testModelBounds_OneEmptyThread() {
var m = new TimelineModel();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
m.updateBounds();
assertEquals(undefined, m.minTimestamp);
assertEquals(undefined, m.maxTimestamp);
}
function testModelBounds_OneThread() {
var m = new TimelineModel();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 3));
m.updateBounds();
assertEquals(1, m.minTimestamp);
assertEquals(4, m.maxTimestamp);
}
function testModelBounds_OneThreadAndOneEmptyThread() {
var m = new TimelineModel();
var t1 = m.getOrCreateProcess(1).getOrCreateThread(1);
t1.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 3));
var t2 = m.getOrCreateProcess(1).getOrCreateThread(1);
m.updateBounds();
assertEquals(1, m.minTimestamp);
assertEquals(4, m.maxTimestamp);
}
function testModelBounds_OneCpu() {
var m = new TimelineModel();
var cpu = m.getOrCreateCpu(1);
cpu.slices.push(test_utils.newSlice(1, 3));
m.updateBounds();
assertEquals(1, m.minTimestamp);
assertEquals(4, m.maxTimestamp);
}
function testModelBounds_OneCpuOneThread() {
var m = new TimelineModel();
var cpu = m.getOrCreateCpu(1);
cpu.slices.push(test_utils.newSlice(1, 3));
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 4));
m.updateBounds();
assertEquals(1, m.minTimestamp);
assertEquals(5, m.maxTimestamp);
}
function testModelCanImportEmpty() {
var m;
m = new TimelineModel([]);
m = new TimelineModel('');
}
function testTimelineTitleFilter() {
var s0 = test_utils.newSlice(1, 3);
assertFalse(new TimelineTitleFilter('').matchSlice(s0));
assertTrue(new TimelineTitleFilter('a').matchSlice(s0));
assertFalse(new TimelineTitleFilter('x').matchSlice(s0));
var s1 = test_utils.newSliceNamed('ba', 1, 3);
assertTrue(new TimelineTitleFilter('a').matchSlice(s1));
assertTrue(new TimelineTitleFilter('ba').matchSlice(s1));
assertFalse(new TimelineTitleFilter('x').matchSlice(s1));
}
function testTimelineModel_toJSON() {
var m = createModelWithOneOfEverything();
assertNotNull(JSON.stringify(m));
}
function testTimelineModel_findAllThreadsNamed() {
var m = new TimelineModel();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.name = 'CrBrowserMain';
m.updateBounds();
var f = m.findAllThreadsNamed('CrBrowserMain');
assertArrayEquals([t], f);
f = m.findAllThreadsNamed('NoSuchThread');
assertEquals(0, f.length);
}
function testTimelineModel_updateCategories() {
var m = new TimelineModel();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.pushSlice(new TimelineThreadSlice('categoryA', 'a', 0, 1, {}, 3));
t.pushSlice(new TimelineThreadSlice('categoryA', 'a', 0, 1, {}, 3));
t.pushSlice(new TimelineThreadSlice('categoryB', 'a', 0, 1, {}, 3));
t.pushSlice(new TimelineThreadSlice('categoryA', 'a', 0, 1, {}, 3));
t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 3));
m.updateCategories_();
assertArrayEquals(['categoryA', 'categoryB'], m.categories);
}
</script>
</body>
</html>