blob: 06b06a391c2f4c11bf31d5b72202697562a4ec7b [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2018 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/base/math/range.html">
<link rel="import" href="/tracing/model/event_container.html">
<link rel="import" href="/tracing/model/timed_event.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
test('getDescendantEventsInSortedRanges', function() {
class ContainerTypeX extends tr.model.EventContainer {
* childEvents() {
const event1 = new tr.model.TimedEvent(4);
event1.duration = 2;
event1.title = 'X-1';
yield event1;
const event2 = new tr.model.TimedEvent(1);
event2.duration = 2;
event2.title = 'X-2';
yield event2;
}
}
class ContainerTypeY extends tr.model.EventContainer {
constructor() {
super();
this.childContainer_ = new ContainerTypeX();
}
* childEvents() {
const event1 = new tr.model.TimedEvent(5);
event1.duration = 4;
event1.title = 'Y-1';
yield event1;
const event2 = new tr.model.TimedEvent(6);
event2.duration = 2;
event2.title = 'Y-2';
yield event2;
}
* childEventContainers() {
yield this.childContainer_;
}
}
// We have the following timed events:
// 1 2 3 4 5 6 7 8 9
// ContainerTypeY <----- Y-1 ----->
// <- Y2 ->
// ContainerTypeX <- X-2 -> <- X-1 ->
const container = new ContainerTypeY();
// [2, 5] intersect X-1, X-2, and Y-1.
const r1 = new tr.b.math.Range.fromExplicitRange(2, 5);
let slices = [...container.getDescendantEventsInSortedRanges([r1])];
slices = slices.map(s => s.title).sort();
assert.strictEqual(slices.length, 3);
assert.strictEqual(slices[0], 'X-1');
assert.strictEqual(slices[1], 'X-2');
assert.strictEqual(slices[2], 'Y-1');
// [2, 5], [7, 8] intersect X-1, X-2, Y-1, and Y-2.
const r2 = new tr.b.math.Range.fromExplicitRange(7, 8);
slices = [...container.getDescendantEventsInSortedRanges([r1, r2])];
slices = slices.map(s => s.title).sort();
assert.strictEqual(slices.length, 4);
assert.strictEqual(slices[0], 'X-1');
assert.strictEqual(slices[1], 'X-2');
assert.strictEqual(slices[2], 'Y-1');
assert.strictEqual(slices[3], 'Y-2');
// We should see events from ContainerTypeX only.
slices = [...container.getDescendantEventsInSortedRanges(
[r1], container => container instanceof ContainerTypeX)];
slices = slices.map(s => s.title).sort();
assert.strictEqual(slices.length, 2);
assert.strictEqual(slices[0], 'X-1');
assert.strictEqual(slices[1], 'X-2');
// We should see events from ContainerTypeY only.
slices = [...container.getDescendantEventsInSortedRanges(
[r1], container => container instanceof ContainerTypeY)];
slices = slices.map(s => s.title).sort();
assert.strictEqual(slices.length, 1);
assert.strictEqual(slices[0], 'Y-1');
});
});