chrome-devtools-frontend 1.0.1362775 → 1.0.1367881
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/.eslintrc.js +1 -0
- package/.stylelintrc.json +2 -1
- package/config/gni/devtools_grd_files.gni +14 -2
- package/config/gni/devtools_image_files.gni +2 -1
- package/docs/contributing/issues.md +15 -0
- package/extensions/cxx_debugging/src/ExtensionOptions.ts +0 -1
- package/extensions/cxx_debugging/third_party/llvm/README.chromium +1 -1
- package/front_end/.eslintrc.js +0 -5
- package/front_end/Images/src/button-magic.svg +3 -0
- package/front_end/Images/src/performance-panel-delete-annotation.svg +32 -0
- package/front_end/Images/src/performance-panel-diagram.svg +19 -14
- package/front_end/Images/src/performance-panel-entry-label.svg +9 -16
- package/front_end/Images/src/performance-panel-time-range.svg +2 -8
- package/front_end/core/common/AppProvider.ts +1 -1
- package/front_end/core/common/Object.ts +2 -7
- package/front_end/core/common/SettingRegistration.ts +1 -1
- package/front_end/core/common/Settings.ts +1 -1
- package/front_end/core/host/AidaClient.ts +7 -1
- package/front_end/core/host/InspectorFrontendHost.ts +1 -1
- package/front_end/core/host/ResourceLoader.ts +1 -1
- package/front_end/core/host/UserMetrics.ts +14 -2
- package/front_end/core/i18n/time-utilities.ts +7 -1
- package/front_end/core/platform/ArrayUtilities.ts +1 -0
- package/front_end/core/platform/DevToolsPath.ts +1 -1
- package/front_end/core/platform/Timing.ts +1 -1
- package/front_end/core/platform/UIString.ts +1 -1
- package/front_end/core/platform/UserVisibleError.ts +1 -1
- package/front_end/core/root/Runtime.ts +11 -2
- package/front_end/core/sdk/AccessibilityModel.ts +3 -4
- package/front_end/core/sdk/CPUProfilerModel.ts +3 -4
- package/front_end/core/sdk/CSSContainerQuery.ts +3 -3
- package/front_end/core/sdk/CSSLayer.ts +2 -2
- package/front_end/core/sdk/CSSMatchedStyles.test.ts +1 -0
- package/front_end/core/sdk/CSSMatchedStyles.ts +10 -2
- package/front_end/core/sdk/CSSMedia.ts +2 -2
- package/front_end/core/sdk/CSSMetadata.ts +21 -0
- package/front_end/core/sdk/CSSModel.ts +1 -0
- package/front_end/core/sdk/CSSProperty.ts +2 -2
- package/front_end/core/sdk/CSSQuery.ts +2 -2
- package/front_end/core/sdk/CSSRule.ts +2 -2
- package/front_end/core/sdk/CSSScope.ts +2 -2
- package/front_end/core/sdk/CSSStyleDeclaration.ts +3 -3
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +4 -4
- package/front_end/core/sdk/CSSSupports.ts +2 -2
- package/front_end/core/sdk/CookieModel.ts +1 -1
- package/front_end/core/sdk/DOMDebuggerModel.ts +1 -1
- package/front_end/core/sdk/DebuggerModel.ts +9 -3
- package/front_end/core/sdk/EnhancedTracesParser.test.ts +1 -5
- package/front_end/core/sdk/EnhancedTracesParser.ts +2 -6
- package/front_end/core/sdk/EventBreakpointsModel.ts +1 -2
- package/front_end/core/sdk/FrameAssociated.ts +1 -1
- package/front_end/core/sdk/FrameManager.ts +9 -7
- package/front_end/core/sdk/HeapProfilerModel.ts +3 -4
- package/front_end/core/sdk/IsolateManager.ts +2 -3
- package/front_end/core/sdk/LayerTreeBase.ts +2 -2
- package/front_end/core/sdk/NetworkManager.ts +1 -1
- package/front_end/core/sdk/OverlayModel.ts +2 -2
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +1 -1
- package/front_end/core/sdk/PageLoad.ts +1 -1
- package/front_end/core/sdk/PageResourceLoader.ts +1 -1
- package/front_end/core/sdk/RemoteObject.ts +3 -3
- package/front_end/core/sdk/Resource.ts +2 -2
- package/front_end/core/sdk/ResourceTreeModel.ts +1 -1
- package/front_end/core/sdk/SDKModel.ts +1 -1
- package/front_end/core/sdk/Script.ts +5 -5
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +5 -7
- package/front_end/core/sdk/SourceMap.ts +1 -1
- package/front_end/core/sdk/SourceMapManager.ts +1 -1
- package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
- package/front_end/core/sdk/SourceMapScopesInfo.ts +2 -2
- package/front_end/core/sdk/Target.ts +3 -2
- package/front_end/core/sdk/TargetManager.ts +4 -1
- package/front_end/core/sdk/WebAuthnModel.ts +20 -0
- package/front_end/core/sdk/sdk-meta.ts +7 -0
- package/front_end/devtools_compatibility.js +3 -3
- package/front_end/entrypoints/formatter_worker/CSSFormatter.ts +1 -1
- package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +1 -1
- package/front_end/entrypoints/formatter_worker/IdentityFormatter.ts +1 -1
- package/front_end/entrypoints/formatter_worker/JSONFormatter.ts +1 -1
- package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +1 -1
- package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +1 -1
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +12 -12
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
- package/front_end/entrypoints/main/MainImpl.ts +11 -1
- package/front_end/generated/InspectorBackendCommands.js +5 -3
- package/front_end/generated/SupportedCSSProperties.js +20 -14
- package/front_end/generated/protocol-mapping.d.ts +10 -0
- package/front_end/generated/protocol-proxy-api.d.ts +12 -0
- package/front_end/generated/protocol.ts +32 -1
- package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +4 -2
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +2 -2
- package/front_end/models/bindings/CompilerScriptMapping.ts +1 -2
- package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +1 -1
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
- package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
- package/front_end/models/bindings/IgnoreListManager.test.ts +49 -12
- package/front_end/models/bindings/IgnoreListManager.ts +79 -5
- package/front_end/models/bindings/ResourceMapping.ts +1 -1
- package/front_end/models/bindings/StylesSourceMapping.ts +11 -6
- package/front_end/models/breakpoints/BreakpointManager.test.ts +1 -1
- package/front_end/models/extensions/ExtensionPanel.ts +1 -1
- package/front_end/models/extensions/ExtensionServer.test.ts +1 -1
- package/front_end/models/extensions/ExtensionServer.ts +1 -1
- package/front_end/models/extensions/ExtensionView.ts +1 -1
- package/front_end/models/extensions/LanguageExtensionEndpoint.ts +1 -1
- package/front_end/models/extensions/RecorderPluginManager.ts +1 -1
- package/front_end/models/har/Importer.ts +1 -1
- package/front_end/models/issues_manager/AttributionReportingIssue.ts +1 -1
- package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -2
- package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +1 -1
- package/front_end/models/issues_manager/CorsIssue.ts +1 -1
- package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
- package/front_end/models/issues_manager/Issue.ts +1 -1
- package/front_end/models/issues_manager/IssueResolver.ts +2 -2
- package/front_end/models/issues_manager/IssuesManager.ts +1 -1
- package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
- package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
- package/front_end/models/issues_manager/PropertyRuleIssue.ts +1 -1
- package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
- package/front_end/models/issues_manager/RelatedIssue.ts +1 -1
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +3 -3
- package/front_end/models/issues_manager/SourceFrameIssuesManager.ts +1 -1
- package/front_end/models/issues_manager/StylesheetLoadingIssue.ts +1 -1
- package/front_end/models/javascript_metadata/NativeFunctions.js +69 -61
- package/front_end/models/live-metrics/LiveMetrics.ts +41 -34
- package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +1 -1
- package/front_end/models/persistence/EditFileSystemView.ts +1 -1
- package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +2 -3
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -3
- package/front_end/models/persistence/WorkspaceSettingsTab.ts +2 -2
- package/front_end/models/text_utils/ContentProvider.ts +3 -3
- package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
- package/front_end/models/text_utils/TextUtils.ts +1 -1
- package/front_end/models/text_utils/WasmDisassembly.ts +1 -1
- package/front_end/models/timeline_model/TimelineProfileTree.test.ts +21 -21
- package/front_end/models/timeline_model/TimelineProfileTree.ts +1 -1
- package/front_end/models/trace/ModelImpl.test.ts +1 -1
- package/front_end/models/trace/ModelImpl.ts +10 -27
- package/front_end/models/trace/Processor.test.ts +16 -15
- package/front_end/models/trace/Processor.ts +33 -9
- package/front_end/models/trace/extras/FilmStrip.ts +2 -2
- package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +2 -2
- package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +10 -1
- package/front_end/models/trace/handlers/MetaHandler.ts +4 -0
- package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +1 -1
- package/front_end/models/trace/handlers/RendererHandler.test.ts +1 -1
- package/front_end/models/trace/handlers/SamplesHandler.test.ts +2 -2
- package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +5 -4
- package/front_end/models/trace/handlers/ScreenshotsHandler.ts +7 -5
- package/front_end/models/trace/handlers/Threads.ts +2 -2
- package/front_end/models/trace/handlers/WarningsHandler.ts +1 -1
- package/front_end/models/trace/helpers/Network.ts +20 -2
- package/front_end/models/trace/helpers/SyntheticEvents.test.ts +1 -1
- package/front_end/models/trace/helpers/Trace.test.ts +34 -3
- package/front_end/models/trace/helpers/Trace.ts +12 -0
- package/front_end/models/trace/helpers/TreeHelpers.test.ts +52 -0
- package/front_end/models/trace/helpers/TreeHelpers.ts +80 -1
- package/front_end/models/trace/insights/Common.ts +1 -1
- package/front_end/models/trace/insights/CumulativeLayoutShift.test.ts +24 -2
- package/front_end/models/trace/insights/CumulativeLayoutShift.ts +102 -27
- package/front_end/models/trace/insights/DocumentLatency.test.ts +22 -11
- package/front_end/models/trace/insights/DocumentLatency.ts +9 -6
- package/front_end/models/trace/insights/FontDisplay.ts +5 -1
- package/front_end/models/trace/insights/InteractionToNextPaint.ts +4 -3
- package/front_end/models/trace/insights/LargestContentfulPaint.test.ts +9 -1
- package/front_end/models/trace/insights/LargestContentfulPaint.ts +26 -6
- package/front_end/models/trace/insights/RenderBlocking.test.ts +10 -16
- package/front_end/models/trace/insights/RenderBlocking.ts +6 -4
- package/front_end/models/trace/insights/SlowCSSSelector.ts +3 -1
- package/front_end/models/trace/insights/ThirdPartyWeb.ts +15 -2
- package/front_end/models/trace/insights/Viewport.ts +1 -0
- package/front_end/models/trace/insights/types.ts +14 -11
- package/front_end/models/trace/lantern/graph/BaseNode.ts +2 -2
- package/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +4 -3
- package/front_end/models/trace/lantern/simulation/TCPConnection.ts +1 -1
- package/front_end/models/trace/lantern/testing/MetricTestUtils.ts +1 -1
- package/front_end/models/trace/root-causes/LayoutShift.ts +3 -20
- package/front_end/models/trace/types/Extensions.ts +3 -7
- package/front_end/models/trace/types/File.ts +2 -8
- package/front_end/models/trace/types/TraceEvents.ts +10 -4
- package/front_end/models/workspace/UISourceCode.test.ts +3 -3
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
- package/front_end/panels/animation/AnimationModel.ts +1 -1
- package/front_end/panels/animation/AnimationTimeline.ts +1 -1
- package/front_end/panels/animation/AnimationUI.ts +1 -1
- package/front_end/panels/application/ApplicationPanelSidebar.test.ts +90 -0
- package/front_end/panels/application/ApplicationPanelSidebar.ts +123 -20
- package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
- package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
- package/front_end/panels/application/BounceTrackingMitigationsTreeElement.ts +1 -1
- package/front_end/panels/application/DOMStorageItemsView.ts +4 -2
- package/front_end/panels/application/ExtensionStorageItemsView.test.ts +89 -0
- package/front_end/panels/application/ExtensionStorageItemsView.ts +219 -0
- package/front_end/panels/application/ExtensionStorageModel.test.ts +12 -0
- package/front_end/panels/application/ExtensionStorageModel.ts +56 -13
- package/front_end/panels/application/IndexedDBViews.ts +14 -19
- package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
- package/front_end/panels/application/PreloadingTreeElement.ts +1 -1
- package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
- package/front_end/panels/application/ResourcesPanel.ts +18 -1
- package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +1 -1
- package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
- package/front_end/panels/application/SharedStorageTreeElement.ts +2 -2
- package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
- package/front_end/panels/application/TrustTokensTreeElement.ts +1 -1
- package/front_end/panels/application/application.ts +2 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +76 -72
- package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +32 -29
- package/front_end/panels/application/components/EndpointsGrid.ts +5 -4
- package/front_end/panels/application/components/FrameDetailsView.ts +110 -127
- package/front_end/panels/application/components/InterestGroupAccessGrid.ts +11 -11
- package/front_end/panels/application/components/OriginTrialTreeView.ts +36 -34
- package/front_end/panels/application/components/PermissionsPolicySection.ts +31 -33
- package/front_end/panels/application/components/ProtocolHandlersView.ts +15 -14
- package/front_end/panels/application/components/ReportsGrid.ts +11 -9
- package/front_end/panels/application/components/ServiceWorkerRouterView.ts +0 -1
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +11 -11
- package/front_end/panels/application/components/SharedStorageMetadataView.ts +16 -14
- package/front_end/panels/application/components/StackTrace.ts +18 -17
- package/front_end/panels/application/components/StorageMetadataView.ts +19 -18
- package/front_end/panels/application/components/TrustTokensView.ts +17 -16
- package/front_end/panels/application/preloading/PreloadingView.ts +14 -11
- package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +7 -6
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +42 -45
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +13 -11
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +11 -9
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +5 -4
- package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -0
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +10 -8
- package/front_end/panels/application/preloading/components/RuleSetGrid.ts +20 -16
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +50 -57
- package/front_end/panels/application/resourcesSidebar.css +0 -3
- package/front_end/panels/autofill/AutofillView.ts +19 -14
- package/front_end/panels/console/ConsoleFilter.ts +1 -1
- package/front_end/panels/console/ConsoleSidebar.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +2 -2
- package/front_end/panels/console/consoleView.css +4 -3
- package/front_end/panels/coverage/CoverageDecorationManager.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewController.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewModel.ts +2 -3
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +5 -7
- package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +12 -10
- package/front_end/panels/elements/AccessibilityTreeUtils.ts +9 -4
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +3 -3
- package/front_end/panels/elements/ComputedStyleWidget.ts +6 -4
- package/front_end/panels/elements/ElementsPanel.ts +7 -6
- package/front_end/panels/elements/ElementsTreeElement.ts +35 -0
- package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
- package/front_end/panels/elements/PropertyMatchers.test.ts +57 -0
- package/front_end/panels/elements/PropertyMatchers.ts +78 -1
- package/front_end/panels/elements/StyleEditorWidget.ts +2 -2
- package/front_end/panels/elements/StylePropertiesSection.test.ts +1 -0
- package/front_end/panels/elements/StylePropertyHighlighter.test.ts +1 -0
- package/front_end/panels/elements/StylePropertyHighlighter.ts +2 -2
- package/front_end/panels/elements/StylePropertyTreeElement.test.ts +36 -3
- package/front_end/panels/elements/StylePropertyTreeElement.ts +72 -26
- package/front_end/panels/elements/StylesSidebarPane.test.ts +2 -0
- package/front_end/panels/elements/TopLayerContainer.ts +1 -2
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +8 -7
- package/front_end/panels/elements/components/AdornerSettingsPane.ts +3 -4
- package/front_end/panels/elements/components/AnchorFunctionLinkSwatch.ts +8 -7
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
- package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
- package/front_end/panels/elements/components/CSSQuery.ts +0 -1
- package/front_end/panels/elements/components/CSSVariableValueView.ts +1 -3
- package/front_end/panels/elements/components/ComputedStyleProperty.ts +0 -1
- package/front_end/panels/elements/components/ComputedStyleTrace.ts +0 -1
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +15 -11
- package/front_end/panels/elements/components/ElementsBreadcrumbsUtils.ts +1 -1
- package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +6 -4
- package/front_end/panels/elements/components/LayoutPane.ts +8 -7
- package/front_end/panels/elements/components/QueryContainer.test.ts +2 -3
- package/front_end/panels/elements/components/QueryContainer.ts +10 -9
- package/front_end/panels/elements/components/StylePropertyEditor.ts +4 -4
- package/front_end/panels/elements/components/computedStyleProperty.css +2 -1
- package/front_end/panels/elements/components/cssPropertyDocsView.css +3 -2
- package/front_end/panels/elements/elementsTreeOutline.css +17 -0
- package/front_end/panels/elements/stylesSidebarPane.css +2 -2
- package/front_end/panels/emulation/DeviceModeWrapper.ts +1 -1
- package/front_end/panels/emulation/components/DeviceSizeInputElement.ts +3 -1
- package/front_end/panels/explain/components/ConsoleInsight.ts +47 -46
- package/front_end/panels/explain/components/consoleInsight.css +0 -9
- package/front_end/panels/freestyler/AiAgent.ts +8 -2
- package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +201 -0
- package/front_end/panels/freestyler/DrJonesFileAgent.ts +196 -0
- package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +1 -1
- package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +34 -31
- package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +195 -0
- package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +193 -0
- package/front_end/panels/freestyler/FreestylerAgent.test.ts +177 -12
- package/front_end/panels/freestyler/FreestylerAgent.ts +83 -8
- package/front_end/panels/freestyler/FreestylerEvaluateAction.test.ts +21 -1
- package/front_end/panels/freestyler/FreestylerEvaluateAction.ts +3 -0
- package/front_end/panels/freestyler/FreestylerPanel.test.ts +16 -2
- package/front_end/panels/freestyler/FreestylerPanel.ts +126 -15
- package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +21 -2
- package/front_end/panels/freestyler/components/FreestylerChatUi.ts +294 -145
- package/front_end/panels/freestyler/components/ProvideFeedback.ts +16 -13
- package/front_end/panels/freestyler/components/freestylerChatUi.css +78 -26
- package/front_end/panels/freestyler/freestyler-meta.ts +64 -9
- package/front_end/panels/freestyler/freestyler.ts +2 -0
- package/front_end/panels/issues/AffectedResourcesView.ts +2 -2
- package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +5 -4
- package/front_end/panels/issues/CorsIssueDetailsView.ts +6 -6
- package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
- package/front_end/panels/issues/IssueView.ts +2 -2
- package/front_end/panels/issues/components/ElementsPanelLink.ts +3 -1
- package/front_end/panels/issues/components/HideIssuesMenu.ts +6 -5
- package/front_end/panels/lighthouse/LighthouseController.ts +2 -2
- package/front_end/panels/lighthouse/LighthousePanel.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +2 -6
- package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseStatusView.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseTimespanView.ts +1 -1
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +8 -2
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.test.ts +11 -0
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +26 -31
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +5 -5
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +11 -14
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -3
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +5 -4
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +0 -1
- package/front_end/panels/media/EventDisplayTable.ts +1 -1
- package/front_end/panels/media/EventTimelineView.ts +1 -1
- package/front_end/panels/media/PlayerDetailView.ts +3 -3
- package/front_end/panels/media/PlayerListView.ts +2 -2
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +23 -29
- package/front_end/panels/network/NetworkConfigView.ts +1 -2
- package/front_end/panels/network/NetworkDataGridNode.ts +4 -153
- package/front_end/panels/network/NetworkFrameGrouper.ts +1 -1
- package/front_end/panels/network/NetworkItemView.ts +1 -1
- package/front_end/panels/network/NetworkLogView.ts +1 -1
- package/front_end/panels/network/NetworkLogViewColumns.ts +4 -6
- package/front_end/panels/network/NetworkWaterfallColumn.ts +5 -8
- package/front_end/panels/network/RequestBinaryResponseView.test.ts +69 -0
- package/front_end/panels/network/RequestBinaryResponseView.ts +67 -0
- package/front_end/panels/network/RequestResponseView.test.ts +28 -1
- package/front_end/panels/network/RequestResponseView.ts +14 -7
- package/front_end/panels/network/components/EditableSpan.ts +0 -1
- package/front_end/panels/network/components/HeaderSectionRow.test.ts +1 -1
- package/front_end/panels/network/components/HeaderSectionRow.ts +22 -21
- package/front_end/panels/network/components/RequestHeaderSection.ts +7 -7
- package/front_end/panels/network/components/RequestHeadersView.ts +25 -26
- package/front_end/panels/network/components/RequestTrustTokensView.ts +32 -35
- package/front_end/panels/network/components/ResponseHeaderSection.ts +8 -10
- package/front_end/panels/network/components/WebBundleInfoView.ts +13 -11
- package/front_end/panels/network/network.ts +2 -0
- package/front_end/panels/network/networkConfigView.css +12 -5
- package/front_end/panels/network/networkLogView.css +4 -15
- package/front_end/panels/network/requestHTMLView.css +1 -0
- package/front_end/panels/profiler/BottomUpProfileDataGrid.ts +3 -3
- package/front_end/panels/profiler/HeapProfileView.ts +1 -1
- package/front_end/panels/profiler/HeapProfilerPanel.ts +2 -2
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +3 -3
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +3 -3
- package/front_end/panels/profiler/HeapSnapshotProxy.ts +1 -1
- package/front_end/panels/profiler/ProfileLauncherView.ts +3 -3
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +4 -2
- package/front_end/panels/protocol_monitor/components/JSONEditor.ts +22 -15
- package/front_end/panels/protocol_monitor/components/Toolbar.ts +4 -4
- package/front_end/panels/recorder/RecorderController.ts +39 -43
- package/front_end/panels/recorder/components/ControlButton.ts +1 -1
- package/front_end/panels/recorder/components/CreateRecordingView.ts +15 -15
- package/front_end/panels/recorder/components/ExtensionView.ts +9 -8
- package/front_end/panels/recorder/components/RecordingListView.ts +15 -13
- package/front_end/panels/recorder/components/RecordingView.ts +92 -84
- package/front_end/panels/recorder/components/ReplaySection.ts +6 -6
- package/front_end/panels/recorder/components/SelectButton.ts +21 -20
- package/front_end/panels/recorder/components/StartView.ts +14 -18
- package/front_end/panels/recorder/components/StepEditor.ts +3 -3
- package/front_end/panels/recorder/components/StepView.ts +20 -20
- package/front_end/panels/recorder/components/TimelineSection.ts +3 -2
- package/front_end/panels/recorder/converters/ExtensionConverter.ts +2 -2
- package/front_end/panels/recorder/converters/JSONConverter.ts +1 -1
- package/front_end/panels/recorder/converters/LighthouseConverter.ts +1 -1
- package/front_end/panels/recorder/converters/PuppeteerConverter.ts +1 -1
- package/front_end/panels/recorder/converters/PuppeteerReplayConverter.ts +1 -1
- package/front_end/panels/recorder/injected/RecordingClient.ts +7 -10
- package/front_end/panels/recorder/injected/SelectorComputer.ts +5 -5
- package/front_end/panels/recorder/injected/SelectorPicker.ts +2 -2
- package/front_end/panels/recorder/injected/Step.ts +1 -1
- package/front_end/panels/recorder/injected/injected.ts +1 -1
- package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +1 -1
- package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +6 -7
- package/front_end/panels/recorder/injected/selectors/TextSelector.ts +3 -5
- package/front_end/panels/recorder/injected/util.ts +1 -1
- package/front_end/panels/recorder/models/RecordingPlayer.ts +1 -1
- package/front_end/panels/recorder/models/RecordingSettings.ts +1 -4
- package/front_end/panels/recorder/models/RecordingStorage.ts +1 -1
- package/front_end/panels/recorder/models/SDKUtils.ts +3 -2
- package/front_end/panels/recorder/models/ScreenshotUtils.ts +1 -1
- package/front_end/panels/recorder/models/Section.ts +2 -2
- package/front_end/panels/search/SearchResultsPane.ts +1 -2
- package/front_end/panels/search/SearchView.ts +1 -1
- package/front_end/panels/security/OriginTreeElement.ts +1 -1
- package/front_end/panels/security/SecurityAndPrivacyPanelSidebar.ts +1 -1
- package/front_end/panels/security/SecurityPanelSidebarTreeElement.ts +1 -1
- package/front_end/panels/sensors/SensorsView.ts +16 -0
- package/front_end/panels/sensors/sensors.css +16 -0
- package/front_end/panels/settings/AISettingsTab.test.ts +41 -11
- package/front_end/panels/settings/AISettingsTab.ts +103 -58
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +9 -0
- package/front_end/panels/settings/SettingsScreen.ts +1 -1
- package/front_end/panels/settings/components/SyncSection.ts +18 -13
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +33 -30
- package/front_end/panels/settings/settings-meta.ts +2 -2
- package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
- package/front_end/panels/sources/EditingLocationHistoryManager.ts +2 -2
- package/front_end/panels/sources/GoToLineQuickOpen.ts +1 -1
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +1 -1
- package/front_end/panels/sources/OutlineQuickOpen.ts +1 -1
- package/front_end/panels/sources/SourcesNavigator.test.ts +1 -0
- package/front_end/panels/sources/SourcesPanel.ts +7 -0
- package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
- package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
- package/front_end/panels/sources/components/BreakpointsView.ts +25 -26
- package/front_end/panels/sources/components/HeadersView.ts +17 -15
- package/front_end/panels/timeline/AnimationsTrackAppender.ts +18 -3
- package/front_end/panels/timeline/AnnotationHelpers.ts +1 -1
- package/front_end/panels/timeline/AppenderUtils.ts +1 -1
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +27 -10
- package/front_end/panels/timeline/CountersGraph.ts +1 -1
- package/front_end/panels/timeline/EntriesFilter.test.ts +68 -0
- package/front_end/panels/timeline/EntriesFilter.ts +13 -0
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +1 -1
- package/front_end/panels/timeline/InteractionsTrackAppender.ts +10 -0
- package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +135 -1
- package/front_end/panels/timeline/ModificationsManager.test.ts +160 -0
- package/front_end/panels/timeline/ModificationsManager.ts +31 -0
- package/front_end/panels/timeline/TimelineDetailsView.test.ts +4 -2
- package/front_end/panels/timeline/TimelineDetailsView.ts +34 -12
- package/front_end/panels/timeline/TimelineEventOverview.ts +1 -0
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +53 -0
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +50 -20
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +57 -0
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +18 -0
- package/front_end/panels/timeline/TimelineFlameChartView.ts +90 -29
- package/front_end/panels/timeline/TimelineHistoryManager.ts +3 -1
- package/front_end/panels/timeline/TimelineLoader.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.ts +49 -37
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +16 -12
- package/front_end/panels/timeline/TimelineTreeView.test.ts +9 -9
- package/front_end/panels/timeline/TimelineTreeView.ts +1 -1
- package/front_end/panels/timeline/TimelineUIUtils.ts +116 -41
- package/front_end/panels/timeline/TimingsTrackAppender.ts +1 -1
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +2 -3
- package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +8 -7
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +28 -27
- package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -2
- package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +13 -11
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +217 -87
- package/front_end/panels/timeline/components/LiveMetricsView.test.ts +194 -69
- package/front_end/panels/timeline/components/LiveMetricsView.ts +327 -141
- package/front_end/panels/timeline/components/MetricCard.test.ts +8 -8
- package/front_end/panels/timeline/components/MetricCard.ts +6 -4
- package/front_end/panels/timeline/components/MetricCompareStrings.ts +1 -1
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +16 -13
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +12 -10
- package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +35 -2
- package/front_end/panels/timeline/components/NetworkThrottlingSelector.ts +30 -13
- package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +74 -0
- package/front_end/panels/timeline/components/RelatedInsightChips.ts +92 -0
- package/front_end/panels/timeline/components/Sidebar.test.ts +74 -0
- package/front_end/panels/timeline/components/Sidebar.ts +32 -13
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +66 -0
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +108 -39
- package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +11 -1
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +70 -37
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +59 -1
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +90 -34
- package/front_end/panels/timeline/components/Utils.test.ts +65 -0
- package/front_end/panels/timeline/components/Utils.ts +117 -0
- package/front_end/panels/timeline/components/components.ts +2 -0
- package/front_end/panels/timeline/components/insights/CLSCulprits.ts +67 -53
- package/front_end/panels/timeline/components/insights/DocumentLatency.ts +98 -14
- package/front_end/panels/timeline/components/insights/EventRef.ts +92 -0
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +24 -13
- package/front_end/panels/timeline/components/insights/Helpers.ts +48 -43
- package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +20 -18
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +93 -48
- package/front_end/panels/timeline/components/insights/LCPPhases.ts +28 -9
- package/front_end/panels/timeline/components/insights/NodeLink.ts +3 -1
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +33 -25
- package/front_end/panels/timeline/components/insights/SidebarInsight.ts +92 -15
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +26 -39
- package/front_end/panels/timeline/components/insights/Table.ts +12 -9
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +20 -12
- package/front_end/panels/timeline/components/insights/Viewport.ts +23 -20
- package/front_end/panels/timeline/components/insights/insights.ts +2 -0
- package/front_end/panels/timeline/components/insights/sidebarInsight.css +54 -9
- package/front_end/panels/timeline/components/insights/table.css +9 -1
- package/front_end/panels/timeline/components/layoutShiftDetails.css +22 -20
- package/front_end/panels/timeline/components/liveMetricsView.css +46 -16
- package/front_end/panels/timeline/components/networkRequestDetails.css +2 -1
- package/front_end/panels/timeline/components/relatedInsightChips.css +45 -0
- package/front_end/panels/timeline/components/sidebarInsightsTab.css +24 -6
- package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +18 -4
- package/front_end/panels/timeline/extensions/ExtensionUI.ts +4 -1
- package/front_end/panels/timeline/fixtures/traces/basic.json.gz +0 -0
- package/front_end/panels/timeline/fixtures/traces/many-redirects.json.gz +0 -0
- package/front_end/panels/timeline/fixtures/traces/missing-url.json.gz +0 -0
- package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +40 -51
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +87 -39
- package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +13 -11
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +24 -32
- package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +23 -24
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.test.ts +42 -0
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +25 -19
- package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +0 -14
- package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +16 -13
- package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +59 -20
- package/front_end/panels/timeline/timelineFlameChartView.css +3 -2
- package/front_end/panels/timeline/timelineFlamechartPopover.css +19 -0
- package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
- package/front_end/panels/timeline/timelinePanel.css +2 -10
- package/front_end/panels/timeline/track_appenders/LayoutShiftsTrackAppender.test.ts +7 -7
- package/front_end/panels/timeline/track_appenders/TimingsTrackAppender.test.ts +1 -1
- package/front_end/panels/timeline/utils/Helpers.test.ts +38 -0
- package/front_end/panels/timeline/utils/Helpers.ts +94 -0
- package/front_end/panels/timeline/utils/ImageCache.test.ts +106 -0
- package/front_end/panels/timeline/utils/ImageCache.ts +55 -0
- package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +13 -1
- package/front_end/panels/timeline/utils/SourceMapsResolver.ts +11 -2
- package/front_end/panels/timeline/utils/utils.ts +4 -0
- package/front_end/panels/utils/utils.ts +1 -1
- package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +1 -1
- package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +3 -9
- package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -4
- package/front_end/panels/webauthn/WebauthnPane.ts +24 -3
- package/front_end/testing/EnvironmentHelpers.ts +19 -4
- package/front_end/testing/ExtensionHelpers.ts +1 -1
- package/front_end/testing/LanguagePluginHelpers.ts +1 -1
- package/front_end/testing/MockConnection.ts +1 -1
- package/front_end/testing/MockIssuesManager.ts +1 -1
- package/front_end/testing/MockScopeChain.ts +1 -1
- package/front_end/testing/MutationHelpers.test.ts +6 -8
- package/front_end/testing/TraceHelpers.ts +3 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
- package/front_end/third_party/codemirror.next/codemirror.next.d.ts +11 -3
- package/front_end/third_party/codemirror.next/package.json +5 -5
- package/front_end/third_party/i18n/localized-string-set.ts +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- 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/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +9 -9
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +84 -84
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
- 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/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +1 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Session.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Session.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserPrompt.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserPrompt.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +7 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +2 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js +17 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js +1 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.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/PQuerySelector.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PQuerySelector.js.map +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/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
- 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 +2 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +114 -97
- 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/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +9 -9
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +82 -83
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
- 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/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +2 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Session.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Session.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserPrompt.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserPrompt.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +7 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +3 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js +17 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js +1 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.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/injected/PQuerySelector.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PQuerySelector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/package.json +2 -2
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +89 -89
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +6 -2
- package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/Navigation.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/Realm.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/Session.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/UserPrompt.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +9 -5
- package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +7 -3
- package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +22 -1
- package/front_end/third_party/puppeteer/package/src/cdp/IsolatedWorld.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/common/QueryHandler.ts +1 -3
- package/front_end/third_party/puppeteer/package/src/common/util.ts +2 -1
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/PQuerySelector.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
- package/front_end/third_party/puppeteer/puppeteer.ts +1 -1
- package/front_end/ui/components/buttons/Button.ts +18 -17
- package/front_end/ui/components/buttons/button.css +0 -4
- package/front_end/ui/components/cards/Card.test.ts +66 -0
- package/front_end/ui/components/cards/Card.ts +57 -0
- package/front_end/ui/components/cards/card.css +32 -0
- package/front_end/ui/components/cards/cards.ts +9 -0
- package/front_end/ui/components/chrome_link/ChromeLink.test.ts +5 -3
- package/front_end/ui/components/chrome_link/ChromeLink.ts +3 -1
- package/front_end/ui/components/data_grid/DataGrid.test.ts +3 -1
- package/front_end/ui/components/data_grid/DataGrid.ts +25 -23
- package/front_end/ui/components/data_grid/DataGridContextMenuUtils.ts +2 -2
- package/front_end/ui/components/data_grid/DataGridController.ts +9 -5
- package/front_end/ui/components/data_grid/DataGridEvents.ts +1 -1
- package/front_end/ui/components/data_grid/DataGridRenderers.ts +7 -4
- package/front_end/ui/components/dialogs/Dialog.ts +4 -2
- package/front_end/ui/components/dialogs/IconDialog.ts +9 -7
- package/front_end/ui/components/dialogs/ShortcutDialog.ts +10 -8
- package/front_end/ui/components/diff_view/DiffView.ts +9 -8
- package/front_end/ui/components/docs/create_breadcrumbs.ts +3 -1
- package/front_end/ui/components/docs/expandable_list/basic.ts +4 -2
- package/front_end/ui/components/docs/floating_button/basic.html +26 -0
- package/front_end/ui/components/docs/floating_button/basic.ts +20 -0
- package/front_end/ui/components/docs/freestyler/basic.ts +5 -0
- package/front_end/ui/components/docs/freestyler/empty_state.ts +5 -0
- package/front_end/ui/components/docs/icon_dialog/basic.ts +5 -3
- package/front_end/ui/components/docs/panel_introduction_steps/basic.ts +7 -4
- package/front_end/ui/components/docs/performance_panel/flamechart.html +4 -0
- package/front_end/ui/components/docs/performance_panel/flamechart.ts +45 -0
- package/front_end/ui/components/docs/recorder_select_button/basic.ts +21 -18
- package/front_end/ui/components/docs/report/basic.ts +19 -23
- package/front_end/ui/components/docs/theme_colors/basic.ts +4 -2
- package/front_end/ui/components/docs/tree_outline/custom-renderers.ts +4 -2
- package/front_end/ui/components/expandable_list/ExpandableList.test.ts +5 -3
- package/front_end/ui/components/expandable_list/ExpandableList.ts +6 -4
- package/front_end/ui/components/floating_button/FloatingButton.ts +51 -0
- package/front_end/ui/components/floating_button/floatingButton.css +63 -0
- package/front_end/ui/components/floating_button/floating_button.ts +7 -0
- package/front_end/ui/components/helpers/helpers.test.ts +18 -14
- package/front_end/ui/components/icon_button/Icon.ts +2 -2
- package/front_end/ui/components/icon_button/IconButton.ts +15 -10
- package/front_end/ui/components/issue_counter/IssueCounter.ts +5 -1
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +7 -4
- package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +0 -1
- package/front_end/ui/components/linkifier/LinkifierImpl.ts +3 -1
- package/front_end/ui/components/markdown_view/CodeBlock.test.ts +7 -7
- package/front_end/ui/components/markdown_view/CodeBlock.ts +33 -41
- package/front_end/ui/components/markdown_view/MarkdownImage.ts +12 -9
- package/front_end/ui/components/markdown_view/MarkdownLink.ts +3 -1
- package/front_end/ui/components/markdown_view/MarkdownView.test.ts +51 -3
- package/front_end/ui/components/markdown_view/MarkdownView.ts +39 -22
- package/front_end/ui/components/markdown_view/codeBlock.css +6 -28
- package/front_end/ui/components/markdown_view/markdownLink.css +1 -1
- package/front_end/ui/components/markdown_view/markdownView.css +4 -0
- package/front_end/ui/components/menus/Menu.ts +7 -5
- package/front_end/ui/components/menus/SelectMenu.test.ts +3 -1
- package/front_end/ui/components/menus/SelectMenu.ts +17 -15
- package/front_end/ui/components/panel_feedback/FeedbackButton.ts +5 -3
- package/front_end/ui/components/panel_feedback/PanelFeedback.ts +8 -4
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +6 -4
- package/front_end/ui/components/panel_introduction_steps/PanelIntroductionSteps.ts +3 -1
- package/front_end/ui/components/report_view/ReportView.test.ts +5 -3
- package/front_end/ui/components/report_view/ReportView.ts +9 -7
- package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +8 -5
- package/front_end/ui/components/settings/SettingCheckbox.ts +14 -12
- package/front_end/ui/components/settings/SettingDeprecationWarning.ts +7 -4
- package/front_end/ui/components/spinners/Spinner.ts +3 -1
- package/front_end/ui/components/split_view/SplitView.ts +3 -1
- package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +3 -1
- package/front_end/ui/components/suggestion_input/SuggestionInput.ts +3 -2
- package/front_end/ui/components/survey_link/SurveyLink.ts +7 -3
- package/front_end/ui/components/switch/SwitchImpl.ts +3 -1
- package/front_end/ui/components/text_editor/TextEditorHistory.ts +2 -2
- package/front_end/ui/components/text_prompt/TextPrompt.ts +3 -1
- package/front_end/ui/components/tree_outline/TreeOutline.test.ts +8 -6
- package/front_end/ui/components/tree_outline/TreeOutline.ts +9 -8
- package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +5 -3
- package/front_end/ui/legacy/Context.ts +1 -1
- package/front_end/ui/legacy/Dialog.ts +2 -2
- package/front_end/ui/legacy/DockController.ts +2 -2
- package/front_end/ui/legacy/FilterBar.ts +1 -1
- package/front_end/ui/legacy/FilterSuggestionBuilder.ts +1 -1
- package/front_end/ui/legacy/GlassPane.ts +1 -1
- package/front_end/ui/legacy/Infobar.ts +1 -1
- package/front_end/ui/legacy/InspectorView.ts +5 -5
- package/front_end/ui/legacy/Panel.ts +1 -1
- package/front_end/ui/legacy/ShortcutRegistry.ts +1 -1
- package/front_end/ui/legacy/SplitWidget.test.ts +33 -1
- package/front_end/ui/legacy/SplitWidget.ts +62 -7
- package/front_end/ui/legacy/TabbedPane.ts +24 -0
- package/front_end/ui/legacy/Toolbar.test.ts +39 -0
- package/front_end/ui/legacy/Toolbar.ts +16 -17
- package/front_end/ui/legacy/UIUtils.ts +1 -1
- package/front_end/ui/legacy/View.ts +2 -2
- package/front_end/ui/legacy/ViewManager.ts +3 -2
- package/front_end/ui/legacy/ViewRegistration.ts +2 -2
- package/front_end/ui/legacy/Widget.ts +62 -14
- package/front_end/ui/legacy/XElement.ts +0 -1
- package/front_end/ui/legacy/XLink.test.ts +3 -1
- package/front_end/ui/legacy/XLink.ts +6 -4
- package/front_end/ui/legacy/checkboxTextLabel.css +4 -0
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGridWithPreview.ts +21 -10
- package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +10 -7
- package/front_end/ui/legacy/components/inline_editor/ColorMixSwatch.ts +3 -1
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +3 -1
- package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +9 -9
- package/front_end/ui/legacy/components/inline_editor/Swatches.ts +5 -4
- package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
- package/front_end/ui/legacy/components/perf_ui/FilmStripView.test.ts +9 -9
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +49 -13
- package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -0
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +1 -1
- package/front_end/ui/legacy/inspectorCommon.css +0 -1
- package/front_end/ui/legacy/themeColors.css +10 -0
- package/front_end/ui/legacy/toolbar.css +4 -0
- package/front_end/ui/legacy/treeoutline.css +0 -3
- package/front_end/ui/lit-html/static.test.ts +8 -8
- package/front_end/ui/visual_logging/Debugging.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +32 -3
- package/front_end/ui/visual_logging/LoggingDriver.ts +1 -1
- package/front_end/ui/visual_logging/LoggingEvents.ts +28 -28
- package/front_end/ui/visual_logging/LoggingState.ts +1 -1
- package/front_end/ui/visual_logging/NonDomState.ts +2 -2
- package/front_end/ui/visual_logging/visual_logging.ts +3 -1
- package/inspector_overlay/css_grid_label_helpers.test.ts +103 -0
- package/inspector_overlay/css_grid_label_helpers.ts +63 -12
- package/inspector_overlay/highlight_common.ts +2 -2
- package/inspector_overlay/highlight_container_query.ts +1 -2
- package/inspector_overlay/highlight_flex_common.test.ts +1 -1
- package/inspector_overlay/highlight_flex_common.ts +2 -3
- package/inspector_overlay/highlight_grid_common.ts +10 -4
- package/inspector_overlay/highlight_isolated_element.ts +1 -1
- package/inspector_overlay/highlight_scroll_snap.ts +1 -2
- package/inspector_overlay/testing/InspectorOverlayHelpers.ts +1 -1
- package/inspector_overlay/tool_highlight.ts +4 -8
- package/package.json +4 -3
- package/scripts/devtools_paths.js +9 -2
- package/scripts/eslint_rules/lib/avoid_assert_equal.js +34 -7
- package/scripts/eslint_rules/lib/html_tagged_template.js +55 -0
- package/scripts/eslint_rules/lib/inline_type_imports.js +22 -23
- package/scripts/eslint_rules/tests/avoid_assert_equal_test.js +61 -2
- package/scripts/eslint_rules/tests/html_tagged_template_test.js +96 -0
- package/scripts/eslint_rules/tests/inline_type_imports_test.js +5 -25
- package/scripts/freestyler/eval/index.js +83 -47
- package/scripts/protocol_typescript/protocol_dts_generator.ts +1 -1
- package/scripts/stylelint_rules/lib/use_theme_colors.js +2 -1
- package/scripts/stylelint_rules/tests/use_theme_colors_test.js +16 -0
- package/front_end/Images/src/spark.svg +0 -3
- package/front_end/panels/timeline/components/insights/lcpDiscovery.css +0 -13
- package/scripts/eslint_rules/lib/ban_literal_devtools_component_tag_names.js +0 -40
- package/scripts/eslint_rules/lib/check_component_naming.js +0 -214
- package/scripts/eslint_rules/tests/ban_literal_devtools_component_tag_names_test.js +0 -38
- package/scripts/eslint_rules/tests/check_component_naming_test.js +0 -246
@@ -6,16 +6,13 @@ import * as Platform from '../../../core/platform/platform.js';
|
|
6
6
|
import * as Helpers from '../helpers/helpers.js';
|
7
7
|
import * as Types from '../types/types.js';
|
8
8
|
|
9
|
-
import {
|
10
|
-
type InsightResult,
|
11
|
-
type InsightSetContext,
|
12
|
-
type RequiredData,
|
13
|
-
} from './types.js';
|
9
|
+
import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
|
14
10
|
|
15
11
|
export type CLSInsightResult = InsightResult<{
|
16
|
-
animationFailures
|
17
|
-
shifts
|
18
|
-
|
12
|
+
animationFailures: readonly NoncompositedAnimationFailure[],
|
13
|
+
shifts: Map<Types.Events.SyntheticLayoutShift, LayoutShiftRootCausesData>,
|
14
|
+
clusters: Types.Events.SyntheticLayoutShiftCluster[],
|
15
|
+
worstCluster: Types.Events.SyntheticLayoutShiftCluster | undefined,
|
19
16
|
}>;
|
20
17
|
|
21
18
|
export function deps(): ['Meta', 'Animations', 'LayoutShifts', 'NetworkRequests'] {
|
@@ -23,12 +20,25 @@ export function deps(): ['Meta', 'Animations', 'LayoutShifts', 'NetworkRequests'
|
|
23
20
|
}
|
24
21
|
|
25
22
|
export const enum AnimationFailureReasons {
|
26
|
-
|
23
|
+
ACCELERATED_ANIMATIONS_DISABLED = 'ACCELERATED_ANIMATIONS_DISABLED',
|
24
|
+
EFFECT_SUPPRESSED_BY_DEVTOOLS = 'EFFECT_SUPPRESSED_BY_DEVTOOLS',
|
25
|
+
INVALID_ANIMATION_OR_EFFECT = 'INVALID_ANIMATION_OR_EFFECT',
|
26
|
+
EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS = 'EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS',
|
27
|
+
EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE = 'EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE',
|
28
|
+
TARGET_HAS_INVALID_COMPOSITING_STATE = 'TARGET_HAS_INVALID_COMPOSITING_STATE',
|
29
|
+
TARGET_HAS_INCOMPATIBLE_ANIMATIONS = 'TARGET_HAS_INCOMPATIBLE_ANIMATIONS',
|
30
|
+
TARGET_HAS_CSS_OFFSET = 'TARGET_HAS_CSS_OFFSET',
|
31
|
+
ANIMATION_AFFECTS_NON_CSS_PROPERTIES = 'ANIMATION_AFFECTS_NON_CSS_PROPERTIES',
|
32
|
+
TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET =
|
33
|
+
'TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET',
|
27
34
|
TRANSFROM_BOX_SIZE_DEPENDENT = 'TRANSFROM_BOX_SIZE_DEPENDENT',
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
35
|
+
FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS = 'FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS',
|
36
|
+
UNSUPPORTED_CSS_PROPERTY = 'UNSUPPORTED_CSS_PROPERTY',
|
37
|
+
MIXED_KEYFRAME_VALUE_TYPES = 'MIXED_KEYFRAME_VALUE_TYPES',
|
38
|
+
TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE = 'TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE',
|
39
|
+
ANIMATION_HAS_NO_VISIBLE_CHANGE = 'ANIMATION_HAS_NO_VISIBLE_CHANGE',
|
40
|
+
AFFECTS_IMPORTANT_PROPERTY = 'AFFECTS_IMPORTANT_PROPERTY',
|
41
|
+
SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY = 'SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY',
|
32
42
|
}
|
33
43
|
|
34
44
|
export interface NoncompositedAnimationFailure {
|
@@ -45,6 +55,10 @@ export interface NoncompositedAnimationFailure {
|
|
45
55
|
* Unsupported properties.
|
46
56
|
*/
|
47
57
|
unsupportedProperties?: Types.Events.Animation['args']['data']['unsupportedProperties'];
|
58
|
+
/**
|
59
|
+
* Animation event.
|
60
|
+
*/
|
61
|
+
animation?: Types.Events.SyntheticAnimationPair;
|
48
62
|
}
|
49
63
|
|
50
64
|
/**
|
@@ -55,8 +69,45 @@ export interface NoncompositedAnimationFailure {
|
|
55
69
|
*/
|
56
70
|
const ACTIONABLE_FAILURE_REASONS = [
|
57
71
|
{
|
58
|
-
flag: 1 <<
|
59
|
-
failure: AnimationFailureReasons.
|
72
|
+
flag: 1 << 0,
|
73
|
+
failure: AnimationFailureReasons.ACCELERATED_ANIMATIONS_DISABLED,
|
74
|
+
},
|
75
|
+
{
|
76
|
+
flag: 1 << 1,
|
77
|
+
failure: AnimationFailureReasons.EFFECT_SUPPRESSED_BY_DEVTOOLS,
|
78
|
+
},
|
79
|
+
{
|
80
|
+
flag: 1 << 2,
|
81
|
+
failure: AnimationFailureReasons.INVALID_ANIMATION_OR_EFFECT,
|
82
|
+
},
|
83
|
+
{
|
84
|
+
flag: 1 << 3,
|
85
|
+
failure: AnimationFailureReasons.EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS,
|
86
|
+
},
|
87
|
+
{
|
88
|
+
flag: 1 << 4,
|
89
|
+
failure: AnimationFailureReasons.EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE,
|
90
|
+
},
|
91
|
+
{
|
92
|
+
flag: 1 << 5,
|
93
|
+
failure: AnimationFailureReasons.TARGET_HAS_INVALID_COMPOSITING_STATE,
|
94
|
+
},
|
95
|
+
{
|
96
|
+
flag: 1 << 6,
|
97
|
+
failure: AnimationFailureReasons.TARGET_HAS_INCOMPATIBLE_ANIMATIONS,
|
98
|
+
},
|
99
|
+
{
|
100
|
+
flag: 1 << 7,
|
101
|
+
failure: AnimationFailureReasons.TARGET_HAS_CSS_OFFSET,
|
102
|
+
},
|
103
|
+
// The failure 1 << 8 is marked as obsolete in Blink
|
104
|
+
{
|
105
|
+
flag: 1 << 9,
|
106
|
+
failure: AnimationFailureReasons.ANIMATION_AFFECTS_NON_CSS_PROPERTIES,
|
107
|
+
},
|
108
|
+
{
|
109
|
+
flag: 1 << 10,
|
110
|
+
failure: AnimationFailureReasons.TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET,
|
60
111
|
},
|
61
112
|
{
|
62
113
|
flag: 1 << 11,
|
@@ -64,19 +115,32 @@ const ACTIONABLE_FAILURE_REASONS = [
|
|
64
115
|
},
|
65
116
|
{
|
66
117
|
flag: 1 << 12,
|
67
|
-
failure: AnimationFailureReasons.
|
118
|
+
failure: AnimationFailureReasons.FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS,
|
68
119
|
},
|
69
120
|
{
|
70
|
-
flag: 1 <<
|
71
|
-
failure: AnimationFailureReasons.
|
121
|
+
flag: 1 << 13,
|
122
|
+
failure: AnimationFailureReasons.UNSUPPORTED_CSS_PROPERTY,
|
72
123
|
},
|
124
|
+
// The failure 1 << 14 is marked as obsolete in Blink
|
73
125
|
{
|
74
|
-
flag: 1 <<
|
75
|
-
failure: AnimationFailureReasons.
|
126
|
+
flag: 1 << 15,
|
127
|
+
failure: AnimationFailureReasons.MIXED_KEYFRAME_VALUE_TYPES,
|
76
128
|
},
|
77
129
|
{
|
78
|
-
flag: 1 <<
|
79
|
-
failure: AnimationFailureReasons.
|
130
|
+
flag: 1 << 16,
|
131
|
+
failure: AnimationFailureReasons.TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE,
|
132
|
+
},
|
133
|
+
{
|
134
|
+
flag: 1 << 17,
|
135
|
+
failure: AnimationFailureReasons.ANIMATION_HAS_NO_VISIBLE_CHANGE,
|
136
|
+
},
|
137
|
+
{
|
138
|
+
flag: 1 << 18,
|
139
|
+
failure: AnimationFailureReasons.AFFECTS_IMPORTANT_PROPERTY,
|
140
|
+
},
|
141
|
+
{
|
142
|
+
flag: 1 << 19,
|
143
|
+
failure: AnimationFailureReasons.SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY,
|
80
144
|
},
|
81
145
|
];
|
82
146
|
|
@@ -95,10 +159,11 @@ function isInInvalidationWindow(event: Types.Events.Event, targetEvent: Types.Ev
|
|
95
159
|
return eventEnd < targetEvent.ts && eventEnd >= targetEvent.ts - INVALIDATION_WINDOW;
|
96
160
|
}
|
97
161
|
|
98
|
-
export function getNonCompositedFailure(
|
162
|
+
export function getNonCompositedFailure(animationEvent: Types.Events.SyntheticAnimationPair):
|
163
|
+
NoncompositedAnimationFailure[] {
|
99
164
|
const failures: NoncompositedAnimationFailure[] = [];
|
100
|
-
const beginEvent =
|
101
|
-
const instantEvents =
|
165
|
+
const beginEvent = animationEvent.args.data.beginEvent;
|
166
|
+
const instantEvents = animationEvent.args.data.instantEvents || [];
|
102
167
|
/**
|
103
168
|
* Animation events containing composite information are ASYNC_NESTABLE_INSTANT ('n').
|
104
169
|
* An animation may also contain multiple 'n' events, so we look through those with useful non-composited data.
|
@@ -106,7 +171,7 @@ export function getNonCompositedFailure(event: Types.Events.SyntheticAnimationPa
|
|
106
171
|
for (const event of instantEvents) {
|
107
172
|
const failureMask = event.args.data.compositeFailed;
|
108
173
|
const unsupportedProperties = event.args.data.unsupportedProperties;
|
109
|
-
if (!failureMask
|
174
|
+
if (!failureMask) {
|
110
175
|
continue;
|
111
176
|
}
|
112
177
|
const failureReasons =
|
@@ -115,6 +180,7 @@ export function getNonCompositedFailure(event: Types.Events.SyntheticAnimationPa
|
|
115
180
|
name: beginEvent.args.data.displayName,
|
116
181
|
failureReasons,
|
117
182
|
unsupportedProperties,
|
183
|
+
animation: animationEvent,
|
118
184
|
};
|
119
185
|
failures.push(failure);
|
120
186
|
}
|
@@ -311,11 +377,13 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
|
|
311
377
|
|
312
378
|
const clusterKey = context.navigation ? context.navigationId : Types.Events.NO_NAVIGATION;
|
313
379
|
const clusters = parsedTrace.LayoutShifts.clustersByNavigationId.get(clusterKey) ?? [];
|
380
|
+
const clustersByScore = clusters.toSorted((a, b) => b.clusterCumulativeScore - a.clusterCumulativeScore);
|
381
|
+
const worstCluster = clustersByScore.at(0);
|
314
382
|
const layoutShifts = clusters.flatMap(cluster => cluster.events);
|
315
383
|
const prePaintEvents = parsedTrace.LayoutShifts.prePaintEvents.filter(isWithinContext);
|
316
384
|
|
317
385
|
// Get root causes.
|
318
|
-
const rootCausesByShift = new Map<Types.Events.
|
386
|
+
const rootCausesByShift = new Map<Types.Events.SyntheticLayoutShift, LayoutShiftRootCausesData>();
|
319
387
|
const shiftsByPrePaint = getShiftsByPrePaintEvents(layoutShifts, prePaintEvents);
|
320
388
|
|
321
389
|
for (const shift of layoutShifts) {
|
@@ -328,9 +396,16 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
|
|
328
396
|
const animationFailures =
|
329
397
|
getNonCompositedFailureRootCauses(compositeAnimationEvents, prePaintEvents, shiftsByPrePaint, rootCausesByShift);
|
330
398
|
|
399
|
+
const relatedEvents: Types.Events.Event[] = [...layoutShifts];
|
400
|
+
if (worstCluster) {
|
401
|
+
relatedEvents.push(worstCluster);
|
402
|
+
}
|
403
|
+
|
331
404
|
return {
|
405
|
+
relatedEvents,
|
332
406
|
animationFailures,
|
333
407
|
shifts: rootCausesByShift,
|
334
408
|
clusters,
|
409
|
+
worstCluster,
|
335
410
|
};
|
336
411
|
}
|
@@ -23,19 +23,19 @@ describeWithEnvironment('DocumentLatency', function() {
|
|
23
23
|
const insight =
|
24
24
|
getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
|
25
25
|
assert.strictEqual(insight.data?.redirectDuration, 1779);
|
26
|
-
assert.deepEqual(insight.metricSavings, {FCP: 1779, LCP: 1779});
|
26
|
+
assert.deepEqual(insight.metricSavings, {FCP: 1779, LCP: 1779} as Trace.Insights.Types.MetricSavings);
|
27
27
|
});
|
28
28
|
|
29
|
-
it('reports no savings for server with
|
29
|
+
it('reports no savings for server with fast server response time', async () => {
|
30
30
|
const {data, insights} = await processTrace(this, 'lantern/paul/trace.json.gz');
|
31
31
|
const insight =
|
32
32
|
getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
|
33
33
|
assert.strictEqual(insight.data?.serverResponseTime, 43);
|
34
34
|
assert(!insight.data?.serverResponseTooSlow);
|
35
|
-
assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0});
|
35
|
+
assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0} as Trace.Insights.Types.MetricSavings);
|
36
36
|
});
|
37
37
|
|
38
|
-
it('reports savings for server with
|
38
|
+
it('reports savings for server with slow server response time', async function() {
|
39
39
|
const traceEvents = [...await TraceLoader.rawEvents(this, 'lantern/paul/trace.json.gz')];
|
40
40
|
const processor = Trace.Processor.TraceProcessor.createWithAllHandlers();
|
41
41
|
|
@@ -46,11 +46,11 @@ describeWithEnvironment('DocumentLatency', function() {
|
|
46
46
|
if (!mainRequestEvent.args.data.timing) {
|
47
47
|
throw new Error('missing timing field');
|
48
48
|
}
|
49
|
-
mainRequestEvent.args.data.timing.
|
50
|
-
Types.Timing.MilliSeconds(mainRequestEvent.args.data.timing.
|
49
|
+
mainRequestEvent.args.data.timing.receiveHeadersEnd =
|
50
|
+
Types.Timing.MilliSeconds(mainRequestEvent.args.data.timing.receiveHeadersEnd + 1000);
|
51
51
|
traceEvents[mainRequestEventIndex] = mainRequestEvent;
|
52
52
|
|
53
|
-
await processor.parse(traceEvents);
|
53
|
+
await processor.parse(traceEvents, {isCPUProfile: false, isFreshRecording: true});
|
54
54
|
const data = processor.parsedTrace;
|
55
55
|
if (!data) {
|
56
56
|
throw new Error('missing parsedTrace');
|
@@ -61,7 +61,7 @@ describeWithEnvironment('DocumentLatency', function() {
|
|
61
61
|
const insight = Trace.Insights.InsightRunners.DocumentLatency.generateInsight(data, context);
|
62
62
|
assert.strictEqual(insight.data?.serverResponseTime, 1043);
|
63
63
|
assert(insight.data?.serverResponseTooSlow);
|
64
|
-
assert.deepEqual(insight.metricSavings, {FCP: 943, LCP: 943});
|
64
|
+
assert.deepEqual(insight.metricSavings, {FCP: 943, LCP: 943} as Trace.Insights.Types.MetricSavings);
|
65
65
|
});
|
66
66
|
|
67
67
|
it('reports no compression savings for compressed text', async () => {
|
@@ -69,7 +69,7 @@ describeWithEnvironment('DocumentLatency', function() {
|
|
69
69
|
const insight =
|
70
70
|
getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
|
71
71
|
assert.strictEqual(insight.data?.uncompressedResponseBytes, 0);
|
72
|
-
assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0});
|
72
|
+
assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0} as Trace.Insights.Types.MetricSavings);
|
73
73
|
});
|
74
74
|
|
75
75
|
it('reports compression savings for uncompressed text', async function() {
|
@@ -84,7 +84,7 @@ describeWithEnvironment('DocumentLatency', function() {
|
|
84
84
|
mainRequestEvent.args.data.headers = mainRequestEvent.args.data.headers?.filter(h => h.name !== 'content-encoding');
|
85
85
|
traceEvents[mainRequestEventIndex] = mainRequestEvent;
|
86
86
|
|
87
|
-
await processor.parse(traceEvents);
|
87
|
+
await processor.parse(traceEvents, {isCPUProfile: false, isFreshRecording: true});
|
88
88
|
const data = processor.parsedTrace;
|
89
89
|
if (!data) {
|
90
90
|
throw new Error('missing parsedTrace');
|
@@ -94,6 +94,17 @@ describeWithEnvironment('DocumentLatency', function() {
|
|
94
94
|
const context = createContextForNavigation(data, navigation, data.Meta.mainFrameId);
|
95
95
|
const insight = Trace.Insights.InsightRunners.DocumentLatency.generateInsight(data, context);
|
96
96
|
assert.strictEqual(insight.data?.uncompressedResponseBytes, 39799);
|
97
|
-
assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0});
|
97
|
+
assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0} as Trace.Insights.Types.MetricSavings);
|
98
|
+
});
|
99
|
+
|
100
|
+
it('reports savings for main document with many issues, many redirects', async () => {
|
101
|
+
const {data, insights} = await processTrace(this, 'many-redirects.json.gz');
|
102
|
+
const insight =
|
103
|
+
getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
|
104
|
+
assert.strictEqual(insight.data?.redirectDuration, 6059);
|
105
|
+
assert.strictEqual(insight.data?.uncompressedResponseBytes, 111506);
|
106
|
+
assert.strictEqual(insight.data?.serverResponseTime, 2008);
|
107
|
+
assert(insight.data?.serverResponseTooSlow);
|
108
|
+
assert.deepEqual(insight.metricSavings, {FCP: 7967, LCP: 7967} as Trace.Insights.Types.MetricSavings);
|
98
109
|
});
|
99
110
|
});
|
@@ -2,9 +2,10 @@
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
3
3
|
// found in the LICENSE file.
|
4
4
|
|
5
|
+
import * as Helpers from '../helpers/helpers.js';
|
5
6
|
import * as Types from '../types/types.js';
|
6
7
|
|
7
|
-
import
|
8
|
+
import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
|
8
9
|
|
9
10
|
// Due to the way that DevTools throttling works we cannot see if server response took less than ~570ms.
|
10
11
|
// We set our failure threshold to 600ms to avoid those false positives but we want devs to shoot for 100ms.
|
@@ -28,13 +29,14 @@ export function deps(): ['Meta', 'NetworkRequests'] {
|
|
28
29
|
return ['Meta', 'NetworkRequests'];
|
29
30
|
}
|
30
31
|
|
31
|
-
function
|
32
|
+
function getServerResponseTime(request: Types.Events.SyntheticNetworkRequest): Types.Timing.MilliSeconds|null {
|
32
33
|
const timing = request.args.data.timing;
|
33
34
|
if (!timing) {
|
34
35
|
return null;
|
35
36
|
}
|
36
37
|
|
37
|
-
|
38
|
+
const ms = Helpers.Timing.microSecondsToMilliseconds(request.args.data.syntheticData.waiting);
|
39
|
+
return Math.round(ms) as Types.Timing.MilliSeconds;
|
38
40
|
}
|
39
41
|
|
40
42
|
function getCompressionSavings(request: Types.Events.SyntheticNetworkRequest): number {
|
@@ -113,7 +115,7 @@ export function generateInsight(
|
|
113
115
|
throw new Error('missing document request');
|
114
116
|
}
|
115
117
|
|
116
|
-
const serverResponseTime =
|
118
|
+
const serverResponseTime = getServerResponseTime(documentRequest);
|
117
119
|
if (serverResponseTime === null) {
|
118
120
|
throw new Error('missing document request timing');
|
119
121
|
}
|
@@ -129,11 +131,12 @@ export function generateInsight(
|
|
129
131
|
overallSavingsMs += redirectDuration;
|
130
132
|
|
131
133
|
const metricSavings = {
|
132
|
-
FCP: overallSavingsMs,
|
133
|
-
LCP: overallSavingsMs,
|
134
|
+
FCP: overallSavingsMs as Types.Timing.MilliSeconds,
|
135
|
+
LCP: overallSavingsMs as Types.Timing.MilliSeconds,
|
134
136
|
};
|
135
137
|
|
136
138
|
return {
|
139
|
+
relatedEvents: [documentRequest],
|
137
140
|
data: {
|
138
141
|
serverResponseTime,
|
139
142
|
serverResponseTooSlow,
|
@@ -6,7 +6,7 @@ import * as Platform from '../../../core/platform/platform.js';
|
|
6
6
|
import * as Helpers from '../helpers/helpers.js';
|
7
7
|
import * as Types from '../types/types.js';
|
8
8
|
|
9
|
-
import
|
9
|
+
import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
|
10
10
|
|
11
11
|
export function deps(): ['Meta', 'NetworkRequests', 'LayoutShifts'] {
|
12
12
|
return ['Meta', 'NetworkRequests', 'LayoutShifts'];
|
@@ -55,7 +55,11 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
|
|
55
55
|
|
56
56
|
fonts.sort((a, b) => b.wastedTime - a.wastedTime);
|
57
57
|
|
58
|
+
const savings = Math.max(...fonts.map(f => f.wastedTime)) as Types.Timing.MilliSeconds;
|
59
|
+
|
58
60
|
return {
|
61
|
+
relatedEvents: fonts.map(f => f.request),
|
59
62
|
fonts,
|
63
|
+
metricSavings: {FCP: savings},
|
60
64
|
};
|
61
65
|
}
|
@@ -3,9 +3,9 @@
|
|
3
3
|
// found in the LICENSE file.
|
4
4
|
|
5
5
|
import * as Helpers from '../helpers/helpers.js';
|
6
|
-
import
|
6
|
+
import type {SyntheticInteractionPair} from '../types/TraceEvents.js';
|
7
7
|
|
8
|
-
import
|
8
|
+
import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
|
9
9
|
|
10
10
|
export function deps(): ['UserInteractions'] {
|
11
11
|
return ['UserInteractions'];
|
@@ -17,7 +17,7 @@ export type INPInsightResult = InsightResult<{
|
|
17
17
|
}>;
|
18
18
|
|
19
19
|
export function generateInsight(parsedTrace: RequiredData<typeof deps>, context: InsightSetContext): INPInsightResult {
|
20
|
-
const interactionEvents = parsedTrace.UserInteractions.
|
20
|
+
const interactionEvents = parsedTrace.UserInteractions.interactionEventsWithNoNesting.filter(event => {
|
21
21
|
return Helpers.Timing.eventIsInBounds(event, context.bounds);
|
22
22
|
});
|
23
23
|
|
@@ -44,6 +44,7 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
|
|
44
44
|
const highPercentileIndex = Math.min(9, Math.floor(normalizedInteractionEvents.length / 50));
|
45
45
|
|
46
46
|
return {
|
47
|
+
relatedEvents: [normalizedInteractionEvents[0]],
|
47
48
|
longestInteractionEvent: normalizedInteractionEvents[0],
|
48
49
|
highPercentileInteractionEvent: normalizedInteractionEvents[highPercentileIndex],
|
49
50
|
};
|
@@ -56,7 +56,7 @@ describeWithEnvironment('LargestContentfulPaint', function() {
|
|
56
56
|
const {shouldIncreasePriorityHint, shouldPreloadImage, shouldRemoveLazyLoading} = insight;
|
57
57
|
|
58
58
|
assert.strictEqual(shouldRemoveLazyLoading, false);
|
59
|
-
assert.strictEqual(shouldPreloadImage,
|
59
|
+
assert.strictEqual(shouldPreloadImage, false);
|
60
60
|
assert.strictEqual(shouldIncreasePriorityHint, true);
|
61
61
|
});
|
62
62
|
|
@@ -92,4 +92,12 @@ describeWithEnvironment('LargestContentfulPaint', function() {
|
|
92
92
|
assert.strictEqual(insight.warnings?.[0], 'NO_DOCUMENT_REQUEST');
|
93
93
|
});
|
94
94
|
});
|
95
|
+
|
96
|
+
it('can handle old traces with missing data and return null for breakdowns of the phases', async () => {
|
97
|
+
const {data, insights} = await processTrace(this, 'multiple-navigations.json.gz');
|
98
|
+
const firstNav = getFirstOrError(data.Meta.navigationsByNavigationId.values());
|
99
|
+
const insight = getInsightOrError('LargestContentfulPaint', insights, firstNav);
|
100
|
+
// This insight has invalid phase data, so we expect the value to be undefined.
|
101
|
+
assert.isUndefined(insight.phases);
|
102
|
+
});
|
95
103
|
});
|
@@ -48,9 +48,18 @@ export type LCPInsightResult = InsightResult<{
|
|
48
48
|
earliestDiscoveryTimeTs?: Types.Timing.MicroSeconds,
|
49
49
|
}>;
|
50
50
|
|
51
|
+
function anyValuesNaN(...values: number[]): boolean {
|
52
|
+
return values.some(v => Number.isNaN(v));
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Calculates the 4 phases of an LCP and the timings of each.
|
56
|
+
* Will return `null` if any required values were missing. We don't ever expect
|
57
|
+
* them to be missing on newer traces, but old trace files may lack some of the
|
58
|
+
* data we rely on, so we want to handle that case.
|
59
|
+
*/
|
51
60
|
function breakdownPhases(
|
52
61
|
nav: Types.Events.NavigationStart, docRequest: Types.Events.SyntheticNetworkRequest,
|
53
|
-
lcpMs: Types.Timing.MilliSeconds, lcpRequest: Types.Events.SyntheticNetworkRequest|null): LCPPhases {
|
62
|
+
lcpMs: Types.Timing.MilliSeconds, lcpRequest: Types.Events.SyntheticNetworkRequest|null): LCPPhases|null {
|
54
63
|
const docReqTiming = docRequest.args.data.timing;
|
55
64
|
if (!docReqTiming) {
|
56
65
|
throw new Error('no timing for document request');
|
@@ -63,6 +72,9 @@ function breakdownPhases(
|
|
63
72
|
let renderDelay = Types.Timing.MilliSeconds(lcpMs - ttfb);
|
64
73
|
|
65
74
|
if (!lcpRequest) {
|
75
|
+
if (anyValuesNaN(ttfb, renderDelay)) {
|
76
|
+
return null;
|
77
|
+
}
|
66
78
|
return {ttfb, renderDelay};
|
67
79
|
}
|
68
80
|
|
@@ -75,6 +87,9 @@ function breakdownPhases(
|
|
75
87
|
const loadDelay = Types.Timing.MilliSeconds(requestStart - ttfb);
|
76
88
|
const loadTime = Types.Timing.MilliSeconds(requestEnd - requestStart);
|
77
89
|
renderDelay = Types.Timing.MilliSeconds(lcpMs - requestEnd);
|
90
|
+
if (anyValuesNaN(ttfb, loadDelay, loadTime, renderDelay)) {
|
91
|
+
return null;
|
92
|
+
}
|
78
93
|
|
79
94
|
return {
|
80
95
|
ttfb,
|
@@ -121,14 +136,19 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
|
|
121
136
|
lcpMs,
|
122
137
|
lcpTs,
|
123
138
|
lcpEvent,
|
124
|
-
phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest),
|
139
|
+
phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest) ?? undefined,
|
125
140
|
};
|
126
141
|
}
|
127
142
|
|
143
|
+
const initiatorUrl = lcpRequest.args.data.initiator?.url;
|
144
|
+
// TODO(b/372319476): Explore using trace event HTMLDocumentParser::FetchQueuedPreloads to determine if the request
|
145
|
+
// is discovered by the preload scanner.
|
146
|
+
const initiatedByMainDoc =
|
147
|
+
lcpRequest?.args.data.initiator?.type === 'parser' && docRequest.args.data.url === initiatorUrl;
|
148
|
+
const imgPreloadedOrFoundInHTML = lcpRequest?.args.data.isLinkPreload || initiatedByMainDoc;
|
149
|
+
|
128
150
|
const imageLoadingAttr = lcpEvent.args.data?.loadingAttr;
|
129
|
-
const imagePreloaded = lcpRequest?.args.data.isLinkPreload || lcpRequest?.args.data.initiator?.type === 'preload';
|
130
151
|
const imageFetchPriorityHint = lcpRequest?.args.data.fetchPriorityHint;
|
131
|
-
|
132
152
|
// This is the earliest discovery time an LCP request could have - it's TTFB.
|
133
153
|
const earliestDiscoveryTime = docRequest && docRequest.args.data.timing ?
|
134
154
|
Helpers.Timing.secondsToMicroseconds(docRequest.args.data.timing.requestTime) +
|
@@ -139,10 +159,10 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
|
|
139
159
|
lcpMs,
|
140
160
|
lcpTs,
|
141
161
|
lcpEvent,
|
142
|
-
phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest),
|
162
|
+
phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest) ?? undefined,
|
143
163
|
shouldRemoveLazyLoading: imageLoadingAttr === 'lazy',
|
144
164
|
shouldIncreasePriorityHint: imageFetchPriorityHint !== 'high',
|
145
|
-
shouldPreloadImage: !
|
165
|
+
shouldPreloadImage: !imgPreloadedOrFoundInHTML,
|
146
166
|
lcpRequest,
|
147
167
|
earliestDiscoveryTimeTs: earliestDiscoveryTime ? Types.Timing.MicroSeconds(earliestDiscoveryTime) : undefined,
|
148
168
|
};
|
@@ -106,6 +106,9 @@ describeWithEnvironment('RenderBlockingRequests', function() {
|
|
106
106
|
]);
|
107
107
|
});
|
108
108
|
|
109
|
+
// TODO(crbug.com/372674229): when swapping to 'provided' instead of 'simulated', all these test traces give
|
110
|
+
// uninteresting results. must get new traces.
|
111
|
+
|
109
112
|
it('estimates savings with Lantern (image LCP)', async () => {
|
110
113
|
const {data, insights} = await processTrace(this, 'lantern/render-blocking/trace.json.gz');
|
111
114
|
assert.strictEqual(insights.size, 1);
|
@@ -113,19 +116,16 @@ describeWithEnvironment('RenderBlockingRequests', function() {
|
|
113
116
|
getInsightOrError('RenderBlocking', insights, data.Meta.navigationsByNavigationId.values().next().value);
|
114
117
|
|
115
118
|
assert.deepStrictEqual(insight.metricSavings, {
|
116
|
-
FCP:
|
119
|
+
FCP: 0,
|
117
120
|
LCP: 0,
|
118
|
-
});
|
121
|
+
} as Trace.Insights.Types.MetricSavings);
|
119
122
|
|
120
123
|
assert.exists(insight.requestIdToWastedMs);
|
121
124
|
const urlToWastedMs = [...insight.requestIdToWastedMs].map(([requestId, wastedMs]) => {
|
122
125
|
const url = insight.renderBlockingRequests.find(r => r.args.data.requestId === requestId)?.args.data.url;
|
123
126
|
return [url, wastedMs];
|
124
127
|
});
|
125
|
-
assert.deepStrictEqual(urlToWastedMs, [
|
126
|
-
['http://localhost:50049/style.css', 2254],
|
127
|
-
['http://localhost:50049/script.js', 304],
|
128
|
-
]);
|
128
|
+
assert.deepStrictEqual(urlToWastedMs, []);
|
129
129
|
});
|
130
130
|
|
131
131
|
it('estimates savings with Lantern (text LCP)', async () => {
|
@@ -135,20 +135,14 @@ describeWithEnvironment('RenderBlockingRequests', function() {
|
|
135
135
|
getInsightOrError('RenderBlocking', insights, data.Meta.navigationsByNavigationId.values().next().value);
|
136
136
|
|
137
137
|
assert.deepStrictEqual(insight.metricSavings, {
|
138
|
-
FCP:
|
139
|
-
LCP:
|
140
|
-
});
|
138
|
+
FCP: 0,
|
139
|
+
LCP: 0,
|
140
|
+
} as Trace.Insights.Types.MetricSavings);
|
141
141
|
assert.exists(insight.requestIdToWastedMs);
|
142
142
|
const urlToWastedMs = [...insight.requestIdToWastedMs].map(([requestId, wastedMs]) => {
|
143
143
|
const url = insight.renderBlockingRequests.find(r => r.args.data.requestId === requestId)?.args.data.url;
|
144
144
|
return [url, wastedMs];
|
145
145
|
});
|
146
|
-
assert.deepStrictEqual(urlToWastedMs, [
|
147
|
-
['http://[::]:8000/typescript-angular/node_modules/todomvc-common/base.css', 153],
|
148
|
-
['http://[::]:8000/typescript-angular/node_modules/todomvc-app-css/index.css', 303],
|
149
|
-
['http://[::]:8000/typescript-angular/node_modules/todomvc-common/base.js', 303],
|
150
|
-
['http://[::]:8000/typescript-angular/node_modules/angular/angular.js', 303],
|
151
|
-
['http://[::]:8000/typescript-angular/js/Application.js', 303],
|
152
|
-
]);
|
146
|
+
assert.deepStrictEqual(urlToWastedMs, []);
|
153
147
|
});
|
154
148
|
});
|
@@ -52,7 +52,8 @@ function getNodesAndTimingByRequestId(nodeTimings: Lantern.Simulation.Result['no
|
|
52
52
|
return requestIdToNode;
|
53
53
|
}
|
54
54
|
|
55
|
-
function estimateSavingsWithGraphs(
|
55
|
+
function estimateSavingsWithGraphs(
|
56
|
+
deferredIds: Set<string>, lanternContext: LanternContext): Types.Timing.MilliSeconds {
|
56
57
|
const simulator = lanternContext.simulator;
|
57
58
|
const fcpGraph = lanternContext.metrics.firstContentfulPaint.optimisticGraph;
|
58
59
|
const {nodeTimings} = lanternContext.simulator.simulate(fcpGraph);
|
@@ -80,7 +81,7 @@ function estimateSavingsWithGraphs(deferredIds: Set<string>, lanternContext: Lan
|
|
80
81
|
minimalFCPGraph.request.transferSize = safeTransferSize + totalChildNetworkBytes;
|
81
82
|
const estimateAfterInline = simulator.simulate(minimalFCPGraph).timeInMs;
|
82
83
|
minimalFCPGraph.request.transferSize = originalTransferSize;
|
83
|
-
return Math.round(Math.max(estimateBeforeInline - estimateAfterInline, 0));
|
84
|
+
return Math.round(Math.max(estimateBeforeInline - estimateAfterInline, 0)) as Types.Timing.MilliSeconds;
|
84
85
|
}
|
85
86
|
|
86
87
|
function hasImageLCP(parsedTrace: RequiredData<typeof deps>, context: InsightSetContextWithNavigation): boolean {
|
@@ -113,7 +114,7 @@ function computeSavings(
|
|
113
114
|
const nodesAndTimingsByRequestId =
|
114
115
|
getNodesAndTimingByRequestId(context.lantern.metrics.firstContentfulPaint.optimisticEstimate.nodeTimings);
|
115
116
|
|
116
|
-
const metricSavings = {FCP: 0, LCP: 0};
|
117
|
+
const metricSavings = {FCP: 0 as Types.Timing.MilliSeconds, LCP: 0 as Types.Timing.MilliSeconds};
|
117
118
|
const requestIdToWastedMs = new Map<string, number>();
|
118
119
|
const deferredNodeIds = new Set<string>();
|
119
120
|
for (const request of renderBlockingRequests) {
|
@@ -173,7 +174,7 @@ export function generateInsight(
|
|
173
174
|
continue;
|
174
175
|
}
|
175
176
|
|
176
|
-
if (
|
177
|
+
if (!Helpers.Network.isSyntheticNetworkRequestEventRenderBlocking(req)) {
|
177
178
|
continue;
|
178
179
|
}
|
179
180
|
|
@@ -211,6 +212,7 @@ export function generateInsight(
|
|
211
212
|
});
|
212
213
|
|
213
214
|
return {
|
215
|
+
relatedEvents: renderBlockingRequests,
|
214
216
|
renderBlockingRequests,
|
215
217
|
...savings,
|
216
218
|
};
|
@@ -6,7 +6,7 @@ import * as Helpers from '../helpers/helpers.js';
|
|
6
6
|
import {type SelectorTiming, SelectorTimingsKey} from '../types/TraceEvents.js';
|
7
7
|
import * as Types from '../types/types.js';
|
8
8
|
|
9
|
-
import
|
9
|
+
import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
|
10
10
|
|
11
11
|
export function deps(): ['SelectorStats'] {
|
12
12
|
return ['SelectorStats'];
|
@@ -82,6 +82,8 @@ export function generateInsight(
|
|
82
82
|
});
|
83
83
|
|
84
84
|
return {
|
85
|
+
// TODO: should we identify UpdateLayout events as linked to this insight?
|
86
|
+
relatedEvents: [],
|
85
87
|
totalElapsedMs: Types.Timing.MilliSeconds(totalElapsedUs / 1000.0),
|
86
88
|
totalMatchAttempts,
|
87
89
|
totalMatchCount,
|
@@ -8,7 +8,7 @@ import type * as Handlers from '../handlers/handlers.js';
|
|
8
8
|
import * as Helpers from '../helpers/helpers.js';
|
9
9
|
import * as Types from '../types/types.js';
|
10
10
|
|
11
|
-
import
|
11
|
+
import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
|
12
12
|
|
13
13
|
export function deps(): ['Meta', 'NetworkRequests', 'Renderer', 'ImagePainting'] {
|
14
14
|
return ['Meta', 'NetworkRequests', 'Renderer', 'ImagePainting'];
|
@@ -184,6 +184,18 @@ function getSummaries(
|
|
184
184
|
return {byEntity, byRequest, requestsByEntity};
|
185
185
|
}
|
186
186
|
|
187
|
+
function getRelatedEvents(summaries: SummaryMaps, firstPartyEntity: Entity|undefined): Types.Events.Event[] {
|
188
|
+
const events = [];
|
189
|
+
|
190
|
+
for (const [entity, requests] of summaries.requestsByEntity.entries()) {
|
191
|
+
if (entity !== firstPartyEntity) {
|
192
|
+
events.push(...requests);
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
return events;
|
197
|
+
}
|
198
|
+
|
187
199
|
export function generateInsight(
|
188
200
|
parsedTrace: RequiredData<typeof deps>, context: InsightSetContext): ThirdPartyWebInsightResult {
|
189
201
|
const networkRequests = parsedTrace.NetworkRequests.byTime.filter(event => {
|
@@ -212,11 +224,12 @@ export function generateInsight(
|
|
212
224
|
// TODO(crbug.com/352244718): re-work to still collect main thread activity if no request is present
|
213
225
|
const summaries = getSummaries(networkRequests, entityByRequest, selfTimeByUrl);
|
214
226
|
|
215
|
-
const firstPartyUrl = context.navigation?.args.data?.
|
227
|
+
const firstPartyUrl = context.navigation?.args.data?.documentLoaderURL ?? parsedTrace.Meta.mainFrameURL;
|
216
228
|
const firstPartyEntity =
|
217
229
|
ThirdPartyWeb.ThirdPartyWeb.getEntity(firstPartyUrl) || makeUpEntity(madeUpEntityCache, firstPartyUrl);
|
218
230
|
|
219
231
|
return {
|
232
|
+
relatedEvents: getRelatedEvents(summaries, firstPartyEntity),
|
220
233
|
entityByRequest,
|
221
234
|
requestsByEntity: summaries.requestsByEntity,
|
222
235
|
summaryByRequest: summaries.byRequest,
|