Skip to content

Commit 185e5f6

Browse files
committed
Fix timeline panel types
1 parent fff2da2 commit 185e5f6

File tree

2 files changed

+86
-97
lines changed

2 files changed

+86
-97
lines changed

front_end/panels/timeline/TimelineFlameChartView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export const createOverlayFnForEvent = (
104104
end: Trace.Types.Timing.Micro,
105105
}[],
106106
entry?: Trace.Types.Events.Event,
107-
) => (): Overlays.Overlays.TimelineOverlay[] => {
107+
) => (): Trace.Types.Overlays.Overlay[] => {
108108
return [{
109109
type: 'TIMESPAN_BREAKDOWN',
110110
sections: phases.map(({ start, end, name }) => ({

front_end/panels/timeline/TimelinePanel.ts

Lines changed: 85 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ const UIStrings = {
9898
/**
9999
* @description Title of disable capture jsprofile setting in timeline panel of the performance panel
100100
*/
101-
// disableJavascriptSamples: 'Disable JavaScript samples',
101+
disableJavascriptSamples: 'Disable JavaScript samples',
102102
/**
103103
*@description Title of capture layers and pictures setting in timeline panel of the performance panel
104104
*/
105-
// enableAdvancedPaint: 'Enable advanced paint instrumentation (slow)',
105+
enableAdvancedPaint: 'Enable advanced paint instrumentation (slow)',
106106
/**
107107
* @description Title of CSS selector stats setting in timeline panel of the performance panel
108108
*/
109-
// enableSelectorStats: 'Enable CSS selector stats (slow)',
109+
enableSelectorStats: 'Enable CSS selector stats (slow)',
110110
/**
111111
* @description Title of show screenshots setting in timeline panel of the performance panel
112112
*/
@@ -118,19 +118,19 @@ const UIStrings = {
118118
/**
119119
* @description Text to clear content
120120
*/
121-
// clear: 'Clear',
121+
clear: 'Clear',
122122
/**
123123
* @description A label for a button that fixes something.
124124
*/
125-
// fixMe: 'Fix me',
125+
fixMe: 'Fix me',
126126
/**
127127
* @description Tooltip text that appears when hovering over the largeicon load button
128128
*/
129129
loadTrace: 'Load trace…',
130130
/**
131131
* @description Text to take screenshots
132132
*/
133-
// saveProfile: 'Save profile…',
133+
captureScreenshots: 'Capture screenshots',
134134
/**
135135
* @description Text in Timeline Panel of the Performance panel
136136
*/
@@ -198,11 +198,11 @@ const UIStrings = {
198198
/**
199199
* @description Text to close something
200200
*/
201-
// downloadAfterError: 'Download trace',
201+
close: 'Close',
202202
/**
203203
* @description Status text to indicate the recording has failed in the Performance panel
204204
*/
205-
// recordingFailed: 'Recording failed',
205+
recordingFailed: 'Recording failed',
206206
/**
207207
* @description Status text to indicate that exporting the trace has failed
208208
*/
@@ -605,33 +605,40 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
605605
this.#setActiveOverlays((() => {
606606
// We should have the current active trace index on the model loaded
607607
const traceInsightsData = this.#traceEngineModel.traceInsights(this.#activeTraceIndex() || 0);
608-
const insight = Trace.Insights.Common.getInsight('ThirdParties', traceInsightsData, navigationId);
608+
if (!traceInsightsData) {
609+
return [];
610+
}
611+
const traceInsightSets = traceInsightsData.get(navigationId);
612+
if (!traceInsightSets) {
613+
return [];
614+
}
615+
const insight = Trace.Insights.Common.getInsight('ThirdParties', traceInsightSets);
609616
if (!insight) {
610617
return [];
611618
}
612619

613-
const overlays: Overlays.Overlays.TimelineOverlay[] = [];
614-
for (const [entity, events] of insight.eventsByEntity) {
615-
if (entity === insight.firstPartyEntity || (filterByThirdParty && entity.name !== filterByThirdParty)) {
616-
continue;
617-
}
620+
const relatedEventsIsValidEvent = (relatedEvents?: Trace.Insights.Types.RelatedEventsMap | Trace.Types.Events.Event[]): relatedEvents is Trace.Types.Events.Event[] => {
621+
return relatedEvents instanceof Array;
622+
}
618623

619-
for (const event of events) {
620-
if (filterByTimestamp && event.ts > filterByTimestamp) {
621-
continue;
622-
}
623-
624-
// The overlay entry can be used to highlight any trace entry, including network track entries.
625-
// This function is extracted from the ThirdParties overlay component, since it is not accessible
626-
// from outside the component.
627-
overlays.push({
628-
type: 'ENTRY_OUTLINE',
629-
entry: event,
630-
outlineReason: 'INFO',
631-
});
624+
const overlays: Trace.Types.Overlays.EntryOutline[] = [];
625+
if(relatedEventsIsValidEvent(insight.relatedEvents)) {
626+
for (const event of insight.relatedEvents) {
627+
if (filterByTimestamp && event.ts > filterByTimestamp) {
628+
continue;
629+
}
630+
631+
// The overlay entry can be used to highlight any trace entry, including network track entries.
632+
// This function is extracted from the ThirdParties overlay component, since it is not accessible
633+
// from outside the component.
634+
overlays.push({
635+
type: 'ENTRY_OUTLINE',
636+
entry: event,
637+
outlineReason: 'INFO',
638+
});
632639
}
633-
}
634640

641+
}
635642
return overlays;
636643
})());
637644
});
@@ -641,7 +648,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
641648
const {entries} = event.detail;
642649
this.#setActiveOverlays((() => {
643650

644-
const overlays: Overlays.Overlays.TimelineOverlay[] = [];
651+
const overlays: Trace.Types.Overlays.EntryOutline[] = [];
645652
for (const entry of entries) {
646653

647654
// The overlay entry can be used to highlight any trace entry, including network track entries.
@@ -652,7 +659,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
652659
entry: entry.entry,
653660
outlineReason: 'INFO',
654661
});
655-
ModificationsManager.activeManager()?.createAnnotation(entry);
662+
ModificationsManager.activeManager()?.createAnnotation(entry, {loadedFromFile: false, muteAriaNotifications: false});
656663
}
657664

658665
return overlays;
@@ -663,9 +670,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
663670
document.getElementById('-blink-dev-tools')?.addEventListener(HighlightLCPImageWithDelayEvent.eventName, (event: HighlightLCPImageWithDelayEvent) => {
664671
const {entry} = event.detail;
665672
this.#setActiveOverlays((() => {
666-
667673
// Creates an overlay scheme similar to the LCP resource breakdown.
668-
const overlays: Overlays.Overlays.TimelineOverlay[] = [
674+
const overlays: Trace.Types.Overlays.Overlay[] = [
669675
{
670676
type: 'ENTRY_OUTLINE',
671677
entry: entry.entry,
@@ -790,7 +796,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
790796
}
791797
}
792798

793-
#setActiveOverlays(overlays: Overlays.Overlays.TimelineOverlay[]): void {
799+
#setActiveOverlays(overlays: Trace.Types.Overlays.Overlay[]): void {
794800
this.flameChart.setOverlays(overlays, {updateTraceWindow: true});
795801
}
796802

@@ -1184,12 +1190,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
11841190
private populateToolbar(): void {
11851191
const canRecord = this.canRecord();
11861192

1187-
if (canRecord || isNode) {
1193+
// if (canRecord || isNode) {
11881194
// this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.toggleRecordAction));
1189-
}
1190-
if (canRecord) {
1195+
// }
1196+
// if (canRecord) {
11911197
// this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.recordReloadAction));
1192-
}
1198+
// }
11931199

11941200
// this.clearButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clear), 'clear', undefined, 'timeline.clear');
11951201
// this.clearButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => this.onClearButton());
@@ -1215,7 +1221,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
12151221
// event.preventDefault();
12161222
// event.stopPropagation();
12171223

1218-
if (canRecord) {
1224+
// if (canRecord) {
12191225
// const contextMenu = new UI.ContextMenu.ContextMenu(event);
12201226
// contextMenu.saveSection().appendItem(i18nString(UIStrings.exportNormalTraces), () => {
12211227
// void this.saveToFile();
@@ -1224,16 +1230,16 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
12241230
// void this.saveToFile(/* isEnhancedTraces */ true);
12251231
// this.panelToolbar.appendSeparator();
12261232

1227-
if (!isNode) {
1228-
this.homeButton = new UI.Toolbar.ToolbarButton(
1229-
i18nString(UIStrings.backToLiveMetrics), 'home', undefined, 'timeline.back-to-live-metrics');
1230-
this.homeButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
1231-
this.#changeView({mode: 'LANDING_PAGE'});
1232-
this.#historyManager.navigateToLandingPage();
1233-
});
1234-
this.panelToolbar.appendToolbarItem(this.homeButton);
1235-
this.panelToolbar.appendSeparator();
1236-
}
1233+
// if (!isNode) {
1234+
// this.homeButton = new UI.Toolbar.ToolbarButton(
1235+
// i18nString(UIStrings.backToLiveMetrics), 'home', undefined, 'timeline.back-to-live-metrics');
1236+
// this.homeButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
1237+
// this.#changeView({mode: 'LANDING_PAGE'});
1238+
// this.#historyManager.navigateToLandingPage();
1239+
// });
1240+
// this.panelToolbar.appendToolbarItem(this.homeButton);
1241+
// this.panelToolbar.appendSeparator();
1242+
// }
12371243
// }
12381244

12391245
// TODO(crbug.com/337909145): need to hide "Live metrics" option if !canRecord.
@@ -1534,23 +1540,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
15341540

15351541
try {
15361542
let traceAsString;
1537-
if (metadata?.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE) {
1538-
const profileEvent = traceEvents.find(e => e.name === 'CpuProfile');
1539-
if (!profileEvent || !profileEvent.args?.data) {
1540-
return;
1541-
}
1542-
1543-
await this.yieldToMain();
1544-
1545-
const profileEventData = profileEvent.args?.data;
1546-
if (profileEventData.hasOwnProperty('cpuProfile')) {
1547-
const profile = (profileEventData as {cpuProfile: Protocol.Profiler.Profile}).cpuProfile;
1548-
traceAsString = cpuprofileJsonGenerator(profile as Protocol.Profiler.Profile);
1549-
}
1550-
} else {
1551-
const formattedTraceIter = traceJsonGenerator(traceEvents, metadata);
1543+
const formattedTraceIter = traceJsonGenerator(traceEvents, metadata);
15521544
traceAsString = Array.from(formattedTraceIter).join('');
1553-
}
15541545

15551546
await this.yieldToMain();
15561547

@@ -1587,7 +1578,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
15871578
}
15881579

15891580
async exportTrace(): Promise<void> {
1590-
void this.saveToFile();
1581+
void this.saveToFile({
1582+
includeScriptContent: false,
1583+
includeSourceMaps: false,
1584+
addModifications: false,
1585+
});
15911586
}
15921587

15931588
/**
@@ -1967,12 +1962,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
19671962
// this.showSettingsPaneButton.element.style.setProperty('--dot-toggle-top', '16px');
19681963
// this.showSettingsPaneButton.element.style.setProperty('--dot-toggle-left', '15px');
19691964

1970-
if (messages.length) {
1971-
const tooltipElement = document.createElement('div');
1972-
messages.forEach(message => {
1973-
tooltipElement.createChild('div').textContent = message;
1974-
});
1975-
this.showSettingsPaneButton.setTitle(tooltipElement.textContent || '');
1965+
// if (messages.length) {
1966+
// const tooltipElement = document.createElement('div');
1967+
// messages.forEach(message => {
1968+
// tooltipElement.createChild('div').textContent = message;
1969+
// });
1970+
// this.showSettingsPaneButton.setTitle(tooltipElement.textContent || '');
19761971
// } else {
19771972
// this.showSettingsPaneButton.setTitle(i18nString(UIStrings.captureSettings));
19781973
// }
@@ -2216,12 +2211,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
22162211
this.#addSidebarIconToToolbar();
22172212
}
22182213

2219-
const exportTraceOptionsElement =
2220-
this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions;
2221-
exportTraceOptionsElement.data = {
2222-
onExport: this.saveToFile.bind(this),
2223-
buttonEnabled: this.state === State.IDLE && this.#hasActiveTrace(),
2224-
};
2214+
// const exportTraceOptionsElement =
2215+
// this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions;
2216+
// exportTraceOptionsElement.data = {
2217+
// onExport: this.saveToFile.bind(this),
2218+
// buttonEnabled: this.state === State.IDLE && this.#hasActiveTrace(),
2219+
// };
22252220

22262221
this.#historyManager.setEnabled(this.state === State.IDLE);
22272222
// this.clearButton.setEnabled(this.state === State.IDLE);
@@ -2360,8 +2355,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
23602355

23612356
const exclusiveFilter = this.#exclusiveFilterPerTrace.get(traceIndex) ?? null;
23622357
this.#applyActiveFilters(parsedTrace.Meta.traceIsGeneric, exclusiveFilter);
2363-
(this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2364-
.updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
2358+
// (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2359+
// .updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
23652360

23662361
// Add ModificationsManager listeners for annotations change to update the
23672362
// Annotation Overlays.
@@ -2494,8 +2489,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
24942489
const annotations = currentManager?.getAnnotations() ?? [];
24952490
const annotationEntryToColorMap = this.buildColorsAnnotationsMap(annotations);
24962491
this.#sideBar.setAnnotations(annotations, annotationEntryToColorMap);
2497-
(this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2498-
.updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
2492+
// (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2493+
// .updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
24992494
}
25002495

25012496
/**
@@ -3340,7 +3335,7 @@ ${responseTextForPassedInsights}`;
33403335
}
33413336
panelInstance.addEventListener(Events.RECORDING_COMPLETED, listener);
33423337

3343-
panelInstance.recordReload();
3338+
// panelInstance.recordReload();
33443339
});
33453340
}
33463341

@@ -3425,12 +3420,12 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
34253420
return false;
34263421
}
34273422
switch (actionId) {
3428-
case 'timeline.toggle-recording':
3429-
void panel.toggleRecording();
3430-
return true;
3431-
case 'timeline.record-reload':
3432-
panel.recordReload();
3433-
return true;
3423+
// case 'timeline.toggle-recording':
3424+
// void panel.toggleRecording();
3425+
// return true;
3426+
// case 'timeline.record-reload':
3427+
// panel.recordReload();
3428+
// return true;
34343429
case 'timeline.save-to-file':
34353430
void panel.saveToFile({includeScriptContent: false, includeSourceMaps: false, addModifications: false});
34363431
return true;
@@ -3469,13 +3464,6 @@ export class SelectedInsight {
34693464
export const enum Events {
34703465
IS_VIEWING_TRACE = 'IsViewingTrace',
34713466
RECORDING_COMPLETED = 'RecordingCompleted',
3472-
}
3473-
export interface EventTypes {
3474-
[Events.IS_VIEWING_TRACE]: boolean;
3475-
[Events.RECORDING_COMPLETED]: {traceIndex: number}|{errorText: string};
3476-
}
3477-
3478-
export const enum Events {
34793467
OpenTraceFile = 'opentracefile',
34803468
LoadRawTraceData = 'loadrawtracedata',
34813469
RawTraceDataLoaded = 'rawtracedataloaded',
@@ -3487,8 +3475,9 @@ export const enum Events {
34873475
ShowThirdParties = 'showthirdparties',
34883476
ClearActiveOverlays = 'clearactiveoverlays',
34893477
}
3490-
34913478
export interface EventTypes {
3479+
[Events.IS_VIEWING_TRACE]: boolean;
3480+
[Events.RECORDING_COMPLETED]: {traceIndex: number}|{errorText: string};
34923481
[Events.RawTraceDataLoaded]: {
34933482
rawTraceData: Blob | string | null,
34943483
};

0 commit comments

Comments
 (0)