166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils'); 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.timeline_track_view'); 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.importer.trace_event_importer'); 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.timeline_track_view', function() { 1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var NoCountersFilter = function() { 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis NoCountersFilter.prototype = { 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: tracing.Filter.prototype, 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis matchCounter: function(c) { 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return false; 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var NoCpusFilter = function() { 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis NoCpusFilter.prototype = { 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: tracing.Filter.prototype, 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis matchCpu: function(c) { 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return false; 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var NoProcessesFilter = function() { 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis NoProcessesFilter.prototype = { 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: tracing.Filter.prototype, 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis matchProcess: function(c) { 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return false; 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var NoThreadsFilter = function() { 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis NoThreadsFilter.prototype = { 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: tracing.Filter.prototype, 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis matchThread: function(c) { 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return false; 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('instantiate', function() { 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var events = [ 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'a', args: {}, pid: 52, ts: 520, cat: 'foo', tid: 53, ph: 'B'}, 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'E'}, 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'b', args: {}, pid: 52, ts: 629, cat: 'foo', tid: 53, ph: 'B'}, 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {name: 'b', args: {}, pid: 52, ts: 631, cat: 'foo', tid: 53, ph: 'E'} 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]; 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(events); 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.focusElement = timeline; 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.tabIndex = 0; 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addHTMLOutput(timeline); 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('addAllObjectsMatchingFilterToSelection', function() { 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var p1 = model.getOrCreateProcess(1); 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1 = p1.getOrCreateThread(1); 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis t1.sliceGroup.pushSlice( 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis new tracing.trace_model.ThreadSlice('', 'a', 0, 1, {}, 3)); 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis t1.sliceGroup.pushSlice( 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis new tracing.trace_model.ThreadSlice('', 'b', 0, 1.1, {}, 2.8)); 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1asg = t1.asyncSliceGroup; 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis t1asg.slices.push( 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracing.test_utils.newAsyncSliceNamed('a', 0, 1, t1, t1)); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis t1asg.slices.push( 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracing.test_utils.newAsyncSliceNamed('b', 1, 2, t1, t1)); 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var expected = [{slice: t1asg.slices[0].subSlices[0]}, 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {slice: t1.sliceGroup.slices[0]}]; 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var result = new tracing.Selection(); 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelection( 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis new tracing.TitleFilter('a'), result); 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(2, result.length); 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(expected[0].slice, result[0].slice); 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(expected[1].slice, result[1].slice); 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var expected = [{slice: t1asg.slices[1].subSlices[0]}, 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis {slice: t1.sliceGroup.slices[1]}]; 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var result = new tracing.Selection(); 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelection( 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis new tracing.TitleFilter('b'), result); 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(2, result.length); 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(expected[0].slice, result[0].slice); 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(expected[1].slice, result[1].slice); 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('emptyThreadsDeleted', function() { 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var p1 = model.getOrCreateProcess(1); 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1 = p1.getOrCreateThread(1); 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(timeline.hasVisibleContent); 11466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 11566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('filteredCounters', function() { 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var c1 = model.kernel.getOrCreateCpu(0); 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis c1.getOrCreateCounter('', 'b'); 1206833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var p1 = model.getOrCreateProcess(1); 1226833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var ctr = p1.getOrCreateCounter('', 'a'); 1236833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var series = new tracing.trace_model.CounterSeries('a', 0); 1246833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(0, 1); 1256833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(series); 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(timeline.hasVisibleContent); 13166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.categoryFilter = new NoCountersFilter(); 13366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(timeline.hasVisibleContent); 13466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('filteredCpus', function() { 13766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 13866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var c1 = model.kernel.getOrCreateCpu(1); 13966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis c1.getOrCreateCounter('', 'a'); 14066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 14366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(timeline.hasVisibleContent); 14566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.categoryFilter = new NoCpusFilter(); 14766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(timeline.hasVisibleContent); 14866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 14966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('filteredProcesses', function() { 15166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 15266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var p1 = model.getOrCreateProcess(1); 15366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis p1.getOrCreateCounter('', 'a'); 15466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 15666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 15766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(timeline.hasVisibleContent); 15966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.categoryFilter = new NoProcessesFilter(); 16166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(timeline.hasVisibleContent); 16266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 16366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('filteredThreads', function() { 16566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 16666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var p1 = model.getOrCreateProcess(1); 16766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1 = p1.getOrCreateThread(2); 16866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis t1.sliceGroup.pushSlice(tracing.test_utils.newSlice(0, 1)); 16966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 17166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 17266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(timeline.hasVisibleContent); 17466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.categoryFilter = new NoThreadsFilter(); 17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertFalse(timeline.hasVisibleContent); 17766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 179