Javascript  |  223行  |  7.15 KB

// 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.trace_model.slice_group');

base.unittest.testSuite('tracing.tracks.slice_group_track', function() {
  var SliceGroup = tracing.trace_model.SliceGroup;
  var SliceGroupTrack = tracing.tracks.SliceGroupTrack;
  var newSliceNamed = tracing.test_utils.newSliceNamed;

  test('subRowBuilderBasic', function() {
    var group = new SliceGroup();
    var sA = group.pushSlice(newSliceNamed('a', 1, 2));
    var sB = group.pushSlice(newSliceNamed('a', 3, 1));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(1, subRows.length);
    assertEquals(2, subRows[0].length);
    assertArrayEquals([sA, sB], subRows[0]);
  });

  test('subRowBuilderBasic2', function() {
    var group = new SliceGroup();
    var sA = group.pushSlice(newSliceNamed('a', 1, 4));
    var sB = group.pushSlice(newSliceNamed('b', 3, 1));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(2, subRows.length);
    assertEquals(1, subRows[0].length);
    assertEquals(1, subRows[1].length);
    assertArrayEquals([sA], subRows[0]);
    assertArrayEquals([sB], subRows[1]);
  });

  test('subRowBuilderNestedExactly', function() {
    var group = new SliceGroup();
    var sA = group.pushSlice(newSliceNamed('a', 1, 4));
    var sB = group.pushSlice(newSliceNamed('b', 1, 4));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(2, subRows.length);
    assertEquals(1, subRows[0].length);
    assertEquals(1, subRows[1].length);
    assertArrayEquals([sB], subRows[0]);
    assertArrayEquals([sA], subRows[1]);
  });

  test('subRowBuilderInstantEvents', function() {
    var group = new SliceGroup();
    var sA = group.pushSlice(newSliceNamed('a', 1, 0));
    var sB = group.pushSlice(newSliceNamed('b', 2, 0));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(1, subRows.length);
    assertEquals(2, subRows[0].length);
    assertArrayEquals([sA, sB], subRows[0]);
  });

  test('subRowBuilderTwoInstantEvents', function() {
    var group = new SliceGroup();
    var sB = group.pushSlice(newSliceNamed('b', 1, 0));
    var sA = group.pushSlice(newSliceNamed('a', 1, 0));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(2, subRows.length);
    assertArrayEquals([sA], subRows[0]);
    assertArrayEquals([sB], subRows[1]);
  });

  test('subRowBuilderOutOfOrderAddition', function() {
    var group = new SliceGroup();

    // Pattern being tested:
    // [    a     ][   b   ]
    // Where insertion is done backward.
    var sB = group.pushSlice(newSliceNamed('b', 3, 1));
    var sA = group.pushSlice(newSliceNamed('a', 1, 2));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(1, subRows.length);
    assertEquals(2, subRows[0].length);
    assertArrayEquals([sA, sB], subRows[0]);
  });

  test('subRowBuilderOutOfOrderAddition2', function() {
    var group = new SliceGroup();

    // Pattern being tested:
    // [    a     ]
    //   [  b   ]
    // Where insertion is done backward.
    var sB = group.pushSlice(newSliceNamed('b', 3, 1));
    var sA = group.pushSlice(newSliceNamed('a', 1, 5));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(2, subRows.length);
    assertEquals(1, subRows[0].length);
    assertEquals(1, subRows[1].length);
    assertArrayEquals([sA], subRows[0]);
    assertArrayEquals([sB], subRows[1]);
  });

  test('subRowBuilderOnNestedZeroLength', function() {
    var group = new SliceGroup();

    // Pattern being tested:
    // [    a    ]
    // [  b1 ]  []<- b2 where b2.duration = 0 and b2.end == a.end.
    var sB1 = group.pushSlice(newSliceNamed('b1', 1, 2));
    var sB2 = group.pushSlice(newSliceNamed('b2', 4, 0));
    var sA = group.pushSlice(newSliceNamed('a', 1, 3));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(2, subRows.length);
    assertArrayEquals([sA], subRows[0]);
    assertArrayEquals([sB1, sB2], subRows[1]);
  });

  test('subRowBuilderOnGroup1', function() {
    var group = new SliceGroup();

    // Pattern being tested:
    // [    a     ]   [  c   ]
    //   [  b   ]
    var sA = group.pushSlice(newSliceNamed('a', 1, 3));
    var sB = group.pushSlice(newSliceNamed('b', 1.5, 1));
    var sC = group.pushSlice(newSliceNamed('c', 5, 0));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;
    var subRows = track.subRows;

    assertEquals(0, track.badSlices_.length);
    assertEquals(2, subRows.length);
    assertArrayEquals([sA, sC], subRows[0]);
    assertArrayEquals([sB], subRows[1]);
  });

  test('subRowBuilderOnGroup2', function() {
    var group = new SliceGroup();

    // Pattern being tested:
    // [    a     ]   [  d   ]
    //   [  b   ]
    //    [ c ]
    var sA = group.pushSlice(newSliceNamed('a', 1, 3));
    var sB = group.pushSlice(newSliceNamed('b', 1.5, 1));
    var sC = group.pushSlice(newSliceNamed('c', 1.75, 0.5));
    var sD = group.pushSlice(newSliceNamed('c', 5, 0.25));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;

    var subRows = track.subRows;
    assertEquals(0, track.badSlices_.length);
    assertEquals(3, subRows.length);
    assertArrayEquals([sA, sD], subRows[0]);
    assertArrayEquals([sB], subRows[1]);
    assertArrayEquals([sC], subRows[2]);
  });

  test('trackFiltering', function() {
    var group = new SliceGroup();

    var sA = group.pushSlice(newSliceNamed('a', 1, 3));
    var sB = group.pushSlice(newSliceNamed('b', 1.5, 1));

    var track = new SliceGroupTrack(new tracing.TimelineViewport());
    track.group = group;

    assertEquals(2, track.subRows.length);
    assertTrue(track.hasVisibleContent);

    track.categoryFilter = new tracing.TitleFilter('x');
    assertFalse(track.hasVisibleContent);

    track.categoryFilter = new tracing.TitleFilter('a');
    assertTrue(track.hasVisibleContent);
    assertEquals(1, track.subRows.length);

    track.categoryFilter = new tracing.TitleFilter('b');
    assertTrue(track.hasVisibleContent);
    assertEquals(1, track.subRows.length);
  });
});