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}
167 lines
3.9 KiB
JavaScript
167 lines
3.9 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.
|
|
|
|
class State {
|
|
_timeSelection = {start: 0, end: Infinity};
|
|
_map;
|
|
_ic;
|
|
_selectedMapLogEntries;
|
|
_selectedIcLogEntries;
|
|
_selectedDeoptLogEntries;
|
|
_selecteCodeLogEntries;
|
|
_selectedSourcePositions;
|
|
_nofChunks;
|
|
_chunks;
|
|
_icTimeline;
|
|
_mapTimeline;
|
|
_deoptTimeline;
|
|
_codeTimeline;
|
|
_apiTimeline;
|
|
_tickTimeline;
|
|
_timerTimeline;
|
|
_minStartTime = Number.POSITIVE_INFINITY;
|
|
_maxEndTime = Number.NEGATIVE_INFINITY;
|
|
|
|
get minStartTime() {
|
|
return this._minStartTime;
|
|
}
|
|
|
|
get maxEndTime() {
|
|
return this._maxEndTime;
|
|
}
|
|
|
|
selectTimeRange(start, end) {
|
|
this.timeSelection.start = start;
|
|
this.timeSelection.end = end;
|
|
if (start == 0 && end == Infinity) {
|
|
this.timelines.forEach(each => each.clearSelection());
|
|
} else {
|
|
this.timelines.forEach(each => each.selectTimeRange(start, end));
|
|
}
|
|
}
|
|
|
|
setTimelines(
|
|
mapTimeline, icTimeline, deoptTimeline, codeTimeline, apiTimeline,
|
|
tickTimeline, timerTimeline) {
|
|
this._mapTimeline = mapTimeline;
|
|
this._icTimeline = icTimeline;
|
|
this._deoptTimeline = deoptTimeline;
|
|
this._codeTimeline = codeTimeline;
|
|
this._apiTimeline = apiTimeline;
|
|
this._tickTimeline = tickTimeline;
|
|
this._timerTimeline = timerTimeline;
|
|
for (let timeline of arguments) {
|
|
if (timeline === undefined) return;
|
|
this._minStartTime = Math.min(this._minStartTime, timeline.startTime);
|
|
this._maxEndTime = Math.max(this._maxEndTime, timeline.endTime);
|
|
}
|
|
for (let timeline of arguments) {
|
|
timeline.startTime = this._minStartTime;
|
|
timeline.endTime = this._maxEndTime;
|
|
}
|
|
}
|
|
|
|
get mapTimeline() {
|
|
return this._mapTimeline;
|
|
}
|
|
|
|
get icTimeline() {
|
|
return this._icTimeline;
|
|
}
|
|
|
|
get deoptTimeline() {
|
|
return this._deoptTimeline;
|
|
}
|
|
|
|
get codeTimeline() {
|
|
return this._codeTimeline;
|
|
}
|
|
|
|
get apiTimeline() {
|
|
return this._apiTimeline;
|
|
}
|
|
|
|
get tickTimeline() {
|
|
return this._tickTimeline;
|
|
}
|
|
|
|
get timerTimeline() {
|
|
return this._timerTimeline;
|
|
}
|
|
|
|
get timelines() {
|
|
return [
|
|
this._mapTimeline, this._icTimeline, this._deoptTimeline,
|
|
this._codeTimeline, this._apiTimeline, this._tickTimeline,
|
|
this._timerTimeline
|
|
];
|
|
}
|
|
|
|
set chunks(value) {
|
|
// TODO(zcankara) split up between maps and ics, and every timeline track
|
|
this._chunks = value;
|
|
}
|
|
|
|
get chunks() {
|
|
// TODO(zcankara) split up between maps and ics, and every timeline track
|
|
return this._chunks;
|
|
}
|
|
|
|
get nofChunks() {
|
|
return this._nofChunks;
|
|
}
|
|
set nofChunks(count) {
|
|
this._nofChunks = count;
|
|
}
|
|
get map() {
|
|
// TODO(zcankara) rename as selectedMapEvents, array of selected events
|
|
return this._map;
|
|
}
|
|
set map(value) {
|
|
// TODO(zcankara) rename as selectedMapEvents, array of selected events
|
|
if (!value) return;
|
|
this._map = value;
|
|
}
|
|
get ic() {
|
|
// TODO(zcankara) rename selectedICEvents, array of selected events
|
|
return this._ic;
|
|
}
|
|
set ic(value) {
|
|
// TODO(zcankara) rename selectedIcEvents, array of selected events
|
|
if (!value) return;
|
|
this._ic = value;
|
|
}
|
|
get selectedMapLogEntries() {
|
|
return this._selectedMapLogEntries;
|
|
}
|
|
set selectedMapLogEntries(value) {
|
|
if (!value) return;
|
|
this._selectedMapLogEntries = value;
|
|
}
|
|
get selectedSourcePositions() {
|
|
return this._selectedSourcePositions;
|
|
}
|
|
set selectedSourcePositions(value) {
|
|
this._selectedSourcePositions = value;
|
|
}
|
|
get selectedIcLogEntries() {
|
|
return this._selectedIcLogEntries;
|
|
}
|
|
set selectedIcLogEntries(value) {
|
|
if (!value) return;
|
|
this._selectedIcLogEntries = value;
|
|
}
|
|
get timeSelection() {
|
|
return this._timeSelection;
|
|
}
|
|
get entries() {
|
|
if (!this.map) return {};
|
|
return {
|
|
map: this.map.id, time: this.map.time
|
|
}
|
|
}
|
|
}
|
|
|
|
export {State};
|