chrome-devtools-frontend 1.0.1512349 → 1.0.1513662
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/docs/cookbook/release_management.md +15 -13
- package/docs/get_the_code.md +114 -35
- package/front_end/core/common/Color.ts +40 -44
- package/front_end/core/common/Console.ts +4 -4
- package/front_end/core/common/ParsedURL.ts +14 -14
- package/front_end/core/common/ResourceType.ts +20 -20
- package/front_end/core/common/SegmentedRange.ts +13 -14
- package/front_end/core/common/Settings.ts +4 -4
- package/front_end/core/common/StringOutputStream.ts +4 -4
- package/front_end/core/host/GdpClient.ts +38 -0
- package/front_end/core/host/InspectorFrontendHost.ts +4 -1
- package/front_end/core/host/InspectorFrontendHostAPI.ts +2 -0
- package/front_end/core/host/ResourceLoader.ts +2 -2
- package/front_end/core/host/UserMetrics.ts +0 -2
- package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
- package/front_end/core/root/Runtime.ts +5 -2
- package/front_end/core/sdk/AccessibilityModel.ts +48 -48
- package/front_end/core/sdk/AnimationModel.ts +78 -79
- package/front_end/core/sdk/CPUProfilerModel.ts +5 -5
- package/front_end/core/sdk/CPUThrottlingManager.ts +17 -17
- package/front_end/core/sdk/CSSMatchedStyles.ts +44 -44
- package/front_end/core/sdk/CSSMedia.ts +22 -22
- package/front_end/core/sdk/CSSModel.ts +4 -4
- package/front_end/core/sdk/CSSProperty.ts +9 -9
- package/front_end/core/sdk/CSSPropertyParser.ts +1 -2
- package/front_end/core/sdk/CSSRule.ts +3 -3
- package/front_end/core/sdk/CSSStyleDeclaration.ts +27 -28
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +13 -13
- package/front_end/core/sdk/CategorizedBreakpoint.ts +4 -4
- package/front_end/core/sdk/ChildTargetManager.ts +6 -6
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +4 -4
- package/front_end/core/sdk/ConsoleModel.ts +24 -24
- package/front_end/core/sdk/Cookie.ts +16 -16
- package/front_end/core/sdk/CookieParser.ts +6 -6
- package/front_end/core/sdk/DOMDebuggerModel.ts +88 -89
- package/front_end/core/sdk/DOMModel.ts +113 -113
- package/front_end/core/sdk/DebuggerModel.ts +102 -103
- package/front_end/core/sdk/EmulationModel.ts +6 -6
- package/front_end/core/sdk/EventBreakpointsModel.ts +5 -5
- package/front_end/core/sdk/HeapProfilerModel.ts +5 -5
- package/front_end/core/sdk/IsolateManager.ts +26 -26
- package/front_end/core/sdk/LayerTreeBase.ts +29 -30
- package/front_end/core/sdk/OverlayModel.ts +6 -6
- package/front_end/core/sdk/Resource.ts +43 -43
- package/front_end/core/sdk/ResourceTreeModel.ts +58 -61
- package/front_end/core/sdk/RuntimeModel.ts +12 -13
- package/front_end/core/sdk/SDKModel.ts +3 -3
- package/front_end/core/sdk/Script.ts +17 -17
- package/front_end/core/sdk/SecurityOriginManager.ts +14 -14
- package/front_end/core/sdk/ServerTiming.ts +2 -2
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +15 -15
- package/front_end/core/sdk/ServiceWorkerManager.ts +19 -24
- package/front_end/core/sdk/SourceMap.ts +10 -10
- package/front_end/core/sdk/StorageKeyManager.ts +12 -12
- package/front_end/core/sdk/Target.ts +33 -34
- package/front_end/core/sdk/TargetManager.ts +20 -20
- package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +8 -8
- package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +7 -7
- package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +7 -7
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +24 -24
- package/front_end/entrypoints/main/GlobalAiButton.ts +3 -3
- package/front_end/entrypoints/main/MainImpl.ts +16 -14
- package/front_end/entrypoints/main/main-meta.ts +1 -2
- package/front_end/generated/InspectorBackendCommands.js +3 -2
- package/front_end/generated/SupportedCSSProperties.js +20 -0
- package/front_end/generated/protocol-mapping.d.ts +4 -0
- package/front_end/generated/protocol-proxy-api.d.ts +5 -0
- package/front_end/generated/protocol.ts +20 -0
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +15 -16
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +127 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +149 -26
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +6 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +9 -10
- package/front_end/models/badges/AiExplorerBadge.ts +21 -0
- package/front_end/models/badges/Badge.ts +3 -5
- package/front_end/models/badges/CodeWhispererBadge.ts +21 -0
- package/front_end/models/badges/DOMDetectiveBadge.ts +4 -3
- package/front_end/models/badges/SpeedsterBadge.ts +6 -4
- package/front_end/models/badges/StarterBadge.ts +4 -3
- package/front_end/models/badges/UserBadges.ts +29 -3
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +6 -6
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +18 -18
- package/front_end/models/bindings/FileUtils.ts +15 -15
- package/front_end/models/bindings/ResourceScriptMapping.ts +14 -14
- package/front_end/models/elements/ElementUpdateRecord.ts +11 -11
- package/front_end/models/emulation/DeviceModeModel.ts +123 -131
- package/front_end/models/emulation/EmulatedDevices.ts +22 -22
- package/front_end/models/extensions/ExtensionPanel.ts +24 -24
- package/front_end/models/extensions/ExtensionServer.ts +4 -4
- package/front_end/models/javascript_metadata/NativeFunctions.js +14 -2
- package/front_end/models/persistence/IsolatedFileSystem.ts +18 -19
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +13 -13
- package/front_end/models/trace/EventsSerializer.ts +5 -5
- package/front_end/models/trace/LanternComputationData.ts +10 -10
- package/front_end/models/trace/ModelImpl.ts +32 -41
- package/front_end/models/trace/Processor.ts +28 -30
- package/front_end/models/trace/extras/FilmStrip.ts +6 -6
- package/front_end/models/trace/extras/StackTraceForEvent.ts +22 -25
- package/front_end/models/trace/extras/ThirdParties.ts +16 -17
- package/front_end/models/trace/extras/TraceFilter.ts +1 -1
- package/front_end/models/trace/handlers/Threads.ts +10 -10
- package/front_end/models/trace/handlers/helpers.ts +9 -9
- package/front_end/models/trace/handlers/types.ts +3 -3
- package/front_end/models/trace/insights/CLSCulprits.ts +12 -14
- package/front_end/models/trace/insights/Cache.ts +8 -4
- package/front_end/models/trace/insights/DOMSize.ts +8 -5
- package/front_end/models/trace/insights/DocumentLatency.ts +2 -2
- package/front_end/models/trace/insights/DuplicatedJavaScript.ts +3 -3
- package/front_end/models/trace/insights/FontDisplay.ts +3 -4
- package/front_end/models/trace/insights/ForcedReflow.ts +3 -3
- package/front_end/models/trace/insights/INPBreakdown.ts +2 -2
- package/front_end/models/trace/insights/ImageDelivery.ts +11 -11
- package/front_end/models/trace/insights/LCPBreakdown.ts +4 -4
- package/front_end/models/trace/insights/LCPDiscovery.ts +4 -4
- package/front_end/models/trace/insights/LegacyJavaScript.ts +2 -2
- package/front_end/models/trace/insights/ModernHTTP.ts +4 -5
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +12 -12
- package/front_end/models/trace/insights/RenderBlocking.ts +9 -10
- package/front_end/models/trace/insights/SlowCSSSelector.ts +2 -2
- package/front_end/models/trace/insights/ThirdParties.ts +4 -5
- package/front_end/models/trace/insights/Viewport.ts +8 -5
- package/front_end/models/trace/insights/types.ts +1 -0
- package/front_end/models/trace/lantern/testing/MetricTestUtils.ts +10 -10
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +52 -52
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -8
- package/front_end/panels/animation/AnimationTimeline.ts +5 -5
- package/front_end/panels/animation/AnimationUI.ts +22 -23
- package/front_end/panels/application/ApplicationPanelSidebar.ts +12 -12
- package/front_end/panels/application/DOMStorageModel.ts +23 -23
- package/front_end/panels/application/ExtensionStorageModel.ts +31 -31
- package/front_end/panels/application/IndexedDBModel.ts +1 -0
- package/front_end/panels/application/PreloadingTreeElement.ts +8 -8
- package/front_end/panels/application/ServiceWorkersView.ts +0 -53
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
- package/front_end/panels/common/BadgeNotification.ts +24 -4
- package/front_end/panels/common/GdpSignUpDialog.ts +5 -0
- package/front_end/panels/common/badgeNotification.css +26 -9
- package/front_end/panels/console/ConsoleContextSelector.ts +9 -9
- package/front_end/panels/console/ConsolePrompt.ts +8 -5
- package/front_end/panels/console/ConsoleView.ts +13 -13
- package/front_end/panels/console/ConsoleViewport.ts +29 -29
- package/front_end/panels/coverage/CoverageModel.ts +22 -22
- package/front_end/panels/elements/ClassesPaneWidget.ts +1 -1
- package/front_end/panels/elements/ComputedStyleModel.ts +17 -18
- package/front_end/panels/elements/DOMPath.ts +2 -2
- package/front_end/panels/elements/ElementsPanel.ts +13 -13
- package/front_end/panels/elements/ElementsTreeElement.ts +18 -18
- package/front_end/panels/elements/ElementsTreeOutline.ts +41 -48
- package/front_end/panels/elements/ShortcutTreeElement.ts +4 -4
- package/front_end/panels/elements/StylePropertiesSection.ts +4 -4
- package/front_end/panels/elements/StylePropertyTreeElement.ts +49 -50
- package/front_end/panels/elements/StylesSidebarPane.ts +19 -19
- package/front_end/panels/emulation/DeviceModeToolbar.ts +7 -7
- package/front_end/panels/emulation/DeviceModeView.ts +6 -6
- package/front_end/panels/emulation/MediaQueryInspector.ts +18 -18
- package/front_end/panels/event_listeners/EventListenersView.ts +13 -14
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +3 -3
- package/front_end/panels/layer_viewer/LayerViewHost.ts +13 -13
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -10
- package/front_end/panels/layer_viewer/TransformController.ts +34 -36
- package/front_end/panels/layers/LayerTreeModel.ts +41 -40
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +13 -13
- package/front_end/panels/lighthouse/LighthouseStartView.ts +7 -7
- package/front_end/panels/media/PlayerMessagesView.ts +5 -5
- package/front_end/panels/media/TickingFlameChart.ts +24 -24
- package/front_end/panels/media/TickingFlameChartHelpers.ts +32 -32
- package/front_end/panels/network/NetworkItemView.ts +4 -4
- package/front_end/panels/network/NetworkLogViewColumns.ts +29 -29
- package/front_end/panels/network/NetworkPanel.ts +8 -5
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +10 -10
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +3 -3
- package/front_end/panels/profiler/HeapProfileView.ts +1 -1
- package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +3 -4
- package/front_end/panels/profiler/ProfileHeader.ts +25 -25
- package/front_end/panels/profiler/ProfileLauncherView.ts +5 -6
- package/front_end/panels/recorder/components/ReplaySection.ts +3 -1
- package/front_end/panels/security/OriginTreeElement.ts +8 -8
- package/front_end/panels/security/SecurityPanel.ts +5 -5
- package/front_end/panels/settings/SettingsScreen.ts +18 -12
- package/front_end/panels/settings/components/SyncSection.ts +20 -6
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +3 -0
- package/front_end/panels/sources/DebuggerPausedMessage.ts +8 -9
- package/front_end/panels/sources/NavigatorView.ts +43 -46
- package/front_end/panels/sources/SourcesPanel.ts +35 -35
- package/front_end/panels/sources/SourcesView.ts +13 -13
- package/front_end/panels/sources/TabbedEditorContainer.ts +19 -22
- package/front_end/panels/sources/UISourceCodeFrame.ts +4 -4
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +34 -36
- package/front_end/panels/timeline/AnimationsTrackAppender.ts +3 -3
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +8 -8
- package/front_end/panels/timeline/CountersGraph.ts +16 -16
- package/front_end/panels/timeline/EntriesFilter.ts +4 -3
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +3 -3
- package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
- package/front_end/panels/timeline/Initiators.ts +10 -10
- package/front_end/panels/timeline/InteractionsTrackAppender.ts +5 -5
- package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +7 -7
- package/front_end/panels/timeline/ModificationsManager.ts +8 -15
- package/front_end/panels/timeline/TargetForEvent.ts +2 -2
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +1 -1
- package/front_end/panels/timeline/ThreadAppender.ts +13 -13
- package/front_end/panels/timeline/TimelineDetailsView.ts +6 -14
- package/front_end/panels/timeline/TimelineEventOverview.ts +27 -26
- package/front_end/panels/timeline/TimelineFilters.ts +5 -5
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +54 -53
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +34 -34
- package/front_end/panels/timeline/TimelineFlameChartView.ts +18 -31
- package/front_end/panels/timeline/TimelineHistoryManager.ts +17 -18
- package/front_end/panels/timeline/TimelineMiniMap.ts +6 -6
- package/front_end/panels/timeline/TimelinePaintProfilerView.ts +6 -6
- package/front_end/panels/timeline/TimelinePanel.ts +52 -59
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +7 -5
- package/front_end/panels/timeline/TimelineTreeView.ts +10 -10
- package/front_end/panels/timeline/TimelineUIUtils.ts +43 -43
- package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -12
- package/front_end/panels/timeline/TracingLayerTree.ts +43 -43
- package/front_end/panels/timeline/TrackConfigBanner.ts +6 -6
- package/front_end/panels/timeline/TrackConfiguration.ts +1 -1
- package/front_end/panels/timeline/components/DetailsView.ts +4 -4
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +12 -21
- package/front_end/panels/timeline/components/LiveMetricsView.ts +2 -1
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +5 -5
- package/front_end/panels/timeline/components/Sidebar.ts +4 -14
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +13 -36
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +21 -19
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +1 -1
- package/front_end/panels/timeline/components/insights/Cache.ts +4 -0
- package/front_end/panels/timeline/components/insights/DOMSize.ts +5 -1
- package/front_end/panels/timeline/components/insights/Helpers.ts +19 -0
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +1 -1
- package/front_end/panels/timeline/components/insights/Viewport.ts +4 -0
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +1 -1
- package/front_end/panels/timeline/utils/AICallTree.ts +11 -11
- package/front_end/panels/timeline/utils/AIContext.ts +17 -19
- package/front_end/panels/timeline/utils/EntityMapper.ts +6 -5
- package/front_end/panels/timeline/utils/EntryName.ts +2 -2
- package/front_end/panels/timeline/utils/EntryNodes.ts +5 -5
- package/front_end/panels/timeline/utils/EntryStyles.ts +4 -4
- package/front_end/panels/timeline/utils/FreshRecording.ts +3 -3
- package/front_end/panels/timeline/utils/Helpers.ts +0 -18
- package/front_end/panels/timeline/utils/InsightAIContext.ts +6 -6
- package/front_end/panels/timeline/utils/SourceMapsResolver.ts +7 -7
- package/front_end/panels/webauthn/WebauthnPane.ts +1 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/chunk/angular.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/angular.js.map +1 -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/cpp.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/cpp.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/legacy.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/legacy.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/less.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/less.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/python.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/chunk/svelte.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/svelte.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/vue.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/vue.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js.map +1 -1
- package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
- package/front_end/third_party/codemirror.next/package.json +1 -1
- package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
- package/front_end/third_party/json5/rebuild.sh +1 -1
- package/front_end/third_party/legacy-javascript/{update.sh → rebuild.sh} +1 -1
- package/front_end/third_party/lit/lib/decorators.d.ts +26 -9
- package/front_end/third_party/lit/lib/decorators.js +5 -5
- package/front_end/third_party/lit/lib/decorators.js.map +1 -1
- package/front_end/third_party/lit/lib/directive.js.map +1 -1
- package/front_end/third_party/lit/lib/directives.js +8 -13
- package/front_end/third_party/lit/lib/directives.js.map +1 -1
- package/front_end/third_party/lit/lib/lit.d.ts +26 -9
- package/front_end/third_party/lit/lib/lit.js +5 -5
- package/front_end/third_party/lit/lib/lit.js.map +1 -1
- package/front_end/third_party/lit/lib/static-html.js +2 -2
- package/front_end/third_party/lit/lib/static-html.js.map +1 -1
- package/front_end/third_party/lit/rebuild.sh +1 -1
- package/front_end/third_party/third-party-web/rebuild.sh +1 -1
- package/front_end/ui/components/dialogs/Dialog.ts +6 -7
- package/front_end/ui/legacy/ActionRegistration.ts +9 -9
- package/front_end/ui/legacy/DockController.ts +18 -18
- package/front_end/ui/legacy/FilterBar.ts +7 -7
- package/front_end/ui/legacy/Fragment.ts +4 -4
- package/front_end/ui/legacy/GlassPane.ts +12 -12
- package/front_end/ui/legacy/InspectorView.ts +5 -15
- package/front_end/ui/legacy/ListControl.ts +27 -27
- package/front_end/ui/legacy/ListWidget.ts +4 -4
- package/front_end/ui/legacy/PopoverHelper.ts +4 -4
- package/front_end/ui/legacy/ShortcutRegistry.ts +17 -17
- package/front_end/ui/legacy/TabbedPane.ts +74 -75
- package/front_end/ui/legacy/TextPrompt.ts +31 -31
- package/front_end/ui/legacy/Toolbar.ts +13 -14
- package/front_end/ui/legacy/ViewManager.ts +30 -31
- package/front_end/ui/legacy/Widget.ts +6 -6
- package/front_end/ui/legacy/XLink.ts +9 -9
- package/front_end/ui/legacy/ZoomManager.ts +9 -9
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +27 -27
- package/front_end/ui/legacy/components/color_picker/ContrastInfo.ts +30 -32
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +15 -15
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +64 -64
- package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +10 -11
- package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +12 -12
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +3 -3
- package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +14 -14
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +8 -8
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +5 -5
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +4 -4
- package/front_end/ui/legacy/theme_support/ThemeSupport.ts +4 -4
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -2
- package/package.json +1 -1
@@ -11,11 +11,10 @@ import * as Buttons from '../../../ui/components/buttons/buttons.js';
|
|
11
11
|
import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
|
12
12
|
import * as Lit from '../../../ui/lit/lit.js';
|
13
13
|
import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
|
14
|
-
import {md} from '../utils/Helpers.js';
|
15
14
|
import * as Utils from '../utils/utils.js';
|
16
15
|
|
17
16
|
import type {BaseInsightComponent} from './insights/BaseInsightComponent.js';
|
18
|
-
import {shouldRenderForCategory} from './insights/Helpers.js';
|
17
|
+
import {md, shouldRenderForCategory} from './insights/Helpers.js';
|
19
18
|
import * as Insights from './insights/insights.js';
|
20
19
|
import type {ActiveInsight} from './Sidebar.js';
|
21
20
|
import sidebarSingleInsightSetStyles from './sidebarSingleInsightSet.css.js';
|
@@ -74,12 +73,10 @@ const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/SidebarSing
|
|
74
73
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
75
74
|
|
76
75
|
export interface SidebarSingleInsightSetData {
|
77
|
-
insights: Trace.Insights.Types.TraceInsightSets|null;
|
78
76
|
insightSetKey: Trace.Types.Events.NavigationId|null;
|
79
77
|
activeCategory: Trace.Insights.Types.InsightCategory;
|
80
78
|
activeInsight: ActiveInsight|null;
|
81
|
-
parsedTrace: Trace.
|
82
|
-
traceMetadata: Trace.Types.File.MetaData|null;
|
79
|
+
parsedTrace: Trace.TraceModel.ParsedTrace|null;
|
83
80
|
}
|
84
81
|
|
85
82
|
type InsightNameToComponentMapping =
|
@@ -122,12 +119,10 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
122
119
|
#activeInsightElement: BaseInsightComponent<Trace.Insights.Types.InsightModel>|null = null;
|
123
120
|
|
124
121
|
#data: SidebarSingleInsightSetData = {
|
125
|
-
insights: null,
|
126
122
|
insightSetKey: null,
|
127
123
|
activeCategory: Trace.Insights.Types.InsightCategory.ALL,
|
128
124
|
activeInsight: null,
|
129
125
|
parsedTrace: null,
|
130
|
-
traceMetadata: null,
|
131
126
|
};
|
132
127
|
|
133
128
|
#dismissedFieldMismatchNotice = false;
|
@@ -225,7 +220,11 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
225
220
|
|
226
221
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
227
222
|
#getLocalMetrics(insightSetKey: string) {
|
228
|
-
|
223
|
+
if (!this.#data.parsedTrace) {
|
224
|
+
return {};
|
225
|
+
}
|
226
|
+
|
227
|
+
const insightSet = this.#data.parsedTrace.insights?.get(insightSetKey);
|
229
228
|
if (!insightSet) {
|
230
229
|
return {};
|
231
230
|
}
|
@@ -238,13 +237,17 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
238
237
|
}
|
239
238
|
|
240
239
|
#getFieldMetrics(insightSetKey: string): Trace.Insights.Common.CrUXFieldMetricResults|null {
|
241
|
-
|
240
|
+
if (!this.#data.parsedTrace) {
|
241
|
+
return null;
|
242
|
+
}
|
243
|
+
|
244
|
+
const insightSet = this.#data.parsedTrace.insights?.get(insightSetKey);
|
242
245
|
if (!insightSet) {
|
243
246
|
return null;
|
244
247
|
}
|
245
248
|
|
246
249
|
const fieldMetricsResults = Trace.Insights.Common.getFieldMetricsForInsightSet(
|
247
|
-
insightSet, this.#data.
|
250
|
+
insightSet, this.#data.parsedTrace.metadata, CrUXManager.CrUXManager.instance().getSelectedScope());
|
248
251
|
if (!fieldMetricsResults) {
|
249
252
|
return null;
|
250
253
|
}
|
@@ -409,10 +412,10 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
409
412
|
}
|
410
413
|
|
411
414
|
#renderInsights(
|
412
|
-
|
415
|
+
insights: Trace.Insights.Types.TraceInsightSets|null,
|
413
416
|
insightSetKey: string,
|
414
417
|
): Lit.LitTemplate {
|
415
|
-
const insightSet =
|
418
|
+
const insightSet = insights?.get(insightSetKey);
|
416
419
|
if (!insightSet) {
|
417
420
|
return Lit.nothing;
|
418
421
|
}
|
@@ -420,19 +423,18 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
420
423
|
const fieldMetrics = this.#getFieldMetrics(insightSetKey);
|
421
424
|
const {shownInsights: shownInsightsData, passedInsights: passedInsightsData} =
|
422
425
|
SidebarSingleInsightSet.categorizeInsights(
|
423
|
-
|
426
|
+
insights,
|
424
427
|
insightSetKey,
|
425
428
|
this.#data.activeCategory,
|
426
429
|
);
|
427
430
|
|
428
431
|
const renderInsightComponent = (insightData: CategorizedInsightData): Lit.TemplateResult => {
|
429
432
|
const {componentClass, model} = insightData;
|
430
|
-
if (!this.#data.parsedTrace
|
433
|
+
if (!this.#data.parsedTrace?.insights) {
|
431
434
|
return html``;
|
432
435
|
}
|
433
436
|
|
434
|
-
const agentFocus = Utils.AIContext.AgentFocus.fromInsight(
|
435
|
-
this.#data.parsedTrace, this.#data.insights, this.#data.traceMetadata, model);
|
437
|
+
const agentFocus = Utils.AIContext.AgentFocus.fromInsight(this.#data.parsedTrace, model);
|
436
438
|
// clang-format off
|
437
439
|
return html`<div>
|
438
440
|
<${componentClass.litTagName}
|
@@ -472,10 +474,10 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
472
474
|
|
473
475
|
#render(): void {
|
474
476
|
const {
|
475
|
-
|
477
|
+
parsedTrace,
|
476
478
|
insightSetKey,
|
477
479
|
} = this.#data;
|
478
|
-
if (!insights || !insightSetKey) {
|
480
|
+
if (!parsedTrace?.insights || !insightSetKey) {
|
479
481
|
Lit.render(html``, this.#shadow, {host: this});
|
480
482
|
return;
|
481
483
|
}
|
@@ -485,7 +487,7 @@ export class SidebarSingleInsightSet extends HTMLElement {
|
|
485
487
|
<style>${sidebarSingleInsightSetStyles}</style>
|
486
488
|
<div class="navigation">
|
487
489
|
${this.#renderMetrics(insightSetKey)}
|
488
|
-
${this.#renderInsights(insights, insightSetKey)}
|
490
|
+
${this.#renderInsights(parsedTrace.insights, insightSetKey)}
|
489
491
|
</div>
|
490
492
|
`, this.#shadow, {host: this});
|
491
493
|
// clang-format on
|
@@ -15,10 +15,10 @@ import * as UI from '../../../../ui/legacy/legacy.js';
|
|
15
15
|
import * as Lit from '../../../../ui/lit/lit.js';
|
16
16
|
import * as VisualLogging from '../../../../ui/visual_logging/visual_logging.js';
|
17
17
|
import type * as Overlays from '../../overlays/overlays.js';
|
18
|
-
import {md} from '../../utils/Helpers.js';
|
19
18
|
import * as Utils from '../../utils/utils.js';
|
20
19
|
|
21
20
|
import baseInsightComponentStyles from './baseInsightComponent.css.js';
|
21
|
+
import {md} from './Helpers.js';
|
22
22
|
import * as SidebarInsight from './SidebarInsight.js';
|
23
23
|
import type {TableState} from './Table.js';
|
24
24
|
|
@@ -21,6 +21,10 @@ export class Cache extends BaseInsightComponent<CacheInsightModel> {
|
|
21
21
|
static override readonly litTagName = Lit.StaticHtml.literal`devtools-performance-cache`;
|
22
22
|
override internalName = 'cache';
|
23
23
|
|
24
|
+
protected override hasAskAiSupport(): boolean {
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
|
24
28
|
mapToRow(req: Trace.Insights.Models.Cache.CacheableRequest): TableDataRow {
|
25
29
|
return {
|
26
30
|
values: [eventRef(req.request), i18n.TimeUtilities.secondsToString(req.ttl)],
|
@@ -10,10 +10,10 @@ import * as i18n from '../../../../core/i18n/i18n.js';
|
|
10
10
|
import type {DOMSizeInsightModel} from '../../../../models/trace/insights/DOMSize.js';
|
11
11
|
import * as Trace from '../../../../models/trace/trace.js';
|
12
12
|
import * as Lit from '../../../../ui/lit/lit.js';
|
13
|
-
import {md} from '../../utils/Helpers.js';
|
14
13
|
|
15
14
|
import {BaseInsightComponent} from './BaseInsightComponent.js';
|
16
15
|
import {eventRef} from './EventRef.js';
|
16
|
+
import {md} from './Helpers.js';
|
17
17
|
import type * as NodeLink from './NodeLink.js';
|
18
18
|
import type {TableData, TableDataRow} from './Table.js';
|
19
19
|
|
@@ -25,6 +25,10 @@ export class DOMSize extends BaseInsightComponent<DOMSizeInsightModel> {
|
|
25
25
|
static override readonly litTagName = Lit.StaticHtml.literal`devtools-performance-dom-size`;
|
26
26
|
override internalName = 'dom-size';
|
27
27
|
|
28
|
+
protected override hasAskAiSupport(): boolean {
|
29
|
+
return true;
|
30
|
+
}
|
31
|
+
|
28
32
|
#renderNodeTable(domStatsData: Trace.Types.Events.DOMStats['args']['data']): Lit.LitTemplate {
|
29
33
|
const rows: TableData['rows'] = [];
|
30
34
|
|
@@ -2,7 +2,14 @@
|
|
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 '../../../../ui/components/markdown_view/markdown_view.js';
|
6
|
+
|
7
|
+
import type * as Common from '../../../../core/common/common.js';
|
5
8
|
import * as Trace from '../../../../models/trace/trace.js';
|
9
|
+
import * as Marked from '../../../../third_party/marked/marked.js';
|
10
|
+
import * as Lit from '../../../../ui/lit/lit.js';
|
11
|
+
|
12
|
+
const {html} = Lit;
|
6
13
|
|
7
14
|
export function shouldRenderForCategory(options: {
|
8
15
|
activeCategory: Trace.Insights.Types.InsightCategory,
|
@@ -11,3 +18,15 @@ export function shouldRenderForCategory(options: {
|
|
11
18
|
return options.activeCategory === Trace.Insights.Types.InsightCategory.ALL ||
|
12
19
|
options.activeCategory === options.insightCategory;
|
13
20
|
}
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Returns a rendered MarkdownView component.
|
24
|
+
*
|
25
|
+
* This should only be used for markdown that is guaranteed to be valid,
|
26
|
+
* and not contain any user-generated content.
|
27
|
+
*/
|
28
|
+
export function md(markdown: Common.UIString.LocalizedString): Lit.TemplateResult {
|
29
|
+
const tokens = Marked.Marked.lexer(markdown);
|
30
|
+
const data = {tokens};
|
31
|
+
return html`<devtools-markdown-view .data=${data}></devtools-markdown-view>`;
|
32
|
+
}
|
@@ -12,10 +12,10 @@ import type {
|
|
12
12
|
'../../../../models/trace/insights/NetworkDependencyTree.js';
|
13
13
|
import * as Trace from '../../../../models/trace/trace.js';
|
14
14
|
import * as Lit from '../../../../ui/lit/lit.js';
|
15
|
-
import {md} from '../../utils/Helpers.js';
|
16
15
|
|
17
16
|
import {BaseInsightComponent} from './BaseInsightComponent.js';
|
18
17
|
import {eventRef} from './EventRef.js';
|
18
|
+
import {md} from './Helpers.js';
|
19
19
|
import networkDependencyTreeInsightStyles from './networkDependencyTreeInsight.css.js';
|
20
20
|
import type {NodeLinkData} from './NodeLink.js';
|
21
21
|
import {renderOthersLabel, type TableData, type TableDataRow} from './Table.js';
|
@@ -16,6 +16,10 @@ export class Viewport extends BaseInsightComponent<ViewportInsightModel> {
|
|
16
16
|
static override readonly litTagName = Lit.StaticHtml.literal`devtools-performance-viewport`;
|
17
17
|
override internalName = 'viewport';
|
18
18
|
|
19
|
+
protected override hasAskAiSupport(): boolean {
|
20
|
+
return true;
|
21
|
+
}
|
22
|
+
|
19
23
|
override getEstimatedSavingsTime(): Trace.Types.Timing.Milli|null {
|
20
24
|
return this.model?.metricSavings?.INP ?? null;
|
21
25
|
}
|
@@ -204,7 +204,7 @@ export interface TimelineCharts {
|
|
204
204
|
}
|
205
205
|
|
206
206
|
export interface OverlayEntryQueries {
|
207
|
-
parsedTrace: () => Trace.
|
207
|
+
parsedTrace: () => Trace.TraceModel.ParsedTrace | null;
|
208
208
|
isEntryCollapsedByUser: (entry: Trace.Types.Events.Event) => boolean;
|
209
209
|
firstVisibleParentForEntry: (entry: Trace.Types.Events.Event) => Trace.Types.Events.Event | null;
|
210
210
|
}
|
@@ -22,7 +22,7 @@ function depthFirstWalk(
|
|
22
22
|
|
23
23
|
export interface FromTimeOnThreadOptions {
|
24
24
|
thread: {pid: Trace.Types.Events.ProcessID, tid: Trace.Types.Events.ThreadID};
|
25
|
-
parsedTrace: Trace.
|
25
|
+
parsedTrace: Trace.TraceModel.ParsedTrace;
|
26
26
|
bounds: Trace.Types.Timing.TraceWindowMicro;
|
27
27
|
}
|
28
28
|
|
@@ -30,13 +30,12 @@ export class AICallTree {
|
|
30
30
|
constructor(
|
31
31
|
public selectedNode: Trace.Extras.TraceTree.Node|null,
|
32
32
|
public rootNode: Trace.Extras.TraceTree.TopDownRootNode,
|
33
|
-
|
34
|
-
public parsedTrace: Trace.Handlers.Types.ParsedTrace,
|
33
|
+
public parsedTrace: Trace.TraceModel.ParsedTrace,
|
35
34
|
) {
|
36
35
|
}
|
37
36
|
|
38
37
|
static findEventsForThread({thread, parsedTrace, bounds}: FromTimeOnThreadOptions): Trace.Types.Events.Event[]|null {
|
39
|
-
const threadEvents = parsedTrace.Renderer.processes.get(thread.pid)?.threads.get(thread.tid)?.entries;
|
38
|
+
const threadEvents = parsedTrace.data.Renderer.processes.get(thread.pid)?.threads.get(thread.tid)?.entries;
|
40
39
|
if (!threadEvents) {
|
41
40
|
return null;
|
42
41
|
}
|
@@ -46,7 +45,7 @@ export class AICallTree {
|
|
46
45
|
|
47
46
|
static findMainThreadTasks({thread, parsedTrace, bounds}: FromTimeOnThreadOptions):
|
48
47
|
Trace.Types.Events.RunTask[]|null {
|
49
|
-
const threadEvents = parsedTrace.Renderer.processes.get(thread.pid)?.threads.get(thread.tid)?.entries;
|
48
|
+
const threadEvents = parsedTrace.data.Renderer.processes.get(thread.pid)?.threads.get(thread.tid)?.entries;
|
50
49
|
if (!threadEvents) {
|
51
50
|
return null;
|
52
51
|
}
|
@@ -100,7 +99,7 @@ export class AICallTree {
|
|
100
99
|
* This filters out other events we make such as SyntheticLayoutShifts which are not valid
|
101
100
|
* If the event is not valid, or there is an unexpected error building the tree, `null` is returned.
|
102
101
|
*/
|
103
|
-
static fromEvent(selectedEvent: Trace.Types.Events.Event, parsedTrace: Trace.
|
102
|
+
static fromEvent(selectedEvent: Trace.Types.Events.Event, parsedTrace: Trace.TraceModel.ParsedTrace): AICallTree
|
104
103
|
|null {
|
105
104
|
// Special case: performance.mark events are shown on the main thread
|
106
105
|
// technically, but because they are instant events they are shown with a
|
@@ -117,7 +116,7 @@ export class AICallTree {
|
|
117
116
|
}
|
118
117
|
|
119
118
|
// First: check that the selected event is on the thread we have identified as the main thread.
|
120
|
-
const threads = Trace.Handlers.Threads.threadsInTrace(parsedTrace);
|
119
|
+
const threads = Trace.Handlers.Threads.threadsInTrace(parsedTrace.data);
|
121
120
|
const thread = threads.find(t => t.pid === selectedEvent.pid && t.tid === selectedEvent.tid);
|
122
121
|
if (!thread) {
|
123
122
|
return null;
|
@@ -139,7 +138,8 @@ export class AICallTree {
|
|
139
138
|
// information such as Layout Shift clusters.
|
140
139
|
// We check Renderer + Samples to ensure we support CPU Profiles (which do
|
141
140
|
// not populate the Renderer Handler)
|
142
|
-
|
141
|
+
const data = parsedTrace.data;
|
142
|
+
if (!data.Renderer.entryToNode.has(selectedEvent) && !data.Samples.entryToNode.has(selectedEvent)) {
|
143
143
|
return null;
|
144
144
|
}
|
145
145
|
|
@@ -147,10 +147,10 @@ export class AICallTree {
|
|
147
147
|
const {startTime, endTime} = Trace.Helpers.Timing.eventTimingsMilliSeconds(selectedEvent);
|
148
148
|
const selectedEventBounds = Trace.Helpers.Timing.traceWindowFromMicroSeconds(
|
149
149
|
Trace.Helpers.Timing.milliToMicro(startTime), Trace.Helpers.Timing.milliToMicro(endTime));
|
150
|
-
let threadEvents =
|
150
|
+
let threadEvents = data.Renderer.processes.get(selectedEvent.pid)?.threads.get(selectedEvent.tid)?.entries;
|
151
151
|
if (!threadEvents) {
|
152
152
|
// None from the renderer: try the samples handler, this might be a CPU trace.
|
153
|
-
threadEvents =
|
153
|
+
threadEvents = data.Samples.profilesInProcess.get(selectedEvent.pid)?.get(selectedEvent.tid)?.profileCalls;
|
154
154
|
}
|
155
155
|
|
156
156
|
if (!threadEvents) {
|
@@ -300,7 +300,7 @@ export class AICallTree {
|
|
300
300
|
* - This node is the selected node (S marker)
|
301
301
|
*/
|
302
302
|
stringifyNode(
|
303
|
-
node: Trace.Extras.TraceTree.Node, nodeId: number, parsedTrace: Trace.
|
303
|
+
node: Trace.Extras.TraceTree.Node, nodeId: number, parsedTrace: Trace.TraceModel.ParsedTrace,
|
304
304
|
selectedNode: Trace.Extras.TraceTree.Node|null, allUrls: string[], childStartingNodeIndex?: number): string {
|
305
305
|
const event = node.event;
|
306
306
|
if (!event) {
|
@@ -8,51 +8,51 @@ import type {AICallTree} from './AICallTree.js';
|
|
8
8
|
|
9
9
|
export interface AgentFocusDataFull {
|
10
10
|
type: 'full';
|
11
|
-
parsedTrace: Trace.
|
11
|
+
parsedTrace: Trace.TraceModel.ParsedTrace;
|
12
12
|
insightSet: Trace.Insights.Types.InsightSet|null;
|
13
|
-
traceMetadata: Trace.Types.File.MetaData;
|
14
13
|
}
|
15
14
|
|
16
15
|
interface AgentFocusDataCallTree {
|
17
16
|
type: 'call-tree';
|
18
|
-
parsedTrace: Trace.
|
17
|
+
parsedTrace: Trace.TraceModel.ParsedTrace;
|
19
18
|
callTree: AICallTree;
|
20
19
|
}
|
21
20
|
|
22
21
|
export interface AgentFocusDataInsight {
|
23
22
|
type: 'insight';
|
24
|
-
parsedTrace: Trace.
|
23
|
+
parsedTrace: Trace.TraceModel.ParsedTrace;
|
25
24
|
insightSet: Trace.Insights.Types.InsightSet|null;
|
26
|
-
traceMetadata: Trace.Types.File.MetaData;
|
27
25
|
insight: Trace.Insights.Types.InsightModel;
|
28
26
|
}
|
29
27
|
|
30
28
|
type AgentFocusData = AgentFocusDataCallTree|AgentFocusDataInsight|AgentFocusDataFull;
|
31
29
|
|
32
30
|
export class AgentFocus {
|
33
|
-
static full(
|
34
|
-
|
35
|
-
|
31
|
+
static full(parsedTrace: Trace.TraceModel.ParsedTrace): AgentFocus {
|
32
|
+
if (!parsedTrace.insights) {
|
33
|
+
throw new Error('missing insights');
|
34
|
+
}
|
35
|
+
|
36
36
|
// Currently only support a single insight set. Pick the first one with a navigation.
|
37
|
-
const insightSet = [...insights.values()].filter(insightSet => insightSet.navigation).at(0) ?? null;
|
37
|
+
const insightSet = [...parsedTrace.insights.values()].filter(insightSet => insightSet.navigation).at(0) ?? null;
|
38
38
|
return new AgentFocus({
|
39
39
|
type: 'full',
|
40
40
|
parsedTrace,
|
41
41
|
insightSet,
|
42
|
-
traceMetadata,
|
43
42
|
});
|
44
43
|
}
|
45
44
|
|
46
|
-
static fromInsight(
|
47
|
-
|
48
|
-
|
45
|
+
static fromInsight(parsedTrace: Trace.TraceModel.ParsedTrace, insight: Trace.Insights.Types.InsightModel):
|
46
|
+
AgentFocus {
|
47
|
+
if (!parsedTrace.insights) {
|
48
|
+
throw new Error('missing insights');
|
49
|
+
}
|
49
50
|
// Currently only support a single insight set. Pick the first one with a navigation.
|
50
|
-
const insightSet = [...insights.values()].filter(insightSet => insightSet.navigation).at(0) ?? null;
|
51
|
+
const insightSet = [...parsedTrace.insights.values()].filter(insightSet => insightSet.navigation).at(0) ?? null;
|
51
52
|
return new AgentFocus({
|
52
53
|
type: 'insight',
|
53
54
|
parsedTrace,
|
54
55
|
insightSet,
|
55
|
-
traceMetadata,
|
56
56
|
insight,
|
57
57
|
});
|
58
58
|
}
|
@@ -74,11 +74,9 @@ export class AgentFocus {
|
|
74
74
|
|
75
75
|
export function getPerformanceAgentFocusFromModel(model: Trace.TraceModel.Model): AgentFocus|null {
|
76
76
|
const parsedTrace = model.parsedTrace();
|
77
|
-
|
78
|
-
const traceMetadata = model.metadata();
|
79
|
-
if (!insights || !parsedTrace || !traceMetadata) {
|
77
|
+
if (!parsedTrace) {
|
80
78
|
return null;
|
81
79
|
}
|
82
80
|
|
83
|
-
return AgentFocus.full(parsedTrace
|
81
|
+
return AgentFocus.full(parsedTrace);
|
84
82
|
}
|
@@ -7,7 +7,7 @@ import type * as Protocol from '../../../generated/protocol.js';
|
|
7
7
|
import * as Trace from '../../../models/trace/trace.js';
|
8
8
|
|
9
9
|
export class EntityMapper {
|
10
|
-
#parsedTrace: Trace.
|
10
|
+
#parsedTrace: Trace.TraceModel.ParsedTrace;
|
11
11
|
#entityMappings: Trace.Handlers.Helpers.EntityMappings;
|
12
12
|
#firstPartyEntity: Trace.Handlers.Helpers.Entity|null;
|
13
13
|
#thirdPartyEvents: Trace.Types.Events.Event[] = [];
|
@@ -19,17 +19,18 @@ export class EntityMapper {
|
|
19
19
|
*/
|
20
20
|
#resolvedCallFrames = new Set<Protocol.Runtime.CallFrame>();
|
21
21
|
|
22
|
-
constructor(parsedTrace: Trace.
|
22
|
+
constructor(parsedTrace: Trace.TraceModel.ParsedTrace) {
|
23
23
|
this.#parsedTrace = parsedTrace;
|
24
|
-
this.#entityMappings = this.#parsedTrace.Renderer.entityMappings;
|
24
|
+
this.#entityMappings = this.#parsedTrace.data.Renderer.entityMappings;
|
25
25
|
this.#firstPartyEntity = this.#findFirstPartyEntity();
|
26
26
|
this.#thirdPartyEvents = this.#getThirdPartyEvents();
|
27
27
|
}
|
28
28
|
|
29
29
|
#findFirstPartyEntity(): Trace.Handlers.Helpers.Entity|null {
|
30
30
|
// As a starting point, we consider the first navigation as the 1P.
|
31
|
-
const nav =
|
32
|
-
|
31
|
+
const nav =
|
32
|
+
Array.from(this.#parsedTrace.data.Meta.navigationsByNavigationId.values()).sort((a, b) => a.ts - b.ts)[0];
|
33
|
+
const firstPartyUrl = nav?.args.data?.documentLoaderURL ?? this.#parsedTrace.data.Meta.mainFrameURL;
|
33
34
|
if (!firstPartyUrl) {
|
34
35
|
return null;
|
35
36
|
}
|
@@ -55,12 +55,12 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
55
55
|
*/
|
56
56
|
export function nameForEntry(
|
57
57
|
entry: Trace.Types.Events.Event,
|
58
|
-
parsedTrace?: Trace.
|
58
|
+
parsedTrace?: Trace.TraceModel.ParsedTrace,
|
59
59
|
): string {
|
60
60
|
if (Trace.Types.Events.isProfileCall(entry)) {
|
61
61
|
if (parsedTrace) {
|
62
62
|
const potentialCallName =
|
63
|
-
Trace.Handlers.ModelHandlers.Samples.getProfileCallFunctionName(parsedTrace.Samples, entry);
|
63
|
+
Trace.Handlers.ModelHandlers.Samples.getProfileCallFunctionName(parsedTrace.data.Samples, entry);
|
64
64
|
// We need this extra check because the call name could be the empty
|
65
65
|
// string. If it is, we want to fallback.
|
66
66
|
if (potentialCallName) {
|
@@ -15,7 +15,7 @@ const domNodesForEventCache =
|
|
15
15
|
* The result is cached so you can safely call this multiple times.
|
16
16
|
**/
|
17
17
|
export function nodeIdsForEvent(
|
18
|
-
|
18
|
+
parsedTrace: Trace.TraceModel.ParsedTrace,
|
19
19
|
event: Trace.Types.Events.Event,
|
20
20
|
): Set<Protocol.DOM.BackendNodeId> {
|
21
21
|
const fromCache = nodeIdsForEventCache.get(event);
|
@@ -45,12 +45,12 @@ export function nodeIdsForEvent(
|
|
45
45
|
// For a DecodeImage event, we can use the ImagePaintingHandler, which has
|
46
46
|
// done the work to build the relationship between a DecodeImage event and
|
47
47
|
// the corresponding PaintImage event.
|
48
|
-
const paintImageEvent =
|
48
|
+
const paintImageEvent = parsedTrace.data.ImagePainting.paintImageForEvent.get(event);
|
49
49
|
if (typeof paintImageEvent?.args.data.nodeId !== 'undefined') {
|
50
50
|
foundIds.add(paintImageEvent.args.data.nodeId);
|
51
51
|
}
|
52
52
|
} else if (Trace.Types.Events.isDrawLazyPixelRef(event) && event.args?.LazyPixelRef) {
|
53
|
-
const paintImageEvent =
|
53
|
+
const paintImageEvent = parsedTrace.data.ImagePainting.paintImageByDrawLazyPixelRef.get(event.args.LazyPixelRef);
|
54
54
|
if (typeof paintImageEvent?.args.data.nodeId !== 'undefined') {
|
55
55
|
foundIds.add(paintImageEvent.args.data.nodeId);
|
56
56
|
}
|
@@ -67,14 +67,14 @@ export function nodeIdsForEvent(
|
|
67
67
|
* This method is cached for the given event.
|
68
68
|
*/
|
69
69
|
export async function relatedDOMNodesForEvent(
|
70
|
-
|
70
|
+
parsedTrace: Trace.TraceModel.ParsedTrace,
|
71
71
|
event: Trace.Types.Events.Event): Promise<Map<Protocol.DOM.BackendNodeId, SDK.DOMModel.DOMNode|null>|null> {
|
72
72
|
const fromCache = domNodesForEventCache.get(event);
|
73
73
|
if (fromCache) {
|
74
74
|
return fromCache;
|
75
75
|
}
|
76
76
|
|
77
|
-
const nodeIds = nodeIdsForEvent(
|
77
|
+
const nodeIds = nodeIdsForEvent(parsedTrace, event);
|
78
78
|
if (nodeIds.size) {
|
79
79
|
const frame = event.args?.data?.frame as Protocol.Page.FrameId;
|
80
80
|
const result = await domNodesForBackendIds(frame, nodeIds);
|
@@ -559,7 +559,7 @@ export class TimelineCategory {
|
|
559
559
|
title: Platform.UIString.LocalizedString;
|
560
560
|
visible: boolean;
|
561
561
|
childColor: string;
|
562
|
-
|
562
|
+
#color: string;
|
563
563
|
#hidden?: boolean;
|
564
564
|
|
565
565
|
constructor(
|
@@ -569,7 +569,7 @@ export class TimelineCategory {
|
|
569
569
|
this.title = title;
|
570
570
|
this.visible = visible;
|
571
571
|
this.childColor = childColor;
|
572
|
-
this
|
572
|
+
this.#color = color;
|
573
573
|
this.hidden = false;
|
574
574
|
}
|
575
575
|
|
@@ -581,11 +581,11 @@ export class TimelineCategory {
|
|
581
581
|
return this.getComputedColorValue();
|
582
582
|
}
|
583
583
|
getCSSValue(): string {
|
584
|
-
return `var(${this
|
584
|
+
return `var(${this.#color})`;
|
585
585
|
}
|
586
586
|
|
587
587
|
getComputedColorValue(): string {
|
588
|
-
return ThemeSupport.ThemeSupport.instance().getComputedValue(this
|
588
|
+
return ThemeSupport.ThemeSupport.instance().getComputedValue(this.#color);
|
589
589
|
}
|
590
590
|
|
591
591
|
set hidden(hidden: boolean) {
|
@@ -12,7 +12,7 @@ let instance: Tracker|null = null;
|
|
12
12
|
* is loaded, we set this flag accordingly.
|
13
13
|
**/
|
14
14
|
export class Tracker {
|
15
|
-
#freshRecordings = new WeakSet<Trace.
|
15
|
+
#freshRecordings = new WeakSet<Trace.TraceModel.ParsedTrace>();
|
16
16
|
|
17
17
|
static instance(opts: {forceNew: boolean} = {forceNew: false}): Tracker {
|
18
18
|
if (!instance || opts.forceNew) {
|
@@ -21,11 +21,11 @@ export class Tracker {
|
|
21
21
|
return instance;
|
22
22
|
}
|
23
23
|
|
24
|
-
registerFreshRecording(data: Trace.
|
24
|
+
registerFreshRecording(data: Trace.TraceModel.ParsedTrace): void {
|
25
25
|
this.#freshRecordings.add(data);
|
26
26
|
}
|
27
27
|
|
28
|
-
recordingIsFresh(data: Trace.
|
28
|
+
recordingIsFresh(data: Trace.TraceModel.ParsedTrace): boolean {
|
29
29
|
return this.#freshRecordings.has(data);
|
30
30
|
}
|
31
31
|
}
|
@@ -2,18 +2,12 @@
|
|
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 '../../../ui/components/markdown_view/markdown_view.js';
|
6
|
-
|
7
|
-
import type * as Common from '../../../core/common/common.js';
|
8
5
|
import * as Platform from '../../../core/platform/platform.js';
|
9
6
|
import * as SDK from '../../../core/sdk/sdk.js';
|
10
7
|
import * as CrUXManager from '../../../models/crux-manager/crux-manager.js';
|
11
8
|
import type * as Trace from '../../../models/trace/trace.js';
|
12
|
-
import * as Marked from '../../../third_party/marked/marked.js';
|
13
|
-
import * as Lit from '../../../ui/lit/lit.js';
|
14
9
|
import * as MobileThrottling from '../../mobile_throttling/mobile_throttling.js';
|
15
10
|
|
16
|
-
const {html} = Lit;
|
17
11
|
const MAX_ORIGIN_LENGTH = 60;
|
18
12
|
|
19
13
|
export function getThrottlingRecommendations(): {
|
@@ -127,18 +121,6 @@ export function shortenUrl(url: URL, maxChars = 20): string {
|
|
127
121
|
return shortenedUrl;
|
128
122
|
}
|
129
123
|
|
130
|
-
/**
|
131
|
-
* Returns a rendered MarkdownView component.
|
132
|
-
*
|
133
|
-
* This should only be used for markdown that is guaranteed to be valid,
|
134
|
-
* and not contain any user-generated content.
|
135
|
-
*/
|
136
|
-
export function md(markdown: Common.UIString.LocalizedString): Lit.TemplateResult {
|
137
|
-
const tokens = Marked.Marked.lexer(markdown);
|
138
|
-
const data = {tokens};
|
139
|
-
return html`<devtools-markdown-view .data=${data}></devtools-markdown-view>`;
|
140
|
-
}
|
141
|
-
|
142
124
|
/**
|
143
125
|
* Returns a string containing both the origin and its 3rd party entity.
|
144
126
|
*
|
@@ -7,7 +7,7 @@ import * as Trace from '../../../models/trace/trace.js';
|
|
7
7
|
import {AICallTree} from './AICallTree.js';
|
8
8
|
|
9
9
|
export class AIQueries {
|
10
|
-
static findMainThread(navigationId: string|undefined, parsedTrace: Trace.
|
10
|
+
static findMainThread(navigationId: string|undefined, parsedTrace: Trace.TraceModel.ParsedTrace):
|
11
11
|
Trace.Handlers.Threads.ThreadData|null {
|
12
12
|
/**
|
13
13
|
* We cannot assume that there is one main thread as there are scenarios
|
@@ -26,14 +26,14 @@ export class AIQueries {
|
|
26
26
|
let mainThreadTID: Trace.Types.Events.ThreadID|null = null;
|
27
27
|
|
28
28
|
if (navigationId) {
|
29
|
-
const navigation = parsedTrace.Meta.navigationsByNavigationId.get(navigationId);
|
29
|
+
const navigation = parsedTrace.data.Meta.navigationsByNavigationId.get(navigationId);
|
30
30
|
if (navigation?.args.data?.isOutermostMainFrame) {
|
31
31
|
mainThreadPID = navigation.pid;
|
32
32
|
mainThreadTID = navigation.tid;
|
33
33
|
}
|
34
34
|
}
|
35
35
|
|
36
|
-
const threads = Trace.Handlers.Threads.threadsInTrace(parsedTrace);
|
36
|
+
const threads = Trace.Handlers.Threads.threadsInTrace(parsedTrace.data);
|
37
37
|
const thread = threads.find(thread => {
|
38
38
|
if (mainThreadPID && mainThreadTID) {
|
39
39
|
return thread.pid === mainThreadPID && thread.tid === mainThreadTID;
|
@@ -49,7 +49,7 @@ export class AIQueries {
|
|
49
49
|
*/
|
50
50
|
static mainThreadActivityBottomUp(
|
51
51
|
navigationId: string|undefined, bounds: Trace.Types.Timing.TraceWindowMicro,
|
52
|
-
parsedTrace: Trace.
|
52
|
+
parsedTrace: Trace.TraceModel.ParsedTrace): Trace.Extras.TraceTree.BottomUpRootNode|null {
|
53
53
|
const thread = this.findMainThread(navigationId, parsedTrace);
|
54
54
|
if (!thread) {
|
55
55
|
return null;
|
@@ -82,7 +82,7 @@ export class AIQueries {
|
|
82
82
|
*/
|
83
83
|
static mainThreadActivityTopDown(
|
84
84
|
navigationId: string|undefined, bounds: Trace.Types.Timing.TraceWindowMicro,
|
85
|
-
parsedTrace: Trace.
|
85
|
+
parsedTrace: Trace.TraceModel.ParsedTrace): AICallTree|null {
|
86
86
|
const thread = this.findMainThread(navigationId, parsedTrace);
|
87
87
|
if (!thread) {
|
88
88
|
return null;
|
@@ -103,7 +103,7 @@ export class AIQueries {
|
|
103
103
|
*/
|
104
104
|
static longestTasks(
|
105
105
|
navigationId: string|undefined, bounds: Trace.Types.Timing.TraceWindowMicro,
|
106
|
-
parsedTrace: Trace.
|
106
|
+
parsedTrace: Trace.TraceModel.ParsedTrace, limit = 3): AICallTree[]|null {
|
107
107
|
const thread = this.findMainThread(navigationId, parsedTrace);
|
108
108
|
if (!thread) {
|
109
109
|
return null;
|