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