blob: f4734990b19d62064be81ff605141730c6e0b922 [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>Model tests</title>
<style>
.view {
border: 1px solid black;
margin: 10px;
}
.find-dialog {
border: 1px solid black;
margin: 10px;
}
</style>
<script src="base.js"></script>
<script>
base.require('unittest');
base.require('test_utils');
base.require('model');
</script>
</head>
<body>
<script>
'use strict';
var Slice = tracing.model.Slice;
var ThreadSlice = tracing.model.ThreadSlice;
var Thread = tracing.model.Thread;
var Model = tracing.Model;
var TitleFilter = tracing.TitleFilter;
function createModelWithOneOfEverything() {
var m = new Model();
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 ThreadSlice('', '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 Model();
m.updateBounds();
assertEquals(undefined, m.bounds.min);
assertEquals(undefined, m.bounds.max);
}
function testModelBounds_OneEmptyThread() {
var m = new Model();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
m.updateBounds();
assertEquals(undefined, m.bounds.min);
assertEquals(undefined, m.bounds.max);
}
function testModelBounds_OneThread() {
var m = new Model();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 3));
m.updateBounds();
assertEquals(1, m.bounds.min);
assertEquals(4, m.bounds.max);
}
function testModelBounds_OneThreadAndOneEmptyThread() {
var m = new Model();
var t1 = m.getOrCreateProcess(1).getOrCreateThread(1);
t1.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 3));
var t2 = m.getOrCreateProcess(1).getOrCreateThread(1);
m.updateBounds();
assertEquals(1, m.bounds.min);
assertEquals(4, m.bounds.max);
}
function testModelBounds_OneCpu() {
var m = new Model();
var cpu = m.getOrCreateCpu(1);
cpu.slices.push(test_utils.newSlice(1, 3));
m.updateBounds();
assertEquals(1, m.bounds.min);
assertEquals(4, m.bounds.max);
}
function testModelBounds_OneCpuOneThread() {
var m = new Model();
var cpu = m.getOrCreateCpu(1);
cpu.slices.push(test_utils.newSlice(1, 3));
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 4));
m.updateBounds();
assertEquals(1, m.bounds.min);
assertEquals(5, m.bounds.max);
}
function testModelCanImportEmpty() {
var m;
m = new Model([]);
m = new Model('');
}
function testTitleFilter() {
var s0 = test_utils.newSlice(1, 3);
assertFalse(new TitleFilter('').matchSlice(s0));
assertTrue(new TitleFilter('a').matchSlice(s0));
assertFalse(new TitleFilter('x').matchSlice(s0));
var s1 = test_utils.newSliceNamed('ba', 1, 3);
assertTrue(new TitleFilter('a').matchSlice(s1));
assertTrue(new TitleFilter('ba').matchSlice(s1));
assertFalse(new TitleFilter('x').matchSlice(s1));
}
function testModel_toJSON() {
var m = createModelWithOneOfEverything();
assertNotNull(JSON.stringify(m));
}
function testModel_findAllThreadsNamed() {
var m = new Model();
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 testModel_updateCategories() {
var m = new Model();
var t = m.getOrCreateProcess(1).getOrCreateThread(1);
t.pushSlice(new ThreadSlice('categoryA', 'a', 0, 1, {}, 3));
t.pushSlice(new ThreadSlice('categoryA', 'a', 0, 1, {}, 3));
t.pushSlice(new ThreadSlice('categoryB', 'a', 0, 1, {}, 3));
t.pushSlice(new ThreadSlice('categoryA', 'a', 0, 1, {}, 3));
t.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 3));
m.updateCategories_();
assertArrayEquals(['categoryA', 'categoryB'], m.categories);
}
</script>
</body>
</html>