Html程序  |  257行  |  8.02 KB

<!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>
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script src="../shared/js/cr.js"></script>
<script src="../shared/js/cr/event_target.js"></script>
<script src="test_utils.js"></script>
<script src="timeline_model.js"></script>
<script>
  goog.require('goog.testing.jsunit');
</script>

</head>
<body>
<script>
'use strict';
var TimelineCpu = tracing.TimelineCpu;
var TimelineSlice = tracing.TimelineSlice;
var TimelineThreadSlice = tracing.TimelineThreadSlice;
var TimelineProcess = tracing.TimelineProcess;
var TimelineThread = tracing.TimelineThread;
var TimelineModel = tracing.TimelineModel;
var TimelineFilter = tracing.TimelineFilter;
var TimelineAsyncSlice = tracing.TimelineAsyncSlice;
var TimelineAsyncSliceGroup = tracing.TimelineAsyncSliceGroup;
var newAsyncSlice = test_utils.newAsyncSlice;

function testThreadBounds_Empty() {
  var t = new TimelineThread(new TimelineProcess(7), 1);
  t.updateBounds();
  assertEquals(undefined, t.minTimestamp);
  assertEquals(undefined, t.maxTimestamp);
}

function testThreadBounds_SubRow() {
  var t = new TimelineThread(new TimelineProcess(7), 1);
  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
  t.updateBounds();
  assertEquals(1, t.minTimestamp);
  assertEquals(4, t.maxTimestamp);
}

function testThreadBounds_AsyncSliceGroup() {
  var t = new TimelineThread(new TimelineProcess(7), 1);
  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
  t.asyncSlices.push(newAsyncSlice(0.1, 5, t, t));
  t.updateBounds();
  assertEquals(0.1, t.minTimestamp);
  assertEquals(5.1, t.maxTimestamp);
}

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.subRows[0].push(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.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
  var t2 = m.getOrCreateProcess(1).getOrCreateThread(1);
  m.updateBounds();
  assertEquals(1, m.minTimestamp);
  assertEquals(4, m.maxTimestamp);
}

function testCpuBounds_Empty() {
  var cpu = new TimelineCpu(undefined, 1);
  cpu.updateBounds();
  assertEquals(undefined, cpu.minTimestamp);
  assertEquals(undefined, cpu.maxTimestamp);
}

function testCpuBounds_OneSlice() {
  var cpu = new TimelineCpu(undefined, 1);
  cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
  cpu.updateBounds();
  assertEquals(1, cpu.minTimestamp);
  assertEquals(4, cpu.maxTimestamp);
}

function testModelBounds_OneCpu() {
  var m = new TimelineModel();
  var cpu = m.getOrCreateCpu(1);
  cpu.slices.push(new TimelineSlice('a', 0, 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(new TimelineSlice('a', 0, 1, {}, 3));

  var t = m.getOrCreateProcess(1).getOrCreateThread(1);
  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 4));

  m.updateBounds();
  assertEquals(1, m.minTimestamp);
  assertEquals(5, m.maxTimestamp);
}

function testPTIDFromPidAndTid() {
  assertEquals('1:2', TimelineThread.getPTIDFromPidAndTid(1, 2));
}

function testAsyncSliceGroupBounds_Empty() {
  var g = new TimelineAsyncSliceGroup(name);
  g.updateBounds();
  assertEquals(undefined, g.minTimestamp);
  assertEquals(undefined, g.maxTimestamp);
}

function testAsyncSliceGroupBounds_Basic() {
  var p1 = new TimelineProcess(1);
  var t1 = new TimelineThread(p1, 1);
  var g = new TimelineAsyncSliceGroup('a');
  g.push(newAsyncSlice(0, 1, t1, t1));
  g.push(newAsyncSlice(1, 1.5, t1, t1));
  assertEquals(2, g.length);
  g.updateBounds();
  assertEquals(0, g.minTimestamp);
  assertEquals(2.5, g.maxTimestamp);
}

function testAsyncSliceGroup_rebuildSubRows_twoNonOverlappingSlices() {
  var p1 = new TimelineProcess(1);
  var t1 = new TimelineThread(p1, 1);
  var g = new TimelineAsyncSliceGroup('a');
  g.slices.push(newAsyncSlice(0, 1, t1, t1));
  g.slices.push(newAsyncSlice(1, 1, t1, t1));

  assertEquals(1, g.subRows.length);
  assertEquals(2, g.subRows[0].length);
  assertEquals(g.slices[0].subSlices[0], g.subRows[0][0]);
  assertEquals(g.slices[1].subSlices[0], g.subRows[0][1]);
}

function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
  var p1 = new TimelineProcess(1);
  var t1 = new TimelineThread(p1, 1);
  var g = new TimelineAsyncSliceGroup('a');
  g.slices.push(newAsyncSlice(0, 1, t1, t1));
  g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
  g.updateBounds();

  assertEquals(2, g.subRows.length);
  assertEquals(1, g.subRows[0].length);
  assertEquals(g.slices[0], g.subRows[0][0]);
  assertEquals(1, g.subRows[1].length);
  assertEquals(g.slices[1], g.subRows[1][0]);
}

function testAsyncSliceGroup_rebuildSubRows_threePartlyOverlappingSlices() {
  var p1 = new TimelineProcess(1);
  var t1 = new TimelineThread(p1, 1);
  var g = new TimelineAsyncSliceGroup('a');
  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();

  assertEquals(2, g.subRows.length);
  assertEquals(2, g.subRows[0].length);
  assertEquals(g.slices[0].subSlices[0], g.subRows[0][0]);
  assertEquals(g.slices[2].subSlices[0], g.subRows[0][1]);
  assertEquals(1, g.subRows[1].length);
  assertEquals(g.slices[1].subSlices[0], g.subRows[1][0]);
}

function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
  var p1 = new TimelineProcess(1);
  var t1 = new TimelineThread(p1, 1);
  var g = new TimelineAsyncSliceGroup('a');
  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();

  assertEquals(2, g.subRows.length);
  assertEquals(2, g.subRows[0].length);
  assertEquals(g.slices[0].subSlices[0], g.subRows[0][0]);
  assertEquals(g.slices[2].subSlices[0], g.subRows[0][1]);
  assertEquals(1, g.subRows[1].length);
  assertEquals(g.slices[1].subSlices[0], g.subRows[1][0]);
}

function testAsyncSliceGroup_computeSubGroups_twoThreadSpecificSlices() {
  var p1 = new TimelineProcess(1);
  var t1 = new TimelineThread(p1, 1);
  var t2 = new TimelineThread(p1, 2);
  var g = new TimelineAsyncSliceGroup('a');
  g.slices.push(newAsyncSlice(0, 1, t1, t1));
  g.slices.push(newAsyncSlice(0, 1, t2, t2));

  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]);
}

function testModelCanImportEmpty() {
  var m;
  m = new TimelineModel([]);
  m = new TimelineModel('');
}

function testTimelineFilter() {
  var s0 = new TimelineSlice('a', 0, 1, {}, 3);
  assertFalse(new TimelineFilter('').matchSlice(s0));

  assertTrue(new TimelineFilter('a').matchSlice(s0));
  assertFalse(new TimelineFilter('x').matchSlice(s0));

  var s1 = new TimelineSlice('ba', 0, 1, {}, 3);
  assertTrue(new TimelineFilter('a').matchSlice(s1));
  assertTrue(new TimelineFilter('ba').matchSlice(s1));
  assertFalse(new TimelineFilter('x').matchSlice(s1));
}

</script>
</body>
</html>