blob: 66992c6231cccfb2f5ff1352414b7cf5a67c5e8e [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 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.
-->
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/core/trace_model/trace_model.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var ThreadSlice = tv.c.trace_model.ThreadSlice;
var Process = tv.c.trace_model.Process;
var Thread = tv.c.trace_model.Thread;
var newSliceNamed = tv.c.test_utils.newSliceNamed;
var newAsyncSlice = tv.c.test_utils.newAsyncSlice;
var newThreadSlice = tv.c.test_utils.newThreadSlice;
var SCHEDULING_STATE = tv.c.trace_model.SCHEDULING_STATE;
test('threadBounds_Empty', function() {
var model = new tv.c.TraceModel();
var t = new Thread(new Process(model, 7), 1);
t.updateBounds();
assert.isUndefined(t.bounds.min);
assert.isUndefined(t.bounds.max);
});
test('threadBounds_SubRow', function() {
var model = new tv.c.TraceModel();
var t = new Thread(new Process(model, 7), 1);
t.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 3));
t.updateBounds();
assert.equal(t.bounds.min, 1);
assert.equal(t.bounds.max, 4);
});
test('threadBounds_AsyncSliceGroup', function() {
var model = new tv.c.TraceModel();
var t = new Thread(new Process(model, 7), 1);
t.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 3));
t.asyncSliceGroup.push(newAsyncSlice(0.1, 5, t, t));
t.updateBounds();
assert.equal(t.bounds.min, 0.1);
assert.equal(t.bounds.max, 5.1);
});
test('threadBounds_Cpu', function() {
var model = new tv.c.TraceModel();
var t = new Thread(new Process(model, 7), 1);
t.timeSlices = [newSliceNamed('x', 0, 1)];
t.updateBounds();
assert.equal(t.bounds.min, 0);
assert.equal(t.bounds.max, 1);
});
test('shiftTimestampsForwardWithCpu', function() {
var model = new tv.c.TraceModel();
var t = new Thread(new Process(model, 7), 1);
t.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 0, {}, 3));
t.asyncSliceGroup.push(newAsyncSlice(0, 5, t, t));
t.timeSlices = [newSliceNamed('x', 0, 1)];
var shiftCount = 0;
t.asyncSliceGroup.shiftTimestampsForward = function(ts) {
if (ts == 0.32)
shiftCount++;
};
t.shiftTimestampsForward(0.32);
assert.equal(shiftCount, 1);
assert.equal(t.sliceGroup.slices[0].start, 0.32);
assert.equal(t.timeSlices[0].start, 0.32);
});
test('shiftTimestampsForwardWithoutCpu', function() {
var model = new tv.c.TraceModel();
var t = new Thread(new Process(model, 7), 1);
t.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 0, {}, 3));
t.asyncSliceGroup.push(newAsyncSlice(0, 5, t, t));
var shiftCount = 0;
t.asyncSliceGroup.shiftTimestampsForward = function(ts) {
if (ts == 0.32)
shiftCount++;
};
t.shiftTimestampsForward(0.32);
assert.equal(shiftCount, 1);
assert.equal(t.sliceGroup.slices[0].start, 0.32);
});
test('getSchedulingStatsForRange', function() {
var scheduledThread = undefined;
var unscheduledThread = undefined;
var model = tv.c.test_utils.newModel(function(model) {
unscheduledThread = model.getOrCreateProcess(1).getOrCreateThread(1);
unscheduledThread.sliceGroup.pushSlice(newSliceNamed('work', 0, 20));
scheduledThread = model.getOrCreateProcess(2).getOrCreateThread(2);
scheduledThread.sliceGroup.pushSlice(newSliceNamed('work', 0, 20));
scheduledThread.timeSlices = [
newThreadSlice(scheduledThread, SCHEDULING_STATE.RUNNING, 0, 3),
newThreadSlice(scheduledThread, SCHEDULING_STATE.RUNNABLE, 3, 5),
newThreadSlice(scheduledThread, SCHEDULING_STATE.RUNNING, 8, 2),
newThreadSlice(scheduledThread, SCHEDULING_STATE.SLEEPING, 10, 10)
];
});
// thread without scheduling states
var stats = unscheduledThread.getSchedulingStatsForRange(0, 20);
assert.deepEqual(stats, {});
// no scheduling info
var stats = scheduledThread.getSchedulingStatsForRange(50, 100);
assert.deepEqual(stats, {});
// simple query
var stats = scheduledThread.getSchedulingStatsForRange(0, 3);
var expected = {};
expected[SCHEDULING_STATE.RUNNING] = 3;
assert.deepEqual(stats, expected);
// aggregation
var stats = scheduledThread.getSchedulingStatsForRange(0, 20);
var expected = {};
expected[SCHEDULING_STATE.RUNNING] = 5;
expected[SCHEDULING_STATE.RUNNABLE] = 5;
expected[SCHEDULING_STATE.SLEEPING] = 10;
assert.deepEqual(stats, expected);
});
});
</script>