1// Copyright 2020 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5import { Timeline } from "../../../tools/system-analyzer/timeline.mjs"; 6import { LogEntry} from "../../../tools/system-analyzer/log/log.mjs"; 7 8 9class TestLogEntry extends LogEntry { 10 toString() { 11 return `TestLogEntry(${this.id}, ${this.time})`; 12 } 13} 14 15(function testTimeline() { 16 let timeline = new Timeline(); 17 assertTrue(timeline.isEmpty()); 18 19 let id1 = "0x3e7e082470cd"; 20 let id2 = "0x3e7e082470ad"; 21 let time = 10; 22 23 let entry1 = new TestLogEntry(id1, time + 0); 24 let entry2 = new TestLogEntry(id1, time + 1); 25 let entry3 = new TestLogEntry(id1, time + 2); 26 let entry4 = new TestLogEntry(id1, time + 3); 27 let entry5 = new TestLogEntry(id2, time + 3); 28 let entry6 = new TestLogEntry(id1, time + 4); 29 30 timeline.push(entry1); 31 assertFalse(timeline.isEmpty()); 32 assertEquals(timeline.first(), entry1); 33 assertEquals(timeline.at(0), entry1); 34 assertEquals(timeline.last(), entry1); 35 36 timeline.push(entry2); 37 assertEquals(timeline.first(), entry1); 38 assertEquals(timeline.at(1), entry2); 39 assertEquals(timeline.last(), entry2); 40 41 timeline.push(entry3); 42 timeline.push(entry4); 43 timeline.push(entry5); 44 timeline.push(entry6); 45 46 assertEquals(timeline.first(), entry1); 47 assertEquals(timeline.at(0), entry1); 48 assertEquals(timeline.at(1), entry2); 49 assertEquals(timeline.at(2), entry3); 50 assertEquals(timeline.at(3), entry4); 51 assertEquals(timeline.at(4), entry5); 52 assertEquals(timeline.at(5), entry6); 53 assertEquals(timeline.last(), entry6); 54 55 assertEquals(timeline.length, 6); 56 assertEquals(timeline.all.length, 6); 57 58 assertEquals(timeline.startTime, entry1.time); 59 assertEquals(timeline.endTime, entry6.time); 60 assertEquals(timeline.duration(), 4); 61 62 assertEquals(timeline.findFirst(time - 1), 0); 63 assertEquals(timeline.findFirst(time + 0), 0); 64 assertEquals(timeline.findFirst(time + 1), 1); 65 assertEquals(timeline.findFirst(time + 2), 2); 66 assertEquals(timeline.findFirst(time + 3), 3); 67 assertEquals(timeline.findFirst(time + 4), 5); 68 assertEquals(timeline.findFirst(time + 5), 5); 69 70 assertEquals(timeline.findFirst(time + 2.00), 2); 71 assertEquals(timeline.findFirst(time + 2.01), 3); 72 assertEquals(timeline.findFirst(time + 2.90), 3); 73 assertEquals(timeline.findFirst(time + 3.01), 5); 74 assertEquals(timeline.findFirst(time + 3.90), 5); 75 assertEquals(timeline.findFirst(time + 4.00), 5); 76 77 assertEquals(timeline.findLast(time - 1), -1); 78 assertEquals(timeline.findLast(time + 0), 0); 79 assertEquals(timeline.findLast(time + 1), 1); 80 assertEquals(timeline.findLast(time + 2), 2); 81 assertEquals(timeline.findLast(time + 3), 4); 82 assertEquals(timeline.findLast(time + 4), 5); 83 assertEquals(timeline.findLast(time + 5), 5); 84 85 assertEquals(timeline.findLast(time + 2.00), 2); 86 assertEquals(timeline.findLast(time + 2.01), 2); 87 assertEquals(timeline.findLast(time + 2.90), 2); 88 assertEquals(timeline.findLast(time + 3.01), 4); 89 assertEquals(timeline.findLast(time + 3.90), 4); 90 assertEquals(timeline.findLast(time + 4.00), 5); 91 92 let startTime = time; 93 let endTime = time + 2; 94 timeline.selectTimeRange(startTime, endTime); 95 assertArrayEquals(timeline.selection.startTime, startTime); 96 assertArrayEquals(timeline.selection.endTime, endTime); 97 assertArrayEquals(timeline.selection.values, [entry1, entry2]); 98 let entryIdx = timeline.find(time + 1); 99 let entry = timeline.at(entryIdx); 100 assertEquals(entry.time, time + 1); 101})(); 102 103 104(function testChunks() { 105 const id1 = "0x3e7e082470cd"; 106 const time = 10; 107 108 const entry1 = new TestLogEntry(id1, time + 0); 109 const entry2 = new TestLogEntry(id1, time + 1); 110 const entry3 = new TestLogEntry(id1, time + 2); 111 const entry4 = new TestLogEntry(id1, time + 3); 112 const entries = [entry1, entry2, entry3, entry4]; 113 114 const timeline1 = new Timeline(TestLogEntry, entries); 115 assertEquals(timeline1.length, 4); 116 assertEquals(timeline1.startTime, time); 117 assertEquals(timeline1.endTime, time + 3); 118 119 const chunks1_1 = timeline1.chunks(1); 120 assertEquals(chunks1_1.length, 1); 121 assertEquals(chunks1_1[0].start, timeline1.startTime); 122 assertEquals(chunks1_1[0].end, timeline1.endTime); 123 assertArrayEquals(chunks1_1[0].items, entries); 124 125 const chunks1_4 = timeline1.chunks(4); 126 assertEquals(chunks1_4.length, 4); 127 assertEquals(chunks1_4[0].start, timeline1.startTime); 128 assertArrayEquals(chunks1_4[0].items, [entry1]); 129 assertEquals(chunks1_4[1].start, 10.75); 130 assertArrayEquals(chunks1_4[1].items, [entry2]); 131 assertEquals(chunks1_4[2].start, 11.5); 132 assertArrayEquals(chunks1_4[2].items, [entry3]); 133 assertEquals(chunks1_4[3].end, timeline1.endTime); 134 assertArrayEquals(chunks1_4[3].items, [entry4]); 135 136 const timeline2 = new Timeline(TestLogEntry, entries, 0, 100); 137 assertEquals(timeline2.length, 4); 138 assertEquals(timeline2.startTime, 0); 139 assertEquals(timeline2.endTime, 100); 140 assertEquals(timeline2.duration(), 100); 141 142 const chunks2_1 = timeline2.chunks(1); 143 assertEquals(chunks2_1.length, 1); 144 assertEquals(chunks2_1[0].start, timeline2.startTime); 145 assertEquals(chunks2_1[0].end, timeline2.endTime); 146 assertArrayEquals(chunks1_1[0].items, entries); 147 148 const chunks2_2 = timeline2.chunks(2); 149 assertEquals(chunks2_2.length, 2); 150 assertEquals(chunks2_2[0].start, 0); 151 assertEquals(chunks2_2[0].end, 50); 152 assertArrayEquals(chunks2_2[0].items, entries); 153 assertEquals(chunks2_2[1].start, 50); 154 assertEquals(chunks2_2[1].end, 100); 155 assertArrayEquals(chunks2_2[1].items, []); 156 157 const chunks2_4 = timeline2.chunks(4); 158 assertEquals(chunks2_4.length, 4); 159 assertEquals(chunks2_4[0].start, 0); 160 assertEquals(chunks2_4[0].end, 25); 161 assertArrayEquals(chunks2_4[0].items, entries); 162 assertEquals(chunks2_4[1].start, 25); 163 assertEquals(chunks2_4[1].end, 50); 164 assertArrayEquals(chunks2_4[1].items, []); 165 assertEquals(chunks2_4[2].start, 50); 166 assertEquals(chunks2_4[2].end, 75); 167 assertArrayEquals(chunks2_4[2].items, []); 168 assertEquals(chunks2_4[3].start, 75); 169 assertEquals(chunks2_4[3].end, 100); 170 assertArrayEquals(chunks2_4[3].items, []); 171})();