// 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.
'use strict';
base.require('tracing.test_utils');
base.require('tracing.timeline_track_view');
base.require('tracing.importer.trace_event_importer');
base.unittest.testSuite('tracing.timeline_track_view', function() {
var NoCountersFilter = function() {
};
NoCountersFilter.prototype = {
__proto__: tracing.Filter.prototype,
matchCounter: function(c) {
return false;
}
};
var NoCpusFilter = function() {
};
NoCpusFilter.prototype = {
__proto__: tracing.Filter.prototype,
matchCpu: function(c) {
return false;
}
};
var NoProcessesFilter = function() {
};
NoProcessesFilter.prototype = {
__proto__: tracing.Filter.prototype,
matchProcess: function(c) {
return false;
}
};
var NoThreadsFilter = function() {
};
NoThreadsFilter.prototype = {
__proto__: tracing.Filter.prototype,
matchThread: function(c) {
return false;
}
};
test('instantiate', function() {
var events = [
{name: 'a', args: {}, pid: 52, ts: 520, cat: 'foo', tid: 53, ph: 'B'},
{name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'E'},
{name: 'b', args: {}, pid: 52, ts: 629, cat: 'foo', tid: 53, ph: 'B'},
{name: 'b', args: {}, pid: 52, ts: 631, cat: 'foo', tid: 53, ph: 'E'}
];
var model = new tracing.TraceModel(events);
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
timeline.focusElement = timeline;
timeline.tabIndex = 0;
this.addHTMLOutput(timeline);
});
test('addAllObjectsMatchingFilterToSelection', function() {
var model = new tracing.TraceModel();
var p1 = model.getOrCreateProcess(1);
var t1 = p1.getOrCreateThread(1);
t1.sliceGroup.pushSlice(
new tracing.trace_model.ThreadSlice('', 'a', 0, 1, {}, 3));
t1.sliceGroup.pushSlice(
new tracing.trace_model.ThreadSlice('', 'b', 0, 1.1, {}, 2.8));
var t1asg = t1.asyncSliceGroup;
t1asg.slices.push(
tracing.test_utils.newAsyncSliceNamed('a', 0, 1, t1, t1));
t1asg.slices.push(
tracing.test_utils.newAsyncSliceNamed('b', 1, 2, t1, t1));
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
var expected = [{slice: t1asg.slices[0].subSlices[0]},
{slice: t1.sliceGroup.slices[0]}];
var result = new tracing.Selection();
timeline.addAllObjectsMatchingFilterToSelection(
new tracing.TitleFilter('a'), result);
assertEquals(2, result.length);
assertEquals(expected[0].slice, result[0].slice);
assertEquals(expected[1].slice, result[1].slice);
var expected = [{slice: t1asg.slices[1].subSlices[0]},
{slice: t1.sliceGroup.slices[1]}];
var result = new tracing.Selection();
timeline.addAllObjectsMatchingFilterToSelection(
new tracing.TitleFilter('b'), result);
assertEquals(2, result.length);
assertEquals(expected[0].slice, result[0].slice);
assertEquals(expected[1].slice, result[1].slice);
});
test('emptyThreadsDeleted', function() {
var model = new tracing.TraceModel();
var p1 = model.getOrCreateProcess(1);
var t1 = p1.getOrCreateThread(1);
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
assertFalse(timeline.hasVisibleContent);
});
test('filteredCounters', function() {
var model = new tracing.TraceModel();
var c1 = model.kernel.getOrCreateCpu(0);
c1.getOrCreateCounter('', 'b');
var p1 = model.getOrCreateProcess(1);
var ctr = p1.getOrCreateCounter('', 'a');
var series = new tracing.trace_model.CounterSeries('a', 0);
series.addSample(0, 1);
ctr.addSeries(series);
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
assertTrue(timeline.hasVisibleContent);
timeline.categoryFilter = new NoCountersFilter();
assertFalse(timeline.hasVisibleContent);
});
test('filteredCpus', function() {
var model = new tracing.TraceModel();
var c1 = model.kernel.getOrCreateCpu(1);
c1.getOrCreateCounter('', 'a');
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
assertTrue(timeline.hasVisibleContent);
timeline.categoryFilter = new NoCpusFilter();
assertFalse(timeline.hasVisibleContent);
});
test('filteredProcesses', function() {
var model = new tracing.TraceModel();
var p1 = model.getOrCreateProcess(1);
p1.getOrCreateCounter('', 'a');
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
assertTrue(timeline.hasVisibleContent);
timeline.categoryFilter = new NoProcessesFilter();
assertFalse(timeline.hasVisibleContent);
});
test('filteredThreads', function() {
var model = new tracing.TraceModel();
var p1 = model.getOrCreateProcess(1);
var t1 = p1.getOrCreateThread(2);
t1.sliceGroup.pushSlice(tracing.test_utils.newSlice(0, 1));
var timeline = new tracing.TimelineTrackView();
timeline.model = model;
assertTrue(timeline.hasVisibleContent);
timeline.categoryFilter = new NoThreadsFilter();
assertFalse(timeline.hasVisibleContent);
});
});