4a0921704a
Add common TimelineTrackStackedBase base class for TimelineTrackTick and TimelineTrackTimer for visualising stacked time ranges that only need rescaling when zooming in. Additional changes: - Highlight matching registers in disassembly - Simplify CodeLogEntry summary for script code - Show event for array items in the property-link-table Bug: v8:10644 Change-Id: I0b37274e12ba55f1c6251b90d39d996ffae7f37e Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2992716 Reviewed-by: Victor Gomes <victorgomes@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#75437}
66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
// 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/timeline-track.mjs';
|
|
import './timeline/timeline-track-map.mjs';
|
|
import './timeline/timeline-track-tick.mjs';
|
|
import './timeline/timeline-track-timer.mjs';
|
|
|
|
import {SynchronizeSelectionEvent} from './events.mjs';
|
|
import {DOM, V8CustomElement} from './helper.mjs';
|
|
|
|
DOM.defineCustomElement(
|
|
'view/timeline-panel',
|
|
(templateText) => class TimelinePanel extends V8CustomElement {
|
|
constructor() {
|
|
super(templateText);
|
|
this.addEventListener('scrolltrack', e => this.handleTrackScroll(e));
|
|
this.addEventListener(
|
|
SynchronizeSelectionEvent.name,
|
|
e => this.handleSelectionSyncronization(e));
|
|
this.$('#zoomIn').onclick = () => this.nofChunks *= 1.5;
|
|
this.$('#zoomOut').onclick = () => this.nofChunks /= 1.5;
|
|
}
|
|
|
|
set nofChunks(count) {
|
|
const time = this.currentTime
|
|
for (const track of this.timelineTracks) {
|
|
track.nofChunks = count;
|
|
track.currentTime = time;
|
|
}
|
|
}
|
|
|
|
get nofChunks() {
|
|
return this.timelineTracks[0].nofChunks;
|
|
}
|
|
|
|
get currentTime() {
|
|
return this.timelineTracks[0].currentTime;
|
|
}
|
|
|
|
get timelineTracks() {
|
|
return this.$('slot').assignedNodes().filter(
|
|
node => node.nodeType === Node.ELEMENT_NODE);
|
|
}
|
|
|
|
handleTrackScroll(event) {
|
|
for (const track of this.timelineTracks) {
|
|
track.scrollLeft = event.detail;
|
|
}
|
|
}
|
|
|
|
handleSelectionSyncronization(event) {
|
|
this.timeSelection = {start: event.start, end: event.end};
|
|
}
|
|
|
|
set timeSelection(timeSelection) {
|
|
if (timeSelection.start > timeSelection.end) {
|
|
throw new Error('Invalid time range');
|
|
}
|
|
for (const track of this.timelineTracks) {
|
|
track.timeSelection = timeSelection;
|
|
}
|
|
}
|
|
});
|