blob: 19a243ac631d410f5462b526256d87ea6184cfbc [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="/tracing/core/test_utils.html">
<link rel="import" href="/tracing/model/event_set.html">
<link rel="import" href="/tracing/model/model.html">
<link rel="import" href="/tracing/ui/analysis/multi_event_details_table.html">
<link rel="import" href="/tracing/ui/base/deep_utils.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var Model = tr.Model;
var Thread = tr.model.Thread;
var EventSet = tr.model.EventSet;
var newSliceEx = tr.c.TestUtils.newSliceEx;
test('sortingOfFirstColumn', function() {
var model = new Model();
var thread = model.getOrCreateProcess(1).getOrCreateThread(2);
var tsg = thread.sliceGroup;
var sA = tsg.pushSlice(newSliceEx({title: 'a', start: 1, end: 2,
cpuStart: 1, cpuEnd: 1.75}));
var sB = tsg.pushSlice(newSliceEx({title: 'a', start: 0, end: 3,
cpuStart: 0, cpuEnd: 3}));
var sC = tsg.pushSlice(newSliceEx({title: 'a', start: 4, end: 5,
cpuStart: 3, cpuEnd: 3.75}));
tsg.createSubSlices();
var threadTrack = {};
threadTrack.thread = thread;
var selection = new EventSet(tsg.slices);
var viewEl = document.createElement('tr-ui-a-multi-event-details-table');
viewEl.selection = selection;
this.addHTMLOutput(viewEl);
var table = viewEl.$.table;
var cmpResult = table.tableColumns[0].cmp(sA, sB);
assert.equal(cmpResult, 1);
});
test('withCpuTime', function() {
var model = new Model();
var thread = model.getOrCreateProcess(1).getOrCreateThread(2);
var tsg = thread.sliceGroup;
tsg.pushSlice(newSliceEx({title: 'a', start: 0, end: 3,
cpuStart: 0, cpuEnd: 3}));
tsg.pushSlice(newSliceEx({title: 'a', start: 1, end: 2,
cpuStart: 1, cpuEnd: 1.75}));
tsg.pushSlice(newSliceEx({title: 'a', start: 4, end: 5,
cpuStart: 3, cpuEnd: 3.75}));
tsg.createSubSlices();
var threadTrack = {};
threadTrack.thread = thread;
var selection = new EventSet(tsg.slices);
var viewEl = document.createElement('tr-ui-a-multi-event-details-table');
viewEl.selection = selection;
this.addHTMLOutput(viewEl);
});
test('withoutCpuTime', function() {
var model = new Model();
var thread = model.getOrCreateProcess(1).getOrCreateThread(2);
var tsg = thread.sliceGroup;
tsg.pushSlice(newSliceEx({title: 'a', start: 0, end: 3}));
tsg.pushSlice(newSliceEx({title: 'a', start: 1, end: 2}));
tsg.pushSlice(newSliceEx({title: 'a', start: 4, end: 5}));
tsg.createSubSlices();
var threadTrack = {};
threadTrack.thread = thread;
var selection = new EventSet(tsg.slices);
var viewEl = document.createElement('tr-ui-a-multi-event-details-table');
viewEl.selection = selection;
this.addHTMLOutput(viewEl);
});
test('withFewerThanFourArgs', function() {
var model = new Model();
var thread = model.getOrCreateProcess(1).getOrCreateThread(2);
var tsg = thread.sliceGroup;
tsg.pushSlice(newSliceEx({title: 'a', start: 0, end: 3,
args: {value1: 3, value2: 'x', value3: 1}}));
tsg.pushSlice(newSliceEx({title: 'b', start: 1, end: 2,
args: {value1: 3.1, value2: 'y', value3: 2}}));
tsg.pushSlice(newSliceEx({title: 'b', start: 4, end: 5,
args: {value1: 3.2, value2: 'z', value3: 'x'}}));
tsg.createSubSlices();
var threadTrack = {};
threadTrack.thread = thread;
var selection = new EventSet(tsg.slices);
var viewEl = document.createElement('tr-ui-a-multi-event-details-table');
viewEl.selection = selection;
this.addHTMLOutput(viewEl);
});
test('withExtraArgs', function() {
var model = new Model();
var thread = model.getOrCreateProcess(1).getOrCreateThread(2);
var tsg = thread.sliceGroup;
tsg.pushSlice(newSliceEx({title: 'a', start: 0, end: 3,
args: {value1: 3, value2: 'x', value3: 1,
value4: 4, value5: 5, value6: 6}}));
tsg.pushSlice(newSliceEx({title: 'b', start: 1, end: 2,
args: {value1: 3.1, value2: 'y', value3: 2,
value4: 4, value5: 5, value6: 6}}));
tsg.pushSlice(newSliceEx({title: 'b', start: 4, end: 5,
args: {value1: 3.2, value2: 'z', value3: 'x',
value4: 4, value5: 'whoops', value6: 6}}));
tsg.createSubSlices();
var threadTrack = {};
threadTrack.thread = thread;
var selection = new EventSet(tsg.slices);
var viewEl = document.createElement('tr-ui-a-multi-event-details-table');
viewEl.selection = selection;
this.addHTMLOutput(viewEl);
});
test('noSubRowsSelfTime', function() {
var model = new Model();
var fe1 = new tr.model.FlowEvent('cat', 1234, 'title', 7, 10, {});
var fe2 = new tr.model.FlowEvent('cat', 1234, 'title', 8, 20, {});
// Make reading some properties an explosion, as a way to ensure that they
// aren't read. Note that "duration" is read since it is used by the
// EventSet to get the range.
var failProp = {
get: function() {
throw new Error('Should not be called');
}
};
Object.defineProperty(fe1, 'subRows', failProp);
Object.defineProperty(fe2, 'subRows', failProp);
Object.defineProperty(fe1, 'selfTime', failProp);
Object.defineProperty(fe2, 'selfTime', failProp);
model.flowEvents.push(fe1);
model.flowEvents.push(fe2);
var selection = new EventSet([fe1, fe2]);
var viewEl = document.createElement('tr-ui-a-multi-event-details-table');
viewEl.eventsHaveDuration = false;
viewEl.selection = selection;
this.addHTMLOutput(viewEl);
});
});
</script>