chrome-devtools-frontend 1.0.1473514 → 1.0.1506453
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/.gemini/commands/migrate-e2e-non-hosted.toml +43 -0
- package/.gemini/commands/review.toml +85 -0
- package/.geminiignore +6 -0
- package/.github/workflows/auto-close-prs.yml +30 -0
- package/.stylelintignore +0 -1
- package/.vscode/devtools-workspace-settings.json +2 -1
- package/AUTHORS +3 -0
- package/WATCHLISTS +0 -4
- package/config/gni/devtools_grd_files.gni +92 -47
- package/config/gni/devtools_image_files.gni +8 -0
- package/config/gni/i18n.gni +3 -2
- package/config/owner/COMMON_OWNERS +2 -0
- package/docs/README.md +2 -2
- package/docs/architecture_of_devtools.md +8 -8
- package/docs/committers_policy.md +2 -0
- package/docs/contributing/README.md +29 -5
- package/docs/contributing/changes.md +1 -1
- package/docs/contributing/images/quickstart-vscode-tsversion.png +0 -0
- package/docs/contributing/infrastructure.md +89 -0
- package/docs/cookbook/localization.md +86 -79
- package/docs/get_the_code.md +9 -9
- package/docs/styleguide/ux/components.md +190 -2
- package/docs/styleguide/ux/glossary.md +16 -0
- package/docs/styleguide/ux/images/context-menu-example.png +0 -0
- package/docs/ui_engineering.md +80 -19
- package/eslint.config.mjs +64 -23
- package/extension-api/ExtensionAPI.d.ts +3 -0
- package/extensions/cxx_debugging/CMakeLists.txt +0 -6
- package/extensions/cxx_debugging/e2e/MochaRootHooks.ts +3 -1
- package/extensions/cxx_debugging/e2e/TestDriver.ts +1 -2
- package/extensions/cxx_debugging/src/GlobMatch.ts +1 -1
- package/extensions/cxx_debugging/src/ModuleConfiguration.ts +2 -2
- package/extensions/cxx_debugging/third_party/llvm/README.chromium +2 -0
- package/extensions/cxx_debugging/tools/bootstrap.py +7 -0
- package/front_end/Images/generate-css-vars.js +1 -1
- package/front_end/Images/readme.md +1 -2
- package/front_end/Images/rollup.config.mjs +12 -1
- package/front_end/Images/src/baseline-high-availability.svg +17 -0
- package/front_end/Images/src/baseline-limited-availability.svg +19 -0
- package/front_end/Images/src/baseline-low-availability.svg +31 -0
- package/front_end/Images/src/bucket.svg +4 -0
- package/front_end/Images/src/label-auto.svg +3 -0
- package/front_end/Images/src/shield.svg +3 -0
- package/front_end/Images/src/smart-assistant.svg +3 -1
- package/front_end/Images/src/speculative-loads.svg +1 -0
- package/front_end/Images/src/text-analysis.svg +3 -0
- package/front_end/Tests.js +78 -230
- package/front_end/application_tokens.css +7 -1
- package/front_end/core/common/Base64.test.ts +1 -1
- package/front_end/core/common/Base64.ts +3 -3
- package/front_end/core/common/Color.ts +38 -0
- package/front_end/core/common/Debouncer.ts +3 -3
- package/front_end/core/common/EventTarget.test.ts +1 -0
- package/front_end/core/common/Gzip.test.ts +63 -0
- package/front_end/core/common/Gzip.ts +72 -0
- package/front_end/core/common/ResourceType.ts +29 -29
- package/front_end/core/common/ReturnToPanel.ts +15 -0
- package/front_end/core/common/Revealer.ts +10 -10
- package/front_end/core/common/SettingRegistration.ts +22 -22
- package/front_end/core/common/Settings.test.ts +151 -18
- package/front_end/core/common/Settings.ts +99 -8
- package/front_end/core/common/SimpleHistoryManager.ts +0 -17
- package/front_end/core/common/common.ts +4 -0
- package/front_end/core/host/AidaClient.test.ts +103 -2
- package/front_end/core/host/AidaClient.ts +161 -31
- package/front_end/core/host/InspectorFrontendHost.ts +57 -48
- package/front_end/core/host/InspectorFrontendHostAPI.ts +11 -0
- package/front_end/core/host/ResourceLoader.ts +15 -15
- package/front_end/core/host/UserMetrics.ts +27 -13
- package/front_end/core/i18n/NumberFormatter.test.ts +92 -0
- package/front_end/core/i18n/NumberFormatter.ts +9 -9
- package/front_end/core/i18n/collect-ui-strings.js +3 -3
- package/front_end/core/i18n/time-utilities.ts +3 -14
- package/front_end/core/platform/Brand.ts +8 -1
- package/front_end/core/platform/DevToolsPath.ts +1 -1
- package/front_end/core/platform/StringUtilities.test.ts +54 -1
- package/front_end/core/platform/StringUtilities.ts +34 -8
- package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
- package/front_end/core/root/Runtime.ts +52 -8
- package/front_end/core/sdk/AnimationModel.test.ts +0 -24
- package/front_end/core/sdk/AnimationModel.ts +1 -95
- package/front_end/core/sdk/AutofillModel.ts +8 -2
- package/front_end/core/sdk/CPUProfilerModel.ts +2 -2
- package/front_end/core/sdk/CSSContainerQuery.test.ts +15 -0
- package/front_end/core/sdk/CSSContainerQuery.ts +3 -1
- package/front_end/core/sdk/CSSMatchedStyles.test.ts +2 -1
- package/front_end/core/sdk/CSSMatchedStyles.ts +79 -50
- package/front_end/core/sdk/CSSModel.ts +20 -7
- package/front_end/core/sdk/CSSPropertyParser.test.ts +4 -3
- package/front_end/core/sdk/CSSPropertyParser.ts +12 -4
- package/front_end/core/sdk/CSSPropertyParserMatchers.test.ts +46 -15
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +131 -58
- package/front_end/core/sdk/CSSRule.ts +44 -44
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -6
- package/front_end/core/sdk/ChildTargetManager.ts +1 -1
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +3 -8
- package/front_end/core/sdk/Connections.ts +17 -30
- package/front_end/core/sdk/ConsoleModel.ts +9 -9
- package/front_end/core/sdk/DOMModel.ts +45 -16
- package/front_end/core/sdk/DebuggerModel.test.ts +7 -4
- package/front_end/core/sdk/DebuggerModel.ts +55 -11
- package/front_end/core/sdk/EmulationModel.ts +13 -0
- package/front_end/core/sdk/EventBreakpointsModel.ts +2 -2
- package/front_end/core/sdk/IOModel.ts +28 -2
- package/front_end/core/sdk/NetworkManager.test.ts +0 -27
- package/front_end/core/sdk/NetworkManager.ts +137 -105
- package/front_end/core/sdk/NetworkRequest.ts +747 -616
- package/front_end/core/sdk/OverlayModel.ts +4 -8
- package/front_end/core/sdk/PageResourceLoader.ts +32 -13
- package/front_end/core/sdk/PreloadingModel.ts +1 -0
- package/front_end/core/sdk/RehydratingConnection.ts +13 -14
- package/front_end/core/sdk/RemoteObject.test.ts +24 -2
- package/front_end/core/sdk/RemoteObject.ts +0 -3
- package/front_end/core/sdk/Resource.ts +0 -5
- package/front_end/core/sdk/RuntimeModel.ts +2 -1
- package/front_end/core/sdk/Script.ts +2 -7
- package/front_end/core/sdk/ServerTiming.ts +12 -12
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +7 -3
- package/front_end/core/sdk/ServiceWorkerManager.ts +14 -18
- package/front_end/core/sdk/SourceMap.test.ts +55 -73
- package/front_end/core/sdk/SourceMap.ts +14 -11
- package/front_end/core/sdk/SourceMapFunctionRanges.ts +15 -9
- package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +6 -5
- package/front_end/core/sdk/SourceMapScopeChainEntry.ts +14 -14
- package/front_end/core/sdk/SourceMapScopesInfo.test.ts +232 -317
- package/front_end/core/sdk/SourceMapScopesInfo.ts +26 -25
- package/front_end/core/sdk/StorageBucketsModel.ts +4 -0
- package/front_end/core/sdk/Target.ts +2 -2
- package/front_end/core/sdk/TargetManager.ts +1 -1
- package/front_end/core/sdk/sdk-meta.ts +86 -86
- package/front_end/core/sdk/sdk.ts +0 -2
- package/front_end/design_system_tokens.css +1 -1
- package/front_end/devtools_compatibility.js +201 -177
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +12 -0
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +3 -3
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +1 -1
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -1
- package/front_end/entrypoints/js_app/js_app.ts +3 -3
- package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +1 -1
- package/front_end/entrypoints/main/GlobalAiButton.test.ts +132 -0
- package/front_end/entrypoints/main/GlobalAiButton.ts +141 -0
- package/front_end/entrypoints/main/MainImpl.test.ts +27 -0
- package/front_end/entrypoints/main/MainImpl.ts +179 -47
- package/front_end/entrypoints/main/globalAiButton.css +72 -0
- package/front_end/entrypoints/main/main-meta.ts +82 -42
- package/front_end/entrypoints/main/main.ts +2 -0
- package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +6 -6
- package/front_end/entrypoints/node_app/NodeMain.ts +8 -7
- package/front_end/entrypoints/node_app/node_app.ts +5 -5
- package/front_end/entrypoints/wasmparser_worker/WasmParserWorker.ts +1 -1
- package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
- package/front_end/generated/Deprecation.ts +7 -29
- package/front_end/generated/InspectorBackendCommands.js +183 -167
- package/front_end/generated/SupportedCSSProperties.js +252 -166
- package/front_end/generated/protocol-mapping.d.ts +687 -608
- package/front_end/generated/protocol-proxy-api.d.ts +782 -672
- package/front_end/generated/protocol.ts +11862 -11509
- package/front_end/global_typings/global_defs.d.ts +5 -0
- package/front_end/legacy_test_runner/accessibility_test_runner/accessibility_test_runner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/CacheStorageTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/IndexedDBTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ResourceTreeTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ResourcesTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ServiceWorkersTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/StorageTestRunner.js +1 -1
- package/front_end/legacy_test_runner/axe_core_test_runner/axe_core_test_runner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/AutomappingTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/BindingsTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/OverridesTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/PersistenceTestRunner.js +1 -1
- package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +20 -20
- package/front_end/legacy_test_runner/coverage_test_runner/coverage_test_runner.js +11 -11
- package/front_end/legacy_test_runner/data_grid_test_runner/data_grid_test_runner.js +1 -1
- package/front_end/legacy_test_runner/device_mode_test_runner/device_mode_test_runner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/EditDOMTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/ElementsPanelShadowSelectionOnRefreshTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/ElementsTestRunner.js +6 -80
- package/front_end/legacy_test_runner/elements_test_runner/SetOuterHTMLTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/StylesUpdateLinksTestRunner.js +1 -1
- package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsNetworkTestRunner.js +1 -1
- package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsTestRunner.js +1 -1
- package/front_end/legacy_test_runner/heap_profiler_test_runner/heap_profiler_test_runner.js +2 -2
- package/front_end/legacy_test_runner/layers_test_runner/layers_test_runner.js +1 -1
- package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineDataTestRunner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +1 -10
- package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +1 -1
- package/front_end/legacy_test_runner/security_test_runner/security_test_runner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/AutocompleteTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +4 -4
- package/front_end/legacy_test_runner/sources_test_runner/EditorTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/LiveEditTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/SearchTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/SourcesTestRunner.js +2 -2
- package/front_end/legacy_test_runner/test_runner/TestRunner.js +45 -45
- package/front_end/legacy_test_runner/test_runner/test_runner.js +4 -4
- package/front_end/models/ai_assistance/AiHistoryStorage.snapshot.txt +66 -0
- package/front_end/models/ai_assistance/AiHistoryStorage.test.ts +82 -3
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +95 -6
- package/front_end/models/ai_assistance/AiUtils.ts +1 -1
- package/front_end/models/ai_assistance/ConversationHandler.test.ts +355 -0
- package/front_end/models/ai_assistance/ConversationHandler.ts +380 -0
- package/front_end/models/ai_assistance/ExtensionScope.ts +1 -4
- package/front_end/models/ai_assistance/README.md +79 -0
- package/front_end/models/ai_assistance/agents/AiAgent.test.ts +22 -1
- package/front_end/models/ai_assistance/agents/AiAgent.ts +76 -95
- package/front_end/models/ai_assistance/agents/FileAgent.test.ts +3 -2
- package/front_end/models/ai_assistance/agents/FileAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -7
- package/front_end/models/ai_assistance/agents/PerformanceAgent.test.ts +591 -62
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1111 -117
- package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.test.ts +4 -2
- package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.ts +75 -5
- package/front_end/models/ai_assistance/agents/StylingAgent.test.ts +166 -507
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +125 -319
- package/front_end/models/ai_assistance/ai_assistance.ts +2 -1
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.test.ts +3 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +725 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.test.ts +249 -274
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +494 -83
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +556 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.test.ts +92 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +359 -0
- package/front_end/models/ai_assistance/debug.ts +1 -1
- package/front_end/models/ai_assistance/injected.ts +1 -1
- package/front_end/models/ai_code_completion/AiCodeCompletion.test.ts +328 -0
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +289 -0
- package/front_end/models/ai_code_completion/ai_code_completion.ts +6 -0
- package/front_end/models/ai_code_completion/debug.ts +30 -0
- package/front_end/models/autofill_manager/AutofillManager.test.ts +0 -6
- package/front_end/models/autofill_manager/AutofillManager.ts +16 -9
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -4
- package/front_end/models/bindings/CompilerScriptMapping.test.ts +8 -4
- package/front_end/models/bindings/CompilerScriptMapping.ts +12 -5
- package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +7 -2
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +33 -24
- package/front_end/models/bindings/DebuggerWorkspaceBinding.test.ts +95 -3
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +94 -21
- package/front_end/models/bindings/DefaultScriptMapping.test.ts +3 -2
- package/front_end/models/bindings/FileUtils.test.ts +1 -10
- package/front_end/models/bindings/FileUtils.ts +6 -22
- package/front_end/models/bindings/LiveLocation.ts +0 -5
- package/front_end/models/bindings/PresentationConsoleMessageHelper.test.ts +7 -2
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +0 -4
- package/front_end/models/bindings/ResourceMapping.test.ts +7 -2
- package/front_end/models/bindings/ResourceMapping.ts +0 -4
- package/front_end/models/bindings/ResourceScriptMapping.test.ts +2 -1
- package/front_end/models/bindings/ResourceScriptMapping.ts +4 -4
- package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
- package/front_end/models/bindings/StylesSourceMapping.ts +0 -5
- package/front_end/models/bindings/bindings.ts +0 -2
- package/front_end/models/breakpoints/BreakpointManager.test.ts +9 -2
- package/front_end/models/cpu_profile/CPUProfileDataModel.ts +4 -2
- package/front_end/models/elements/ElementUpdateRecord.ts +101 -0
- package/front_end/models/elements/elements.ts +9 -0
- package/front_end/models/emulation/DeviceModeModel.ts +6 -22
- package/front_end/models/emulation/EmulatedDevices.ts +12 -12
- package/front_end/models/extensions/ExtensionAPI.ts +9 -5
- package/front_end/models/extensions/ExtensionPanel.ts +5 -2
- package/front_end/models/extensions/ExtensionServer.test.ts +122 -16
- package/front_end/models/extensions/ExtensionServer.ts +114 -31
- package/front_end/models/extensions/ExtensionView.ts +1 -1
- package/front_end/models/extensions/LanguageExtensionEndpoint.ts +14 -7
- package/front_end/models/har/HARFormat.ts +1 -1
- package/front_end/models/har/Importer.test.ts +40 -0
- package/front_end/models/har/Importer.ts +35 -1
- package/front_end/models/har/Writer.test.ts +3 -2
- package/front_end/models/har/Writer.ts +2 -2
- package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
- package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
- package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
- package/front_end/models/issues_manager/CookieIssue.ts +2 -2
- package/front_end/models/issues_manager/CorsIssue.ts +3 -3
- package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
- package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.test.ts → ElementAccessibilityIssue.test.ts} +22 -21
- package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.ts → ElementAccessibilityIssue.ts} +29 -21
- package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/GenericIssue.ts +4 -4
- package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
- package/front_end/models/issues_manager/Issue.ts +6 -6
- package/front_end/models/issues_manager/IssuesManager.ts +8 -3
- package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
- package/front_end/models/issues_manager/MarkdownIssueDescription.ts +1 -1
- package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
- package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +2 -2
- package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
- package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +3 -3
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +1 -1
- package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
- package/front_end/models/issues_manager/UnencodedDigestIssue.test.ts +49 -0
- package/front_end/models/issues_manager/UnencodedDigestIssue.ts +88 -0
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +1 -3
- package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
- package/front_end/models/issues_manager/descriptions/userReidentificationBlocked.md +1 -1
- package/front_end/models/issues_manager/issues_manager.ts +4 -2
- package/front_end/models/javascript_metadata/NativeFunctions.js +201 -127
- package/front_end/models/live-metrics/web-vitals-injected/OnEachInteraction.ts +1 -1
- package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
- package/front_end/models/logs/NetworkLog.ts +74 -83
- package/front_end/models/logs/logs-meta.ts +4 -4
- package/front_end/models/persistence/AutomaticFileSystemManager.test.ts +0 -39
- package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -21
- package/front_end/models/persistence/EditFileSystemView.ts +6 -6
- package/front_end/models/persistence/IsolatedFileSystem.ts +27 -9
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +16 -3
- package/front_end/models/persistence/NetworkPersistenceManager.ts +7 -3
- package/front_end/models/persistence/PersistenceAction.test.ts +10 -7
- package/front_end/models/persistence/PersistenceActions.ts +26 -15
- package/front_end/models/persistence/PersistenceImpl.test.ts +2 -1
- package/front_end/models/persistence/PersistenceImpl.ts +7 -4
- package/front_end/models/persistence/PersistenceUtils.ts +10 -7
- package/front_end/models/persistence/PlatformFileSystem.ts +11 -2
- package/front_end/models/persistence/WorkspaceSettingsTab.ts +6 -6
- package/front_end/models/persistence/editFileSystemView.css +17 -15
- package/front_end/models/persistence/persistence-meta.ts +10 -10
- package/front_end/models/persistence/workspaceSettingsTab.css +29 -27
- package/front_end/models/project_settings/ProjectSettingsModel.ts +2 -2
- package/front_end/models/source_map_scopes/NamesResolver.test.ts +3 -2
- package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
- package/front_end/models/source_map_scopes/ScopeChainModel.test.ts +2 -1
- package/front_end/models/stack_trace/README.md +14 -0
- package/front_end/models/stack_trace/StackTrace.ts +35 -0
- package/front_end/models/stack_trace/StackTraceImpl.test.ts +74 -0
- package/front_end/models/stack_trace/StackTraceImpl.ts +82 -0
- package/front_end/models/stack_trace/StackTraceModel.test.ts +296 -0
- package/front_end/models/stack_trace/StackTraceModel.ts +127 -0
- package/front_end/models/stack_trace/Trie.test.ts +129 -0
- package/front_end/models/stack_trace/Trie.ts +154 -0
- package/front_end/models/stack_trace/stack_trace.ts +9 -0
- package/front_end/models/stack_trace/stack_trace_impl.ts +13 -0
- package/front_end/models/text_utils/ContentProvider.ts +1 -3
- package/front_end/models/text_utils/StaticContentProvider.test.ts +1 -1
- package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
- package/front_end/models/text_utils/TextUtils.ts +2 -3
- package/front_end/models/trace/LanternComputationData.ts +1 -0
- package/front_end/models/trace/ModelImpl.ts +18 -7
- package/front_end/models/trace/Processor.test.ts +15 -14
- package/front_end/models/trace/Processor.ts +49 -32
- package/front_end/models/trace/extras/ScriptDuplication.test.ts +13 -10
- package/front_end/models/trace/extras/StackTraceForEvent.test.ts +10 -8
- package/front_end/models/trace/extras/ThirdParties.ts +2 -3
- package/front_end/models/trace/extras/TraceTree.ts +7 -6
- package/front_end/models/trace/extras/extras.ts +0 -2
- package/front_end/models/trace/handlers/AnimationFramesHandler.test.ts +5 -5
- package/front_end/models/trace/handlers/AnimationFramesHandler.ts +10 -0
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.test.ts +177 -85
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +28 -27
- package/front_end/models/trace/handlers/FramesHandler.test.ts +2 -7
- package/front_end/models/trace/handlers/FramesHandler.ts +46 -37
- package/front_end/models/trace/handlers/ImagePaintingHandler.test.ts +41 -0
- package/front_end/models/trace/handlers/ImagePaintingHandler.ts +44 -1
- package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +62 -15
- package/front_end/models/trace/handlers/InitiatorsHandler.ts +24 -0
- package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +6 -18
- package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +21 -17
- package/front_end/models/trace/handlers/MetaHandler.test.ts +12 -0
- package/front_end/models/trace/handlers/MetaHandler.ts +5 -4
- package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +21 -21
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +79 -32
- package/front_end/models/trace/handlers/PageLoadMetricsHandler.test.ts +6 -18
- package/front_end/models/trace/handlers/RendererHandler.test.ts +26 -39
- package/front_end/models/trace/handlers/RendererHandler.ts +10 -17
- package/front_end/models/trace/handlers/SamplesHandler.test.ts +3 -4
- package/front_end/models/trace/handlers/SamplesHandler.ts +13 -12
- package/front_end/models/trace/handlers/ScriptsHandler.test.ts +1 -1
- package/front_end/models/trace/handlers/ScriptsHandler.ts +8 -4
- package/front_end/models/trace/handlers/SelectorStatsHandler.test.ts +1 -3
- package/front_end/models/trace/handlers/SelectorStatsHandler.ts +65 -0
- package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -2
- package/front_end/models/trace/handlers/UserInteractionsHandler.ts +4 -2
- package/front_end/models/trace/handlers/UserTimingsHandler.test.ts +326 -0
- package/front_end/models/trace/handlers/UserTimingsHandler.ts +61 -24
- package/front_end/models/trace/handlers/helpers.test.ts +7 -6
- package/front_end/models/trace/handlers/helpers.ts +19 -14
- package/front_end/models/trace/handlers/types.ts +5 -1
- package/front_end/models/trace/helpers/SamplesIntegrator.test.ts +3 -3
- package/front_end/models/trace/helpers/SamplesIntegrator.ts +24 -33
- package/front_end/models/trace/helpers/SyntheticEvents.ts +2 -2
- package/front_end/models/trace/helpers/Timing.ts +66 -3
- package/front_end/models/trace/helpers/Trace.test.ts +6 -7
- package/front_end/models/trace/helpers/Trace.ts +47 -19
- package/front_end/models/trace/helpers/TreeHelpers.test.ts +0 -8
- package/front_end/models/trace/helpers/TreeHelpers.ts +1 -1
- package/front_end/models/trace/insights/CLSCulprits.test.ts +10 -7
- package/front_end/models/trace/insights/CLSCulprits.ts +85 -23
- package/front_end/models/trace/insights/Cache.ts +12 -0
- package/front_end/models/trace/insights/Common.test.ts +3 -3
- package/front_end/models/trace/insights/Common.ts +56 -22
- package/front_end/models/trace/insights/DOMSize.test.ts +4 -1
- package/front_end/models/trace/insights/DOMSize.ts +48 -1
- package/front_end/models/trace/insights/DocumentLatency.test.ts +5 -1
- package/front_end/models/trace/insights/DocumentLatency.ts +59 -4
- package/front_end/models/trace/insights/DuplicatedJavaScript.test.ts +2 -3
- package/front_end/models/trace/insights/DuplicatedJavaScript.ts +15 -4
- package/front_end/models/trace/insights/FontDisplay.test.ts +1 -1
- package/front_end/models/trace/insights/FontDisplay.ts +8 -0
- package/front_end/models/trace/insights/ForcedReflow.ts +25 -4
- package/front_end/models/trace/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +2 -2
- package/front_end/models/trace/insights/{InteractionToNextPaint.ts → INPBreakdown.ts} +63 -16
- package/front_end/models/trace/insights/ImageDelivery.ts +39 -7
- package/front_end/models/trace/insights/LCPBreakdown.test.ts +100 -0
- package/front_end/models/trace/insights/LCPBreakdown.ts +255 -0
- package/front_end/models/trace/insights/LCPDiscovery.ts +84 -8
- package/front_end/models/trace/insights/LegacyJavaScript.ts +14 -4
- package/front_end/models/trace/insights/Models.ts +2 -2
- package/front_end/models/trace/insights/ModernHTTP.test.ts +3 -2
- package/front_end/models/trace/insights/ModernHTTP.ts +35 -18
- package/front_end/models/trace/insights/NetworkDependencyTree.test.ts +10 -1
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +41 -13
- package/front_end/models/trace/insights/RenderBlocking.test.ts +8 -12
- package/front_end/models/trace/insights/RenderBlocking.ts +13 -1
- package/front_end/models/trace/insights/SlowCSSSelector.test.ts +12 -34
- package/front_end/models/trace/insights/SlowCSSSelector.ts +46 -27
- package/front_end/models/trace/insights/ThirdParties.test.ts +1 -1
- package/front_end/models/trace/insights/ThirdParties.ts +36 -0
- package/front_end/models/trace/insights/Viewport.test.ts +16 -1
- package/front_end/models/trace/insights/Viewport.ts +41 -3
- package/front_end/models/trace/insights/types.ts +5 -2
- package/front_end/models/trace/lantern/core/NetworkAnalyzer.test.ts +4 -0
- package/front_end/models/trace/lantern/graph/BaseNode.ts +1 -1
- package/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +1 -1
- package/front_end/models/trace/trace.ts +0 -2
- package/front_end/models/trace/types/Configuration.ts +8 -0
- package/front_end/models/trace/types/Extensions.ts +24 -3
- package/front_end/models/trace/types/File.ts +5 -2
- package/front_end/models/trace/types/Overlays.ts +140 -0
- package/front_end/models/trace/types/Timing.ts +1 -0
- package/front_end/models/trace/types/TraceEvents.test.ts +2 -1
- package/front_end/models/trace/types/TraceEvents.ts +98 -62
- package/front_end/models/trace/types/types.ts +1 -0
- package/front_end/models/workspace/FileManager.ts +5 -3
- package/front_end/models/{bindings → workspace}/IgnoreListManager.test.ts +11 -7
- package/front_end/models/{bindings → workspace}/IgnoreListManager.ts +36 -33
- package/front_end/models/workspace/UISourceCode.test.ts +18 -17
- package/front_end/models/workspace/UISourceCode.ts +17 -7
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
- package/front_end/models/workspace/workspace.ts +2 -0
- package/front_end/models/workspace_diff/WorkspaceDiff.test.ts +2 -0
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +7 -2
- package/front_end/panels/accessibility/ARIAAttributesView.test.ts +101 -0
- package/front_end/panels/accessibility/ARIAAttributesView.ts +16 -4
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +12 -9
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +31 -28
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -12
- package/front_end/panels/accessibility/AccessibilityStrings.ts +87 -87
- package/front_end/panels/accessibility/AccessibilitySubPane.ts +6 -6
- package/front_end/panels/accessibility/SourceOrderView.ts +95 -61
- package/front_end/panels/accessibility/accessibilityProperties.css +5 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.snapshot.txt +32 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.test.ts +465 -377
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +289 -339
- package/front_end/panels/ai_assistance/PatchWidget.ts +30 -29
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.test.ts +11 -1
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +29 -19
- package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -0
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +40 -20
- package/front_end/panels/ai_assistance/components/ChatView.test.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +55 -44
- package/front_end/panels/ai_assistance/components/ExploreWidget.ts +10 -24
- package/front_end/panels/ai_assistance/components/UserActionRow.test.ts +4 -0
- package/front_end/panels/ai_assistance/components/UserActionRow.ts +25 -3
- package/front_end/panels/ai_assistance/components/chatView.css +0 -9
- package/front_end/panels/ai_assistance/components/exploreWidget.css +104 -102
- package/front_end/panels/ai_assistance/components/userActionRow.css +95 -94
- package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +70 -69
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -10
- package/front_end/panels/animation/AnimationTimeline.test.ts +6 -13
- package/front_end/panels/animation/AnimationTimeline.ts +183 -169
- package/front_end/panels/animation/AnimationUI.ts +4 -4
- package/front_end/panels/animation/animation.ts +0 -2
- package/front_end/panels/animation/animationTimeline.css +0 -67
- package/front_end/panels/application/AppManifestView.test.ts +21 -0
- package/front_end/panels/application/AppManifestView.ts +158 -139
- package/front_end/panels/application/ApplicationPanelSidebar.test.ts +13 -8
- package/front_end/panels/application/ApplicationPanelSidebar.ts +53 -54
- package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
- package/front_end/panels/application/BackgroundServiceView.test.ts +4 -8
- package/front_end/panels/application/BackgroundServiceView.ts +46 -44
- package/front_end/panels/application/CookieItemsView.ts +13 -14
- package/front_end/panels/application/DOMStorageItemsView.ts +5 -5
- package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -3
- package/front_end/panels/application/IndexedDBModel.test.ts +2 -2
- package/front_end/panels/application/IndexedDBModel.ts +3 -0
- package/front_end/panels/application/IndexedDBViews.ts +58 -32
- package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
- package/front_end/panels/application/InterestGroupStorageView.ts +4 -4
- package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
- package/front_end/panels/application/KeyValueStorageItemsView.ts +10 -10
- package/front_end/panels/application/OpenedWindowDetailsView.ts +18 -18
- package/front_end/panels/application/PreloadingTreeElement.ts +5 -5
- package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
- package/front_end/panels/application/ReportingApiView.test.ts +161 -30
- package/front_end/panels/application/ReportingApiView.ts +153 -50
- package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +5 -5
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +20 -17
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +7 -7
- package/front_end/panels/application/ServiceWorkersView.ts +40 -76
- package/front_end/panels/application/SharedStorageEventsView.test.ts +2 -2
- package/front_end/panels/application/SharedStorageEventsView.ts +10 -20
- package/front_end/panels/application/SharedStorageItemsView.ts +11 -11
- package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
- package/front_end/panels/application/SharedStorageModel.ts +3 -0
- package/front_end/panels/application/StorageBucketsTreeElement.test.ts +5 -4
- package/front_end/panels/application/StorageBucketsTreeElement.ts +4 -4
- package/front_end/panels/application/StorageItemsToolbar.ts +7 -7
- package/front_end/panels/application/StorageView.test.ts +5 -1
- package/front_end/panels/application/StorageView.ts +15 -13
- package/front_end/panels/application/application-meta.ts +7 -7
- package/front_end/panels/application/application.ts +0 -2
- package/front_end/panels/application/components/BackForwardCacheStrings.ts +5 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +11 -37
- package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +1 -0
- package/front_end/panels/application/components/EndpointsGrid.ts +6 -2
- package/front_end/panels/application/components/FrameDetailsView.test.ts +4 -2
- package/front_end/panels/application/components/FrameDetailsView.ts +88 -57
- package/front_end/panels/application/components/InterestGroupAccessGrid.ts +9 -10
- package/front_end/panels/application/components/OriginTrialTreeView.ts +13 -22
- package/front_end/panels/application/components/PermissionsPolicySection.ts +11 -16
- package/front_end/panels/application/components/ProtocolHandlersView.ts +10 -10
- package/front_end/panels/application/components/ReportsGrid.ts +10 -11
- package/front_end/panels/application/components/SharedStorageAccessGrid.test.ts +4 -4
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +107 -101
- package/front_end/panels/application/components/SharedStorageMetadataView.ts +8 -8
- package/front_end/panels/application/components/StackTrace.ts +6 -12
- package/front_end/panels/application/components/StorageMetadataView.ts +22 -26
- package/front_end/panels/application/components/TrustTokensView.ts +3 -3
- package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
- package/front_end/panels/application/components/sharedStorageAccessGrid.css +19 -17
- package/front_end/panels/application/preloading/PreloadingView.ts +29 -24
- package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +22 -22
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +28 -29
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +5 -7
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.test.ts +2 -2
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +4 -4
- package/front_end/panels/application/preloading/components/PreloadingString.ts +34 -34
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.test.ts +28 -1
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +4 -10
- package/front_end/panels/application/preloading/components/RuleSetGrid.test.ts +21 -0
- package/front_end/panels/application/preloading/components/RuleSetGrid.ts +10 -10
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +22 -23
- package/front_end/panels/application/resourcesSidebar.css +0 -4
- package/front_end/panels/autofill/AutofillView.test.ts +188 -259
- package/front_end/panels/autofill/AutofillView.ts +207 -217
- package/front_end/panels/autofill/autofill-meta.ts +3 -4
- package/front_end/panels/autofill/autofillView.css +85 -82
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.test.ts +179 -0
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +146 -35
- package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +27 -27
- package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +3 -2
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +16 -14
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +17 -17
- package/front_end/panels/browser_debugger/browser_debugger.ts +2 -0
- package/front_end/panels/changes/ChangesSidebar.ts +7 -7
- package/front_end/panels/changes/ChangesView.ts +6 -5
- package/front_end/panels/changes/CombinedDiffView.test.ts +2 -0
- package/front_end/panels/changes/CombinedDiffView.ts +2 -2
- package/front_end/panels/common/AiCodeCompletionDisclaimer.test.ts +57 -0
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +186 -0
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.test.ts +85 -0
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +139 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.test.ts +98 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +258 -0
- package/front_end/panels/common/FreDialog.ts +139 -0
- package/front_end/panels/common/aiCodeCompletionDisclaimer.css +57 -0
- package/front_end/panels/common/aiCodeCompletionSummaryToolbar.css +101 -0
- package/front_end/panels/common/aiCodeCompletionTeaser.css +42 -0
- package/front_end/panels/common/common.css +0 -83
- package/front_end/panels/common/common.ts +8 -107
- package/front_end/panels/common/freDialog.css +88 -0
- package/front_end/panels/console/ConsoleContextSelector.ts +5 -5
- package/front_end/panels/console/ConsoleFormat.test.ts +1 -1
- package/front_end/panels/console/ConsolePanel.ts +1 -2
- package/front_end/panels/console/ConsolePinPane.ts +9 -9
- package/front_end/panels/console/ConsolePrompt.test.ts +47 -1
- package/front_end/panels/console/ConsolePrompt.ts +188 -19
- package/front_end/panels/console/ConsoleSidebar.test.ts +130 -0
- package/front_end/panels/console/ConsoleSidebar.ts +170 -207
- package/front_end/panels/console/ConsoleView.test.ts +4 -4
- package/front_end/panels/console/ConsoleView.ts +146 -54
- package/front_end/panels/console/ConsoleViewMessage.test.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +66 -71
- package/front_end/panels/console/console-meta.ts +27 -27
- package/front_end/panels/console/consoleSidebar.css +2 -0
- package/front_end/panels/console/consoleView.css +22 -15
- package/front_end/panels/console_counters/WarningErrorCounter.ts +133 -100
- package/front_end/panels/coverage/CoverageDecorationManager.test.ts +2 -1
- package/front_end/panels/coverage/CoverageListView.ts +30 -30
- package/front_end/panels/coverage/CoverageView.test.ts +3 -2
- package/front_end/panels/coverage/CoverageView.ts +35 -34
- package/front_end/panels/coverage/coverage-meta.ts +7 -7
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +49 -49
- package/front_end/panels/css_overview/CSSOverviewPanel.test.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewStartView.ts +8 -8
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +7 -7
- package/front_end/panels/css_overview/cssOverviewCompletedView.css +289 -287
- package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +43 -42
- package/front_end/panels/css_overview/cssOverviewStartView.css +68 -66
- package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +14 -14
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +5 -5
- package/front_end/panels/developer_resources/developerResourcesListView.css +19 -18
- package/front_end/panels/developer_resources/developerResourcesView.css +32 -30
- package/front_end/panels/elements/AccessibilityTreeView.ts +2 -1
- package/front_end/panels/elements/CSSRuleValidator.test.ts +39 -0
- package/front_end/panels/elements/CSSRuleValidator.ts +41 -37
- package/front_end/panels/elements/CSSRuleValidatorHelper.ts +8 -0
- package/front_end/panels/elements/CSSValueTraceView.test.ts +2 -1
- package/front_end/panels/elements/CSSValueTraceView.ts +1 -2
- package/front_end/panels/elements/ClassesPaneWidget.ts +5 -3
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +18 -9
- package/front_end/panels/elements/ComputedStyleWidget.ts +4 -3
- package/front_end/panels/elements/DOMLinkifier.ts +6 -4
- package/front_end/panels/elements/DOMTreeWidget.test.ts +58 -0
- package/front_end/panels/elements/ElementIssueUtils.ts +14 -9
- package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -3
- package/front_end/panels/elements/ElementsPanel.test.ts +69 -2
- package/front_end/panels/elements/ElementsPanel.ts +105 -187
- package/front_end/panels/elements/ElementsSidebarPane.ts +1 -1
- package/front_end/panels/elements/ElementsTreeElement.test.ts +401 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +434 -82
- package/front_end/panels/elements/ElementsTreeOutline.test.ts +9 -6
- package/front_end/panels/elements/ElementsTreeOutline.ts +425 -258
- package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +80 -0
- package/front_end/panels/elements/EventListenersWidget.test.ts +129 -0
- package/front_end/panels/elements/EventListenersWidget.ts +112 -78
- package/front_end/panels/elements/ImagePreviewPopover.ts +1 -1
- package/front_end/panels/elements/InspectElementModeController.test.ts +77 -2
- package/front_end/panels/elements/InspectElementModeController.ts +13 -2
- package/front_end/panels/elements/LayersWidget.ts +95 -63
- package/front_end/panels/elements/{components/LayoutPane.test.ts → LayoutPane.test.ts} +60 -49
- package/front_end/panels/elements/LayoutPane.ts +593 -0
- package/front_end/panels/elements/MarkerDecorator.ts +2 -2
- package/front_end/panels/elements/MetricsSidebarPane.ts +6 -6
- package/front_end/panels/elements/NodeStackTraceWidget.ts +16 -14
- package/front_end/panels/elements/PlatformFontsWidget.ts +8 -8
- package/front_end/panels/elements/PropertiesWidget.ts +2 -2
- package/front_end/panels/elements/PropertyRenderer.test.ts +1 -1
- package/front_end/panels/elements/PropertyRenderer.ts +8 -11
- package/front_end/panels/elements/ShortcutTreeElement.ts +157 -0
- package/front_end/panels/elements/StyleEditorWidget.ts +1 -1
- package/front_end/panels/elements/StylePropertiesSection.test.ts +10 -10
- package/front_end/panels/elements/StylePropertiesSection.ts +42 -44
- package/front_end/panels/elements/StylePropertyHighlighter.test.ts +32 -21
- package/front_end/panels/elements/StylePropertyHighlighter.ts +9 -11
- package/front_end/panels/elements/StylePropertyTreeElement.test.ts +111 -53
- package/front_end/panels/elements/StylePropertyTreeElement.ts +166 -100
- package/front_end/panels/elements/StylesSidebarPane.ts +47 -48
- package/front_end/panels/elements/TopLayerContainer.ts +8 -7
- package/front_end/panels/elements/WebCustomData.test.ts +2 -2
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +1 -1
- package/front_end/panels/elements/components/AdornerManager.ts +15 -0
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyDocsView.test.ts +101 -2
- package/front_end/panels/elements/components/CSSPropertyDocsView.ts +188 -5
- package/front_end/panels/elements/components/CSSPropertyIconResolver.test.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -2
- package/front_end/panels/elements/components/CSSVariableValueView.ts +5 -5
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -7
- package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +1 -1
- package/front_end/panels/elements/components/QueryContainer.ts +1 -4
- package/front_end/panels/elements/components/components.ts +0 -4
- package/front_end/panels/elements/components/cssPropertyDocsView.css +12 -1
- package/front_end/panels/elements/components/cssVariableValueView.css +1 -0
- package/front_end/panels/elements/domLinkifier.css +36 -35
- package/front_end/panels/elements/elementStatePaneWidget.css +46 -45
- package/front_end/panels/elements/elements-meta.ts +4 -13
- package/front_end/panels/elements/elements.ts +4 -3
- package/front_end/panels/elements/elementsTreeOutline.css +2 -1
- package/front_end/panels/elements/layersWidget.css +2 -11
- package/front_end/panels/elements/layoutPane.css +145 -0
- package/front_end/panels/elements/metricsSidebarPane.css +1 -1
- package/front_end/panels/elements/nodeStackTraceWidget.css +5 -4
- package/front_end/panels/elements/platformFontsWidget.css +32 -31
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
- package/front_end/panels/elements/stylesSidebarPane.css +1 -0
- package/front_end/panels/emulation/DeviceModeToolbar.ts +13 -50
- package/front_end/panels/emulation/DeviceModeView.ts +3 -4
- package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
- package/front_end/panels/emulation/MediaQueryInspector.ts +4 -2
- package/front_end/panels/emulation/emulation-meta.ts +7 -7
- package/front_end/panels/event_listeners/EventListenersView.test.ts +4 -4
- package/front_end/panels/event_listeners/EventListenersView.ts +34 -31
- package/front_end/panels/explain/PromptBuilder.test.ts +7 -2
- package/front_end/panels/explain/PromptBuilder.ts +3 -1
- package/front_end/panels/explain/components/ConsoleInsight.test.ts +14 -10
- package/front_end/panels/explain/components/ConsoleInsight.ts +13 -34
- package/front_end/panels/explain/explain-meta.ts +3 -3
- package/front_end/panels/issues/AffectedBlockedByResponseView.ts +4 -4
- package/front_end/panels/issues/AffectedCookiesView.ts +6 -6
- package/front_end/panels/issues/AffectedDescendantsWithinSelectElementView.ts +6 -6
- package/front_end/panels/issues/AffectedDirectivesView.ts +9 -9
- package/front_end/panels/issues/AffectedDocumentsInQuirksModeView.ts +4 -4
- package/front_end/panels/issues/AffectedElementsView.ts +1 -1
- package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +6 -6
- package/front_end/panels/issues/AffectedHeavyAdView.ts +7 -7
- package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +1 -1
- package/front_end/panels/issues/AffectedResourcesView.ts +6 -6
- package/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts +10 -10
- package/front_end/panels/issues/AffectedSourcesView.ts +1 -1
- package/front_end/panels/issues/AffectedTrackingSitesView.ts +1 -1
- package/front_end/panels/issues/CorsIssueDetailsView.ts +27 -27
- package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
- package/front_end/panels/issues/HiddenIssuesRow.ts +55 -29
- package/front_end/panels/issues/IssueAggregator.ts +5 -11
- package/front_end/panels/issues/IssueKindView.ts +2 -2
- package/front_end/panels/issues/IssueView.ts +13 -13
- package/front_end/panels/issues/IssuesPane.ts +5 -4
- package/front_end/panels/issues/components/HideIssuesMenu.ts +1 -1
- package/front_end/panels/issues/issues-meta.ts +2 -2
- package/front_end/panels/js_timeline/js_timeline-meta.ts +6 -6
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +43 -41
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +7 -7
- package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
- package/front_end/panels/layer_viewer/Layers3DView.ts +19 -13
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -9
- package/front_end/panels/layer_viewer/TransformController.ts +14 -8
- package/front_end/panels/layer_viewer/layer_viewer-meta.ts +9 -9
- package/front_end/panels/layers/LayersPanel.ts +3 -3
- package/front_end/panels/layers/layers-meta.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseController.ts +27 -27
- package/front_end/panels/lighthouse/LighthousePanel.ts +7 -7
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +31 -33
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +4 -2
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -4
- package/front_end/panels/lighthouse/LighthouseStartView.ts +4 -3
- package/front_end/panels/lighthouse/LighthouseStatusView.ts +31 -31
- package/front_end/panels/lighthouse/lighthouse-meta.ts +1 -1
- package/front_end/panels/lighthouse/lighthousePanel.css +9 -0
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +2 -2
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -10
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +3 -3
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +2 -2
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +6 -7
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
- package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
- package/front_end/panels/media/EventDisplayTable.ts +5 -7
- package/front_end/panels/media/EventTimelineView.ts +4 -4
- package/front_end/panels/media/MainView.test.ts +1 -1
- package/front_end/panels/media/MainView.ts +4 -4
- package/front_end/panels/media/MediaModel.ts +2 -2
- package/front_end/panels/media/PlayerDetailView.ts +8 -8
- package/front_end/panels/media/PlayerListView.ts +8 -8
- package/front_end/panels/media/PlayerMessagesView.ts +15 -17
- package/front_end/panels/media/PlayerPropertiesView.ts +66 -51
- package/front_end/panels/media/TickingFlameChart.ts +6 -5
- package/front_end/panels/media/media-meta.ts +3 -3
- package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -4
- package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
- package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +4 -4
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +189 -51
- package/front_end/panels/mobile_throttling/ThrottlingManager.test.ts +37 -1
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +114 -126
- package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +8 -8
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.test.ts +115 -0
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +178 -143
- package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +30 -36
- package/front_end/panels/network/BinaryResourceView.ts +7 -7
- package/front_end/panels/network/BlockedURLsPane.ts +18 -17
- package/front_end/panels/network/EventSourceMessagesView.ts +9 -10
- package/front_end/panels/network/NetworkConfigView.test.ts +35 -0
- package/front_end/panels/network/NetworkConfigView.ts +19 -17
- package/front_end/panels/network/NetworkDataGridNode.test.ts +19 -8
- package/front_end/panels/network/NetworkDataGridNode.ts +129 -90
- package/front_end/panels/network/NetworkItemView.test.ts +3 -3
- package/front_end/panels/network/NetworkItemView.ts +79 -79
- package/front_end/panels/network/NetworkLogView.test.ts +61 -23
- package/front_end/panels/network/NetworkLogView.ts +207 -130
- package/front_end/panels/network/NetworkLogViewColumns.ts +60 -63
- package/front_end/panels/network/NetworkManageCustomHeadersView.ts +5 -5
- package/front_end/panels/network/NetworkPanel.test.ts +3 -3
- package/front_end/panels/network/NetworkPanel.ts +69 -68
- package/front_end/panels/network/NetworkSearchScope.ts +1 -1
- package/front_end/panels/network/NetworkTimeCalculator.ts +35 -40
- package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -12
- package/front_end/panels/network/RequestCookiesView.ts +10 -11
- package/front_end/panels/network/RequestHTMLView.ts +2 -2
- package/front_end/panels/network/RequestInitiatorView.ts +16 -16
- package/front_end/panels/network/RequestPayloadView.ts +12 -13
- package/front_end/panels/network/RequestPreviewView.ts +3 -4
- package/front_end/panels/network/RequestResponseView.test.ts +36 -0
- package/front_end/panels/network/RequestResponseView.ts +5 -5
- package/front_end/panels/network/RequestTimingView.ts +54 -54
- package/front_end/panels/network/ResourceChunkView.ts +13 -13
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +26 -17
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +9 -9
- package/front_end/panels/network/SignedExchangeInfoView.ts +24 -24
- package/front_end/panels/network/binaryResourceView.css +1 -0
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +18 -16
- package/front_end/panels/network/components/HeaderSectionRow.ts +17 -42
- package/front_end/panels/network/components/RequestHeaderSection.ts +6 -11
- package/front_end/panels/network/components/RequestHeadersView.css +2 -2
- package/front_end/panels/network/components/RequestHeadersView.test.ts +5 -2
- package/front_end/panels/network/components/RequestHeadersView.ts +24 -34
- package/front_end/panels/network/components/RequestTrustTokensView.ts +19 -23
- package/front_end/panels/network/components/ResponseHeaderSection.ts +16 -15
- package/front_end/panels/network/components/WebBundleInfoView.ts +4 -9
- package/front_end/panels/network/network-meta.ts +27 -27
- package/front_end/panels/network/networkConfigView.css +13 -6
- package/front_end/panels/network/networkLogView.css +1 -1
- package/front_end/panels/network/networkPanel.css +3 -2
- package/front_end/panels/network/requestHTMLView.css +9 -8
- package/front_end/panels/network/resourceChunkView.css +21 -28
- package/front_end/panels/performance_monitor/PerformanceMonitor.test.ts +121 -6
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +252 -168
- package/front_end/panels/performance_monitor/performanceMonitor.css +7 -9
- package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +19 -52
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -6
- package/front_end/panels/profiler/HeapProfileView.ts +24 -24
- package/front_end/panels/profiler/HeapProfilerPanel.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +20 -20
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +27 -27
- package/front_end/panels/profiler/HeapSnapshotProxy.ts +2 -6
- package/front_end/panels/profiler/HeapSnapshotView.ts +59 -56
- package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -2
- package/front_end/panels/profiler/IsolateSelector.ts +16 -16
- package/front_end/panels/profiler/LiveHeapProfileView.ts +14 -14
- package/front_end/panels/profiler/ModuleUIStrings.ts +26 -26
- package/front_end/panels/profiler/ProfileDataGrid.ts +5 -5
- package/front_end/panels/profiler/ProfileHeader.ts +0 -9
- package/front_end/panels/profiler/ProfileLauncherView.ts +6 -6
- package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +1 -1
- package/front_end/panels/profiler/ProfileView.ts +23 -20
- package/front_end/panels/profiler/ProfilesPanel.ts +9 -9
- package/front_end/panels/profiler/heapProfiler.css +8 -0
- package/front_end/panels/profiler/profiler-meta.ts +12 -12
- package/front_end/panels/protocol_monitor/JSONEditor.test.ts +2 -2
- package/front_end/panels/protocol_monitor/JSONEditor.ts +36 -19
- package/front_end/panels/protocol_monitor/ProtocolMonitor.test.ts +105 -103
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +24 -25
- package/front_end/panels/protocol_monitor/protocolMonitor.css +15 -9
- package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
- package/front_end/panels/recorder/RecorderController.test.ts +9 -2
- package/front_end/panels/recorder/RecorderController.ts +82 -85
- package/front_end/panels/recorder/components/CreateRecordingView.ts +2 -2
- package/front_end/panels/recorder/components/RecordingListView.test.ts +42 -53
- package/front_end/panels/recorder/components/RecordingListView.ts +141 -125
- package/front_end/panels/recorder/components/RecordingView.test.ts +73 -122
- package/front_end/panels/recorder/components/RecordingView.ts +912 -929
- package/front_end/panels/recorder/components/StepEditor.ts +13 -13
- package/front_end/panels/recorder/components/StepView.ts +23 -24
- package/front_end/panels/recorder/components/recordingListView.css +76 -75
- package/front_end/panels/recorder/components/recordingView.css +303 -308
- package/front_end/panels/recorder/components/stepView.css +197 -196
- package/front_end/panels/recorder/components/timelineSection.css +1 -1
- package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
- package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/CSSSelector.ts +4 -4
- package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/TextSelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/XPath.ts +3 -3
- package/front_end/panels/recorder/models/RecorderSettings.ts +0 -1
- package/front_end/panels/recorder/models/RecordingPlayer.test.ts +48 -68
- package/front_end/panels/recorder/models/RecordingPlayer.ts +9 -9
- package/front_end/panels/recorder/models/RecordingSession.ts +3 -3
- package/front_end/panels/recorder/recorder-meta.ts +5 -5
- package/front_end/panels/recorder/recorderController.css +3 -3
- package/front_end/panels/screencast/ScreencastApp.ts +1 -1
- package/front_end/panels/screencast/ScreencastView.ts +13 -18
- package/front_end/panels/search/SearchResultsPane.ts +8 -8
- package/front_end/panels/search/SearchView.test.ts +2 -2
- package/front_end/panels/search/SearchView.ts +130 -127
- package/front_end/panels/search/searchResultsPane.css +2 -2
- package/front_end/panels/search/searchView.css +2 -2
- package/front_end/panels/security/CookieControlsView.ts +27 -27
- package/front_end/panels/security/CookieReportView.ts +40 -73
- package/front_end/panels/security/IPProtectionTreeElement.ts +21 -0
- package/front_end/panels/security/IPProtectionView.ts +179 -0
- package/front_end/panels/security/SecurityModel.ts +10 -10
- package/front_end/panels/security/SecurityPanel.test.ts +22 -0
- package/front_end/panels/security/SecurityPanel.ts +107 -107
- package/front_end/panels/security/SecurityPanelSidebar.ts +27 -11
- package/front_end/panels/security/ipProtectionView.css +109 -0
- package/front_end/panels/security/security-meta.ts +4 -4
- package/front_end/panels/security/security.ts +2 -0
- package/front_end/panels/sensors/LocationsSettingsTab.ts +32 -31
- package/front_end/panels/sensors/SensorsView.ts +50 -42
- package/front_end/panels/sensors/sensors-meta.ts +20 -20
- package/front_end/panels/settings/AISettingsTab.test.ts +19 -6
- package/front_end/panels/settings/AISettingsTab.ts +118 -72
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +22 -20
- package/front_end/panels/settings/KeybindsSettingsTab.ts +31 -30
- package/front_end/panels/settings/SettingsScreen.ts +19 -20
- package/front_end/panels/settings/components/SyncSection.test.ts +43 -9
- package/front_end/panels/settings/components/SyncSection.ts +63 -29
- package/front_end/panels/settings/components/syncSection.css +16 -7
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +14 -16
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.test.ts +61 -0
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +134 -28
- package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +19 -0
- package/front_end/panels/settings/emulation/emulation-meta.ts +2 -2
- package/front_end/panels/settings/settings-meta.ts +12 -12
- package/front_end/panels/settings/settingsScreen.css +0 -1
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +5 -5
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
- package/front_end/panels/sources/AddSourceMapURLDialog.ts +5 -5
- package/front_end/panels/sources/AiCodeCompletionPlugin.test.ts +119 -0
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +400 -0
- package/front_end/panels/sources/AiWarningInfobarPlugin.ts +3 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +13 -11
- package/front_end/panels/sources/{components/BreakpointsView.test.ts → BreakpointsView.test.ts} +237 -225
- package/front_end/panels/sources/{components/BreakpointsView.ts → BreakpointsView.ts} +336 -301
- package/front_end/panels/sources/{components/BreakpointsViewUtils.test.ts → BreakpointsViewUtils.test.ts} +29 -29
- package/front_end/panels/sources/{components/BreakpointsViewUtils.ts → BreakpointsViewUtils.ts} +3 -3
- package/front_end/panels/sources/CSSPlugin.ts +26 -17
- package/front_end/panels/sources/CallStackSidebarPane.ts +34 -58
- package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
- package/front_end/panels/sources/CoveragePlugin.test.ts +2 -0
- package/front_end/panels/sources/CoveragePlugin.ts +5 -5
- package/front_end/panels/sources/DebuggerPausedMessage.test.ts +2 -0
- package/front_end/panels/sources/DebuggerPausedMessage.ts +33 -39
- package/front_end/panels/sources/DebuggerPlugin.test.ts +4 -3
- package/front_end/panels/sources/DebuggerPlugin.ts +68 -49
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.test.ts +3 -4
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +7 -7
- package/front_end/panels/sources/GoToLineQuickOpen.ts +15 -15
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +9 -6
- package/front_end/panels/sources/NavigatorView.test.ts +2 -1
- package/front_end/panels/sources/NavigatorView.ts +39 -35
- package/front_end/panels/sources/OpenFileQuickOpen.ts +6 -6
- package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
- package/front_end/panels/sources/ProfilePlugin.ts +3 -3
- package/front_end/panels/sources/ResourceOriginPlugin.ts +1 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +11 -9
- package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.test.ts +3 -2
- package/front_end/panels/sources/SourcesNavigator.ts +32 -20
- package/front_end/panels/sources/SourcesPanel.test.ts +90 -0
- package/front_end/panels/sources/SourcesPanel.ts +71 -28
- package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
- package/front_end/panels/sources/SourcesView.test.ts +5 -2
- package/front_end/panels/sources/SourcesView.ts +7 -8
- package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
- package/front_end/panels/sources/ThreadsSidebarPane.ts +7 -10
- package/front_end/panels/sources/UISourceCodeFrame.test.ts +104 -0
- package/front_end/panels/sources/UISourceCodeFrame.ts +40 -17
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +14 -9
- package/front_end/panels/sources/breakpointsView.css +276 -0
- package/front_end/panels/sources/components/HeadersView.ts +17 -13
- package/front_end/panels/sources/components/components.ts +0 -4
- package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
- package/front_end/panels/sources/sources-meta.ts +103 -112
- package/front_end/panels/sources/sources.ts +6 -0
- package/front_end/panels/timeline/ActiveFilters.ts +2 -1
- package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -1
- package/front_end/panels/timeline/AnnotationHelpers.test.ts +14 -8
- package/front_end/panels/timeline/AnnotationHelpers.ts +28 -23
- package/front_end/panels/timeline/AppenderUtils.ts +2 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +1 -14
- package/front_end/panels/timeline/CountersGraph.test.ts +80 -0
- package/front_end/panels/timeline/CountersGraph.ts +27 -18
- package/front_end/panels/timeline/EntriesFilter.test.ts +22 -15
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +4 -25
- package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -9
- package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
- package/front_end/panels/timeline/Initiators.test.ts +22 -19
- package/front_end/panels/timeline/Initiators.ts +19 -6
- package/front_end/panels/timeline/InteractionsTrackAppender.ts +6 -6
- package/front_end/panels/timeline/IsolateSelector.ts +2 -2
- package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -5
- package/front_end/panels/timeline/ModificationsManager.test.ts +98 -188
- package/front_end/panels/timeline/ModificationsManager.ts +51 -48
- package/front_end/panels/timeline/NetworkTrackAppender.ts +3 -3
- package/front_end/panels/timeline/README.md +5 -13
- package/front_end/{models/trace/extras/Metadata.test.ts → panels/timeline/RecordingMetadata.test.ts} +61 -29
- package/front_end/panels/timeline/RecordingMetadata.ts +79 -0
- package/front_end/panels/timeline/SaveFileFormatter.test.ts +1 -3
- package/front_end/panels/timeline/SaveFileFormatter.ts +0 -8
- package/front_end/panels/timeline/StatusDialog.ts +12 -8
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +5 -5
- package/front_end/panels/timeline/ThreadAppender.ts +29 -29
- package/front_end/panels/timeline/TimelineController.ts +14 -18
- package/front_end/panels/timeline/TimelineDetailsView.test.ts +49 -15
- package/front_end/panels/timeline/TimelineDetailsView.ts +213 -105
- package/front_end/panels/timeline/TimelineEventOverview.ts +6 -6
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +56 -95
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +94 -65
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +3 -62
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +10 -30
- package/front_end/panels/timeline/TimelineFlameChartView.test.ts +105 -80
- package/front_end/panels/timeline/TimelineFlameChartView.ts +107 -102
- package/front_end/panels/timeline/TimelineHistoryManager.test.ts +0 -5
- package/front_end/panels/timeline/TimelineHistoryManager.ts +8 -8
- package/front_end/panels/timeline/TimelineLoader.test.ts +4 -7
- package/front_end/panels/timeline/TimelineLoader.ts +22 -3
- package/front_end/panels/timeline/TimelineMiniMap.ts +13 -5
- package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.test.ts +381 -117
- package/front_end/panels/timeline/TimelinePanel.ts +576 -345
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +195 -80
- package/front_end/panels/timeline/TimelineTreeView.test.ts +5 -5
- package/front_end/panels/timeline/TimelineTreeView.ts +25 -25
- package/front_end/panels/timeline/TimelineUIUtils.test.ts +58 -55
- package/front_end/panels/timeline/TimelineUIUtils.ts +159 -345
- package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -7
- package/front_end/panels/timeline/TrackConfigBanner.test.ts +68 -0
- package/front_end/panels/timeline/TrackConfigBanner.ts +97 -0
- package/front_end/panels/timeline/TrackConfiguration.test.ts +3 -3
- package/front_end/panels/timeline/TrackConfiguration.ts +1 -0
- package/front_end/panels/timeline/UIDevtoolsUtils.ts +15 -15
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +4 -9
- package/front_end/panels/timeline/components/DetailsView.ts +13 -13
- package/front_end/panels/timeline/components/ExportTraceOptions.test.ts +281 -0
- package/front_end/panels/timeline/components/ExportTraceOptions.ts +262 -0
- package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -1
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
- package/front_end/panels/timeline/components/IgnoreListSetting.test.ts +5 -4
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +7 -7
- package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -3
- package/front_end/panels/timeline/components/Invalidations.test.ts +2 -1
- package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +21 -11
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +325 -307
- package/front_end/panels/timeline/components/LiveMetricsView.test.ts +14 -22
- package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
- package/front_end/panels/timeline/components/MetricCard.test.ts +2 -2
- package/front_end/panels/timeline/components/NetworkRequestDetails.test.ts +38 -44
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +318 -278
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +8 -8
- package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +3 -0
- package/front_end/panels/timeline/components/OriginMap.ts +1 -1
- package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +17 -31
- package/front_end/panels/timeline/components/RelatedInsightChips.ts +87 -66
- package/front_end/panels/timeline/components/Sidebar.test.ts +43 -4
- package/front_end/panels/timeline/components/Sidebar.ts +47 -20
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +47 -72
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +228 -218
- package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +1 -0
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +18 -54
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +7 -53
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +61 -44
- package/front_end/panels/timeline/components/TimelineSummary.ts +4 -4
- package/front_end/panels/timeline/components/Utils.ts +9 -9
- package/front_end/panels/timeline/components/components.ts +2 -0
- package/front_end/panels/timeline/components/exportTraceOptions.css +26 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +40 -16
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +28 -34
- package/front_end/panels/timeline/components/insights/CLSCulprits.test.ts +5 -5
- package/front_end/panels/timeline/components/insights/CLSCulprits.ts +32 -23
- package/front_end/panels/timeline/components/insights/Cache.ts +4 -22
- package/front_end/panels/timeline/components/insights/Checklist.ts +6 -7
- package/front_end/panels/timeline/components/insights/DOMSize.ts +35 -15
- package/front_end/panels/timeline/components/insights/DocumentLatency.ts +1 -61
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +5 -17
- package/front_end/panels/timeline/components/insights/EventRef.ts +7 -9
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +20 -21
- package/front_end/panels/timeline/components/insights/ForcedReflow.ts +5 -28
- package/front_end/panels/timeline/components/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +8 -5
- package/front_end/panels/timeline/components/insights/INPBreakdown.ts +70 -0
- package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -21
- package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +146 -0
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +28 -80
- package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +3 -15
- package/front_end/panels/timeline/components/insights/ModernHTTP.ts +18 -23
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.test.ts +76 -0
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +35 -29
- package/front_end/panels/timeline/components/insights/NodeLink.test.ts +113 -0
- package/front_end/panels/timeline/components/insights/NodeLink.ts +50 -10
- package/front_end/panels/timeline/components/insights/README.md +1 -1
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +4 -22
- package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +16 -28
- package/front_end/panels/timeline/components/insights/Table.ts +2 -3
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +7 -47
- package/front_end/panels/timeline/components/insights/Viewport.ts +0 -6
- package/front_end/panels/timeline/components/insights/insights.ts +4 -4
- package/front_end/panels/timeline/components/insights/table.css +18 -0
- package/front_end/panels/timeline/components/insights/types.ts +2 -2
- package/front_end/panels/timeline/components/layoutShiftDetails.css +99 -92
- package/front_end/panels/timeline/components/networkRequestDetails.css +110 -104
- package/front_end/panels/timeline/components/networkRequestTooltip.css +88 -83
- package/front_end/panels/timeline/components/relatedInsightChips.css +60 -58
- package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +80 -78
- package/front_end/panels/timeline/components/sidebarInsightsTab.css +0 -25
- package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
- package/front_end/panels/timeline/docs/flame_chart_migration.md +2 -2
- package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +149 -42
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +218 -283
- package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +69 -104
- package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
- package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +13 -0
- package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +2 -1
- package/front_end/panels/timeline/timeline-meta.ts +14 -14
- package/front_end/panels/timeline/timeline.ts +4 -4
- package/front_end/panels/timeline/timelineDetailsView.css +118 -0
- package/front_end/panels/timeline/timelineFlameChartView.css +18 -117
- package/front_end/panels/timeline/timelineMiniMap.css +5 -0
- package/front_end/panels/timeline/timelinePanel.css +2 -10
- package/front_end/panels/timeline/timelineTreeView.css +0 -4
- package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +16 -15
- package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +6 -4
- package/front_end/panels/timeline/track_appenders/InteractionsTrackAppender.test.ts +0 -1
- package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +34 -49
- package/front_end/panels/timeline/utils/AICallTree.test.ts +54 -120
- package/front_end/panels/timeline/utils/AICallTree.ts +31 -74
- package/front_end/panels/timeline/utils/AIContext.ts +67 -0
- package/front_end/panels/timeline/utils/EntityMapper.test.ts +5 -4
- package/front_end/panels/timeline/utils/EntityMapper.ts +3 -3
- package/front_end/panels/timeline/utils/EntryName.test.ts +3 -3
- package/front_end/panels/timeline/utils/EntryName.ts +10 -10
- package/front_end/panels/timeline/utils/EntryNodes.test.ts +137 -0
- package/front_end/panels/timeline/utils/EntryNodes.ts +107 -0
- package/front_end/panels/timeline/utils/EntryStyles.ts +110 -110
- package/front_end/panels/timeline/{EventsSerializer.test.ts → utils/EventsSerializer.test.ts} +7 -7
- package/front_end/panels/timeline/{EventsSerializer.ts → utils/EventsSerializer.ts} +1 -1
- package/front_end/panels/timeline/{FreshRecording.test.ts → utils/FreshRecording.test.ts} +5 -5
- package/front_end/panels/timeline/{FreshRecording.ts → utils/FreshRecording.ts} +1 -1
- package/front_end/panels/timeline/utils/Helpers.ts +6 -0
- package/front_end/panels/timeline/utils/IgnoreList.test.ts +7 -6
- package/front_end/panels/timeline/utils/IgnoreList.ts +6 -6
- package/front_end/panels/timeline/utils/InsightAIContext.test.ts +61 -25
- package/front_end/panels/timeline/utils/InsightAIContext.ts +102 -81
- package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +5 -4
- package/front_end/panels/timeline/utils/Treemap.ts +5 -20
- package/front_end/panels/timeline/utils/utils.ts +8 -0
- package/front_end/panels/utils/utils.test.ts +1 -7
- package/front_end/panels/utils/utils.ts +17 -21
- package/front_end/panels/web_audio/WebAudioView.test.ts +224 -11
- package/front_end/panels/web_audio/WebAudioView.ts +219 -267
- package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
- package/front_end/panels/web_audio/web_audio.ts +0 -12
- package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -72
- package/front_end/panels/webauthn/WebauthnPane.ts +517 -578
- package/front_end/panels/webauthn/webauthn-meta.ts +2 -2
- package/front_end/panels/webauthn/webauthnPane.css +157 -155
- package/front_end/panels/whats_new/ReleaseNoteText.ts +11 -11
- package/front_end/panels/whats_new/ReleaseNoteView.ts +2 -2
- package/front_end/panels/whats_new/releaseNoteView.css +92 -91
- package/front_end/panels/whats_new/resources/WNDT.md +6 -10
- package/front_end/panels/whats_new/whats_new-meta.ts +7 -7
- package/front_end/services/trace_bounds/TraceBounds.ts +1 -1
- package/front_end/services/tracing/ExternalRequests.test.ts +39 -0
- package/front_end/services/tracing/ExternalRequests.ts +74 -0
- package/front_end/services/tracing/PerformanceTracing.ts +5 -4
- package/front_end/{models/trace → services/tracing}/TracingManager.test.ts +9 -7
- package/front_end/{models/trace → services/tracing}/TracingManager.ts +3 -4
- package/front_end/services/tracing/tracing.ts +4 -0
- package/front_end/testing/AiAssistanceHelpers.ts +10 -8
- package/front_end/testing/DOMHelpers.ts +8 -6
- package/front_end/testing/EnvironmentHelpers.ts +21 -6
- package/front_end/testing/ExpectStubCall.ts +2 -1
- package/front_end/testing/InsightHelpers.ts +11 -4
- package/front_end/testing/MockConnection.ts +3 -2
- package/front_end/testing/MockSettingStorage.ts +23 -0
- package/front_end/testing/MutationHelpers.test.ts +1 -3
- package/front_end/testing/OverridesHelpers.ts +9 -3
- package/front_end/testing/PropertyParser.ts +1 -1
- package/front_end/testing/README.md +34 -0
- package/front_end/testing/SnapshotTester.snapshot.txt +9 -0
- package/front_end/testing/SnapshotTester.test.ts +32 -0
- package/front_end/testing/SnapshotTester.ts +150 -0
- package/front_end/testing/SourceMapEncoder.ts +1 -237
- package/front_end/testing/SourceMapHelpers.ts +3 -5
- package/front_end/testing/StackTraceHelpers.ts +47 -0
- package/front_end/testing/StyleHelpers.ts +43 -22
- package/front_end/testing/TraceHelpers.ts +135 -122
- package/front_end/testing/TraceLoader.ts +23 -65
- package/front_end/testing/test_setup.ts +31 -4
- package/front_end/ui/components/buttons/Button.ts +1 -1
- package/front_end/ui/components/buttons/FloatingButton.ts +37 -6
- package/front_end/ui/components/cards/Card.ts +2 -2
- package/front_end/ui/components/copy_to_clipboard/copyToClipboard.ts +1 -1
- package/front_end/ui/components/dialogs/ButtonDialog.test.ts +2 -6
- package/front_end/ui/components/dialogs/ButtonDialog.ts +15 -0
- package/front_end/ui/components/dialogs/Dialog.ts +68 -8
- package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +1 -3
- package/front_end/ui/components/diff_view/DiffView.ts +6 -6
- package/front_end/ui/components/docs/console_insight/basic.ts +1 -1
- package/front_end/ui/components/docs/console_insight/error.ts +1 -1
- package/front_end/ui/components/docs/console_insight/loading.ts +1 -1
- package/front_end/ui/components/docs/context_menu/basic.html +45 -0
- package/front_end/ui/components/docs/context_menu/basic.ts +102 -0
- package/front_end/ui/components/docs/icon_component/basic.html +1 -3
- package/front_end/ui/components/docs/icon_component/basic.ts +1 -1
- package/front_end/ui/components/docs/recorder_recording_list_view/basic.ts +4 -1
- package/front_end/ui/components/docs/select_menu/basic.html +1 -27
- package/front_end/ui/components/docs/select_menu/basic.ts +86 -194
- package/front_end/ui/components/icon_button/Icon.ts +16 -10
- package/front_end/ui/components/icon_button/IconButton.ts +1 -3
- package/front_end/ui/components/icon_button/icon.css +73 -0
- package/front_end/ui/components/issue_counter/IssueCounter.ts +13 -14
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +3 -3
- package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +4 -4
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +9 -6
- package/front_end/ui/components/markdown_view/MarkdownView.test.ts +73 -0
- package/front_end/ui/components/panel_feedback/PanelFeedback.ts +5 -11
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +4 -9
- package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
- package/front_end/ui/components/settings/SettingDeprecationWarning.ts +2 -4
- package/front_end/ui/components/snackbars/Snackbar.ts +32 -17
- package/front_end/ui/components/snackbars/snackbar.css +1 -1
- package/front_end/ui/components/spinners/Spinner.ts +50 -2
- package/front_end/ui/components/spinners/spinner.css +10 -1
- package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +0 -1
- package/front_end/ui/components/survey_link/SurveyLink.ts +4 -8
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.test.ts +84 -0
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +83 -0
- package/front_end/ui/components/text_editor/ExecutionPositionHighlighter.ts +0 -1
- package/front_end/ui/components/text_editor/TextEditor.test.ts +72 -12
- package/front_end/ui/components/text_editor/TextEditor.ts +2 -0
- package/front_end/ui/components/text_editor/config.ts +120 -12
- package/front_end/ui/{legacy/components/inline_editor/bezierSwatch.css → components/text_editor/textEditor.css} +2 -6
- package/front_end/ui/components/text_editor/text_editor.ts +1 -0
- package/front_end/ui/components/tooltips/Tooltip.test.ts +70 -40
- package/front_end/ui/components/tooltips/Tooltip.ts +208 -33
- package/front_end/ui/components/tooltips/tooltip.css +13 -77
- package/front_end/ui/components/tree_outline/TreeOutline.ts +11 -0
- package/front_end/ui/legacy/ARIAUtils.test.ts +101 -20
- package/front_end/ui/legacy/ARIAUtils.ts +77 -49
- package/front_end/ui/legacy/ActionRegistration.test.ts +0 -2
- package/front_end/ui/legacy/ActionRegistration.ts +24 -24
- package/front_end/ui/legacy/ContextMenu.test.ts +60 -1
- package/front_end/ui/legacy/ContextMenu.ts +349 -29
- package/front_end/ui/legacy/DockController.ts +13 -7
- package/front_end/ui/legacy/EmptyWidget.ts +62 -32
- package/front_end/ui/legacy/FilterBar.ts +14 -9
- package/front_end/ui/legacy/GlassPane.ts +10 -4
- package/front_end/ui/legacy/Infobar.ts +2 -2
- package/front_end/ui/legacy/InspectorView.test.ts +99 -0
- package/front_end/ui/legacy/InspectorView.ts +71 -25
- package/front_end/ui/legacy/ListWidget.ts +9 -9
- package/front_end/ui/legacy/Panel.ts +1 -1
- package/front_end/ui/legacy/ProgressIndicator.ts +44 -41
- package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +4 -4
- package/front_end/ui/legacy/ReportView.ts +1 -1
- package/front_end/ui/legacy/SearchableView.ts +24 -24
- package/front_end/ui/legacy/SettingsUI.ts +2 -2
- package/front_end/ui/legacy/ShortcutRegistry.ts +2 -1
- package/front_end/ui/legacy/SoftContextMenu.ts +23 -9
- package/front_end/ui/legacy/SoftDropDown.ts +1 -1
- package/front_end/ui/legacy/SplitWidget.test.ts +8 -0
- package/front_end/ui/legacy/SplitWidget.ts +3 -3
- package/front_end/ui/legacy/SuggestBox.ts +15 -15
- package/front_end/ui/legacy/TabbedPane.ts +27 -31
- package/front_end/ui/legacy/TargetCrashedScreen.ts +4 -4
- package/front_end/ui/legacy/TextPrompt.ts +4 -2
- package/front_end/ui/legacy/ThrottledWidget.ts +1 -1
- package/front_end/ui/legacy/Toolbar.test.ts +13 -0
- package/front_end/ui/legacy/Toolbar.ts +39 -19
- package/front_end/ui/legacy/Treeoutline.test.ts +140 -0
- package/front_end/ui/legacy/Treeoutline.ts +244 -8
- package/front_end/ui/legacy/UIUtils.test.ts +59 -0
- package/front_end/ui/legacy/UIUtils.ts +235 -25
- package/front_end/ui/legacy/View.test.ts +14 -1
- package/front_end/ui/legacy/View.ts +33 -9
- package/front_end/ui/legacy/ViewManager.test.ts +235 -0
- package/front_end/ui/legacy/ViewManager.ts +109 -15
- package/front_end/ui/legacy/ViewRegistration.ts +17 -7
- package/front_end/ui/legacy/Widget.test.ts +35 -3
- package/front_end/ui/legacy/Widget.ts +127 -16
- package/front_end/ui/legacy/XLink.ts +1 -1
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +36 -26
- package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +4 -8
- package/front_end/ui/legacy/components/color_picker/Spectrum.test.ts +36 -1
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +72 -49
- package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -1
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +14 -19
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +31 -30
- package/front_end/ui/legacy/components/data_grid/DataGridElement.test.ts +19 -15
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +15 -3
- package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +6 -3
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +9 -3
- package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.test.ts +25 -25
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +11 -5
- package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +5 -5
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.test.ts +1 -9
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +35 -20
- package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +32 -31
- package/front_end/ui/legacy/components/inline_editor/FontEditorUnitConverter.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/Swatches.ts +3 -47
- package/front_end/ui/legacy/components/inline_editor/cssAngle.css +4 -5
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.test.ts +19 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +31 -28
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -0
- package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
- package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +7 -3
- package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +7 -7
- package/front_end/ui/legacy/components/perf_ui/FlameChart.test.ts +162 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +153 -99
- package/front_end/ui/legacy/components/perf_ui/NetworkPriorities.ts +5 -5
- package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
- package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -1
- package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +0 -4
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +54 -6
- package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +6 -6
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +29 -3
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +14 -5
- package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -5
- package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -0
- package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/FontView.ts +8 -5
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +17 -29
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.test.ts +0 -4
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +41 -31
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/fontView.css +1 -1
- package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +9 -9
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -4
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.test.ts +6 -5
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +76 -34
- package/front_end/ui/legacy/components/utils/Linkifier.test.ts +154 -2
- package/front_end/ui/legacy/components/utils/Linkifier.ts +108 -50
- package/front_end/ui/legacy/components/utils/TargetDetachedDialog.ts +2 -1
- package/front_end/ui/legacy/confirmDialog.css +1 -1
- package/front_end/ui/legacy/filter.css +12 -4
- package/front_end/ui/legacy/inspectorCommon.css +25 -20
- package/front_end/ui/legacy/remoteDebuggingTerminatedScreen.css +18 -17
- package/front_end/ui/legacy/softContextMenu.css +4 -0
- package/front_end/ui/legacy/tabbedPane.css +5 -1
- package/front_end/ui/legacy/targetCrashedScreen.css +9 -8
- package/front_end/ui/legacy/viewContainers.css +8 -0
- package/front_end/ui/visual_logging/Debugging.ts +122 -26
- package/front_end/ui/visual_logging/KnownContextValues.ts +139 -1
- package/front_end/ui/visual_logging/LoggingConfig.ts +1 -1
- package/front_end/ui/visual_logging/LoggingDriver.test.ts +74 -44
- package/front_end/ui/visual_logging/LoggingDriver.ts +3 -2
- package/front_end/ui/visual_logging/LoggingState.ts +6 -4
- package/front_end/ui/visual_logging/README.md +1 -3
- package/front_end/ui/visual_logging/visual_logging.ts +9 -0
- package/front_end/ui/visual_logging/visual_logging_debugging.png +0 -0
- package/inspector_overlay/css_grid_label_helpers.ts +4 -4
- package/inspector_overlay/highlight_flex_common.ts +2 -2
- package/inspector_overlay/loadCSS.rollup.js +2 -2
- package/inspector_overlay/main.ts +0 -4
- package/inspector_overlay/tool_highlight.css +1 -1
- package/inspector_overlay/tool_highlight.ts +7 -7
- package/package.json +32 -36
- package/scripts/add_icon_paths.py +1 -1
- package/scripts/ai_assistance/README.md +1 -0
- package/scripts/ai_assistance/auto-run/auto-run.ts +46 -6
- package/scripts/ai_assistance/auto-run/shared/comment-parsers.test.ts +2 -2
- package/scripts/ai_assistance/auto-run/shared/comment-parsers.ts +2 -2
- package/scripts/ai_assistance/auto-run/shared/puppeteer-helpers.ts +18 -15
- package/scripts/ai_assistance/auto-run/targets/elements-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/elements-multimodal-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/interface.ts +1 -0
- package/scripts/ai_assistance/auto-run/targets/patching-executor.ts +1 -0
- package/scripts/ai_assistance/auto-run/targets/performance-insights-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/performance-main-thread-executor.ts +2 -0
- package/scripts/ai_assistance/eval/index.js +5 -1
- package/scripts/ai_assistance/package.json +2 -1
- package/scripts/ai_assistance/suite/README.md +57 -0
- package/scripts/ai_assistance/suite/helpers/evaluators.ts +183 -0
- package/scripts/ai_assistance/suite/helpers/gemini.ts +122 -0
- package/scripts/ai_assistance/suite/helpers/outputs.ts +112 -0
- package/scripts/ai_assistance/suite/instructions/lcp-breakdown.md +12 -0
- package/scripts/ai_assistance/suite/instructions/load.ts +13 -0
- package/scripts/ai_assistance/suite/instructions/scoring.md +27 -0
- package/scripts/ai_assistance/suite/performance.eval.ts +18 -0
- package/scripts/ai_assistance/suite/to_eval_output.ts +166 -0
- package/scripts/ai_assistance/suite/types.d.ts +40 -0
- package/scripts/ai_assistance/suite/upload_to_gcp.ts +104 -0
- package/scripts/ai_assistance/tsconfig.json +1 -1
- package/scripts/ai_assistance/types.d.ts +8 -3
- package/scripts/build/assert_grd.py +1 -1
- package/scripts/build/compress_files.js +9 -4
- package/scripts/build/cross_reference_ninja_and_tsc.js +5 -5
- package/scripts/build/devtools_plugin.js +9 -2
- package/scripts/build/esbuild.js +4 -1
- package/scripts/build/generate_html_entrypoint.js +5 -4
- package/scripts/build/ninja/README.md +2 -3
- package/scripts/build/ninja/bundle.gni +7 -30
- package/scripts/build/ninja/devtools_entrypoint.gni +4 -4
- package/scripts/build/ninja/devtools_pre_built.gni +2 -1
- package/scripts/build/ninja/generate_css.gni +4 -2
- package/scripts/build/ninja/vars.gni +5 -1
- package/scripts/build/ninja/write-if-changed.js +2 -2
- package/scripts/build/typescript/ts_library.py +7 -1
- package/scripts/build/typescript/typescript.gni +2 -1
- package/scripts/component_server/server.js +8 -7
- package/scripts/devtools_build.mjs +93 -26
- package/scripts/devtools_build.test.mjs +48 -48
- package/scripts/devtools_paths.py +0 -5
- package/scripts/eslint_rules/README.md +4 -2
- package/scripts/eslint_rules/lib/canvas-context-tracking.ts +1 -1
- package/scripts/eslint_rules/lib/check-css-import.ts +2 -2
- package/scripts/eslint_rules/lib/check-license-header.ts +3 -3
- package/scripts/eslint_rules/lib/check-test-definitions.ts +2 -2
- package/scripts/eslint_rules/lib/enforce-custom-element-definitions-location.ts +1 -1
- package/scripts/eslint_rules/lib/enforce-optional-properties-last.ts +1 -1
- package/scripts/eslint_rules/lib/enforce-ui-strings-as-const.ts +1 -1
- package/scripts/eslint_rules/lib/es-modules-import.ts +3 -2
- package/scripts/eslint_rules/lib/html-tagged-template.ts +2 -2
- package/scripts/eslint_rules/lib/inject-checkbox-styles.ts +36 -24
- package/scripts/eslint_rules/lib/inline-type-imports.ts +1 -1
- package/scripts/eslint_rules/lib/jslog-context-list.ts +32 -7
- package/scripts/eslint_rules/lib/no-adopted-style-sheets.ts +2 -2
- package/scripts/eslint_rules/lib/no-assert-deep-strict-equal.ts +17 -16
- package/scripts/eslint_rules/lib/no-assert-equal-boolean-null-undefined.ts +1 -1
- package/scripts/eslint_rules/lib/no-assert-equal.ts +1 -1
- package/scripts/eslint_rules/lib/no-assert-strict-equal-for-arrays-and-objects.ts +1 -1
- package/scripts/eslint_rules/lib/no-commented-out-console.ts +4 -2
- package/scripts/eslint_rules/lib/no-customized-builtin-elements.ts +1 -4
- package/scripts/eslint_rules/lib/no-imperative-dom-api/adorner.ts +5 -9
- package/scripts/eslint_rules/lib/no-imperative-dom-api/aria-utils.ts +5 -8
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ast.ts +24 -1
- package/scripts/eslint_rules/lib/no-imperative-dom-api/button.ts +5 -4
- package/scripts/eslint_rules/lib/no-imperative-dom-api/class-member.ts +1 -1
- package/scripts/eslint_rules/lib/no-imperative-dom-api/data-grid.ts +23 -25
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api-devtools-extensions.ts +5 -9
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api.ts +11 -16
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-fragment.ts +2 -2
- package/scripts/eslint_rules/lib/no-imperative-dom-api/split-widget.ts +14 -18
- package/scripts/eslint_rules/lib/no-imperative-dom-api/toolbar.ts +17 -18
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-fragment.ts +7 -12
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-utils.ts +7 -7
- package/scripts/eslint_rules/lib/no-imperative-dom-api/widget.ts +8 -13
- package/scripts/eslint_rules/lib/no-imperative-dom-api.ts +3 -22
- package/scripts/eslint_rules/lib/no-importing-images-from-src.ts +1 -1
- package/scripts/eslint_rules/lib/no-imports-in-directory.ts +18 -7
- package/scripts/eslint_rules/lib/no-lit-render-outside-of-view.ts +48 -37
- package/scripts/eslint_rules/lib/no-new-lit-element-components.ts +5 -2
- package/scripts/eslint_rules/lib/no-underscored-properties.ts +36 -28
- package/scripts/eslint_rules/lib/prefer-assert-instance-of.ts +24 -20
- package/scripts/eslint_rules/lib/prefer-assert-is-ok.ts +54 -45
- package/scripts/eslint_rules/lib/prefer-assert-length-of.ts +24 -17
- package/scripts/eslint_rules/lib/prefer-assert-strict-equal.ts +22 -16
- package/scripts/eslint_rules/lib/prefer-private-class-members.ts +11 -4
- package/scripts/eslint_rules/lib/prefer-sinon-assert.ts +37 -29
- package/scripts/eslint_rules/lib/prefer-url-string.ts +1 -1
- package/scripts/eslint_rules/lib/utils/lit.ts +26 -9
- package/scripts/eslint_rules/lib/validate-timing-types.ts +330 -0
- package/scripts/eslint_rules/rules-dir.mjs +4 -1
- package/scripts/eslint_rules/tests/check-license-header.test.ts +8 -8
- package/scripts/eslint_rules/tests/check-test-definitions.test.ts +0 -10
- package/scripts/eslint_rules/tests/enforce-optional-properties-last.test.ts +1 -1
- package/scripts/eslint_rules/tests/inject-checkbox-styles.test.ts +49 -0
- package/scripts/eslint_rules/tests/no-imports-in-directory.test.ts +20 -5
- package/scripts/eslint_rules/tests/no-lit-render-outside-of-view.test.ts +60 -10
- package/scripts/eslint_rules/tests/no-new-lit-element-components.test.ts +4 -0
- package/scripts/eslint_rules/tests/prefer-private-class-members.test.ts +2 -2
- package/scripts/eslint_rules/tests/utils/RuleTester.ts +19 -1
- package/scripts/eslint_rules/tests/utils.test.ts +1 -1
- package/scripts/eslint_rules/tests/validate-timing-types.test.ts +289 -0
- package/scripts/eslint_rules/tsconfig.json +3 -2
- package/scripts/extract_bugs.ts +2 -3
- package/scripts/javascript_natives/helpers.js +9 -9
- package/scripts/migration/e2e_non_hosted_gemini.mjs +102 -0
- package/scripts/migration/web-tests-esm/rename-legacy-global.mjs +1 -1
- package/scripts/npm_test.js +1 -1
- package/scripts/protocol_typescript/protocol_dts_generator.ts +27 -16
- package/scripts/protocol_typescript/protocol_schema.d.ts +9 -4
- package/scripts/reformat-clang-js-ts.js +1 -1
- package/scripts/run_build.mjs +14 -2
- package/scripts/run_start.mjs +6 -3
- package/scripts/scaffold/scaffold-widget.js +7 -7
- package/scripts/scaffold/templates/WidgetTemplate.ts.txt +1 -1
- package/scripts/tools/update_goldens.py +143 -168
- package/scripts/tsconfig.json +2 -1
- package/scripts/whitespaces.txt +1 -1
- package/front_end/core/sdk/SourceMapScopes.test.ts +0 -507
- package/front_end/core/sdk/SourceMapScopes.ts +0 -472
- package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.test.ts +0 -448
- package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.ts +0 -498
- package/front_end/models/trace/extras/FetchNodes.test.ts +0 -261
- package/front_end/models/trace/extras/FetchNodes.ts +0 -254
- package/front_end/models/trace/extras/Metadata.ts +0 -79
- package/front_end/models/trace/insights/LCPPhases.test.ts +0 -71
- package/front_end/models/trace/insights/LCPPhases.ts +0 -222
- package/front_end/panels/animation/AnimationScreenshotPopover.ts +0 -65
- package/front_end/panels/animation/animationScreenshotPopover.css +0 -18
- package/front_end/panels/application/ReportingApiReportsView.test.ts +0 -117
- package/front_end/panels/application/ReportingApiReportsView.ts +0 -88
- package/front_end/panels/elements/ElementsTreeElementHighlighter.test.ts +0 -51
- package/front_end/panels/elements/ElementsTreeElementHighlighter.ts +0 -107
- package/front_end/panels/elements/components/LayoutPane.ts +0 -515
- package/front_end/panels/elements/components/LayoutPaneUtils.ts +0 -41
- package/front_end/panels/elements/components/layoutPane.css +0 -168
- package/front_end/panels/sources/components/breakpointsView.css +0 -275
- package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +0 -118
- package/front_end/panels/timeline/components/insights/LCPPhases.ts +0 -256
- package/front_end/panels/web_audio/AudioContextContentBuilder.ts +0 -113
- package/front_end/panels/web_audio/AudioContextSelector.ts +0 -140
- package/front_end/panels/web_audio/audioContextSelector.css +0 -20
- package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +0 -80
- package/front_end/panels/web_audio/graph_visualizer/GraphManager.ts +0 -46
- package/front_end/panels/web_audio/graph_visualizer/GraphStyle.ts +0 -96
- package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +0 -197
- package/front_end/panels/web_audio/graph_visualizer/NodeRendererUtility.ts +0 -43
- package/front_end/panels/web_audio/graph_visualizer/NodeView.ts +0 -258
- package/front_end/panels/web_audio/graph_visualizer/graph_visualizer.ts +0 -19
- package/front_end/ui/components/docs/recorder_recording_view/basic.html +0 -20
- package/front_end/ui/components/docs/recorder_recording_view/basic.ts +0 -99
- package/front_end/ui/legacy/inspectorViewTabbedPane.css +0 -13
- package/inspector_overlay/debug/tool_distances.html +0 -25
- package/inspector_overlay/tool_distances.ts +0 -125
- package/scripts/eslint_rules/lib/no-it-screenshot-only-or-repeat.ts +0 -47
- package/scripts/eslint_rules/lib/no-screenshot-test-outside-perf-panel.ts +0 -77
- package/scripts/eslint_rules/lib/screenshot-assertion-in-it-screenshot.ts +0 -110
- package/scripts/eslint_rules/lib/single-screenshot-assertion-per-test.ts +0 -85
- package/scripts/eslint_rules/tests/no-it-screenshot-only-or-repeat.test.ts +0 -34
- package/scripts/eslint_rules/tests/no-screenshot-test-outside-perf-panel.test.ts +0 -99
- package/scripts/eslint_rules/tests/screenshot-assertion-in-it-screenshot.test.ts +0 -79
- package/scripts/eslint_rules/tests/single-screenshot-assertion-per-test.test.ts +0 -97
- package/scripts/tools/update_goldens_unittest.py +0 -88
- package/scripts/tools/update_goldens_v2.py +0 -68
- package/scripts/watch_build.js +0 -230
- /package/front_end/panels/recorder/models/{RecorderShorcutHelper.test.ts → RecorderShortcutHelper.test.ts} +0 -0
@@ -43,13 +43,16 @@ import * as Platform from '../../core/platform/platform.js';
|
|
43
43
|
import * as Root from '../../core/root/root.js';
|
44
44
|
import * as SDK from '../../core/sdk/sdk.js';
|
45
45
|
import type * as Protocol from '../../generated/protocol.js';
|
46
|
+
import * as AiAssistanceModel from '../../models/ai_assistance/ai_assistance.js';
|
46
47
|
import * as CrUXManager from '../../models/crux-manager/crux-manager.js';
|
48
|
+
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
47
49
|
import * as Trace from '../../models/trace/trace.js';
|
48
50
|
import * as Workspace from '../../models/workspace/workspace.js';
|
49
51
|
import * as TraceBounds from '../../services/trace_bounds/trace_bounds.js';
|
50
52
|
import * as Adorners from '../../ui/components/adorners/adorners.js';
|
51
53
|
import * as Dialogs from '../../ui/components/dialogs/dialogs.js';
|
52
54
|
import * as LegacyWrapper from '../../ui/components/legacy_wrapper/legacy_wrapper.js';
|
55
|
+
import * as Snackbars from '../../ui/components/snackbars/snackbars.js';
|
53
56
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
54
57
|
import * as UI from '../../ui/legacy/legacy.js';
|
55
58
|
import * as ThemeSupport from '../../ui/legacy/theme_support/theme_support.js';
|
@@ -61,11 +64,10 @@ import * as AnnotationHelpers from './AnnotationHelpers.js';
|
|
61
64
|
import {TraceLoadEvent} from './BenchmarkEvents.js';
|
62
65
|
import * as TimelineComponents from './components/components.js';
|
63
66
|
import * as TimelineInsights from './components/insights/insights.js';
|
64
|
-
import {Tracker} from './FreshRecording.js';
|
65
67
|
import {IsolateSelector} from './IsolateSelector.js';
|
66
68
|
import {AnnotationModifiedEvent, ModificationsManager} from './ModificationsManager.js';
|
67
69
|
import * as Overlays from './overlays/overlays.js';
|
68
|
-
import {
|
70
|
+
import {traceJsonGenerator} from './SaveFileFormatter.js';
|
69
71
|
import {StatusDialog} from './StatusDialog.js';
|
70
72
|
import {type Client, TimelineController} from './TimelineController.js';
|
71
73
|
import {Tab} from './TimelineDetailsView.js';
|
@@ -83,164 +85,155 @@ import {
|
|
83
85
|
type TimelineSelection,
|
84
86
|
} from './TimelineSelection.js';
|
85
87
|
import {TimelineUIUtils} from './TimelineUIUtils.js';
|
88
|
+
import {createHiddenTracksOverlay} from './TrackConfigBanner.js';
|
86
89
|
import {UIDevtoolsController} from './UIDevtoolsController.js';
|
87
90
|
import {UIDevtoolsUtils} from './UIDevtoolsUtils.js';
|
88
91
|
import * as Utils from './utils/utils.js';
|
89
92
|
|
90
93
|
const UIStrings = {
|
91
94
|
/**
|
92
|
-
|
95
|
+
* @description Text that appears when user drag and drop something (for example, a file) in Timeline Panel of the Performance panel
|
93
96
|
*/
|
94
|
-
dropTimelineFileOrUrlHere: 'Drop
|
97
|
+
dropTimelineFileOrUrlHere: 'Drop trace file or URL here',
|
98
|
+
/**
|
99
|
+
* @description Title of disable capture jsprofile setting in timeline panel of the performance panel
|
100
|
+
*/
|
101
|
+
disableJavascriptSamples: 'Disable JavaScript samples',
|
95
102
|
/**
|
96
103
|
*@description Title of capture layers and pictures setting in timeline panel of the performance panel
|
97
104
|
*/
|
98
105
|
enableAdvancedPaint: 'Enable advanced paint instrumentation (slow)',
|
99
106
|
/**
|
100
|
-
|
107
|
+
* @description Title of CSS selector stats setting in timeline panel of the performance panel
|
101
108
|
*/
|
102
109
|
enableSelectorStats: 'Enable CSS selector stats (slow)',
|
103
110
|
/**
|
104
|
-
|
111
|
+
* @description Title of show screenshots setting in timeline panel of the performance panel
|
105
112
|
*/
|
106
113
|
screenshots: 'Screenshots',
|
107
114
|
/**
|
108
|
-
|
115
|
+
* @description Text for the memory of the page
|
109
116
|
*/
|
110
117
|
memory: 'Memory',
|
111
118
|
/**
|
112
|
-
|
119
|
+
* @description Text to clear content
|
113
120
|
*/
|
114
121
|
clear: 'Clear',
|
115
122
|
/**
|
116
|
-
|
123
|
+
* @description A label for a button that fixes something.
|
117
124
|
*/
|
118
125
|
fixMe: 'Fix me',
|
119
126
|
/**
|
120
|
-
|
121
|
-
*/
|
122
|
-
loadProfile: 'Load profile…',
|
123
|
-
/**
|
124
|
-
*@description Tooltip text that appears when hovering over the largeicon download button
|
125
|
-
*/
|
126
|
-
saveProfile: 'Save profile…',
|
127
|
-
/**
|
128
|
-
*@description An option to save trace with annotations that appears in the menu of the toolbar download button. This is the expected default option, therefore it does not mention annotations.
|
129
|
-
*/
|
130
|
-
saveTraceWithAnnotationsMenuOption: 'Save trace',
|
131
|
-
/**
|
132
|
-
*@description An option to save trace without annotations that appears in the menu of the toolbar download button
|
127
|
+
* @description Tooltip text that appears when hovering over the largeicon load button
|
133
128
|
*/
|
134
|
-
|
129
|
+
loadTrace: 'Load trace…',
|
135
130
|
/**
|
136
|
-
|
131
|
+
* @description Text to take screenshots
|
137
132
|
*/
|
138
133
|
captureScreenshots: 'Capture screenshots',
|
139
134
|
/**
|
140
|
-
|
135
|
+
* @description Text in Timeline Panel of the Performance panel
|
141
136
|
*/
|
142
137
|
showMemoryTimeline: 'Show memory timeline',
|
143
138
|
/**
|
144
|
-
|
139
|
+
* @description Tooltip text that appears when hovering over the largeicon settings gear in show settings pane setting in timeline panel of the performance panel
|
145
140
|
*/
|
146
141
|
captureSettings: 'Capture settings',
|
142
|
+
/**
|
143
|
+
* @description Text in Timeline Panel of the Performance panel
|
144
|
+
*/
|
145
|
+
disablesJavascriptSampling: 'Disables JavaScript sampling, reduces overhead when running against mobile devices',
|
147
146
|
/**
|
148
147
|
*@description Text in Timeline Panel of the Performance panel
|
149
148
|
*/
|
150
149
|
capturesAdvancedPaint: 'Captures advanced paint instrumentation, introduces significant performance overhead',
|
151
150
|
/**
|
152
|
-
|
151
|
+
* @description Text in Timeline Panel of the Performance panel
|
153
152
|
*/
|
154
153
|
capturesSelectorStats: 'Captures CSS selector statistics',
|
155
154
|
/**
|
156
|
-
|
155
|
+
* @description Text in Timeline Panel of the Performance panel
|
157
156
|
*/
|
158
157
|
network: 'Network:',
|
159
158
|
/**
|
160
|
-
|
159
|
+
* @description Text in Timeline Panel of the Performance panel
|
161
160
|
*/
|
162
161
|
cpu: 'CPU:',
|
163
162
|
/**
|
164
|
-
|
163
|
+
* @description Title of the 'Network conditions' tool in the bottom drawer
|
165
164
|
*/
|
166
165
|
networkConditions: 'Network conditions',
|
167
166
|
/**
|
168
|
-
|
167
|
+
* @description Text in Timeline Panel of the Performance panel
|
169
168
|
*/
|
170
169
|
CpuThrottlingIsEnabled: '- CPU throttling is enabled',
|
171
170
|
/**
|
172
|
-
|
171
|
+
* @description Text in Timeline Panel of the Performance panel
|
173
172
|
*/
|
174
173
|
NetworkThrottlingIsEnabled: '- Network throttling is enabled',
|
175
174
|
/**
|
176
|
-
|
175
|
+
* @description Text in Timeline Panel of the Performance panel
|
177
176
|
*/
|
178
177
|
SignificantOverheadDueToPaint: '- Significant overhead due to paint instrumentation',
|
179
178
|
/**
|
180
|
-
|
179
|
+
* @description Text in Timeline Panel of the Performance panel
|
181
180
|
*/
|
182
181
|
SelectorStatsEnabled: '- Selector stats is enabled',
|
182
|
+
/**
|
183
|
+
* @description Text in Timeline Panel of the Performance panel
|
184
|
+
*/
|
185
|
+
JavascriptSamplingIsDisabled: '- JavaScript sampling is disabled',
|
183
186
|
/**
|
184
187
|
*@description Text in Timeline Panel of the Performance panel
|
185
188
|
*/
|
186
189
|
stoppingTimeline: 'Stopping timeline…',
|
187
190
|
/**
|
188
|
-
|
191
|
+
* @description Text in Timeline Panel of the Performance panel
|
189
192
|
*/
|
190
193
|
received: 'Received',
|
191
194
|
/**
|
192
|
-
|
195
|
+
* @description Text in Timeline Panel of the Performance panel
|
193
196
|
*/
|
194
197
|
processed: 'Processed',
|
195
198
|
/**
|
196
|
-
|
199
|
+
* @description Text to close something
|
197
200
|
*/
|
198
201
|
close: 'Close',
|
199
202
|
/**
|
200
|
-
|
203
|
+
* @description Status text to indicate the recording has failed in the Performance panel
|
201
204
|
*/
|
202
205
|
recordingFailed: 'Recording failed',
|
203
206
|
/**
|
204
|
-
|
207
|
+
* @description Status text to indicate that exporting the trace has failed
|
205
208
|
*/
|
206
209
|
exportingFailed: 'Exporting the trace failed',
|
207
210
|
/**
|
208
|
-
* @description Text to indicate the progress of a
|
209
|
-
* creating a
|
211
|
+
* @description Text to indicate the progress of a trace. Informs the user that we are currently
|
212
|
+
* creating a performance trace.
|
210
213
|
*/
|
211
|
-
|
214
|
+
tracing: 'Tracing…',
|
212
215
|
/**
|
213
|
-
|
216
|
+
* @description Text in Timeline Panel of the Performance panel
|
214
217
|
*/
|
215
218
|
bufferUsage: 'Buffer usage',
|
216
219
|
/**
|
217
|
-
|
218
|
-
*/
|
219
|
-
loadingProfile: 'Loading profile…',
|
220
|
-
/**
|
221
|
-
*@description Text in Timeline Panel of the Performance panel
|
222
|
-
*/
|
223
|
-
processingProfile: 'Processing profile…',
|
224
|
-
/**
|
225
|
-
*@description Text in Timeline Panel of the Performance panel
|
220
|
+
* @description Text in Timeline Panel of the Performance panel
|
226
221
|
*/
|
227
|
-
|
222
|
+
loadingTrace: 'Loading trace…',
|
228
223
|
/**
|
229
|
-
*
|
230
|
-
* @description Text for exporting basic traces
|
224
|
+
* @description Text in Timeline Panel of the Performance panel
|
231
225
|
*/
|
232
|
-
|
226
|
+
processingTrace: 'Processing trace…',
|
233
227
|
/**
|
234
|
-
*
|
235
|
-
* @description Text for exporting enhanced traces
|
228
|
+
* @description Text in Timeline Panel of the Performance panel
|
236
229
|
*/
|
237
|
-
|
230
|
+
initializingTracing: 'Initializing tracing…',
|
238
231
|
/**
|
239
|
-
|
232
|
+
* @description Tooltip description for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
|
240
233
|
*/
|
241
234
|
showDataAddedByExtensions: 'Show data added by extensions of the Performance panel',
|
242
235
|
/**
|
243
|
-
Label for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
|
236
|
+
* Label for a checkbox that toggles the visibility of data added by extensions of this panel (Performance).
|
244
237
|
*/
|
245
238
|
showCustomtracks: 'Show custom tracks',
|
246
239
|
|
@@ -274,7 +267,7 @@ const UIStrings = {
|
|
274
267
|
*/
|
275
268
|
eventSelected: 'Event {PH1} selected',
|
276
269
|
/**
|
277
|
-
|
270
|
+
* @description Text of a hyperlink to documentation.
|
278
271
|
*/
|
279
272
|
learnMore: 'Learn more',
|
280
273
|
/**
|
@@ -300,7 +293,11 @@ const UIStrings = {
|
|
300
293
|
/**
|
301
294
|
* @description Title of the shortcuts dialog shown to the user that lists keyboard shortcuts.
|
302
295
|
*/
|
303
|
-
shortcutsDialogTitle: 'Keyboard shortcuts for flamechart'
|
296
|
+
shortcutsDialogTitle: 'Keyboard shortcuts for flamechart',
|
297
|
+
/**
|
298
|
+
* @description Notification shown to the user whenever DevTools receives an external request.
|
299
|
+
*/
|
300
|
+
externalRequestReceived: '`DevTools` received an external request',
|
304
301
|
} as const;
|
305
302
|
const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelinePanel.ts', UIStrings);
|
306
303
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
@@ -322,6 +319,7 @@ type ViewMode = {
|
|
322
319
|
}|{
|
323
320
|
mode: 'VIEWING_TRACE',
|
324
321
|
traceIndex: number,
|
322
|
+
forceOpenSidebar: boolean,
|
325
323
|
}|{
|
326
324
|
mode: 'STATUS_PANE_OVERLAY',
|
327
325
|
};
|
@@ -336,6 +334,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
336
334
|
private readonly toggleRecordAction: UI.ActionRegistration.Action;
|
337
335
|
private readonly recordReloadAction: UI.ActionRegistration.Action;
|
338
336
|
readonly #historyManager: TimelineHistoryManager;
|
337
|
+
private disableCaptureJSProfileSetting: Common.Settings.Setting<boolean>;
|
339
338
|
private readonly captureLayersAndPicturesSetting: Common.Settings.Setting<boolean>;
|
340
339
|
private readonly captureSelectorStatsSetting: Common.Settings.Setting<boolean>;
|
341
340
|
readonly #thirdPartyTracksSetting: Common.Settings.Setting<boolean>;
|
@@ -349,6 +348,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
349
348
|
readonly #dimThirdPartiesSetting: Common.Settings.Setting<boolean>|null = null;
|
350
349
|
#thirdPartyCheckbox: UI.Toolbar.ToolbarSettingCheckbox|null = null;
|
351
350
|
|
351
|
+
#onAnnotationModifiedEventBound = this.#onAnnotationModifiedEvent.bind(this);
|
352
|
+
|
352
353
|
/**
|
353
354
|
* We get given any filters for a new trace when it is recorded/imported.
|
354
355
|
* Because the user can then use the dropdown to navigate to another trace,
|
@@ -376,14 +377,15 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
376
377
|
private cpuProfiler!: SDK.CPUProfilerModel.CPUProfilerModel|null;
|
377
378
|
private clearButton!: UI.Toolbar.ToolbarButton;
|
378
379
|
private loadButton!: UI.Toolbar.ToolbarButton;
|
379
|
-
private saveButton!: UI.Toolbar.ToolbarButton|UI.Toolbar.ToolbarMenuButton;
|
380
|
+
private saveButton!: UI.Toolbar.ToolbarButton|UI.Toolbar.ToolbarMenuButton|UI.Toolbar.ToolbarItem;
|
380
381
|
private homeButton?: UI.Toolbar.ToolbarButton;
|
382
|
+
private askAiButton?: UI.Toolbar.ToolbarButton;
|
381
383
|
private statusDialog: StatusDialog|null = null;
|
382
384
|
private landingPage!: UI.Widget.Widget;
|
383
385
|
private loader?: TimelineLoader;
|
384
386
|
private showScreenshotsToolbarCheckbox?: UI.Toolbar.ToolbarItem;
|
385
387
|
private showMemoryToolbarCheckbox?: UI.Toolbar.ToolbarItem;
|
386
|
-
private networkThrottlingSelect?: MobileThrottling.
|
388
|
+
private networkThrottlingSelect?: MobileThrottling.NetworkThrottlingSelector.NetworkThrottlingSelect;
|
387
389
|
private cpuThrottlingSelect?: MobileThrottling.ThrottlingManager.CPUThrottlingSelectorWrapper;
|
388
390
|
private fileSelectorElement?: HTMLInputElement;
|
389
391
|
private selection: TimelineSelection|null = null;
|
@@ -403,27 +405,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
403
405
|
);
|
404
406
|
|
405
407
|
#sideBar = new TimelineComponents.Sidebar.SidebarWidget();
|
406
|
-
/**
|
407
|
-
* Rather than auto-pop the sidebar every time the user records a trace,
|
408
|
-
* which could get annoying, we instead persist the state of the sidebar
|
409
|
-
* visibility to a setting so it's restored across sessions.
|
410
|
-
* However, sometimes we have to automatically hide the sidebar, like when a
|
411
|
-
* trace recording is happening, or the user is on the landing page. In those
|
412
|
-
* times, we toggle this flag to true. Then, when we enter the VIEWING_TRACE
|
413
|
-
* mode, we check this flag and pop the sidebar open if it's set to true.
|
414
|
-
* Longer term a better fix here would be to divide the 3 UI screens
|
415
|
-
* (status pane, landing page, trace view) into distinct components /
|
416
|
-
* widgets, to avoid this complexity.
|
417
|
-
*/
|
418
|
-
#restoreSidebarVisibilityOnTraceLoad = false;
|
419
|
-
|
420
|
-
/**
|
421
|
-
* Used to track an aria announcement that we need to alert for
|
422
|
-
* screen-readers. We track these because we debounce announcements to not
|
423
|
-
* overwhelm.
|
424
|
-
*/
|
425
|
-
#pendingAriaMessage: string|null = null;
|
426
|
-
|
427
408
|
#eventToRelatedInsights: TimelineComponents.RelatedInsightChips.EventToRelatedInsightsMap = new Map();
|
428
409
|
#shortcutsDialog: Dialogs.ShortcutDialog.ShortcutDialog = new Dialogs.ShortcutDialog.ShortcutDialog();
|
429
410
|
/**
|
@@ -443,6 +424,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
443
424
|
'flamechart-selected-navigation', 'Classic - scroll to zoom', 'timeline.select-classic-navigation');
|
444
425
|
|
445
426
|
#onMainEntryHovered: (event: Common.EventTarget.EventTargetEvent<number>) => void;
|
427
|
+
#hiddenTracksInfoBarPerTrace = new WeakMap<Trace.Handlers.Types.ParsedTrace, UI.Infobar.Infobar|'DISMISSED'>();
|
446
428
|
|
447
429
|
constructor(traceModel?: Trace.TraceModel.Model) {
|
448
430
|
super('timeline');
|
@@ -480,6 +462,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
480
462
|
|
481
463
|
this.traceLoadStart = null;
|
482
464
|
|
465
|
+
this.disableCaptureJSProfileSetting = Common.Settings.Settings.instance().createSetting(
|
466
|
+
'timeline-disable-js-sampling', false, Common.Settings.SettingStorageType.SESSION);
|
467
|
+
this.disableCaptureJSProfileSetting.setTitle(i18nString(UIStrings.disableJavascriptSamples));
|
483
468
|
this.captureLayersAndPicturesSetting = Common.Settings.Settings.instance().createSetting(
|
484
469
|
'timeline-capture-layers-and-pictures', false, Common.Settings.SettingStorageType.SESSION);
|
485
470
|
this.captureLayersAndPicturesSetting.setTitle(i18nString(UIStrings.enableAdvancedPaint));
|
@@ -514,7 +499,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
514
499
|
this.panelToolbar.wrappable = true;
|
515
500
|
this.panelRightToolbar = timelineToolbarContainer.createChild('devtools-toolbar');
|
516
501
|
this.panelRightToolbar.role = 'presentation';
|
517
|
-
if (!isNode) {
|
502
|
+
if (!isNode && this.canRecord()) {
|
518
503
|
this.createSettingsPane();
|
519
504
|
this.updateShowSettingsToolbarButton();
|
520
505
|
}
|
@@ -621,6 +606,14 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
621
606
|
this.flameChart.revealAnnotation(event.annotation);
|
622
607
|
});
|
623
608
|
|
609
|
+
this.#sideBar.element.addEventListener(TimelineComponents.Sidebar.HoverAnnotation.eventName, event => {
|
610
|
+
this.flameChart.hoverAnnotationInSidebar(event.annotation);
|
611
|
+
});
|
612
|
+
|
613
|
+
this.#sideBar.element.addEventListener(TimelineComponents.Sidebar.AnnotationHoverOut.eventName, () => {
|
614
|
+
this.flameChart.sidebarAnnotationHoverOut();
|
615
|
+
});
|
616
|
+
|
624
617
|
this.#sideBar.element.addEventListener(TimelineInsights.SidebarInsight.InsightSetHovered.eventName, event => {
|
625
618
|
if (event.bounds) {
|
626
619
|
this.#minimapComponent.highlightBounds(event.bounds, /* withBracket */ true);
|
@@ -686,7 +679,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
686
679
|
|
687
680
|
/**
|
688
681
|
* This disables the 3P checkbox in the toolbar.
|
689
|
-
* If the checkbox was checked, we flip it to indeterminiate to communicate it doesn't currently apply.
|
682
|
+
* If the checkbox was checked, we flip it to indeterminiate to communicate it doesn't currently apply.
|
683
|
+
*/
|
690
684
|
set3PCheckboxDisabled(disabled: boolean): void {
|
691
685
|
this.#thirdPartyCheckbox?.applyEnabledState(!disabled);
|
692
686
|
if (this.#dimThirdPartiesSetting?.get()) {
|
@@ -759,7 +753,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
759
753
|
#onFieldDataChanged(): void {
|
760
754
|
const recs = Utils.Helpers.getThrottlingRecommendations();
|
761
755
|
this.cpuThrottlingSelect?.updateRecommendedOption(recs.cpuOption);
|
762
|
-
this.networkThrottlingSelect
|
756
|
+
if (this.networkThrottlingSelect) {
|
757
|
+
this.networkThrottlingSelect.recommendedConditions = recs.networkConditions;
|
758
|
+
}
|
763
759
|
}
|
764
760
|
|
765
761
|
loadFromEvents(events: Trace.Types.Events.Event[]): void {
|
@@ -782,10 +778,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
782
778
|
return this.flameChart;
|
783
779
|
}
|
784
780
|
|
785
|
-
getMinimap(): TimelineMiniMap {
|
786
|
-
return this.#minimapComponent;
|
787
|
-
}
|
788
|
-
|
789
781
|
/**
|
790
782
|
* Determine if two view modes are equivalent. Useful because if {@see
|
791
783
|
* #changeView} gets called and the new mode is identical to the current,
|
@@ -846,6 +838,14 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
846
838
|
// Store any modifications (e.g. annotations) that the user has created
|
847
839
|
// on the current trace before we move away to a new view.
|
848
840
|
this.#saveModificationsForActiveTrace();
|
841
|
+
|
842
|
+
// No need to listen to annotation events, they cannot occur on non
|
843
|
+
// visible traces. When a trace is made visible, this listener is added
|
844
|
+
// back.
|
845
|
+
const manager = ModificationsManager.activeManager();
|
846
|
+
if (manager) {
|
847
|
+
manager.removeEventListener(AnnotationModifiedEvent.eventName, this.#onAnnotationModifiedEventBound);
|
848
|
+
}
|
849
849
|
}
|
850
850
|
|
851
851
|
this.#viewMode = newMode;
|
@@ -876,6 +876,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
876
876
|
case 'LANDING_PAGE': {
|
877
877
|
this.#removeStatusPane();
|
878
878
|
this.#showLandingPage();
|
879
|
+
this.updateMiniMap();
|
879
880
|
this.dispatchEventToListeners(Events.IS_VIEWING_TRACE, false);
|
880
881
|
|
881
882
|
// Whilst we don't reset this, we hide it, mainly so the user cannot
|
@@ -888,9 +889,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
888
889
|
this.#hideLandingPage();
|
889
890
|
this.#setModelForActiveTrace();
|
890
891
|
this.#removeStatusPane();
|
891
|
-
|
892
|
+
if (newMode.forceOpenSidebar) {
|
893
|
+
this.#showSidebar();
|
894
|
+
}
|
892
895
|
this.flameChart.dimThirdPartiesIfRequired();
|
893
896
|
this.dispatchEventToListeners(Events.IS_VIEWING_TRACE, true);
|
897
|
+
|
894
898
|
return;
|
895
899
|
}
|
896
900
|
|
@@ -918,6 +922,13 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
918
922
|
return null;
|
919
923
|
}
|
920
924
|
|
925
|
+
/**
|
926
|
+
* Exposed for handling external requests.
|
927
|
+
*/
|
928
|
+
get model(): Trace.TraceModel.Model {
|
929
|
+
return this.#traceEngineModel;
|
930
|
+
}
|
931
|
+
|
921
932
|
/**
|
922
933
|
* NOTE: this method only exists to enable some layout tests to be migrated to the new engine.
|
923
934
|
* DO NOT use this method within DevTools. It is marked as deprecated so
|
@@ -982,14 +993,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
982
993
|
this.updateTimelineControls();
|
983
994
|
}
|
984
995
|
|
985
|
-
/**
|
986
|
-
* This indicates that `this.#setModelForActiveTrace` has been called,
|
987
|
-
* and so the main flame chart should have been populated.
|
988
|
-
*/
|
989
|
-
hasFinishedLoadingTraceForTest(): boolean {
|
990
|
-
return this.#viewMode.mode === 'VIEWING_TRACE';
|
991
|
-
}
|
992
|
-
|
993
996
|
private createSettingCheckbox(setting: Common.Settings.Setting<boolean>, tooltip: Platform.UIString.LocalizedString):
|
994
997
|
UI.Toolbar.ToolbarSettingCheckbox {
|
995
998
|
const checkboxItem = new UI.Toolbar.ToolbarSettingCheckbox(setting, tooltip);
|
@@ -1013,93 +1016,86 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1013
1016
|
this.panelToolbar.removeToolbarItem(this.#sidebarToggleButton);
|
1014
1017
|
}
|
1015
1018
|
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
jslogContext: annotationsExist ? 'timeline.save-to-file-with-annotations' :
|
1026
|
-
'timeline.save-to-file-without-annotations',
|
1027
|
-
});
|
1019
|
+
/**
|
1020
|
+
* Returns false if this was loaded in a standalone context such that recording is
|
1021
|
+
* not possible, like an enhanced trace (which opens a new devtools window) or
|
1022
|
+
* trace.cafe.
|
1023
|
+
*/
|
1024
|
+
private canRecord(): boolean {
|
1025
|
+
// TODO(paulirish) Determine a more robust method as checking `primaryPageTarget()?.sessionId` isn't accurate.
|
1026
|
+
return true;
|
1027
|
+
}
|
1028
1028
|
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
void this.saveToFile({
|
1033
|
-
savingEnhancedTrace: false,
|
1034
|
-
addModifications: false,
|
1035
|
-
});
|
1036
|
-
}, {
|
1037
|
-
jslogContext: 'timeline.save-to-file-without-annotations',
|
1038
|
-
});
|
1029
|
+
private shouldEnableFullAskAI(): boolean {
|
1030
|
+
if (!Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_ASK_AI_FULL_BUTTON)) {
|
1031
|
+
return false;
|
1039
1032
|
}
|
1033
|
+
|
1034
|
+
if (Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue ===
|
1035
|
+
Root.Runtime.GenAiEnterprisePolicyValue.DISABLE) {
|
1036
|
+
return false;
|
1037
|
+
}
|
1038
|
+
|
1039
|
+
return true;
|
1040
1040
|
}
|
1041
1041
|
|
1042
1042
|
private populateToolbar(): void {
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1043
|
+
const canRecord = this.canRecord();
|
1044
|
+
|
1045
|
+
if (canRecord || isNode) {
|
1046
|
+
this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.toggleRecordAction));
|
1047
|
+
}
|
1048
|
+
if (canRecord) {
|
1049
|
+
this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(this.recordReloadAction));
|
1050
|
+
}
|
1051
|
+
|
1046
1052
|
this.clearButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clear), 'clear', undefined, 'timeline.clear');
|
1047
1053
|
this.clearButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => this.onClearButton());
|
1048
1054
|
this.panelToolbar.appendToolbarItem(this.clearButton);
|
1049
1055
|
|
1050
|
-
// Load /
|
1056
|
+
// Load / Save
|
1051
1057
|
this.loadButton =
|
1052
|
-
new UI.Toolbar.ToolbarButton(i18nString(UIStrings.
|
1058
|
+
new UI.Toolbar.ToolbarButton(i18nString(UIStrings.loadTrace), 'import', undefined, 'timeline.load-from-file');
|
1053
1059
|
this.loadButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
|
1054
1060
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.PerfPanelTraceImported);
|
1055
1061
|
this.selectFileToLoad();
|
1056
1062
|
});
|
1057
1063
|
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
event.preventDefault();
|
1065
|
-
event.stopPropagation();
|
1066
|
-
|
1067
|
-
if (event.ctrlKey || event.button === 2) {
|
1068
|
-
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
1069
|
-
contextMenu.saveSection().appendItem(i18nString(UIStrings.exportNormalTraces), () => {
|
1070
|
-
void this.saveToFile({savingEnhancedTrace: false, addModifications: false});
|
1071
|
-
});
|
1072
|
-
contextMenu.saveSection().appendItem(i18nString(UIStrings.exportEnhancedTraces), () => {
|
1073
|
-
void this.saveToFile({savingEnhancedTrace: true, addModifications: false});
|
1074
|
-
});
|
1075
|
-
|
1076
|
-
void contextMenu.show();
|
1077
|
-
} else {
|
1078
|
-
void this.saveToFile({savingEnhancedTrace: false, addModifications: false});
|
1079
|
-
}
|
1080
|
-
});
|
1081
|
-
}
|
1064
|
+
const exportTraceOptions = new TimelineComponents.ExportTraceOptions.ExportTraceOptions();
|
1065
|
+
exportTraceOptions.data = {
|
1066
|
+
onExport: this.saveToFile.bind(this),
|
1067
|
+
buttonEnabled: this.state === State.IDLE && this.#hasActiveTrace(),
|
1068
|
+
};
|
1069
|
+
this.saveButton = new UI.Toolbar.ToolbarItem(exportTraceOptions);
|
1082
1070
|
|
1083
1071
|
this.panelToolbar.appendSeparator();
|
1084
1072
|
this.panelToolbar.appendToolbarItem(this.loadButton);
|
1085
1073
|
this.panelToolbar.appendToolbarItem(this.saveButton);
|
1086
1074
|
|
1087
|
-
|
1088
|
-
|
1075
|
+
if (canRecord) {
|
1076
|
+
this.panelToolbar.appendSeparator();
|
1089
1077
|
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1078
|
+
if (!isNode) {
|
1079
|
+
this.homeButton = new UI.Toolbar.ToolbarButton(
|
1080
|
+
i18nString(UIStrings.backToLiveMetrics), 'home', undefined, 'timeline.back-to-live-metrics');
|
1081
|
+
this.homeButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
|
1082
|
+
this.#changeView({mode: 'LANDING_PAGE'});
|
1083
|
+
this.#historyManager.navigateToLandingPage();
|
1084
|
+
});
|
1085
|
+
this.panelToolbar.appendToolbarItem(this.homeButton);
|
1086
|
+
this.panelToolbar.appendSeparator();
|
1087
|
+
}
|
1088
|
+
}
|
1089
|
+
|
1090
|
+
if (this.shouldEnableFullAskAI()) {
|
1091
|
+
this.askAiButton = new UI.Toolbar.ToolbarButton('Ask AI', 'button-magic', undefined, 'timeline.ask-ai');
|
1092
|
+
this.askAiButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.#onClickAskAIButton.bind(this));
|
1093
|
+
this.panelToolbar.appendToolbarItem(this.askAiButton);
|
1098
1094
|
this.panelToolbar.appendSeparator();
|
1099
1095
|
}
|
1100
1096
|
|
1097
|
+
// TODO(crbug.com/337909145): need to hide "Live metrics" option if !canRecord.
|
1101
1098
|
this.panelToolbar.appendToolbarItem(this.#historyManager.button());
|
1102
|
-
this.panelToolbar.appendSeparator();
|
1103
1099
|
|
1104
1100
|
// View
|
1105
1101
|
this.panelToolbar.appendSeparator();
|
@@ -1111,10 +1107,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1111
1107
|
|
1112
1108
|
this.showMemoryToolbarCheckbox =
|
1113
1109
|
this.createSettingCheckbox(this.showMemorySetting, i18nString(UIStrings.showMemoryTimeline));
|
1114
|
-
this.panelToolbar.appendToolbarItem(this.showMemoryToolbarCheckbox);
|
1115
1110
|
|
1116
|
-
|
1117
|
-
|
1111
|
+
if (canRecord) {
|
1112
|
+
// GC
|
1113
|
+
this.panelToolbar.appendToolbarItem(this.showMemoryToolbarCheckbox);
|
1114
|
+
this.panelToolbar.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton('components.collect-garbage'));
|
1115
|
+
}
|
1118
1116
|
|
1119
1117
|
// Ignore list setting
|
1120
1118
|
this.panelToolbar.appendSeparator();
|
@@ -1136,12 +1134,49 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1136
1134
|
}
|
1137
1135
|
|
1138
1136
|
// Settings
|
1139
|
-
if (!isNode) {
|
1137
|
+
if (!isNode && canRecord) {
|
1140
1138
|
this.panelRightToolbar.appendSeparator();
|
1141
1139
|
this.panelRightToolbar.appendToolbarItem(this.showSettingsPaneButton);
|
1142
1140
|
}
|
1143
1141
|
}
|
1144
1142
|
|
1143
|
+
// Currently for debugging purposes only.
|
1144
|
+
#onClickAskAIButton(): void {
|
1145
|
+
const traceIndex = this.#activeTraceIndex();
|
1146
|
+
if (traceIndex === null) {
|
1147
|
+
return;
|
1148
|
+
}
|
1149
|
+
|
1150
|
+
const parsedTrace = this.#traceEngineModel.parsedTrace(traceIndex);
|
1151
|
+
if (parsedTrace === null) {
|
1152
|
+
return;
|
1153
|
+
}
|
1154
|
+
|
1155
|
+
const insights = this.#traceEngineModel.traceInsights(traceIndex);
|
1156
|
+
if (insights === null) {
|
1157
|
+
return;
|
1158
|
+
}
|
1159
|
+
|
1160
|
+
const traceMetadata = this.#traceEngineModel.metadata(traceIndex);
|
1161
|
+
if (traceMetadata === null) {
|
1162
|
+
return;
|
1163
|
+
}
|
1164
|
+
|
1165
|
+
const actionId = 'drjones.performance-panel-full-context';
|
1166
|
+
if (!UI.ActionRegistry.ActionRegistry.instance().hasAction(actionId)) {
|
1167
|
+
return;
|
1168
|
+
}
|
1169
|
+
|
1170
|
+
// Currently only support a single insight set.
|
1171
|
+
const insightSet = [...insights.values()].at(0) ?? null;
|
1172
|
+
const context = Utils.AIContext.AgentFocus.full(parsedTrace, insightSet, traceMetadata);
|
1173
|
+
UI.Context.Context.instance().setFlavor(Utils.AIContext.AgentFocus, context);
|
1174
|
+
|
1175
|
+
// Trigger the AI Assistance panel to open.
|
1176
|
+
const action = UI.ActionRegistry.ActionRegistry.instance().getAction(actionId);
|
1177
|
+
void action.execute();
|
1178
|
+
}
|
1179
|
+
|
1145
1180
|
#setupNavigationSetting(): HTMLElement {
|
1146
1181
|
const currentNavSetting = Common.Settings.moduleSetting('flamechart-selected-navigation').get();
|
1147
1182
|
const hideTheDialogForTests: string|null = localStorage.getItem('hide-shortcuts-dialog-for-test');
|
@@ -1260,6 +1295,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1260
1295
|
this);
|
1261
1296
|
SDK.CPUThrottlingManager.CPUThrottlingManager.instance().addEventListener(
|
1262
1297
|
SDK.CPUThrottlingManager.Events.RATE_CHANGED, this.updateShowSettingsToolbarButton, this);
|
1298
|
+
this.disableCaptureJSProfileSetting.addChangeListener(this.updateShowSettingsToolbarButton, this);
|
1263
1299
|
this.captureLayersAndPicturesSetting.addChangeListener(this.updateShowSettingsToolbarButton, this);
|
1264
1300
|
this.captureSelectorStatsSetting.addChangeListener(this.updateShowSettingsToolbarButton, this);
|
1265
1301
|
|
@@ -1272,16 +1308,20 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1272
1308
|
cpuThrottlingPane.append(this.cpuThrottlingSelect.control.element);
|
1273
1309
|
|
1274
1310
|
this.settingsPane.append(UI.SettingsUI.createSettingCheckbox(
|
1275
|
-
this.
|
1276
|
-
i18nString(UIStrings.
|
1311
|
+
this.captureSelectorStatsSetting.title(), this.captureSelectorStatsSetting,
|
1312
|
+
i18nString(UIStrings.capturesSelectorStats)));
|
1277
1313
|
|
1278
1314
|
const networkThrottlingPane = this.settingsPane.createChild('div');
|
1279
1315
|
networkThrottlingPane.append(i18nString(UIStrings.network));
|
1280
1316
|
networkThrottlingPane.append(this.createNetworkConditionsSelectToolbarItem().element);
|
1281
1317
|
|
1282
1318
|
this.settingsPane.append(UI.SettingsUI.createSettingCheckbox(
|
1283
|
-
this.
|
1284
|
-
i18nString(UIStrings.
|
1319
|
+
this.captureLayersAndPicturesSetting.title(), this.captureLayersAndPicturesSetting,
|
1320
|
+
i18nString(UIStrings.capturesAdvancedPaint)));
|
1321
|
+
|
1322
|
+
this.settingsPane.append(UI.SettingsUI.createSettingCheckbox(
|
1323
|
+
this.disableCaptureJSProfileSetting.title(), this.disableCaptureJSProfileSetting,
|
1324
|
+
i18nString(UIStrings.disablesJavascriptSampling)));
|
1285
1325
|
|
1286
1326
|
const thirdPartyCheckbox =
|
1287
1327
|
this.createSettingCheckbox(this.#thirdPartyTracksSetting, i18nString(UIStrings.showDataAddedByExtensions));
|
@@ -1299,10 +1339,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1299
1339
|
this.updateSettingsPaneVisibility();
|
1300
1340
|
}
|
1301
1341
|
|
1302
|
-
private createNetworkConditionsSelectToolbarItem(): UI.Toolbar.
|
1303
|
-
const toolbarItem = new UI.Toolbar.
|
1342
|
+
private createNetworkConditionsSelectToolbarItem(): UI.Toolbar.ToolbarItem {
|
1343
|
+
const toolbarItem = new UI.Toolbar.ToolbarItem(document.createElement('div'));
|
1304
1344
|
this.networkThrottlingSelect =
|
1305
|
-
MobileThrottling.
|
1345
|
+
MobileThrottling.NetworkThrottlingSelector.NetworkThrottlingSelect.createForGlobalConditions(
|
1346
|
+
toolbarItem.element, i18nString(UIStrings.networkConditions));
|
1306
1347
|
return toolbarItem;
|
1307
1348
|
}
|
1308
1349
|
|
@@ -1348,7 +1389,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1348
1389
|
* 3. Visual track configuration (re-ordering or hiding tracks).
|
1349
1390
|
*/
|
1350
1391
|
async saveToFile(config: {
|
1351
|
-
|
1392
|
+
includeScriptContent: boolean,
|
1393
|
+
includeSourceMaps: boolean,
|
1352
1394
|
addModifications: boolean,
|
1353
1395
|
}): Promise<void> {
|
1354
1396
|
if (this.state !== State.IDLE) {
|
@@ -1366,17 +1408,29 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1366
1408
|
return;
|
1367
1409
|
}
|
1368
1410
|
|
1411
|
+
// Grab the script mapping to be able to filter out by url.
|
1412
|
+
const mappedScriptsWithData = Trace.Handlers.ModelHandlers.Scripts.data().scripts;
|
1413
|
+
const scriptByIdMap = new Map<string, Trace.Handlers.ModelHandlers.Scripts.Script>();
|
1414
|
+
|
1415
|
+
for (const mapScript of mappedScriptsWithData) {
|
1416
|
+
scriptByIdMap.set(`${mapScript.isolate}.${mapScript.scriptId}`, mapScript);
|
1417
|
+
}
|
1418
|
+
|
1369
1419
|
const metadata = this.#traceEngineModel.metadata(this.#viewMode.traceIndex) ?? {};
|
1370
1420
|
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1421
|
+
traceEvents = traceEvents.map(event => {
|
1422
|
+
if (Trace.Types.Events.isAnyScriptCatchupEvent(event) && event.name !== 'StubScriptCatchup') {
|
1423
|
+
const mappedScript = scriptByIdMap.get(`${event.args.data.isolate}.${event.args.data.scriptId}`);
|
1424
|
+
|
1425
|
+
// If the checkbox to include script content is not checked or if it comes from and
|
1426
|
+
// extension we dont include the script content.
|
1427
|
+
if (!config.includeScriptContent ||
|
1428
|
+
(mappedScript?.url && Trace.Helpers.Trace.isExtensionUrl(mappedScript.url))) {
|
1376
1429
|
return {
|
1377
1430
|
cat: event.cat,
|
1378
1431
|
name: 'StubScriptCatchup',
|
1379
1432
|
ts: event.ts,
|
1433
|
+
dur: event.dur,
|
1380
1434
|
ph: event.ph,
|
1381
1435
|
pid: event.pid,
|
1382
1436
|
tid: event.tid,
|
@@ -1385,66 +1439,27 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1385
1439
|
},
|
1386
1440
|
} as Trace.Types.Events.V8SourceRundownSourcesStubScriptCatchupEvent;
|
1387
1441
|
}
|
1442
|
+
}
|
1388
1443
|
|
1389
|
-
|
1390
|
-
|
1391
|
-
}
|
1444
|
+
return event;
|
1445
|
+
});
|
1392
1446
|
|
1393
1447
|
metadata.modifications = config.addModifications ? ModificationsManager.activeManager()?.toJSON() : undefined;
|
1394
|
-
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
}
|
1403
|
-
metadata.enhancedTraceVersion =
|
1404
|
-
config.savingEnhancedTrace ? SDK.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion : undefined;
|
1405
|
-
|
1406
|
-
const traceStart = Platform.DateUtilities.toISO8601Compact(new Date());
|
1407
|
-
let fileName: Platform.DevToolsPath.RawPathString;
|
1408
|
-
if (metadata?.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE) {
|
1409
|
-
fileName = `CPU-${traceStart}.cpuprofile` as Platform.DevToolsPath.RawPathString;
|
1410
|
-
} else if (metadata?.enhancedTraceVersion) {
|
1411
|
-
fileName = `EnhancedTraces-${traceStart}.json` as Platform.DevToolsPath.RawPathString;
|
1412
|
-
} else {
|
1413
|
-
fileName = `Trace-${traceStart}.json` as Platform.DevToolsPath.RawPathString;
|
1414
|
-
}
|
1448
|
+
|
1449
|
+
// NOTE: we used to export the track configuration changes into the trace
|
1450
|
+
// file here.
|
1451
|
+
// We don't do this now because as of August 2025 (M141) track
|
1452
|
+
// configuration is persisted globally (not per trace). When a user imports
|
1453
|
+
// a trace, we don't look for any configuration (as we treat the user's
|
1454
|
+
// DevTools config as the canonical config), so it doesn't make sense to
|
1455
|
+
// export the config.
|
1415
1456
|
|
1416
1457
|
try {
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
return;
|
1423
|
-
}
|
1424
|
-
const profileEventData = profileEvent.args?.data;
|
1425
|
-
if (profileEventData.hasOwnProperty('cpuProfile')) {
|
1426
|
-
// TODO(crbug.com/1456799): Currently use a hack way because we can't differentiate
|
1427
|
-
// cpuprofile from trace events when loading a file.
|
1428
|
-
// The loader will directly add the fake trace created from CpuProfile to the tracingModel.
|
1429
|
-
// And there is where the old saving logic saves the cpuprofile.
|
1430
|
-
// This will be solved when the CPUProfileHandler is done. Then we can directly get it
|
1431
|
-
// from the new traceEngine
|
1432
|
-
const profile = (profileEventData as {cpuProfile: Protocol.Profiler.Profile}).cpuProfile;
|
1433
|
-
traceAsString = cpuprofileJsonGenerator(profile);
|
1434
|
-
}
|
1435
|
-
} else {
|
1436
|
-
const formattedTraceIter = traceJsonGenerator(traceEvents, {
|
1437
|
-
...metadata,
|
1438
|
-
sourceMaps: config.savingEnhancedTrace ? metadata?.sourceMaps : undefined,
|
1439
|
-
});
|
1440
|
-
traceAsString = Array.from(formattedTraceIter).join('');
|
1441
|
-
}
|
1442
|
-
if (!traceAsString) {
|
1443
|
-
throw new Error('Trace content empty');
|
1444
|
-
}
|
1445
|
-
await Workspace.FileManager.FileManager.instance().save(
|
1446
|
-
fileName, traceAsString, true /* forceSaveAs */, false /* isBase64 */);
|
1447
|
-
Workspace.FileManager.FileManager.instance().close(fileName);
|
1458
|
+
await this.innerSaveToFile(traceEvents, metadata, {
|
1459
|
+
includeScriptContent: config.includeScriptContent,
|
1460
|
+
includeSourceMaps: config.includeSourceMaps,
|
1461
|
+
addModifications: config.addModifications
|
1462
|
+
});
|
1448
1463
|
} catch (e) {
|
1449
1464
|
// We expect the error to be an Error class, but this deals with any weird case where it's not.
|
1450
1465
|
const error = e instanceof Error ? e : new Error(e);
|
@@ -1459,6 +1474,92 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1459
1474
|
}
|
1460
1475
|
}
|
1461
1476
|
|
1477
|
+
async innerSaveToFile(traceEvents: readonly Trace.Types.Events.Event[], metadata: Trace.Types.File.MetaData, config: {
|
1478
|
+
includeScriptContent: boolean,
|
1479
|
+
includeSourceMaps: boolean,
|
1480
|
+
addModifications: boolean,
|
1481
|
+
}): Promise<void> {
|
1482
|
+
// Base the filename on the trace's time of recording
|
1483
|
+
const isoDate =
|
1484
|
+
Platform.DateUtilities.toISO8601Compact(metadata.startTime ? new Date(metadata.startTime) : new Date());
|
1485
|
+
|
1486
|
+
const isCpuProfile = metadata.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE;
|
1487
|
+
const {includeScriptContent, includeSourceMaps} = config;
|
1488
|
+
metadata.enhancedTraceVersion =
|
1489
|
+
includeScriptContent ? SDK.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion : undefined;
|
1490
|
+
|
1491
|
+
let fileName = (isCpuProfile ? `CPU-${isoDate}.cpuprofile` :
|
1492
|
+
includeScriptContent ? `EnhancedTrace-${isoDate}.json` :
|
1493
|
+
`Trace-${isoDate}.json`) as Platform.DevToolsPath.RawPathString;
|
1494
|
+
|
1495
|
+
let blobParts: string[] = [];
|
1496
|
+
if (isCpuProfile) {
|
1497
|
+
const profile = Trace.Helpers.SamplesIntegrator.SamplesIntegrator.extractCpuProfileFromFakeTrace(traceEvents);
|
1498
|
+
blobParts = [JSON.stringify(profile)];
|
1499
|
+
} else {
|
1500
|
+
const filteredMetadataSourceMaps =
|
1501
|
+
includeScriptContent && includeSourceMaps ? this.#filterMetadataSourceMaps(metadata) : undefined;
|
1502
|
+
const formattedTraceIter = traceJsonGenerator(traceEvents, {
|
1503
|
+
...metadata,
|
1504
|
+
sourceMaps: filteredMetadataSourceMaps,
|
1505
|
+
});
|
1506
|
+
blobParts = Array.from(formattedTraceIter);
|
1507
|
+
}
|
1508
|
+
|
1509
|
+
if (!blobParts.length) {
|
1510
|
+
throw new Error('Trace content empty');
|
1511
|
+
}
|
1512
|
+
|
1513
|
+
let blob = new Blob(blobParts, {type: 'application/json'});
|
1514
|
+
|
1515
|
+
// TODO: Enable by default and connect with upcoming SaveDialog
|
1516
|
+
if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SAVE_AS_GZ)) {
|
1517
|
+
fileName = `${fileName}.gz` as Platform.DevToolsPath.RawPathString;
|
1518
|
+
const gzStream = Common.Gzip.compressStream(blob.stream());
|
1519
|
+
blob = await new Response(gzStream, {
|
1520
|
+
headers: {'Content-Type': 'application/gzip'},
|
1521
|
+
}).blob();
|
1522
|
+
|
1523
|
+
// At this point this should be true:
|
1524
|
+
// blobParts.join('') === (await gzBlob.arrayBuffer().then(bytes => Common.Gzip.arrayBufferToString(bytes)))
|
1525
|
+
}
|
1526
|
+
|
1527
|
+
// In some cases Base64.encode() can return undefined; see crbug.com/436482118 for details.
|
1528
|
+
// TODO(crbug.com/436482118): understand this edge case and fix the Base64.encode method to not just return undefined.
|
1529
|
+
let bytesAsB64: string|null = null;
|
1530
|
+
try {
|
1531
|
+
// The maximum string length in v8 is `2 ** 29 - 23`, aka 538 MB.
|
1532
|
+
// If the gzipped&base64-encoded trace is larger than that, this'll throw a RangeError.
|
1533
|
+
bytesAsB64 = await Common.Base64.encode(blob);
|
1534
|
+
} catch {
|
1535
|
+
}
|
1536
|
+
if (bytesAsB64?.length) {
|
1537
|
+
const contentData = new TextUtils.ContentData.ContentData(bytesAsB64, /* isBase64=*/ true, blob.type);
|
1538
|
+
await Workspace.FileManager.FileManager.instance().save(fileName, contentData, /* forceSaveAs=*/ true);
|
1539
|
+
Workspace.FileManager.FileManager.instance().close(fileName);
|
1540
|
+
} else {
|
1541
|
+
// Fallback scenario used in edge case where trace.gz.base64 is larger than 538 MB.
|
1542
|
+
const url = URL.createObjectURL(blob);
|
1543
|
+
const a = document.createElement('a');
|
1544
|
+
a.href = url;
|
1545
|
+
a.download = fileName;
|
1546
|
+
a.click();
|
1547
|
+
URL.revokeObjectURL(url);
|
1548
|
+
}
|
1549
|
+
}
|
1550
|
+
|
1551
|
+
#filterMetadataSourceMaps(metadata: Trace.Types.File.MetaData): Trace.Types.File.MetadataSourceMap[]|undefined {
|
1552
|
+
if (!metadata.sourceMaps) {
|
1553
|
+
return undefined;
|
1554
|
+
}
|
1555
|
+
|
1556
|
+
// extensions sourcemaps provide little to no-value for the exported trace
|
1557
|
+
// debugging, so they are filtered out.
|
1558
|
+
return metadata.sourceMaps.filter(value => {
|
1559
|
+
return value.url && Trace.Helpers.Trace.isExtensionUrl(value.url);
|
1560
|
+
});
|
1561
|
+
}
|
1562
|
+
|
1462
1563
|
#showExportTraceErrorDialog(error: Error): void {
|
1463
1564
|
if (this.statusDialog) {
|
1464
1565
|
this.statusDialog.remove();
|
@@ -1489,6 +1590,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1489
1590
|
this.#changeView({
|
1490
1591
|
mode: 'VIEWING_TRACE',
|
1491
1592
|
traceIndex: recordingData.parsedTraceIndex,
|
1593
|
+
forceOpenSidebar: false,
|
1492
1594
|
});
|
1493
1595
|
}
|
1494
1596
|
}
|
@@ -1502,6 +1604,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1502
1604
|
this.#changeView({
|
1503
1605
|
mode: 'VIEWING_TRACE',
|
1504
1606
|
traceIndex: recordingData.parsedTraceIndex,
|
1607
|
+
forceOpenSidebar: false,
|
1505
1608
|
});
|
1506
1609
|
}
|
1507
1610
|
return true;
|
@@ -1527,25 +1630,20 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1527
1630
|
if (this.state !== State.IDLE) {
|
1528
1631
|
return;
|
1529
1632
|
}
|
1530
|
-
|
1531
|
-
|
1532
|
-
// characters of the trace file if the given trace file is enhanced traces.
|
1533
|
-
// Doing so can avoid serializing the whole trace while needing to serialize
|
1534
|
-
// it again in rehydrated session for enhanced traces.
|
1535
|
-
const blob = file.slice(0, maximumTraceFileLengthToDetermineEnhancedTraces);
|
1536
|
-
const content = await blob.text();
|
1633
|
+
|
1634
|
+
const content = await Common.Gzip.fileToString(file);
|
1537
1635
|
if (content.includes('enhancedTraceVersion')) {
|
1538
1636
|
await window.scheduler.postTask(() => {
|
1539
|
-
this.#launchRehydratedSession(
|
1637
|
+
this.#launchRehydratedSession(content);
|
1540
1638
|
}, {priority: 'background'});
|
1541
1639
|
} else {
|
1542
|
-
this.loader =
|
1640
|
+
this.loader = TimelineLoader.loadFromParsedJsonFile(JSON.parse(content), this);
|
1543
1641
|
this.prepareToLoadTimeline();
|
1544
1642
|
}
|
1545
1643
|
this.createFileSelector();
|
1546
1644
|
}
|
1547
1645
|
|
1548
|
-
#launchRehydratedSession(
|
1646
|
+
#launchRehydratedSession(traceJson: string): void {
|
1549
1647
|
let rehydratingWindow: Window|null = null;
|
1550
1648
|
let pathToLaunch: string|null = null;
|
1551
1649
|
const url = new URL(window.location.href);
|
@@ -1557,7 +1655,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1557
1655
|
const hostWindow = window;
|
1558
1656
|
function onMessageHandler(ev: MessageEvent): void {
|
1559
1657
|
if (url && ev.data && ev.data.type === 'REHYDRATING_WINDOW_READY') {
|
1560
|
-
rehydratingWindow?.postMessage({type: 'REHYDRATING_TRACE_FILE',
|
1658
|
+
rehydratingWindow?.postMessage({type: 'REHYDRATING_TRACE_FILE', traceJson}, url.origin);
|
1561
1659
|
}
|
1562
1660
|
hostWindow.removeEventListener('message', onMessageHandler);
|
1563
1661
|
}
|
@@ -1575,6 +1673,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1575
1673
|
|
1576
1674
|
private updateMiniMap(): void {
|
1577
1675
|
if (this.#viewMode.mode !== 'VIEWING_TRACE') {
|
1676
|
+
this.#minimapComponent.setData(null);
|
1578
1677
|
return;
|
1579
1678
|
}
|
1580
1679
|
|
@@ -1610,11 +1709,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1610
1709
|
}
|
1611
1710
|
|
1612
1711
|
#extensionDataVisibilityChanged(): void {
|
1613
|
-
this.flameChart.rebuildDataForTrace();
|
1712
|
+
this.flameChart.rebuildDataForTrace({updateType: 'REDRAW_EXISTING_TRACE'});
|
1614
1713
|
}
|
1615
1714
|
|
1616
1715
|
private updateSettingsPaneVisibility(): void {
|
1617
|
-
if (isNode) {
|
1716
|
+
if (isNode || !this.canRecord()) {
|
1618
1717
|
return;
|
1619
1718
|
}
|
1620
1719
|
if (this.showSettingsPaneSetting.get()) {
|
@@ -1640,6 +1739,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1640
1739
|
if (this.captureSelectorStatsSetting.get()) {
|
1641
1740
|
messages.push(i18nString(UIStrings.SelectorStatsEnabled));
|
1642
1741
|
}
|
1742
|
+
if (this.disableCaptureJSProfileSetting.get()) {
|
1743
|
+
messages.push(i18nString(UIStrings.JavascriptSamplingIsDisabled));
|
1744
|
+
}
|
1643
1745
|
|
1644
1746
|
this.showSettingsPaneButton.setChecked(messages.length > 0);
|
1645
1747
|
this.showSettingsPaneButton.element.style.setProperty('--dot-toggle-top', '16px');
|
@@ -1782,7 +1884,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1782
1884
|
await this.#navigateToAboutBlank();
|
1783
1885
|
}
|
1784
1886
|
const recordingOptions = {
|
1785
|
-
enableJSSampling:
|
1887
|
+
enableJSSampling: !this.disableCaptureJSProfileSetting.get(),
|
1786
1888
|
capturePictures: this.captureLayersAndPicturesSetting.get(),
|
1787
1889
|
captureFilmStrip: this.showScreenshotsSetting.get(),
|
1788
1890
|
captureSelectorStats: this.captureSelectorStatsSetting.get(),
|
@@ -1888,20 +1990,33 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1888
1990
|
}
|
1889
1991
|
|
1890
1992
|
private updateTimelineControls(): void {
|
1993
|
+
if (this.#viewMode.mode === 'VIEWING_TRACE') {
|
1994
|
+
this.#addSidebarIconToToolbar();
|
1995
|
+
}
|
1996
|
+
|
1997
|
+
const exportTraceOptionsElement =
|
1998
|
+
this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions;
|
1999
|
+
exportTraceOptionsElement.data = {
|
2000
|
+
onExport: this.saveToFile.bind(this),
|
2001
|
+
buttonEnabled: this.state === State.IDLE && this.#hasActiveTrace(),
|
2002
|
+
};
|
2003
|
+
|
2004
|
+
this.#historyManager.setEnabled(this.state === State.IDLE);
|
2005
|
+
this.clearButton.setEnabled(this.state === State.IDLE);
|
2006
|
+
this.dropTarget.setEnabled(this.state === State.IDLE);
|
2007
|
+
this.loadButton.setEnabled(this.state === State.IDLE);
|
1891
2008
|
this.toggleRecordAction.setToggled(this.state === State.RECORDING);
|
1892
2009
|
this.toggleRecordAction.setEnabled(this.state === State.RECORDING || this.state === State.IDLE);
|
2010
|
+
this.askAiButton?.setEnabled(this.state === State.IDLE && this.#hasActiveTrace());
|
2011
|
+
|
2012
|
+
if (!this.canRecord()) {
|
2013
|
+
return;
|
2014
|
+
}
|
2015
|
+
|
1893
2016
|
this.recordReloadAction.setEnabled(isNode ? false : this.state === State.IDLE);
|
1894
|
-
this.#historyManager.setEnabled(this.state === State.IDLE);
|
1895
|
-
this.clearButton.setEnabled(this.state === State.IDLE);
|
1896
2017
|
this.panelToolbar.setEnabled(this.state !== State.LOADING);
|
1897
2018
|
this.panelRightToolbar.setEnabled(this.state !== State.LOADING);
|
1898
|
-
this.dropTarget.setEnabled(this.state === State.IDLE);
|
1899
|
-
this.loadButton.setEnabled(this.state === State.IDLE);
|
1900
|
-
this.saveButton.setEnabled(this.state === State.IDLE && this.#hasActiveTrace());
|
1901
2019
|
this.homeButton?.setEnabled(this.state === State.IDLE && this.#hasActiveTrace());
|
1902
|
-
if (this.#viewMode.mode === 'VIEWING_TRACE') {
|
1903
|
-
this.#addSidebarIconToToolbar();
|
1904
|
-
}
|
1905
2020
|
}
|
1906
2021
|
|
1907
2022
|
async toggleRecording(): Promise<void> {
|
@@ -1932,8 +2047,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1932
2047
|
this.flameChart.getNetworkDataProvider().reset();
|
1933
2048
|
this.flameChart.reset();
|
1934
2049
|
this.#changeView({mode: 'LANDING_PAGE'});
|
1935
|
-
UI.Context.Context.instance().setFlavor(Utils.
|
1936
|
-
UI.Context.Context.instance().setFlavor(Utils.InsightAIContext.ActiveInsight, null);
|
2050
|
+
UI.Context.Context.instance().setFlavor(Utils.AIContext.AgentFocus, null);
|
1937
2051
|
}
|
1938
2052
|
|
1939
2053
|
#hasActiveTrace(): boolean {
|
@@ -1953,32 +2067,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
1953
2067
|
ActiveFilters.instance().setFilters(newActiveFilters);
|
1954
2068
|
}
|
1955
2069
|
|
1956
|
-
/**
|
1957
|
-
* If we generate a lot of the same aria announcements very quickly, we don't
|
1958
|
-
* want to send them all to the user.
|
1959
|
-
*/
|
1960
|
-
#ariaDebouncer = Common.Debouncer.debounce(() => {
|
1961
|
-
if (this.#pendingAriaMessage) {
|
1962
|
-
UI.ARIAUtils.alert(this.#pendingAriaMessage);
|
1963
|
-
this.#pendingAriaMessage = null;
|
1964
|
-
}
|
1965
|
-
}, 1_000);
|
1966
|
-
|
1967
|
-
#makeAriaAnnouncement(message: string): void {
|
1968
|
-
// If we already have one pending, don't queue this one.
|
1969
|
-
if (message === this.#pendingAriaMessage) {
|
1970
|
-
return;
|
1971
|
-
}
|
1972
|
-
|
1973
|
-
// If the pending message is different, immediately announce the pending
|
1974
|
-
// message + then update the pending message to the new one.
|
1975
|
-
if (this.#pendingAriaMessage) {
|
1976
|
-
UI.ARIAUtils.alert(this.#pendingAriaMessage);
|
1977
|
-
}
|
1978
|
-
this.#pendingAriaMessage = message;
|
1979
|
-
this.#ariaDebouncer();
|
1980
|
-
}
|
1981
|
-
|
1982
2070
|
/**
|
1983
2071
|
* Called when we update the active trace that is being shown to the user.
|
1984
2072
|
* This is called from {@see changeView} when we change the UI to show a
|
@@ -2043,36 +2131,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2043
2131
|
|
2044
2132
|
const exclusiveFilter = this.#exclusiveFilterPerTrace.get(traceIndex) ?? null;
|
2045
2133
|
this.#applyActiveFilters(parsedTrace.Meta.traceIsGeneric, exclusiveFilter);
|
2134
|
+
(this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
|
2135
|
+
.updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
|
2046
2136
|
|
2047
|
-
// Add ModificationsManager listeners for annotations change to update the
|
2048
|
-
|
2049
|
-
|
2050
|
-
const announcementText = AnnotationHelpers.ariaAnnouncementForModifiedEvent(event as AnnotationModifiedEvent);
|
2051
|
-
if (announcementText) {
|
2052
|
-
this.#makeAriaAnnouncement(announcementText);
|
2053
|
-
}
|
2054
|
-
|
2055
|
-
const {overlay, action} = (event as AnnotationModifiedEvent);
|
2056
|
-
if (action === 'Add') {
|
2057
|
-
this.flameChart.addOverlay(overlay);
|
2058
|
-
} else if (action === 'Remove') {
|
2059
|
-
this.flameChart.removeOverlay(overlay);
|
2060
|
-
} else if (action === 'UpdateTimeRange' && AnnotationHelpers.isTimeRangeLabel(overlay)) {
|
2061
|
-
this.flameChart.updateExistingOverlay(overlay, {
|
2062
|
-
bounds: overlay.bounds,
|
2063
|
-
});
|
2064
|
-
} else if (action === 'UpdateLinkToEntry' && AnnotationHelpers.isEntriesLink(overlay)) {
|
2065
|
-
this.flameChart.updateExistingOverlay(overlay, {
|
2066
|
-
entryTo: overlay.entryTo,
|
2067
|
-
});
|
2068
|
-
} else if (action === 'EnterLabelEditState' && AnnotationHelpers.isEntryLabel(overlay)) {
|
2069
|
-
this.flameChart.enterLabelEditMode(overlay);
|
2070
|
-
}
|
2071
|
-
|
2072
|
-
const annotations = currentManager.getAnnotations();
|
2073
|
-
const annotationEntryToColorMap = this.buildColorsAnnotationsMap(annotations);
|
2074
|
-
this.#sideBar.setAnnotations(annotations, annotationEntryToColorMap);
|
2075
|
-
});
|
2137
|
+
// Add ModificationsManager listeners for annotations change to update the
|
2138
|
+
// Annotation Overlays.
|
2139
|
+
currentManager?.addEventListener(AnnotationModifiedEvent.eventName, this.#onAnnotationModifiedEventBound);
|
2076
2140
|
|
2077
2141
|
// To calculate the activity we might want to zoom in, we use the top-most main-thread track
|
2078
2142
|
const topMostMainThreadAppender =
|
@@ -2126,9 +2190,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2126
2190
|
this.updateMiniMap();
|
2127
2191
|
this.statusDialog?.updateProgressBar(i18nString(UIStrings.processed), 90);
|
2128
2192
|
this.updateTimelineControls();
|
2193
|
+
this.#maybeCreateHiddenTracksBanner(parsedTrace);
|
2129
2194
|
|
2130
2195
|
this.#setActiveInsight(null);
|
2131
|
-
|
2132
2196
|
this.#sideBar.setInsights(traceInsightsSets);
|
2133
2197
|
|
2134
2198
|
this.#eventToRelatedInsights.clear();
|
@@ -2157,8 +2221,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2157
2221
|
}
|
2158
2222
|
}
|
2159
2223
|
|
2160
|
-
this.#showSidebarIfRequired();
|
2161
|
-
|
2162
2224
|
// When the timeline is loaded for the first time, setup the shortcuts dialog and log what navigation setting is selected.
|
2163
2225
|
// Logging the setting on the first timeline load will allow us to get an estimate number of people using each option.
|
2164
2226
|
if (this.#traceEngineModel.size() === 1) {
|
@@ -2173,25 +2235,53 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2173
2235
|
}
|
2174
2236
|
}
|
2175
2237
|
|
2238
|
+
#onAnnotationModifiedEvent(e: Event): void {
|
2239
|
+
const event = e as AnnotationModifiedEvent;
|
2240
|
+
const announcementText = AnnotationHelpers.ariaAnnouncementForModifiedEvent(event);
|
2241
|
+
if (announcementText) {
|
2242
|
+
UI.ARIAUtils.LiveAnnouncer.alert(announcementText);
|
2243
|
+
}
|
2244
|
+
|
2245
|
+
const {overlay, action} = event;
|
2246
|
+
if (action === 'Add') {
|
2247
|
+
this.flameChart.addOverlay(overlay);
|
2248
|
+
} else if (action === 'Remove') {
|
2249
|
+
this.flameChart.removeOverlay(overlay);
|
2250
|
+
} else if (action === 'UpdateTimeRange' && AnnotationHelpers.isTimeRangeLabel(overlay)) {
|
2251
|
+
this.flameChart.updateExistingOverlay(overlay, {
|
2252
|
+
bounds: overlay.bounds,
|
2253
|
+
});
|
2254
|
+
} else if (action === 'UpdateLinkToEntry' && AnnotationHelpers.isEntriesLink(overlay)) {
|
2255
|
+
this.flameChart.updateExistingOverlay(overlay, {
|
2256
|
+
entryTo: overlay.entryTo,
|
2257
|
+
});
|
2258
|
+
} else if (action === 'EnterLabelEditState' && AnnotationHelpers.isEntryLabel(overlay)) {
|
2259
|
+
this.flameChart.enterLabelEditMode(overlay);
|
2260
|
+
} else if (action === 'LabelBringForward' && AnnotationHelpers.isEntryLabel(overlay)) {
|
2261
|
+
this.flameChart.bringLabelForward(overlay);
|
2262
|
+
}
|
2263
|
+
|
2264
|
+
const currentManager = ModificationsManager.activeManager();
|
2265
|
+
const annotations = currentManager?.getAnnotations() ?? [];
|
2266
|
+
const annotationEntryToColorMap = this.buildColorsAnnotationsMap(annotations);
|
2267
|
+
this.#sideBar.setAnnotations(annotations, annotationEntryToColorMap);
|
2268
|
+
(this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
|
2269
|
+
.updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
|
2270
|
+
}
|
2271
|
+
|
2176
2272
|
/**
|
2177
|
-
*
|
2178
|
-
* 1. The user has never seen it before, so we show it once to aid discovery
|
2179
|
-
* 2. The user had it open, and we hid it (for example, during recording), so now we need to bring it back.
|
2273
|
+
* After the user imports / records a trace, we auto-show the sidebar.
|
2180
2274
|
*/
|
2181
|
-
#
|
2182
|
-
const
|
2183
|
-
|
2184
|
-
if (
|
2185
|
-
// Used in interaction tests & screenshot tests.
|
2275
|
+
#showSidebar(): void {
|
2276
|
+
const disabledByLocalStorageForTests =
|
2277
|
+
window.localStorage.getItem('disable-auto-show-rpp-sidebar-for-test') === 'true';
|
2278
|
+
if (disabledByLocalStorageForTests) {
|
2186
2279
|
return;
|
2187
2280
|
}
|
2188
|
-
const needToRestore = this.#restoreSidebarVisibilityOnTraceLoad;
|
2189
|
-
const userHasSeenSidebar = this.#sideBar.userHasOpenedSidebarOnce();
|
2190
2281
|
|
2191
|
-
if (!
|
2282
|
+
if (!this.#splitWidget.sidebarIsShowing()) {
|
2192
2283
|
this.#splitWidget.showBoth();
|
2193
2284
|
}
|
2194
|
-
this.#restoreSidebarVisibilityOnTraceLoad = false;
|
2195
2285
|
}
|
2196
2286
|
|
2197
2287
|
// Build a map mapping annotated entries to the colours that are used to display them in the FlameChart.
|
@@ -2213,6 +2303,34 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2213
2303
|
return annotationEntryToColorMap;
|
2214
2304
|
}
|
2215
2305
|
|
2306
|
+
/**
|
2307
|
+
* If the user imports or records a trace and we have any hidden tracks, we
|
2308
|
+
* show a warning banner at the bottom. This can be dismissed by the user and
|
2309
|
+
* if that happens we do not want to bring it back again.
|
2310
|
+
*/
|
2311
|
+
#maybeCreateHiddenTracksBanner(trace: Trace.Handlers.Types.ParsedTrace): void {
|
2312
|
+
const hasHiddenTracks = this.flameChart.hasHiddenTracks();
|
2313
|
+
if (!hasHiddenTracks) {
|
2314
|
+
return;
|
2315
|
+
}
|
2316
|
+
|
2317
|
+
const maybeOverlay = createHiddenTracksOverlay(trace, {
|
2318
|
+
onClose: () => {
|
2319
|
+
this.flameChart.overlays().removeOverlaysOfType('BOTTOM_INFO_BAR');
|
2320
|
+
this.#hiddenTracksInfoBarPerTrace.set(trace, 'DISMISSED');
|
2321
|
+
},
|
2322
|
+
onShowAllTracks: () => {
|
2323
|
+
this.flameChart.showAllMainChartTracks();
|
2324
|
+
},
|
2325
|
+
onShowTrackConfigurationMode: () => {
|
2326
|
+
this.flameChart.enterMainChartTrackConfigurationMode();
|
2327
|
+
}
|
2328
|
+
});
|
2329
|
+
if (maybeOverlay) {
|
2330
|
+
this.flameChart.addOverlay(maybeOverlay);
|
2331
|
+
}
|
2332
|
+
}
|
2333
|
+
|
2216
2334
|
private getEntryColorByEntry(entry: Trace.Types.Events.Event): string {
|
2217
2335
|
const mainIndex = this.flameChart.getMainDataProvider().indexForEvent(entry);
|
2218
2336
|
const networkIndex = this.flameChart.getNetworkDataProvider().indexForEvent(entry);
|
@@ -2256,7 +2374,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2256
2374
|
this.showRecordingStarted();
|
2257
2375
|
if (this.statusDialog) {
|
2258
2376
|
this.statusDialog.enableAndFocusButton();
|
2259
|
-
this.statusDialog.updateStatus(i18nString(UIStrings.
|
2377
|
+
this.statusDialog.updateStatus(i18nString(UIStrings.tracing));
|
2260
2378
|
this.statusDialog.updateProgressBar(i18nString(UIStrings.bufferUsage), 0);
|
2261
2379
|
this.statusDialog.startTimer();
|
2262
2380
|
}
|
@@ -2274,7 +2392,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2274
2392
|
*/
|
2275
2393
|
#hideSidebar(): void {
|
2276
2394
|
if (this.#splitWidget.sidebarIsShowing()) {
|
2277
|
-
this.#restoreSidebarVisibilityOnTraceLoad = true;
|
2278
2395
|
this.#splitWidget.hideSidebar();
|
2279
2396
|
}
|
2280
2397
|
}
|
@@ -2321,7 +2438,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2321
2438
|
},
|
2322
2439
|
() => this.cancelLoading());
|
2323
2440
|
this.statusDialog.showPane(this.statusPaneContainer);
|
2324
|
-
this.statusDialog.updateStatus(i18nString(UIStrings.
|
2441
|
+
this.statusDialog.updateStatus(i18nString(UIStrings.loadingTrace));
|
2325
2442
|
// FIXME: make loading from backend cancelable as well.
|
2326
2443
|
if (!this.loader) {
|
2327
2444
|
this.statusDialog.finish();
|
@@ -2337,7 +2454,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2337
2454
|
}
|
2338
2455
|
|
2339
2456
|
async processingStarted(): Promise<void> {
|
2340
|
-
this.statusDialog?.updateStatus(i18nString(UIStrings.
|
2457
|
+
this.statusDialog?.updateStatus(i18nString(UIStrings.processingTrace));
|
2341
2458
|
}
|
2342
2459
|
|
2343
2460
|
#listenForProcessingProgress(): void {
|
@@ -2371,9 +2488,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2371
2488
|
* have recorded a fresh trace.
|
2372
2489
|
*
|
2373
2490
|
* IMPORTANT: All the code in here should be code that is only required when we have
|
2374
|
-
* recorded or
|
2375
|
-
* user switches to an existing trace, please @see
|
2376
|
-
* code in there.
|
2491
|
+
* recorded or imported from disk a brand new trace. If you need the code to
|
2492
|
+
* run when the user switches to an existing trace, please @see
|
2493
|
+
* #setModelForActiveTrace and put your code in there.
|
2377
2494
|
**/
|
2378
2495
|
async loadingComplete(
|
2379
2496
|
collectedEvents: Trace.Types.Events.Event[], exclusiveFilter: Trace.Extras.TraceFilter.TraceFilter|null = null,
|
@@ -2399,6 +2516,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2399
2516
|
this.#changeView({
|
2400
2517
|
mode: 'VIEWING_TRACE',
|
2401
2518
|
traceIndex: this.#traceEngineModel.lastTraceIndex(),
|
2519
|
+
forceOpenSidebar: false,
|
2402
2520
|
});
|
2403
2521
|
} else {
|
2404
2522
|
this.#changeView({mode: 'LANDING_PAGE'});
|
@@ -2415,6 +2533,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2415
2533
|
this.#changeView({
|
2416
2534
|
mode: 'VIEWING_TRACE',
|
2417
2535
|
traceIndex,
|
2536
|
+
// This is a new trace, so we want to open the insights sidebar automatically.
|
2537
|
+
forceOpenSidebar: true,
|
2418
2538
|
});
|
2419
2539
|
|
2420
2540
|
const parsedTrace = this.#traceEngineModel.parsedTrace(traceIndex);
|
@@ -2423,7 +2543,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2423
2543
|
}
|
2424
2544
|
|
2425
2545
|
if (recordingIsFresh) {
|
2426
|
-
Tracker.instance().registerFreshRecording(parsedTrace);
|
2546
|
+
Utils.FreshRecording.Tracker.instance().registerFreshRecording(parsedTrace);
|
2427
2547
|
}
|
2428
2548
|
|
2429
2549
|
// We store the index of the active trace so we can load it back easily
|
@@ -2439,12 +2559,17 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2439
2559
|
parsedTrace,
|
2440
2560
|
metadata,
|
2441
2561
|
});
|
2562
|
+
|
2563
|
+
this.dispatchEventToListeners(Events.RECORDING_COMPLETED, {
|
2564
|
+
traceIndex,
|
2565
|
+
});
|
2442
2566
|
} catch (error) {
|
2443
2567
|
// If we errored during the parsing stage, it
|
2444
2568
|
// is useful to get access to the raw events to download the trace. This
|
2445
2569
|
// allows us to debug crashes!
|
2446
2570
|
void this.recordingFailed(error.message, collectedEvents);
|
2447
2571
|
console.error(error);
|
2572
|
+
this.dispatchEventToListeners(Events.RECORDING_COMPLETED, {errorText: error.message});
|
2448
2573
|
} finally {
|
2449
2574
|
this.recordTraceLoadMetric();
|
2450
2575
|
}
|
@@ -2662,7 +2787,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2662
2787
|
},
|
2663
2788
|
() => this.stopRecording());
|
2664
2789
|
this.statusDialog.showPane(this.statusPaneContainer);
|
2665
|
-
this.statusDialog.updateStatus(i18nString(UIStrings.
|
2790
|
+
this.statusDialog.updateStatus(i18nString(UIStrings.initializingTracing));
|
2666
2791
|
this.statusDialog.updateProgressBar(i18nString(UIStrings.bufferUsage), 0);
|
2667
2792
|
}
|
2668
2793
|
|
@@ -2743,7 +2868,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2743
2868
|
|
2744
2869
|
#announceSelectionToAria(oldSelection: TimelineSelection|null, newSelection: TimelineSelection|null): void {
|
2745
2870
|
if (oldSelection !== null && newSelection === null) {
|
2746
|
-
UI.ARIAUtils.alert(i18nString(UIStrings.selectionCleared));
|
2871
|
+
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.selectionCleared));
|
2747
2872
|
}
|
2748
2873
|
if (newSelection === null) {
|
2749
2874
|
return;
|
@@ -2763,11 +2888,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2763
2888
|
|
2764
2889
|
// Announce the type of event that was selected (special casing frames.)
|
2765
2890
|
if (Trace.Types.Events.isLegacyTimelineFrame(newSelection.event)) {
|
2766
|
-
UI.ARIAUtils.alert(i18nString(UIStrings.frameSelected));
|
2891
|
+
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.frameSelected));
|
2767
2892
|
return;
|
2768
2893
|
}
|
2769
2894
|
const name = Utils.EntryName.nameForEntry(newSelection.event);
|
2770
|
-
UI.ARIAUtils.alert(i18nString(UIStrings.eventSelected, {PH1: name}));
|
2895
|
+
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.eventSelected, {PH1: name}));
|
2771
2896
|
}
|
2772
2897
|
|
2773
2898
|
select(selection: TimelineSelection|null): void {
|
@@ -2869,6 +2994,110 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
2869
2994
|
const insightSetKey = insightModel.navigationId ?? Trace.Types.Events.NO_NAVIGATION;
|
2870
2995
|
this.#setActiveInsight({model: insightModel, insightSetKey}, {highlightInsight: true});
|
2871
2996
|
}
|
2997
|
+
|
2998
|
+
static async *
|
2999
|
+
handleExternalRecordRequest():
|
3000
|
+
AsyncGenerator<AiAssistanceModel.ExternalRequestResponse, AiAssistanceModel.ExternalRequestResponse> {
|
3001
|
+
yield {
|
3002
|
+
type: AiAssistanceModel.ExternalRequestResponseType.NOTIFICATION,
|
3003
|
+
message: 'Recording performance trace',
|
3004
|
+
};
|
3005
|
+
void VisualLogging.logFunctionCall('timeline.record-reload', 'external');
|
3006
|
+
Snackbars.Snackbar.Snackbar.show({message: i18nString(UIStrings.externalRequestReceived)});
|
3007
|
+
|
3008
|
+
const panelInstance = TimelinePanel.instance();
|
3009
|
+
// Given how the current UX works, it's nice to show the user the Perf
|
3010
|
+
// Panel so they see what's happening
|
3011
|
+
await UI.ViewManager.ViewManager.instance().showView('timeline');
|
3012
|
+
|
3013
|
+
function onRecordingCompleted(eventData: EventTypes[Events.RECORDING_COMPLETED]):
|
3014
|
+
AiAssistanceModel.ExternalRequestResponse {
|
3015
|
+
if ('errorText' in eventData) {
|
3016
|
+
return {
|
3017
|
+
type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
|
3018
|
+
message: `Error running the trace: ${eventData.errorText}`,
|
3019
|
+
};
|
3020
|
+
}
|
3021
|
+
const parsedTrace = panelInstance.model.parsedTrace(eventData.traceIndex);
|
3022
|
+
const insights = panelInstance.model.traceInsights(eventData.traceIndex);
|
3023
|
+
if (!parsedTrace || !insights || insights.size === 0) {
|
3024
|
+
return {
|
3025
|
+
type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
|
3026
|
+
message: 'The trace was loaded successfully but no Insights were detected.',
|
3027
|
+
};
|
3028
|
+
}
|
3029
|
+
|
3030
|
+
const navigationId = Array.from(insights.keys()).find(k => k !== 'NO_NAVIGATION');
|
3031
|
+
if (!navigationId) {
|
3032
|
+
return {
|
3033
|
+
type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
|
3034
|
+
message: 'The trace was loaded successfully but no navigation was detected.',
|
3035
|
+
};
|
3036
|
+
}
|
3037
|
+
|
3038
|
+
const insightsForNav = insights.get(navigationId);
|
3039
|
+
if (!insightsForNav) {
|
3040
|
+
return {
|
3041
|
+
type: AiAssistanceModel.ExternalRequestResponseType.ERROR,
|
3042
|
+
message: 'The trace was loaded successfully but no Insights were detected.',
|
3043
|
+
};
|
3044
|
+
}
|
3045
|
+
|
3046
|
+
let responseTextForNonPassedInsights = '';
|
3047
|
+
// We still return info on the passed insights, but we put it at the
|
3048
|
+
// bottom of the response under a heading.
|
3049
|
+
let responseTextForPassedInsights = '';
|
3050
|
+
|
3051
|
+
for (const modelName in insightsForNav.model) {
|
3052
|
+
const model = modelName as keyof Trace.Insights.Types.InsightModelsType;
|
3053
|
+
const insight = insightsForNav.model[model];
|
3054
|
+
const formatter = new AiAssistanceModel.PerformanceInsightFormatter(parsedTrace, insight);
|
3055
|
+
if (!formatter.insightIsSupported()) {
|
3056
|
+
// Not all Insights are integrated with "Ask AI" yet, let's avoid
|
3057
|
+
// filling up the response with those ones because there will be no
|
3058
|
+
// useful information.
|
3059
|
+
continue;
|
3060
|
+
}
|
3061
|
+
|
3062
|
+
const formatted = formatter.formatInsight({headingLevel: 3});
|
3063
|
+
|
3064
|
+
if (insight.state === 'pass') {
|
3065
|
+
responseTextForPassedInsights += `${formatted}\n\n`;
|
3066
|
+
continue;
|
3067
|
+
} else {
|
3068
|
+
responseTextForNonPassedInsights += `${formatted}\n\n`;
|
3069
|
+
}
|
3070
|
+
}
|
3071
|
+
|
3072
|
+
const finalText = `# Trace recording results
|
3073
|
+
|
3074
|
+
## Non-passing insights:
|
3075
|
+
|
3076
|
+
These insights highlight potential problems and opportunities to improve performance.
|
3077
|
+
${responseTextForNonPassedInsights}
|
3078
|
+
|
3079
|
+
## Passing insights:
|
3080
|
+
|
3081
|
+
These insights are passing, which means they are not considered to highlight considerable performance problems.
|
3082
|
+
${responseTextForPassedInsights}`;
|
3083
|
+
|
3084
|
+
return {
|
3085
|
+
type: AiAssistanceModel.ExternalRequestResponseType.ANSWER,
|
3086
|
+
message: finalText,
|
3087
|
+
devToolsLogs: [],
|
3088
|
+
};
|
3089
|
+
}
|
3090
|
+
|
3091
|
+
return await new Promise(resolve => {
|
3092
|
+
function listener(e: Common.EventTarget.EventTargetEvent<EventTypes[Events.RECORDING_COMPLETED]>): void {
|
3093
|
+
resolve(onRecordingCompleted(e.data));
|
3094
|
+
panelInstance.removeEventListener(Events.RECORDING_COMPLETED, listener);
|
3095
|
+
}
|
3096
|
+
panelInstance.addEventListener(Events.RECORDING_COMPLETED, listener);
|
3097
|
+
|
3098
|
+
panelInstance.recordReload();
|
3099
|
+
});
|
3100
|
+
}
|
2872
3101
|
}
|
2873
3102
|
|
2874
3103
|
export const enum State {
|
@@ -2927,8 +3156,8 @@ export class EventRevealer implements Common.Revealer.Revealer<SDK.TraceObject.R
|
|
2927
3156
|
}
|
2928
3157
|
}
|
2929
3158
|
|
2930
|
-
export class InsightRevealer implements Common.Revealer.Revealer<Utils.
|
2931
|
-
async reveal(revealable: Utils.
|
3159
|
+
export class InsightRevealer implements Common.Revealer.Revealer<Utils.Helpers.RevealableInsight> {
|
3160
|
+
async reveal(revealable: Utils.Helpers.RevealableInsight): Promise<void> {
|
2932
3161
|
await UI.ViewManager.ViewManager.instance().showView('timeline');
|
2933
3162
|
TimelinePanel.instance().revealInsight(revealable.insight);
|
2934
3163
|
}
|
@@ -2948,7 +3177,7 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
2948
3177
|
panel.recordReload();
|
2949
3178
|
return true;
|
2950
3179
|
case 'timeline.save-to-file':
|
2951
|
-
void panel.saveToFile({
|
3180
|
+
void panel.saveToFile({includeScriptContent: false, includeSourceMaps: false, addModifications: false});
|
2952
3181
|
return true;
|
2953
3182
|
case 'timeline.load-from-file':
|
2954
3183
|
panel.selectFileToLoad();
|
@@ -2984,7 +3213,9 @@ export class SelectedInsight {
|
|
2984
3213
|
}
|
2985
3214
|
export const enum Events {
|
2986
3215
|
IS_VIEWING_TRACE = 'IsViewingTrace',
|
3216
|
+
RECORDING_COMPLETED = 'RecordingCompleted',
|
2987
3217
|
}
|
2988
3218
|
export interface EventTypes {
|
2989
3219
|
[Events.IS_VIEWING_TRACE]: boolean;
|
3220
|
+
[Events.RECORDING_COMPLETED]: {traceIndex: number}|{errorText: string};
|
2990
3221
|
}
|