2020-09-28 15:31:52 +00:00
|
|
|
// Copyright 2020 the V8 project authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
import { Timeline } from "../../../tools/system-analyzer/timeline.mjs";
|
2020-10-19 10:13:33 +00:00
|
|
|
import { LogEntry} from "../../../tools/system-analyzer/log/log.mjs";
|
2020-09-28 15:31:52 +00:00
|
|
|
|
|
|
|
|
2021-06-17 15:09:24 +00:00
|
|
|
class TestLogEntry extends LogEntry {
|
|
|
|
toString() {
|
|
|
|
return `TestLogEntry(${this.id}, ${this.time})`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-28 15:31:52 +00:00
|
|
|
(function testTimeline() {
|
|
|
|
let timeline = new Timeline();
|
2021-06-17 15:09:24 +00:00
|
|
|
assertTrue(timeline.isEmpty());
|
2020-11-27 18:43:26 +00:00
|
|
|
|
2020-09-28 15:31:52 +00:00
|
|
|
let id1 = "0x3e7e082470cd";
|
|
|
|
let id2 = "0x3e7e082470ad";
|
2020-11-27 18:43:26 +00:00
|
|
|
let time = 10;
|
|
|
|
|
2021-06-17 15:09:24 +00:00
|
|
|
let entry1 = new TestLogEntry(id1, time + 0);
|
|
|
|
let entry2 = new TestLogEntry(id1, time + 1);
|
|
|
|
let entry3 = new TestLogEntry(id1, time + 2);
|
|
|
|
let entry4 = new TestLogEntry(id1, time + 3);
|
|
|
|
let entry5 = new TestLogEntry(id2, time + 3);
|
|
|
|
let entry6 = new TestLogEntry(id1, time + 4);
|
2020-11-27 18:43:26 +00:00
|
|
|
|
2020-10-19 10:13:33 +00:00
|
|
|
timeline.push(entry1);
|
2021-06-17 15:09:24 +00:00
|
|
|
assertFalse(timeline.isEmpty());
|
|
|
|
assertEquals(timeline.first(), entry1);
|
|
|
|
assertEquals(timeline.at(0), entry1);
|
|
|
|
assertEquals(timeline.last(), entry1);
|
|
|
|
|
2020-10-19 10:13:33 +00:00
|
|
|
timeline.push(entry2);
|
2021-06-17 15:09:24 +00:00
|
|
|
assertEquals(timeline.first(), entry1);
|
|
|
|
assertEquals(timeline.at(1), entry2);
|
|
|
|
assertEquals(timeline.last(), entry2);
|
|
|
|
|
2020-10-19 10:13:33 +00:00
|
|
|
timeline.push(entry3);
|
|
|
|
timeline.push(entry4);
|
|
|
|
timeline.push(entry5);
|
2020-11-27 18:43:26 +00:00
|
|
|
timeline.push(entry6);
|
|
|
|
|
2021-06-17 15:09:24 +00:00
|
|
|
assertEquals(timeline.first(), entry1);
|
|
|
|
assertEquals(timeline.at(0), entry1);
|
|
|
|
assertEquals(timeline.at(1), entry2);
|
|
|
|
assertEquals(timeline.at(2), entry3);
|
|
|
|
assertEquals(timeline.at(3), entry4);
|
|
|
|
assertEquals(timeline.at(4), entry5);
|
|
|
|
assertEquals(timeline.at(5), entry6);
|
|
|
|
assertEquals(timeline.last(), entry6);
|
|
|
|
|
|
|
|
assertEquals(timeline.length, 6);
|
|
|
|
assertEquals(timeline.all.length, 6);
|
|
|
|
|
|
|
|
assertEquals(timeline.startTime, entry1.time);
|
|
|
|
assertEquals(timeline.endTime, entry6.time);
|
|
|
|
assertEquals(timeline.duration(), 4);
|
2020-11-27 18:43:26 +00:00
|
|
|
|
2021-06-17 15:09:24 +00:00
|
|
|
assertEquals(timeline.findFirst(time - 1), 0);
|
|
|
|
assertEquals(timeline.findFirst(time + 0), 0);
|
|
|
|
assertEquals(timeline.findFirst(time + 1), 1);
|
|
|
|
assertEquals(timeline.findFirst(time + 2), 2);
|
|
|
|
assertEquals(timeline.findFirst(time + 3), 3);
|
|
|
|
assertEquals(timeline.findFirst(time + 4), 5);
|
|
|
|
assertEquals(timeline.findFirst(time + 5), 5);
|
|
|
|
|
|
|
|
assertEquals(timeline.findFirst(time + 2.00), 2);
|
|
|
|
assertEquals(timeline.findFirst(time + 2.01), 3);
|
|
|
|
assertEquals(timeline.findFirst(time + 2.90), 3);
|
|
|
|
assertEquals(timeline.findFirst(time + 3.01), 5);
|
|
|
|
assertEquals(timeline.findFirst(time + 3.90), 5);
|
|
|
|
assertEquals(timeline.findFirst(time + 4.00), 5);
|
|
|
|
|
|
|
|
assertEquals(timeline.findLast(time - 1), -1);
|
|
|
|
assertEquals(timeline.findLast(time + 0), 0);
|
|
|
|
assertEquals(timeline.findLast(time + 1), 1);
|
|
|
|
assertEquals(timeline.findLast(time + 2), 2);
|
|
|
|
assertEquals(timeline.findLast(time + 3), 4);
|
|
|
|
assertEquals(timeline.findLast(time + 4), 5);
|
|
|
|
assertEquals(timeline.findLast(time + 5), 5);
|
|
|
|
|
|
|
|
assertEquals(timeline.findLast(time + 2.00), 2);
|
|
|
|
assertEquals(timeline.findLast(time + 2.01), 2);
|
|
|
|
assertEquals(timeline.findLast(time + 2.90), 2);
|
|
|
|
assertEquals(timeline.findLast(time + 3.01), 4);
|
|
|
|
assertEquals(timeline.findLast(time + 3.90), 4);
|
|
|
|
assertEquals(timeline.findLast(time + 4.00), 5);
|
2020-11-27 18:43:26 +00:00
|
|
|
|
2020-09-28 15:31:52 +00:00
|
|
|
let startTime = time;
|
|
|
|
let endTime = time + 2;
|
|
|
|
timeline.selectTimeRange(startTime, endTime);
|
2020-11-30 15:09:54 +00:00
|
|
|
assertArrayEquals(timeline.selection.startTime, startTime);
|
|
|
|
assertArrayEquals(timeline.selection.endTime, endTime);
|
|
|
|
assertArrayEquals(timeline.selection.values, [entry1, entry2]);
|
2020-09-28 15:31:52 +00:00
|
|
|
let entryIdx = timeline.find(time + 1);
|
|
|
|
let entry = timeline.at(entryIdx);
|
|
|
|
assertEquals(entry.time, time + 1);
|
|
|
|
})();
|
2021-06-17 15:09:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
(function testChunks() {
|
|
|
|
const id1 = "0x3e7e082470cd";
|
|
|
|
const time = 10;
|
|
|
|
|
|
|
|
const entry1 = new TestLogEntry(id1, time + 0);
|
|
|
|
const entry2 = new TestLogEntry(id1, time + 1);
|
|
|
|
const entry3 = new TestLogEntry(id1, time + 2);
|
|
|
|
const entry4 = new TestLogEntry(id1, time + 3);
|
|
|
|
const entries = [entry1, entry2, entry3, entry4];
|
|
|
|
|
|
|
|
const timeline1 = new Timeline(TestLogEntry, entries);
|
|
|
|
assertEquals(timeline1.length, 4);
|
|
|
|
assertEquals(timeline1.startTime, time);
|
|
|
|
assertEquals(timeline1.endTime, time + 3);
|
|
|
|
|
|
|
|
const chunks1_1 = timeline1.chunks(1);
|
|
|
|
assertEquals(chunks1_1.length, 1);
|
|
|
|
assertEquals(chunks1_1[0].start, timeline1.startTime);
|
|
|
|
assertEquals(chunks1_1[0].end, timeline1.endTime);
|
|
|
|
assertArrayEquals(chunks1_1[0].items, entries);
|
|
|
|
|
|
|
|
const chunks1_4 = timeline1.chunks(4);
|
|
|
|
assertEquals(chunks1_4.length, 4);
|
|
|
|
assertEquals(chunks1_4[0].start, timeline1.startTime);
|
|
|
|
assertArrayEquals(chunks1_4[0].items, [entry1]);
|
|
|
|
assertEquals(chunks1_4[1].start, 10.75);
|
|
|
|
assertArrayEquals(chunks1_4[1].items, [entry2]);
|
|
|
|
assertEquals(chunks1_4[2].start, 11.5);
|
|
|
|
assertArrayEquals(chunks1_4[2].items, [entry3]);
|
|
|
|
assertEquals(chunks1_4[3].end, timeline1.endTime);
|
|
|
|
assertArrayEquals(chunks1_4[3].items, [entry4]);
|
|
|
|
|
|
|
|
const timeline2 = new Timeline(TestLogEntry, entries, 0, 100);
|
|
|
|
assertEquals(timeline2.length, 4);
|
|
|
|
assertEquals(timeline2.startTime, 0);
|
|
|
|
assertEquals(timeline2.endTime, 100);
|
|
|
|
assertEquals(timeline2.duration(), 100);
|
|
|
|
|
|
|
|
const chunks2_1 = timeline2.chunks(1);
|
|
|
|
assertEquals(chunks2_1.length, 1);
|
|
|
|
assertEquals(chunks2_1[0].start, timeline2.startTime);
|
|
|
|
assertEquals(chunks2_1[0].end, timeline2.endTime);
|
|
|
|
assertArrayEquals(chunks1_1[0].items, entries);
|
|
|
|
|
|
|
|
const chunks2_2 = timeline2.chunks(2);
|
|
|
|
assertEquals(chunks2_2.length, 2);
|
|
|
|
assertEquals(chunks2_2[0].start, 0);
|
|
|
|
assertEquals(chunks2_2[0].end, 50);
|
|
|
|
assertArrayEquals(chunks2_2[0].items, entries);
|
|
|
|
assertEquals(chunks2_2[1].start, 50);
|
|
|
|
assertEquals(chunks2_2[1].end, 100);
|
|
|
|
assertArrayEquals(chunks2_2[1].items, []);
|
|
|
|
|
|
|
|
const chunks2_4 = timeline2.chunks(4);
|
|
|
|
assertEquals(chunks2_4.length, 4);
|
|
|
|
assertEquals(chunks2_4[0].start, 0);
|
|
|
|
assertEquals(chunks2_4[0].end, 25);
|
|
|
|
assertArrayEquals(chunks2_4[0].items, entries);
|
|
|
|
assertEquals(chunks2_4[1].start, 25);
|
|
|
|
assertEquals(chunks2_4[1].end, 50);
|
|
|
|
assertArrayEquals(chunks2_4[1].items, []);
|
|
|
|
assertEquals(chunks2_4[2].start, 50);
|
|
|
|
assertEquals(chunks2_4[2].end, 75);
|
|
|
|
assertArrayEquals(chunks2_4[2].items, []);
|
|
|
|
assertEquals(chunks2_4[3].start, 75);
|
|
|
|
assertEquals(chunks2_4[3].end, 100);
|
|
|
|
assertArrayEquals(chunks2_4[3].items, []);
|
|
|
|
})();
|