chrome-devtools-frontend 1.0.1380117 → 1.0.1386602
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.stylelintrc.json +2 -1
- package/config/gni/devtools_grd_files.gni +25 -4
- package/config/gni/devtools_image_files.gni +2 -0
- package/docs/README.md +4 -0
- package/docs/contributing/issues.md +13 -10
- package/docs/get_the_code.md +4 -1
- package/docs/policy/README.md +6 -0
- package/docs/policy/slow-close.md +52 -0
- package/docs/styleguide/ux/README.md +1 -0
- package/docs/styleguide/ux/numbers.md +106 -0
- package/front_end/Images/src/cookie_off.svg +3 -0
- package/front_end/Images/src/domain.svg +3 -0
- package/front_end/core/common/Color.ts +3 -3
- package/front_end/core/common/SettingRegistration.ts +7 -0
- package/front_end/core/host/AidaClient.ts +3 -3
- package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -1
- package/front_end/core/host/UserMetrics.ts +0 -8
- package/front_end/core/i18n/locales/af.json +1031 -887
- package/front_end/core/i18n/locales/am.json +1036 -892
- package/front_end/core/i18n/locales/ar.json +1039 -895
- package/front_end/core/i18n/locales/as.json +1032 -888
- package/front_end/core/i18n/locales/az.json +1034 -890
- package/front_end/core/i18n/locales/be.json +1031 -887
- package/front_end/core/i18n/locales/bg.json +1031 -887
- package/front_end/core/i18n/locales/bn.json +1033 -889
- package/front_end/core/i18n/locales/bs.json +1036 -892
- package/front_end/core/i18n/locales/ca.json +1031 -887
- package/front_end/core/i18n/locales/cs.json +1030 -886
- package/front_end/core/i18n/locales/cy.json +1032 -888
- package/front_end/core/i18n/locales/da.json +1031 -887
- package/front_end/core/i18n/locales/de.json +1033 -889
- package/front_end/core/i18n/locales/el.json +1031 -887
- package/front_end/core/i18n/locales/en-GB.json +1033 -889
- package/front_end/core/i18n/locales/es-419.json +1029 -885
- package/front_end/core/i18n/locales/es.json +1032 -888
- package/front_end/core/i18n/locales/et.json +1033 -889
- package/front_end/core/i18n/locales/eu.json +1031 -887
- package/front_end/core/i18n/locales/fa.json +1035 -891
- package/front_end/core/i18n/locales/fi.json +1035 -891
- package/front_end/core/i18n/locales/fil.json +1034 -890
- package/front_end/core/i18n/locales/fr-CA.json +1031 -887
- package/front_end/core/i18n/locales/fr.json +1049 -905
- package/front_end/core/i18n/locales/gl.json +1032 -888
- package/front_end/core/i18n/locales/gu.json +1035 -891
- package/front_end/core/i18n/locales/he.json +1031 -887
- package/front_end/core/i18n/locales/hi.json +1034 -890
- package/front_end/core/i18n/locales/hr.json +1031 -887
- package/front_end/core/i18n/locales/hu.json +1033 -889
- package/front_end/core/i18n/locales/hy.json +1046 -902
- package/front_end/core/i18n/locales/id.json +1023 -879
- package/front_end/core/i18n/locales/is.json +1032 -888
- package/front_end/core/i18n/locales/it.json +1031 -887
- package/front_end/core/i18n/locales/ja.json +1042 -898
- package/front_end/core/i18n/locales/ka.json +1034 -890
- package/front_end/core/i18n/locales/kk.json +1035 -891
- package/front_end/core/i18n/locales/km.json +1035 -891
- package/front_end/core/i18n/locales/kn.json +1036 -892
- package/front_end/core/i18n/locales/ko.json +1031 -887
- package/front_end/core/i18n/locales/ky.json +1032 -888
- package/front_end/core/i18n/locales/lo.json +1030 -886
- package/front_end/core/i18n/locales/lt.json +1032 -888
- package/front_end/core/i18n/locales/lv.json +1032 -888
- package/front_end/core/i18n/locales/mk.json +1032 -888
- package/front_end/core/i18n/locales/ml.json +1033 -889
- package/front_end/core/i18n/locales/mn.json +1034 -890
- package/front_end/core/i18n/locales/mr.json +1035 -891
- package/front_end/core/i18n/locales/ms.json +1033 -889
- package/front_end/core/i18n/locales/my.json +1033 -889
- package/front_end/core/i18n/locales/ne.json +1036 -892
- package/front_end/core/i18n/locales/nl.json +1033 -889
- package/front_end/core/i18n/locales/no.json +1036 -892
- package/front_end/core/i18n/locales/or.json +1043 -899
- package/front_end/core/i18n/locales/pa.json +1030 -886
- package/front_end/core/i18n/locales/pl.json +1032 -888
- package/front_end/core/i18n/locales/pt-PT.json +1033 -889
- package/front_end/core/i18n/locales/pt.json +1033 -889
- package/front_end/core/i18n/locales/ro.json +1029 -885
- package/front_end/core/i18n/locales/ru.json +1026 -882
- package/front_end/core/i18n/locales/si.json +1031 -887
- package/front_end/core/i18n/locales/sk.json +1033 -889
- package/front_end/core/i18n/locales/sl.json +1031 -887
- package/front_end/core/i18n/locales/sq.json +1061 -917
- package/front_end/core/i18n/locales/sr-Latn.json +1033 -889
- package/front_end/core/i18n/locales/sr.json +1033 -889
- package/front_end/core/i18n/locales/sv.json +1031 -887
- package/front_end/core/i18n/locales/sw.json +1033 -889
- package/front_end/core/i18n/locales/ta.json +1058 -914
- package/front_end/core/i18n/locales/te.json +1037 -893
- package/front_end/core/i18n/locales/th.json +1032 -888
- package/front_end/core/i18n/locales/tr.json +1031 -887
- package/front_end/core/i18n/locales/uk.json +1030 -886
- package/front_end/core/i18n/locales/ur.json +1031 -887
- package/front_end/core/i18n/locales/uz.json +1023 -879
- package/front_end/core/i18n/locales/vi.json +1032 -888
- package/front_end/core/i18n/locales/zh-HK.json +1032 -888
- package/front_end/core/i18n/locales/zh-TW.json +1032 -888
- package/front_end/core/i18n/locales/zh.json +1033 -889
- package/front_end/core/i18n/locales/zu.json +1032 -888
- package/front_end/core/root/Runtime.ts +0 -1
- package/front_end/core/sdk/NetworkManager.test.ts +50 -0
- package/front_end/core/sdk/NetworkManager.ts +6 -4
- package/front_end/core/sdk/SourceMap.test.ts +5 -5
- package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +7 -2
- package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
- package/front_end/core/sdk/SourceMapScopes.test.ts +112 -45
- package/front_end/core/sdk/SourceMapScopes.ts +39 -14
- package/front_end/core/sdk/SourceMapScopesInfo.test.ts +51 -50
- package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
- package/front_end/core/sdk/sdk-meta.ts +27 -0
- package/front_end/devtools_compatibility.js +0 -1
- package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
- package/front_end/entrypoints/inspector_main/renderingOptions.css +1 -1
- package/front_end/entrypoints/main/ExecutionContextSelector.test.ts +13 -3
- package/front_end/entrypoints/main/ExecutionContextSelector.ts +23 -1
- package/front_end/entrypoints/main/MainImpl.ts +0 -5
- package/front_end/generated/Deprecation.ts +0 -15
- package/front_end/generated/InspectorBackendCommands.js +1 -1
- package/front_end/generated/SupportedCSSProperties.js +0 -40
- package/front_end/generated/protocol.ts +1 -0
- package/front_end/models/bindings/IgnoreListManager.ts +25 -2
- package/front_end/models/crux-manager/CrUXManager.test.ts +25 -6
- package/front_end/models/crux-manager/CrUXManager.ts +23 -4
- package/front_end/models/extensions/ExtensionServer.test.ts +14 -0
- package/front_end/models/extensions/ExtensionServer.ts +28 -15
- package/front_end/models/issues_manager/CookieIssue.ts +79 -2
- package/front_end/models/issues_manager/IssuesManager.ts +1 -1
- package/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +8 -0
- package/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +7 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +14 -4
- package/front_end/models/persistence/EditFileSystemView.ts +2 -2
- package/front_end/models/persistence/editFileSystemView.css +6 -3
- package/front_end/models/persistence/workspaceSettingsTab.css +2 -2
- package/front_end/models/trace/extras/Metadata.test.ts +35 -2
- package/front_end/models/trace/extras/Metadata.ts +24 -5
- package/front_end/models/trace/extras/TraceTree.ts +28 -18
- package/front_end/models/trace/extras/URLForEntry.ts +6 -5
- package/front_end/models/trace/handlers/ImagePaintingHandler.ts +12 -0
- package/front_end/models/trace/helpers/Timing.ts +8 -0
- package/front_end/models/trace/insights/CLSCulprits.ts +11 -3
- package/front_end/models/trace/insights/DocumentLatency.ts +16 -3
- package/front_end/models/trace/insights/FontDisplay.ts +10 -3
- package/front_end/models/trace/insights/ImageDelivery.test.ts +98 -0
- package/front_end/models/trace/insights/ImageDelivery.ts +183 -0
- package/front_end/models/trace/insights/InteractionToNextPaint.ts +9 -3
- package/front_end/models/trace/insights/LCPDiscovery.ts +24 -3
- package/front_end/models/trace/insights/LCPPhases.ts +25 -3
- package/front_end/models/trace/insights/Models.ts +1 -0
- package/front_end/models/trace/insights/RenderBlocking.ts +10 -2
- package/front_end/models/trace/insights/SlowCSSSelector.ts +10 -3
- package/front_end/models/trace/insights/ThirdParties.ts +11 -3
- package/front_end/models/trace/insights/Viewport.ts +16 -3
- package/front_end/models/trace/insights/types.ts +13 -2
- package/front_end/models/trace/types/File.ts +7 -0
- package/front_end/models/trace/types/TraceEvents.ts +9 -2
- package/front_end/panels/animation/AnimationTimeline.ts +2 -4
- package/front_end/panels/application/ApplicationPanelSidebar.test.ts +0 -5
- package/front_end/panels/application/ApplicationPanelSidebar.ts +15 -21
- package/front_end/panels/application/IndexedDBViews.ts +4 -1
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +4 -1
- package/front_end/panels/application/StorageView.test.ts +1 -1
- package/front_end/panels/application/resourcesSidebar.css +1 -1
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +1 -1
- package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -1
- package/front_end/panels/browser_debugger/categorizedBreakpointsSidebarPane.css +1 -1
- package/front_end/panels/browser_debugger/xhrBreakpointsSidebarPane.css +1 -1
- package/front_end/panels/console/ConsoleViewMessage.test.ts +25 -0
- package/front_end/panels/console/ConsoleViewMessage.ts +23 -0
- package/front_end/panels/coverage/CoverageListView.ts +1 -1
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
- package/front_end/panels/elements/ClassesPaneWidget.ts +1 -1
- package/front_end/panels/elements/ElementStatePaneWidget.test.ts +3 -2
- package/front_end/panels/elements/ElementStatePaneWidget.ts +7 -2
- package/front_end/panels/elements/ElementsSidebarPane.ts +3 -3
- package/front_end/panels/elements/ElementsTreeElement.ts +1 -0
- package/front_end/panels/elements/LayersWidget.ts +1 -1
- package/front_end/panels/elements/PropertyMatchers.test.ts +7 -0
- package/front_end/panels/elements/PropertyMatchers.ts +3 -0
- package/front_end/panels/elements/classesPaneWidget.css +1 -1
- package/front_end/panels/emulation/DeviceModeView.ts +1 -1
- package/front_end/panels/emulation/DeviceModeWrapper.ts +1 -1
- package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
- package/front_end/panels/freestyler/AiAgent.test.ts +319 -50
- package/front_end/panels/freestyler/AiAgent.ts +193 -141
- package/front_end/panels/freestyler/AiHistoryStorage.test.ts +159 -0
- package/front_end/panels/freestyler/AiHistoryStorage.ts +73 -0
- package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +14 -15
- package/front_end/panels/freestyler/DrJonesFileAgent.ts +3 -14
- package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +14 -13
- package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +3 -3
- package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +38 -36
- package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +3 -14
- package/front_end/panels/freestyler/FreestylerAgent.test.ts +195 -14
- package/front_end/panels/freestyler/FreestylerAgent.ts +13 -18
- package/front_end/panels/freestyler/FreestylerPanel.test.ts +71 -0
- package/front_end/panels/freestyler/FreestylerPanel.ts +99 -74
- package/front_end/panels/freestyler/components/FreestylerChatUi.ts +128 -29
- package/front_end/panels/freestyler/components/UserActionRow.ts +1 -0
- package/front_end/panels/freestyler/components/freestylerChatUi.css +21 -1
- package/front_end/panels/freestyler/components/userActionRow.css +2 -1
- package/front_end/panels/freestyler/freestyler.ts +1 -0
- package/front_end/panels/issues/IssueAggregator.test.ts +50 -0
- package/front_end/panels/issues/IssueAggregator.ts +10 -10
- package/front_end/panels/issues/issuesTree.css +1 -1
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +1 -1
- package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +1 -1
- package/front_end/panels/layers/LayersPanel.ts +1 -1
- package/front_end/panels/lighthouse/lighthouseStartView.css +1 -1
- package/front_end/panels/media/TickingFlameChart.ts +1 -1
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +1 -1
- package/front_end/panels/network/BlockedURLsPane.ts +1 -1
- package/front_end/panels/network/NetworkDataGridNode.ts +1 -0
- package/front_end/panels/network/NetworkLogView.test.ts +1 -1
- package/front_end/panels/network/NetworkPanel.ts +40 -32
- package/front_end/panels/network/NetworkWaterfallColumn.ts +1 -1
- package/front_end/panels/profiler/HeapProfileView.ts +9 -9
- package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -1
- package/front_end/panels/profiler/IsolateSelector.ts +1 -1
- package/front_end/panels/profiler/LiveHeapProfileView.ts +3 -1
- package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +3 -3
- package/front_end/panels/profiler/ProfileView.ts +2 -2
- package/front_end/panels/profiler/profileLauncherView.css +1 -1
- package/front_end/panels/profiler/profilesSidebarTree.css +1 -1
- package/front_end/panels/recorder/recorderController.css +1 -1
- package/front_end/panels/security/CookieControlsTreeElement.ts +18 -0
- package/front_end/panels/security/CookieControlsView.test.ts +29 -0
- package/front_end/panels/security/CookieControlsView.ts +265 -0
- package/front_end/panels/security/CookieReportView.test.ts +157 -0
- package/front_end/panels/security/CookieReportView.ts +208 -12
- package/front_end/panels/security/SecurityPanel.ts +5 -3
- package/front_end/panels/security/SecurityPanelSidebar.ts +6 -1
- package/front_end/panels/security/cookieControlsView.css +101 -0
- package/front_end/panels/security/cookieReportView.css +26 -3
- package/front_end/panels/security/security.ts +4 -0
- package/front_end/panels/security/sidebar.css +1 -1
- package/front_end/panels/settings/KeybindsSettingsTab.ts +3 -2
- package/front_end/panels/settings/SettingsScreen.ts +5 -1
- package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +1 -1
- package/front_end/panels/settings/keybindsSettingsTab.css +6 -1
- package/front_end/panels/settings/settings-meta.ts +3 -1
- package/front_end/panels/settings/settingsScreen.css +10 -0
- package/front_end/panels/sources/CallStackSidebarPane.ts +2 -2
- package/front_end/panels/sources/NavigatorView.ts +1 -0
- package/front_end/panels/sources/navigatorTree.css +1 -1
- package/front_end/panels/sources/sourcesPanel.css +2 -2
- package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -7
- package/front_end/panels/timeline/AppenderUtils.ts +1 -1
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +38 -41
- package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -13
- package/front_end/panels/timeline/InteractionsTrackAppender.ts +3 -4
- package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -12
- package/front_end/panels/timeline/ServerTimingsTrackAppender.ts +1 -10
- package/front_end/panels/timeline/ThreadAppender.ts +9 -12
- package/front_end/panels/timeline/TimelineController.ts +1 -1
- package/front_end/panels/timeline/TimelineDetailsView.test.ts +3 -2
- package/front_end/panels/timeline/TimelineDetailsView.ts +18 -17
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +55 -36
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -1
- package/front_end/panels/timeline/TimelineFlameChartView.ts +33 -14
- package/front_end/panels/timeline/TimelineHistoryManager.test.ts +20 -15
- package/front_end/panels/timeline/TimelineHistoryManager.ts +46 -58
- package/front_end/panels/timeline/TimelineLayersView.ts +1 -1
- package/front_end/panels/timeline/TimelineLoader.ts +16 -0
- package/front_end/panels/timeline/TimelineMiniMap.ts +2 -2
- package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.ts +145 -28
- package/front_end/panels/timeline/TimelineTreeView.ts +65 -16
- package/front_end/panels/timeline/TimelineUIUtils.ts +44 -0
- package/front_end/panels/timeline/TimingsTrackAppender.ts +6 -13
- package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -0
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +6 -1
- package/front_end/panels/timeline/components/LiveMetricsView.test.ts +12 -0
- package/front_end/panels/timeline/components/LiveMetricsView.ts +13 -18
- package/front_end/panels/timeline/components/Sidebar.ts +1 -4
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +1 -1
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +1 -1
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +21 -35
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +16 -9
- package/front_end/panels/timeline/components/TimelineSummary.test.ts +75 -0
- package/front_end/panels/timeline/components/TimelineSummary.ts +101 -0
- package/front_end/panels/timeline/components/Utils.test.ts +49 -0
- package/front_end/panels/timeline/components/Utils.ts +2 -2
- package/front_end/panels/timeline/components/components.ts +2 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +84 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +291 -0
- package/front_end/panels/timeline/components/insights/CLSCulprits.ts +17 -41
- package/front_end/panels/timeline/components/insights/DocumentLatency.ts +28 -46
- package/front_end/panels/timeline/components/insights/EventRef.ts +70 -2
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +28 -46
- package/front_end/panels/timeline/components/insights/Helpers.ts +5 -208
- package/front_end/panels/timeline/components/insights/ImageDelivery.ts +142 -0
- package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +30 -53
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +36 -75
- package/front_end/panels/timeline/components/insights/LCPPhases.ts +15 -49
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +27 -44
- package/front_end/panels/timeline/components/insights/SidebarInsight.ts +3 -197
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +51 -74
- package/front_end/panels/timeline/components/insights/Table.ts +6 -5
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +41 -61
- package/front_end/panels/timeline/components/insights/Viewport.ts +20 -31
- package/front_end/panels/timeline/components/insights/{sidebarInsight.css → baseInsightComponent.css} +9 -9
- package/front_end/panels/timeline/components/insights/insights.ts +4 -0
- package/front_end/panels/timeline/components/insights/types.ts +0 -7
- package/front_end/panels/timeline/components/liveMetricsView.css +5 -5
- package/front_end/panels/timeline/components/timelineSummary.css +67 -0
- package/front_end/panels/timeline/docs/flame_chart_migration.md +1 -1
- package/front_end/panels/timeline/fixtures/traces/README.md +4 -0
- package/front_end/panels/timeline/fixtures/traces/image-delivery.json.gz +0 -0
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +22 -0
- package/front_end/panels/timeline/timeline-meta.ts +1 -1
- package/front_end/panels/timeline/timelineFlamechartPopover.css +14 -4
- package/front_end/panels/timeline/timelineHistoryManager.css +7 -3
- package/front_end/panels/timeline/timelinePanel.css +0 -1
- package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +5 -5
- package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +5 -6
- package/front_end/panels/timeline/track_appenders/LayoutShiftsTrackAppender.test.ts +11 -2
- package/front_end/panels/timeline/track_appenders/ServerTimingsTrackAppender.test.ts +0 -9
- package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +37 -44
- package/front_end/panels/timeline/track_appenders/TimingsTrackAppender.test.ts +44 -30
- package/front_end/panels/timeline/utils/EntryName.ts +1 -2
- package/front_end/panels/timeline/utils/Helpers.ts +19 -0
- package/front_end/panels/timeline/utils/IgnoreList.test.ts +52 -0
- package/front_end/panels/timeline/utils/IgnoreList.ts +68 -7
- package/front_end/panels/timeline/utils/SourceMapsResolver.ts +2 -0
- package/front_end/panels/webauthn/webauthnPane.css +1 -1
- package/front_end/panels/whats_new/ReleaseNote.test.ts +90 -0
- package/front_end/panels/whats_new/ReleaseNoteText.ts +52 -0
- package/front_end/panels/whats_new/ReleaseNoteView.ts +157 -0
- package/front_end/panels/whats_new/WhatsNewImpl.ts +102 -0
- package/front_end/panels/whats_new/releaseNoteView.css +121 -0
- package/front_end/panels/whats_new/resources/WNDT.md +6 -0
- package/front_end/panels/whats_new/resources/whatsnew.avif +0 -0
- package/front_end/panels/whats_new/whats_new-meta.ts +142 -0
- package/front_end/panels/whats_new/whats_new.ts +13 -0
- package/front_end/services/puppeteer/PuppeteerConnection.ts +4 -3
- package/front_end/testing/EnvironmentHelpers.ts +1 -2
- package/front_end/testing/SourceMapEncoder.ts +27 -11
- package/front_end/testing/TraceHelpers.ts +2 -1
- package/front_end/testing/TraceLoader.ts +6 -2
- package/front_end/third_party/lighthouse/README.chromium +2 -2
- package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1380 -1369
- package/front_end/third_party/lighthouse/locales/ar-XB.json +88 -85
- package/front_end/third_party/lighthouse/locales/ar.json +98 -95
- package/front_end/third_party/lighthouse/locales/bg.json +88 -85
- package/front_end/third_party/lighthouse/locales/ca.json +91 -88
- package/front_end/third_party/lighthouse/locales/cs.json +91 -88
- package/front_end/third_party/lighthouse/locales/da.json +94 -91
- package/front_end/third_party/lighthouse/locales/de.json +92 -89
- package/front_end/third_party/lighthouse/locales/el.json +92 -89
- package/front_end/third_party/lighthouse/locales/en-GB.json +89 -86
- package/front_end/third_party/lighthouse/locales/en-US.json +23 -20
- package/front_end/third_party/lighthouse/locales/en-XA.json +88 -85
- package/front_end/third_party/lighthouse/locales/en-XL.json +23 -20
- package/front_end/third_party/lighthouse/locales/es-419.json +92 -89
- package/front_end/third_party/lighthouse/locales/es.json +91 -88
- package/front_end/third_party/lighthouse/locales/fi.json +92 -89
- package/front_end/third_party/lighthouse/locales/fil.json +93 -90
- package/front_end/third_party/lighthouse/locales/fr.json +94 -91
- package/front_end/third_party/lighthouse/locales/he.json +97 -94
- package/front_end/third_party/lighthouse/locales/hi.json +92 -89
- package/front_end/third_party/lighthouse/locales/hr.json +90 -87
- package/front_end/third_party/lighthouse/locales/hu.json +90 -87
- package/front_end/third_party/lighthouse/locales/id.json +91 -88
- package/front_end/third_party/lighthouse/locales/it.json +90 -87
- package/front_end/third_party/lighthouse/locales/ja.json +90 -87
- package/front_end/third_party/lighthouse/locales/ko.json +90 -87
- package/front_end/third_party/lighthouse/locales/lt.json +90 -87
- package/front_end/third_party/lighthouse/locales/lv.json +91 -88
- package/front_end/third_party/lighthouse/locales/nl.json +90 -87
- package/front_end/third_party/lighthouse/locales/no.json +92 -89
- package/front_end/third_party/lighthouse/locales/pl.json +90 -87
- package/front_end/third_party/lighthouse/locales/pt-PT.json +111 -108
- package/front_end/third_party/lighthouse/locales/pt.json +97 -94
- package/front_end/third_party/lighthouse/locales/ro.json +94 -91
- package/front_end/third_party/lighthouse/locales/ru.json +93 -90
- package/front_end/third_party/lighthouse/locales/sk.json +93 -90
- package/front_end/third_party/lighthouse/locales/sl.json +91 -88
- package/front_end/third_party/lighthouse/locales/sr-Latn.json +91 -88
- package/front_end/third_party/lighthouse/locales/sr.json +91 -88
- package/front_end/third_party/lighthouse/locales/sv.json +92 -89
- package/front_end/third_party/lighthouse/locales/ta.json +101 -98
- package/front_end/third_party/lighthouse/locales/te.json +92 -89
- package/front_end/third_party/lighthouse/locales/th.json +95 -92
- package/front_end/third_party/lighthouse/locales/tr.json +91 -88
- package/front_end/third_party/lighthouse/locales/uk.json +93 -90
- package/front_end/third_party/lighthouse/locales/vi.json +95 -92
- package/front_end/third_party/lighthouse/locales/zh-HK.json +92 -89
- package/front_end/third_party/lighthouse/locales/zh-TW.json +98 -95
- package/front_end/third_party/lighthouse/locales/zh.json +96 -93
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +8 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +10 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +7 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.d.ts +1 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.js +4 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js +24 -12
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.d.ts +30 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.js +8 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/common.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/common.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +49 -0
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +118 -88
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +8 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +10 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +7 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.d.ts +1 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.js +4 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js +24 -12
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.d.ts +30 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.js +7 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/common.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/common.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +49 -0
- package/front_end/third_party/puppeteer/package/package.json +3 -3
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +8 -0
- package/front_end/third_party/puppeteer/package/src/api/Frame.ts +3 -1
- package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +11 -3
- package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +11 -0
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPResponse.ts +3 -5
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +34 -17
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/common/DownloadBehavior.ts +31 -0
- package/front_end/third_party/puppeteer/package/src/common/common.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
- package/front_end/ui/components/data_grid/DataGridControllerIntegrator.ts +4 -1
- package/front_end/ui/components/dialogs/ButtonDialog.test.ts +78 -0
- package/front_end/ui/components/dialogs/ButtonDialog.ts +131 -0
- package/front_end/ui/components/dialogs/Dialog.test.ts +43 -0
- package/front_end/ui/components/dialogs/Dialog.ts +64 -2
- package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +15 -1
- package/front_end/ui/components/dialogs/ShortcutDialog.ts +28 -20
- package/front_end/ui/components/dialogs/buttonDialog.css +9 -0
- package/front_end/ui/components/dialogs/dialog.css +15 -0
- package/front_end/ui/components/dialogs/dialogs.ts +2 -0
- package/front_end/ui/components/dialogs/shortcutDialog.css +34 -6
- package/front_end/ui/components/docs/dialog/button_dialog.html +28 -0
- package/front_end/ui/components/docs/dialog/button_dialog.ts +29 -0
- package/front_end/ui/components/docs/performance_panel/basic.ts +1 -1
- package/front_end/ui/components/docs/performance_panel/timeline_history_manager.ts +6 -4
- package/front_end/ui/components/floating_button/FloatingButton.ts +3 -2
- package/front_end/ui/components/icon_button/fileSourceIcon.css +7 -3
- package/front_end/ui/components/issue_counter/IssueCounter.ts +15 -2
- package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +1 -1
- package/front_end/ui/components/markdown_view/MarkdownView.ts +15 -0
- package/front_end/ui/components/markdown_view/markdownView.css +1 -1
- package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +24 -18
- package/front_end/ui/components/switch/SwitchImpl.ts +2 -2
- package/front_end/ui/legacy/Infobar.ts +6 -0
- package/front_end/ui/legacy/InspectorView.ts +40 -0
- package/front_end/ui/legacy/ListWidget.ts +4 -2
- package/front_end/ui/legacy/ThrottledWidget.ts +2 -2
- package/front_end/ui/legacy/Toolbar.ts +3 -3
- package/front_end/ui/legacy/UIUtils.ts +8 -6
- package/front_end/ui/legacy/Widget.ts +32 -0
- package/front_end/ui/legacy/components/data_grid/DataGrid.test.ts +6 -9
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +35 -34
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +1 -1
- package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +2 -2
- package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +1 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +32 -25
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +18 -4
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +80 -39
- package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +4 -4
- package/front_end/ui/legacy/components/utils/jsUtils.css +8 -0
- package/front_end/ui/legacy/filter.css +1 -1
- package/front_end/ui/legacy/inspectorCommon.css +1 -1
- package/front_end/ui/legacy/listWidget.css +4 -1
- package/front_end/ui/legacy/reportView.css +1 -1
- package/front_end/ui/legacy/toolbar.css +3 -6
- package/front_end/ui/legacy/treeoutline.css +3 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +12 -1
- package/front_end/ui/visual_logging/LoggingDriver.test.ts +27 -1
- package/front_end/ui/visual_logging/LoggingDriver.ts +7 -4
- package/package.json +2 -3
- package/scripts/build/wasm-as.py +1 -1
- package/scripts/freestyler/auto_freestyler.js +12 -4
- package/scripts/freestyler/to_tsv.mjs +40 -0
- package/scripts/tools/update_goldens.py +11 -13
- package/front_end/panels/timeline/components/insights/SidebarInsight.test.ts +0 -72
- package/front_end/ui/components/docs/two_states_counter/basic.html +0 -27
- package/front_end/ui/components/docs/two_states_counter/basic.ts +0 -45
- package/front_end/ui/components/two_states_counter/TwoStatesCounter.test.ts +0 -73
- package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +0 -104
- package/front_end/ui/components/two_states_counter/twoStatesCounter.css +0 -37
- package/front_end/ui/components/two_states_counter/two_states_counter.ts +0 -9
@@ -40,6 +40,7 @@ import * as Platform from '../../core/platform/platform.js';
|
|
40
40
|
import * as Root from '../../core/root/root.js';
|
41
41
|
import * as SDK from '../../core/sdk/sdk.js';
|
42
42
|
import type * as Protocol from '../../generated/protocol.js';
|
43
|
+
import * as EmulationModel from '../../models/emulation/emulation.js';
|
43
44
|
import * as Trace from '../../models/trace/trace.js';
|
44
45
|
import * as Workspace from '../../models/workspace/workspace.js';
|
45
46
|
import * as TraceBounds from '../../services/trace_bounds/trace_bounds.js';
|
@@ -65,6 +66,7 @@ import {AnnotationModifiedEvent, ModificationsManager} from './ModificationsMana
|
|
65
66
|
import * as Overlays from './overlays/overlays.js';
|
66
67
|
import {cpuprofileJsonGenerator, traceJsonGenerator} from './SaveFileFormatter.js';
|
67
68
|
import {type Client, TimelineController} from './TimelineController.js';
|
69
|
+
import type {TimelineFlameChartDataProvider} from './TimelineFlameChartDataProvider.js';
|
68
70
|
import {TimelineFlameChartView} from './TimelineFlameChartView.js';
|
69
71
|
import {TimelineHistoryManager} from './TimelineHistoryManager.js';
|
70
72
|
import {TimelineLandingPage} from './TimelineLandingPage.js';
|
@@ -316,6 +318,22 @@ const UIStrings = {
|
|
316
318
|
* @description Tooltip text for a button that takes the user back to the default view which shows performance metrics that are live.
|
317
319
|
*/
|
318
320
|
backToLiveMetrics: 'Go back to the live metrics page',
|
321
|
+
/**
|
322
|
+
* @description Description of the Timeline in/out zoom action that appears in the Performance panel shortcuts dialog.
|
323
|
+
*/
|
324
|
+
timelineZoomInOut: 'Timeline zoom in/out',
|
325
|
+
/**
|
326
|
+
* @description Description of the Timeline fast in/out zoom action that appears in the Performance panel shortcuts dialog.
|
327
|
+
*/
|
328
|
+
timelineFastZoomInOut: 'Timeline fast zoom in/out',
|
329
|
+
/**
|
330
|
+
* @description Description of the Timeline up/down scroll action that appears in the Performance panel shortcuts dialog.
|
331
|
+
*/
|
332
|
+
timelineScrollUpDown: 'Timeline up/down',
|
333
|
+
/**
|
334
|
+
* @description Description of the Timeline right/left panning action that appears in the Performance panel shortcuts dialog.
|
335
|
+
*/
|
336
|
+
timelinePanLeftRight: 'Timeline right/left',
|
319
337
|
};
|
320
338
|
const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelinePanel.ts', UIStrings);
|
321
339
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
@@ -445,6 +463,9 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
445
463
|
#pendingAriaMessage: string|null = null;
|
446
464
|
|
447
465
|
#eventToRelatedInsights: TimelineComponents.RelatedInsightChips.EventToRelatedInsightsMap = new Map();
|
466
|
+
#shortcutsDialog: ShortcutDialog.ShortcutDialog.ShortcutDialog = new ShortcutDialog.ShortcutDialog.ShortcutDialog();
|
467
|
+
|
468
|
+
#onMainEntryHovered: (event: Common.EventTarget.EventTargetEvent<number>) => void;
|
448
469
|
|
449
470
|
constructor() {
|
450
471
|
super('timeline');
|
@@ -544,6 +565,10 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
544
565
|
this.flameChart.getMainFlameChart().addEventListener(
|
545
566
|
PerfUI.FlameChart.Events.CHART_PLAYABLE_STATE_CHANGED, this.#onChartPlayableStateChangeBound, this);
|
546
567
|
|
568
|
+
this.#onMainEntryHovered = this.#onEntryHovered.bind(this, this.flameChart.getMainDataProvider());
|
569
|
+
this.flameChart.getMainFlameChart().addEventListener(
|
570
|
+
PerfUI.FlameChart.Events.ENTRY_HOVERED, this.#onMainEntryHovered);
|
571
|
+
|
547
572
|
this.searchableViewInternal = new UI.SearchableView.SearchableView(this.flameChart, null);
|
548
573
|
this.searchableViewInternal.setMinimumSize(0, 100);
|
549
574
|
this.searchableViewInternal.element.classList.add('searchable-view');
|
@@ -557,16 +582,23 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
557
582
|
this.#splitWidget.enableShowModeSaving();
|
558
583
|
this.#splitWidget.show(this.element);
|
559
584
|
|
585
|
+
this.flameChart.overlays().addEventListener(Overlays.Overlays.TimeRangeMouseOverEvent.eventName, event => {
|
586
|
+
const {overlay} = event as Overlays.Overlays.TimeRangeMouseOverEvent;
|
587
|
+
const overlayBounds = overlay && Overlays.Overlays.traceWindowContainingOverlays([overlay]);
|
588
|
+
this.#minimapComponent.highlightBounds(overlayBounds, /* withBracket */ false);
|
589
|
+
});
|
590
|
+
|
591
|
+
this.flameChart.overlays().addEventListener(Overlays.Overlays.TimeRangeMouseOutEvent.eventName, () => {
|
592
|
+
this.#minimapComponent.clearBoundsHighlight();
|
593
|
+
});
|
594
|
+
|
560
595
|
this.#sideBar.element.addEventListener(TimelineInsights.SidebarInsight.InsightDeactivated.eventName, () => {
|
561
596
|
this.#setActiveInsight(null);
|
562
597
|
});
|
563
598
|
|
564
|
-
// TODO(crbug.com/372946179): when clicking on an insight chip, this event never fires if the insight tab
|
565
|
-
// is not on the DOM. That only happens when the sidebar tabbed pane component is set to Annotations.
|
566
|
-
// In that case, clicking on the insight chip will do nothing.
|
567
599
|
this.#sideBar.element.addEventListener(TimelineInsights.SidebarInsight.InsightActivated.eventName, event => {
|
568
|
-
const {
|
569
|
-
this.#setActiveInsight({
|
600
|
+
const {model, insightSetKey} = event;
|
601
|
+
this.#setActiveInsight({model, insightSetKey});
|
570
602
|
});
|
571
603
|
|
572
604
|
this.#sideBar.element.addEventListener(TimelineInsights.SidebarInsight.InsightProvideOverlays.eventName, event => {
|
@@ -576,25 +608,12 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
576
608
|
|
577
609
|
const overlaysBounds = overlays && Overlays.Overlays.traceWindowContainingOverlays(overlays);
|
578
610
|
if (overlaysBounds) {
|
579
|
-
this.#minimapComponent.highlightBounds(overlaysBounds);
|
611
|
+
this.#minimapComponent.highlightBounds(overlaysBounds, /* withBracket */ true);
|
580
612
|
} else {
|
581
613
|
this.#minimapComponent.clearBoundsHighlight();
|
582
614
|
}
|
583
615
|
});
|
584
616
|
|
585
|
-
this.#sideBar.element.addEventListener(
|
586
|
-
TimelineInsights.SidebarInsight.InsightProvideRelatedEvents.eventName, event => {
|
587
|
-
const relatedInsight = {
|
588
|
-
insightLabel: event.label,
|
589
|
-
activateInsight: event.activateInsight,
|
590
|
-
};
|
591
|
-
for (const traceEvent of event.events) {
|
592
|
-
const relatedInsights = this.#eventToRelatedInsights.get(traceEvent) ?? [];
|
593
|
-
relatedInsights.push(relatedInsight);
|
594
|
-
this.#eventToRelatedInsights.set(traceEvent, relatedInsights);
|
595
|
-
}
|
596
|
-
});
|
597
|
-
|
598
617
|
this.flameChart.element.addEventListener(TimelineInsights.EventRef.EventReferenceClick.eventName, event => {
|
599
618
|
const fromTraceEvent = selectionFromEvent(event.event);
|
600
619
|
this.flameChart.setSelectionAndReveal(fromTraceEvent);
|
@@ -615,7 +634,7 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
615
634
|
|
616
635
|
this.#sideBar.element.addEventListener(TimelineInsights.SidebarInsight.InsightSetHovered.eventName, event => {
|
617
636
|
if (event.bounds) {
|
618
|
-
this.#minimapComponent.highlightBounds(event.bounds);
|
637
|
+
this.#minimapComponent.highlightBounds(event.bounds, /* withBracket */ true);
|
619
638
|
} else {
|
620
639
|
this.#minimapComponent.clearBoundsHighlight();
|
621
640
|
}
|
@@ -913,6 +932,21 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
913
932
|
}
|
914
933
|
}
|
915
934
|
|
935
|
+
#onEntryHovered(dataProvider: TimelineFlameChartDataProvider, event: Common.EventTarget.EventTargetEvent<number>):
|
936
|
+
void {
|
937
|
+
const entryIndex = event.data;
|
938
|
+
if (entryIndex === -1) {
|
939
|
+
this.#minimapComponent.clearBoundsHighlight();
|
940
|
+
return;
|
941
|
+
}
|
942
|
+
const traceEvent = dataProvider.eventByIndex(entryIndex);
|
943
|
+
if (!traceEvent) {
|
944
|
+
return;
|
945
|
+
}
|
946
|
+
const bounds = Trace.Helpers.Timing.traceWindowFromEvent(traceEvent);
|
947
|
+
this.#minimapComponent.highlightBounds(bounds, /* withBracket */ false);
|
948
|
+
}
|
949
|
+
|
916
950
|
private loadFromCpuProfile(profile: Protocol.Profiler.Profile|null): void {
|
917
951
|
if (this.state !== State.IDLE || profile === null) {
|
918
952
|
return;
|
@@ -1073,14 +1107,57 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
1073
1107
|
}
|
1074
1108
|
|
1075
1109
|
if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_ALTERNATIVE_NAVIGATION)) {
|
1076
|
-
|
1077
|
-
const
|
1078
|
-
shortcutDialog.data = {shortcuts: [{title: 'Shortcut Title', bindings: ['Ctrl+E']}]};
|
1079
|
-
const dialogToolbarItem = new UI.Toolbar.ToolbarItem(shortcutDialog);
|
1110
|
+
this.#shortcutsDialog.prependElement(this.#getNavigationSetting());
|
1111
|
+
const dialogToolbarItem = new UI.Toolbar.ToolbarItem(this.#shortcutsDialog);
|
1080
1112
|
this.panelRightToolbar.appendToolbarItem(dialogToolbarItem);
|
1081
1113
|
}
|
1082
1114
|
}
|
1083
1115
|
|
1116
|
+
#getNavigationSetting(): HTMLElement {
|
1117
|
+
const currentNavSetting = Common.Settings.moduleSetting('flamechart-selected-navigation').get();
|
1118
|
+
this.#shortcutsDialog.data = {shortcuts: this.#getShortcutsInfo(currentNavSetting === 'classic')};
|
1119
|
+
|
1120
|
+
const navigationRadioButtons = document.createElement('form');
|
1121
|
+
navigationRadioButtons.classList.add('nav-radio-buttons');
|
1122
|
+
UI.ARIAUtils.markAsRadioGroup(navigationRadioButtons);
|
1123
|
+
const modernNavRadioButton = UI.UIUtils.createRadioLabel(
|
1124
|
+
'flamechart-selected-navigation', 'Modern', /* checked */ currentNavSetting === 'modern');
|
1125
|
+
// Change EventListener is only triggered when the radio button is selected
|
1126
|
+
modernNavRadioButton.radioElement.addEventListener('change', () => {
|
1127
|
+
this.#shortcutsDialog.data = {shortcuts: this.#getShortcutsInfo(/* isNavClassic */ false)};
|
1128
|
+
Common.Settings.moduleSetting('flamechart-selected-navigation').set('modern');
|
1129
|
+
});
|
1130
|
+
const classicNavRadioButton = UI.UIUtils.createRadioLabel(
|
1131
|
+
'flamechart-selected-navigation', 'Classic', /* checked */ currentNavSetting === 'classic');
|
1132
|
+
classicNavRadioButton.radioElement.addEventListener('change', () => {
|
1133
|
+
this.#shortcutsDialog.data = {shortcuts: this.#getShortcutsInfo(/* isNavClassic */ true)};
|
1134
|
+
Common.Settings.moduleSetting('flamechart-selected-navigation').set('classic');
|
1135
|
+
});
|
1136
|
+
|
1137
|
+
navigationRadioButtons.appendChild(modernNavRadioButton);
|
1138
|
+
navigationRadioButtons.appendChild(classicNavRadioButton);
|
1139
|
+
|
1140
|
+
return navigationRadioButtons;
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
#getShortcutsInfo(isNavClassic: boolean): ShortcutDialog.ShortcutDialog.Shortcut[] {
|
1144
|
+
if (isNavClassic) {
|
1145
|
+
return [
|
1146
|
+
{title: i18nString(UIStrings.timelineScrollUpDown), bindings: ['Shift Scroll']},
|
1147
|
+
{title: i18nString(UIStrings.timelineZoomInOut), bindings: ['Scroll', 'W/S']},
|
1148
|
+
{title: i18nString(UIStrings.timelineFastZoomInOut), bindings: ['Shift W/S']},
|
1149
|
+
{title: i18nString(UIStrings.timelinePanLeftRight), bindings: ['A/D']},
|
1150
|
+
];
|
1151
|
+
}
|
1152
|
+
|
1153
|
+
return [
|
1154
|
+
{title: i18nString(UIStrings.timelineScrollUpDown), bindings: ['Scroll', 'Shift up/down']},
|
1155
|
+
{title: i18nString(UIStrings.timelineZoomInOut), bindings: ['Cmd Scroll', 'W/S', '+/-']},
|
1156
|
+
{title: i18nString(UIStrings.timelineFastZoomInOut), bindings: ['Shift W/S', 'Shift +/-']},
|
1157
|
+
{title: i18nString(UIStrings.timelinePanLeftRight), bindings: ['A/D', 'Shift Scroll', 'Shift left/right']},
|
1158
|
+
];
|
1159
|
+
}
|
1160
|
+
|
1084
1161
|
private createSettingsPane(): void {
|
1085
1162
|
this.showSettingsPaneSetting =
|
1086
1163
|
Common.Settings.Settings.instance().createSetting('timeline-show-settings-toolbar', false);
|
@@ -1857,11 +1934,28 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
1857
1934
|
|
1858
1935
|
this.#setActiveInsight(null);
|
1859
1936
|
|
1860
|
-
this.#eventToRelatedInsights.clear();
|
1861
1937
|
const traceInsightsSets = this.#traceEngineModel.traceInsights(traceIndex);
|
1862
1938
|
this.flameChart.setInsights(traceInsightsSets, this.#eventToRelatedInsights);
|
1863
1939
|
this.#sideBar.setInsights(traceInsightsSets);
|
1864
1940
|
|
1941
|
+
this.#eventToRelatedInsights.clear();
|
1942
|
+
if (traceInsightsSets) {
|
1943
|
+
for (const [insightSetKey, insightSet] of traceInsightsSets) {
|
1944
|
+
for (const model of Object.values(insightSet.model)) {
|
1945
|
+
for (const event of model.relatedEvents ?? []) {
|
1946
|
+
const relatedInsights = this.#eventToRelatedInsights.get(event) ?? [];
|
1947
|
+
this.#eventToRelatedInsights.set(event, relatedInsights);
|
1948
|
+
relatedInsights.push({
|
1949
|
+
insightLabel: model.title,
|
1950
|
+
activateInsight: () => {
|
1951
|
+
this.#setActiveInsight({model, insightSetKey});
|
1952
|
+
},
|
1953
|
+
});
|
1954
|
+
}
|
1955
|
+
}
|
1956
|
+
}
|
1957
|
+
}
|
1958
|
+
|
1865
1959
|
this.#showSidebarIfRequired();
|
1866
1960
|
}
|
1867
1961
|
|
@@ -2054,6 +2148,20 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
2054
2148
|
this.flameChart.getMainFlameChart().update();
|
2055
2149
|
}
|
2056
2150
|
|
2151
|
+
#deviceModeModel(): EmulationModel.DeviceModeModel.DeviceModeModel|null {
|
2152
|
+
// This is wrapped in a try/catch because in some DevTools entry points
|
2153
|
+
// (such as worker_app.ts) the Emulation panel is not included and as such
|
2154
|
+
// the below code fails; it tries to instantiate the model which requires
|
2155
|
+
// reading the value of a setting which has not been registered.
|
2156
|
+
// In this case, we fallback to 'ALL'. See crbug.com/361515458 for an
|
2157
|
+
// example bug that this resolves.
|
2158
|
+
try {
|
2159
|
+
return EmulationModel.DeviceModeModel.DeviceModeModel.instance();
|
2160
|
+
} catch {
|
2161
|
+
return null;
|
2162
|
+
}
|
2163
|
+
}
|
2164
|
+
|
2057
2165
|
/**
|
2058
2166
|
* This is called with we are done loading a trace from a file, or after we
|
2059
2167
|
* have recorded a fresh trace.
|
@@ -2094,8 +2202,17 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
2094
2202
|
return;
|
2095
2203
|
}
|
2096
2204
|
|
2097
|
-
|
2098
|
-
|
2205
|
+
if (!metadata) {
|
2206
|
+
const deviceModeModel = this.#deviceModeModel();
|
2207
|
+
let emulatedDeviceTitle;
|
2208
|
+
if (deviceModeModel?.type() === EmulationModel.DeviceModeModel.Type.Device) {
|
2209
|
+
emulatedDeviceTitle = deviceModeModel.device()?.title ?? undefined;
|
2210
|
+
} else if (deviceModeModel?.type() === EmulationModel.DeviceModeModel.Type.Responsive) {
|
2211
|
+
emulatedDeviceTitle = 'Responsive';
|
2212
|
+
}
|
2213
|
+
metadata = await Trace.Extras.Metadata.forNewRecording(
|
2214
|
+
isCpuProfile, recordingStartTime ?? undefined, emulatedDeviceTitle);
|
2215
|
+
}
|
2099
2216
|
|
2100
2217
|
try {
|
2101
2218
|
await this.#executeNewTrace(collectedEvents, recordingIsFresh, metadata);
|
@@ -2128,7 +2245,7 @@ export class TimelinePanel extends UI.Panel.Panel implements Client, TimelineMod
|
|
2128
2245
|
},
|
2129
2246
|
filmStripForPreview: Trace.Extras.FilmStrip.fromParsedTrace(parsedTrace),
|
2130
2247
|
parsedTrace,
|
2131
|
-
|
2248
|
+
metadata,
|
2132
2249
|
});
|
2133
2250
|
} catch (error) {
|
2134
2251
|
// If we errored during the parsing stage, it
|
@@ -149,7 +149,9 @@ const UIStrings = {
|
|
149
149
|
};
|
150
150
|
const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelineTreeView.ts', UIStrings);
|
151
151
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
152
|
-
export class TimelineTreeView extends
|
152
|
+
export class TimelineTreeView extends
|
153
|
+
Common.ObjectWrapper.eventMixin<TimelineTreeView.EventTypes, typeof UI.Widget.VBox>(UI.Widget.VBox)
|
154
|
+
implements UI.SearchableView.Searchable {
|
153
155
|
#selectedEvents: Trace.Types.Events.Event[]|null;
|
154
156
|
private searchResults: Trace.Extras.TraceTree.Node[];
|
155
157
|
linkifier!: Components.Linkifier.Linkifier;
|
@@ -172,8 +174,9 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
172
174
|
private caseSensitiveButton: UI.Toolbar.ToolbarToggle|undefined;
|
173
175
|
private regexButton: UI.Toolbar.ToolbarToggle|undefined;
|
174
176
|
private matchWholeWord: UI.Toolbar.ToolbarToggle|undefined;
|
175
|
-
|
176
177
|
#parsedTrace: Trace.Handlers.Types.ParsedTrace|null = null;
|
178
|
+
#lastHighlightedEvent: HTMLElement|null = null;
|
179
|
+
eventToTreeNode: WeakMap<Trace.Types.Events.Event, Trace.Extras.TraceTree.Node> = new WeakMap();
|
177
180
|
|
178
181
|
constructor() {
|
179
182
|
super();
|
@@ -237,6 +240,9 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
237
240
|
});
|
238
241
|
this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SORTING_CHANGED, this.sortingChanged, this);
|
239
242
|
this.dataGrid.element.addEventListener('mousemove', this.onMouseMove.bind(this), true);
|
243
|
+
this.dataGrid.element.addEventListener(
|
244
|
+
'mouseleave', () => this.dispatchEventToListeners(TimelineTreeView.Events.TREE_ROW_HOVERED, null));
|
245
|
+
this.dataGrid.addEventListener(DataGrid.DataGrid.Events.OPENED_NODE, this.onGridNodeOpened, this);
|
240
246
|
this.dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.LAST);
|
241
247
|
this.dataGrid.setRowContextMenuCallback(this.onContextMenu.bind(this));
|
242
248
|
this.dataGrid.asWidget().show(mainView.element);
|
@@ -269,6 +275,22 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
269
275
|
this.refreshTree();
|
270
276
|
}
|
271
277
|
|
278
|
+
highlightEventInTree(event: Trace.Types.Events.Event|null): void {
|
279
|
+
// Potentially clear last highlight
|
280
|
+
const dataGridElem = event && this.dataGridElementForEvent(event);
|
281
|
+
if (!event || (dataGridElem && dataGridElem !== this.#lastHighlightedEvent)) {
|
282
|
+
this.#lastHighlightedEvent?.style.setProperty('background-color', '');
|
283
|
+
}
|
284
|
+
|
285
|
+
if (event) {
|
286
|
+
const rowElem = dataGridElem;
|
287
|
+
if (rowElem) {
|
288
|
+
this.#lastHighlightedEvent = rowElem;
|
289
|
+
this.#lastHighlightedEvent.style.backgroundColor = 'var(--sys-color-yellow-container)';
|
290
|
+
}
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
272
294
|
filters(): Trace.Extras.TraceFilter.TraceFilter[] {
|
273
295
|
return [this.taskFilter, this.textFilterInternal, ...(ActiveFilters.instance().activeFilters())];
|
274
296
|
}
|
@@ -318,9 +340,6 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
318
340
|
return this.#selectedEvents || [];
|
319
341
|
}
|
320
342
|
|
321
|
-
onHover(_node: Trace.Extras.TraceTree.Node|null): void {
|
322
|
-
}
|
323
|
-
|
324
343
|
appendContextMenuItems(_contextMenu: UI.ContextMenu.ContextMenu, _node: Trace.Extras.TraceTree.Node): void {
|
325
344
|
}
|
326
345
|
|
@@ -370,6 +389,9 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
370
389
|
for (const child of children.values()) {
|
371
390
|
// Exclude the idle time off the total calculation.
|
372
391
|
const gridNode = new TreeGridNode(child, totalUsedTime, maxSelfTime, maxTotalTime, this);
|
392
|
+
for (const e of child.events) {
|
393
|
+
this.eventToTreeNode.set(e, child);
|
394
|
+
}
|
373
395
|
this.dataGrid.insertChild(gridNode);
|
374
396
|
}
|
375
397
|
this.sortingChanged();
|
@@ -527,9 +549,7 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
527
549
|
const gridNode = event.target && (event.target instanceof Node) ?
|
528
550
|
(this.dataGrid.dataGridNodeFromNode((event.target as Node))) :
|
529
551
|
null;
|
530
|
-
|
531
|
-
// @ts-expect-error
|
532
|
-
const profileNode = gridNode && gridNode._profileNode;
|
552
|
+
const profileNode = (gridNode as TreeGridNode)?.profileNode;
|
533
553
|
if (profileNode === this.lastHoveredProfileNode) {
|
534
554
|
return;
|
535
555
|
}
|
@@ -537,6 +557,16 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
537
557
|
this.onHover(profileNode);
|
538
558
|
}
|
539
559
|
|
560
|
+
onHover(node: Trace.Extras.TraceTree.Node|null): void {
|
561
|
+
this.dispatchEventToListeners(TimelineTreeView.Events.TREE_ROW_HOVERED, node);
|
562
|
+
}
|
563
|
+
|
564
|
+
// TODO: do this on selection (before opened)
|
565
|
+
onGridNodeOpened(): void {
|
566
|
+
const node = this.dataGrid.selectedNode as TreeGridNode;
|
567
|
+
this.dispatchEventToListeners(TimelineTreeView.Events.TREE_ROW_HOVERED, node.profileNode);
|
568
|
+
}
|
569
|
+
|
540
570
|
private onContextMenu(
|
541
571
|
contextMenu: UI.ContextMenu.ContextMenu, eventGridNode: DataGrid.DataGrid.DataGridNode<GridNode>): void {
|
542
572
|
const gridNode = (eventGridNode as GridNode);
|
@@ -549,8 +579,16 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
549
579
|
}
|
550
580
|
}
|
551
581
|
|
582
|
+
dataGridElementForEvent(event: Trace.Types.Events.Event|null): HTMLElement|null {
|
583
|
+
if (!event) {
|
584
|
+
return null;
|
585
|
+
}
|
586
|
+
const treeNode = this.eventToTreeNode.get(event);
|
587
|
+
return (treeNode && this.dataGridNodeForTreeNode(treeNode)?.element()) ?? null;
|
588
|
+
}
|
589
|
+
|
552
590
|
dataGridNodeForTreeNode(treeNode: Trace.Extras.TraceTree.Node): GridNode|null {
|
553
|
-
return
|
591
|
+
return treeNodeToGridNode.get(treeNode) || null;
|
554
592
|
}
|
555
593
|
|
556
594
|
// UI.SearchableView.Searchable implementation
|
@@ -597,6 +635,16 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
597
635
|
}
|
598
636
|
}
|
599
637
|
|
638
|
+
export namespace TimelineTreeView {
|
639
|
+
export const enum Events {
|
640
|
+
TREE_ROW_HOVERED = 'TreeRowHovered',
|
641
|
+
}
|
642
|
+
|
643
|
+
export type EventTypes = {
|
644
|
+
[Events.TREE_ROW_HOVERED]: Trace.Extras.TraceTree.Node|null,
|
645
|
+
};
|
646
|
+
}
|
647
|
+
|
600
648
|
export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode<GridNode> {
|
601
649
|
protected populated: boolean;
|
602
650
|
profileNode: Trace.Extras.TraceTree.Node;
|
@@ -651,10 +699,8 @@ export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode<Gri
|
|
651
699
|
if (this.linkElement) {
|
652
700
|
container.createChild('div', 'activity-link').appendChild(this.linkElement);
|
653
701
|
}
|
654
|
-
|
655
|
-
|
656
|
-
UI.ARIAUtils.setLabel(icon, eventCategory.title);
|
657
|
-
icon.style.backgroundColor = eventCategory.getComputedColorValue();
|
702
|
+
UI.ARIAUtils.setLabel(icon, TimelineUIUtils.eventStyle(event).category.title);
|
703
|
+
icon.style.backgroundColor = TimelineUIUtils.eventColor(event);
|
658
704
|
if (Trace.Types.Extensions.isSyntheticExtensionEntry(event)) {
|
659
705
|
icon.style.backgroundColor = Extensions.ExtensionUI.extensionEntryColor(event);
|
660
706
|
}
|
@@ -720,7 +766,7 @@ export class TreeGridNode extends GridNode {
|
|
720
766
|
treeView: TimelineTreeView) {
|
721
767
|
super(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView);
|
722
768
|
this.setHasChildren(this.profileNode.hasChildren());
|
723
|
-
|
769
|
+
treeNodeToGridNode.set(profileNode, this);
|
724
770
|
}
|
725
771
|
|
726
772
|
override populate(): void {
|
@@ -733,12 +779,15 @@ export class TreeGridNode extends GridNode {
|
|
733
779
|
}
|
734
780
|
for (const node of this.profileNode.children().values()) {
|
735
781
|
const gridNode = new TreeGridNode(node, this.grandTotalTime, this.maxSelfTime, this.maxTotalTime, this.treeView);
|
782
|
+
for (const e of node.events) {
|
783
|
+
this.treeView.eventToTreeNode.set(e, node);
|
784
|
+
}
|
736
785
|
this.insertChildOrdered(gridNode);
|
737
786
|
}
|
738
787
|
}
|
739
788
|
}
|
740
789
|
|
741
|
-
const
|
790
|
+
const treeNodeToGridNode = new WeakMap<Trace.Extras.TraceTree.Node, TreeGridNode>();
|
742
791
|
|
743
792
|
export class AggregatedTimelineTreeView extends TimelineTreeView {
|
744
793
|
protected readonly groupBySetting: Common.Settings.Setting<AggregatedTimelineTreeView.GroupBy>;
|
@@ -794,7 +843,7 @@ export class AggregatedTimelineTreeView extends TimelineTreeView {
|
|
794
843
|
icon: (Element|undefined),
|
795
844
|
} {
|
796
845
|
const categories = Utils.EntryStyles.getCategoryStyles();
|
797
|
-
const color =
|
846
|
+
const color = TimelineUIUtils.eventColor(node.event);
|
798
847
|
const unattributed = i18nString(UIStrings.unattributed);
|
799
848
|
|
800
849
|
const id = typeof node.id === 'symbol' ? undefined : node.id;
|
@@ -2275,6 +2275,50 @@ export class TimelineUIUtils {
|
|
2275
2275
|
|
2276
2276
|
return element;
|
2277
2277
|
}
|
2278
|
+
// Generates a Summary component given a aggregated stats for categories.
|
2279
|
+
static generateSummaryDetails(aggregatedStats: Record<string, number>, rangeStart: number, rangeEnd: number):
|
2280
|
+
Element {
|
2281
|
+
let total = 0;
|
2282
|
+
// Calculate total of all categories.
|
2283
|
+
for (const categoryName in aggregatedStats) {
|
2284
|
+
total += aggregatedStats[categoryName];
|
2285
|
+
}
|
2286
|
+
|
2287
|
+
const element = document.createElement('div');
|
2288
|
+
element.classList.add('timeline-details-view-summary');
|
2289
|
+
|
2290
|
+
const summaryTable = new TimelineComponents.TimelineSummary.TimelineSummary();
|
2291
|
+
let categories: TimelineComponents.TimelineSummary.CategoryData[] = [];
|
2292
|
+
|
2293
|
+
// Get stats values from categories.
|
2294
|
+
for (const categoryName in Utils.EntryStyles.getCategoryStyles()) {
|
2295
|
+
const category = Utils.EntryStyles.getCategoryStyles()[categoryName as keyof Utils.EntryStyles.CategoryPalette];
|
2296
|
+
if (category.name === Utils.EntryStyles.EventCategory.IDLE) {
|
2297
|
+
continue;
|
2298
|
+
}
|
2299
|
+
const value = aggregatedStats[category.name];
|
2300
|
+
if (!value) {
|
2301
|
+
continue;
|
2302
|
+
}
|
2303
|
+
const title = category.title;
|
2304
|
+
const color = category.getCSSValue();
|
2305
|
+
categories.push({value, color, title});
|
2306
|
+
}
|
2307
|
+
|
2308
|
+
// Keeps the most useful categories on top.
|
2309
|
+
categories = categories.sort((a, b) => b.value - a.value);
|
2310
|
+
const start = Trace.Types.Timing.MilliSeconds(rangeStart);
|
2311
|
+
const end = Trace.Types.Timing.MilliSeconds(rangeEnd);
|
2312
|
+
summaryTable.data = {
|
2313
|
+
rangeStart: start,
|
2314
|
+
rangeEnd: end,
|
2315
|
+
total,
|
2316
|
+
categories,
|
2317
|
+
};
|
2318
|
+
const summaryTableContainer = element.createChild('div');
|
2319
|
+
summaryTableContainer.appendChild(summaryTable);
|
2320
|
+
return element;
|
2321
|
+
}
|
2278
2322
|
|
2279
2323
|
static generateDetailsContentForFrame(
|
2280
2324
|
frame: Trace.Types.Events.LegacyTimelineFrame, filmStrip: Trace.Extras.FilmStrip.Data|null,
|
@@ -8,7 +8,7 @@ import * as Trace from '../../models/trace/trace.js';
|
|
8
8
|
import {buildGroupStyle, buildTrackHeader, getFormattedTime} from './AppenderUtils.js';
|
9
9
|
import {
|
10
10
|
type CompatibilityTracksAppender,
|
11
|
-
type
|
11
|
+
type PopoverInfo,
|
12
12
|
type TrackAppender,
|
13
13
|
type TrackAppenderName,
|
14
14
|
VisualLoggingTrackName,
|
@@ -307,18 +307,13 @@ export class TimingsTrackAppender implements TrackAppender {
|
|
307
307
|
if (Trace.Types.Events.isPerformanceMark(event)) {
|
308
308
|
return `[mark]: ${event.name}`;
|
309
309
|
}
|
310
|
+
if (Trace.Types.Extensions.isSyntheticExtensionEntry(event) && event.args.tooltipText) {
|
311
|
+
return event.args.tooltipText;
|
312
|
+
}
|
310
313
|
return event.name;
|
311
314
|
}
|
312
315
|
|
313
|
-
|
314
|
-
* Returns the info shown when an event added by this appender
|
315
|
-
* is hovered in the timeline.
|
316
|
-
*/
|
317
|
-
highlightedEntryInfo(event: Trace.Types.Events.Event): HighlightedEntryInfo {
|
318
|
-
const title = Trace.Types.Extensions.isSyntheticExtensionEntry(event) && event.args.tooltipText ?
|
319
|
-
event.args.tooltipText :
|
320
|
-
this.titleForEvent(event);
|
321
|
-
|
316
|
+
setPopoverInfo(event: Trace.Types.Events.Event, info: PopoverInfo): void {
|
322
317
|
// If an event is a marker event, rather than show a duration of 0, we can instead show the time that the event happened, which is much more useful. We do this currently for:
|
323
318
|
// Page load events: DCL, FCP and LCP
|
324
319
|
// performance.mark() events
|
@@ -331,9 +326,7 @@ export class TimingsTrackAppender implements TrackAppender {
|
|
331
326
|
this.#parsedTrace.Meta.navigationsByNavigationId,
|
332
327
|
this.#parsedTrace.Meta.navigationsByFrameId,
|
333
328
|
);
|
334
|
-
|
329
|
+
info.formattedTime = getFormattedTime(timeOfEvent);
|
335
330
|
}
|
336
|
-
|
337
|
-
return {title, formattedTime: getFormattedTime(event.dur)};
|
338
331
|
}
|
339
332
|
}
|
@@ -188,7 +188,12 @@ export class FieldSettingsDialog extends HTMLElement {
|
|
188
188
|
async #urlHasFieldData(url: string): Promise<boolean> {
|
189
189
|
const cruxManager = CrUXManager.CrUXManager.instance();
|
190
190
|
const result = await cruxManager.getFieldDataForPage(url);
|
191
|
-
return Object.
|
191
|
+
return Object.entries(result).some(([key, value]) => {
|
192
|
+
if (key === 'warnings') {
|
193
|
+
return false;
|
194
|
+
}
|
195
|
+
return Boolean(value);
|
196
|
+
});
|
192
197
|
}
|
193
198
|
|
194
199
|
async #submit(enabled: boolean): Promise<void> {
|
@@ -707,6 +707,7 @@ describeWithMockConnection('LiveMetricsView', () => {
|
|
707
707
|
'url-DESKTOP': null,
|
708
708
|
'url-PHONE': null,
|
709
709
|
'url-TABLET': null,
|
710
|
+
warnings: [],
|
710
711
|
};
|
711
712
|
|
712
713
|
sinon.stub(CrUXManager.CrUXManager.instance(), 'getFieldDataForCurrentPage').callsFake(async () => mockFieldData);
|
@@ -787,6 +788,17 @@ describeWithMockConnection('LiveMetricsView', () => {
|
|
787
788
|
assert.strictEqual(title.innerText, 'Local and field metrics');
|
788
789
|
});
|
789
790
|
|
791
|
+
it('should display any warning from crux', async () => {
|
792
|
+
mockFieldData.warnings.push('Warning from crux');
|
793
|
+
|
794
|
+
const view = renderLiveMetrics();
|
795
|
+
|
796
|
+
await coordinator.done();
|
797
|
+
|
798
|
+
const fieldMessage = getFieldMessage(view);
|
799
|
+
assert.match(fieldMessage!.textContent!, /Warning from crux/);
|
800
|
+
});
|
801
|
+
|
790
802
|
it('should make initial request on render when crux is enabled', async () => {
|
791
803
|
mockFieldData['url-ALL'] = createMockFieldData();
|
792
804
|
|