chrome-ai-bridge 1.0.0
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/LICENSE +202 -0
- package/README.md +252 -0
- package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2033 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +332 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +79 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +449 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +144 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +495 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +15 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +164 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +78 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1263 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +41 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +434 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +202 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +92 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +69 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +61 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +220 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +968 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +13 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +60 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +538 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +539 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +8 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +845 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +217 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1318 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1532 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +908 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +312 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +574 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1346 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +403 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +236 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +205 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1635 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1216 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +364 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +127 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +75 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +80 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +2223 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1654 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +310 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +608 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +413 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +908 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +923 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +176 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +420 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +113 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +691 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +57 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +201 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +508 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +257 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +395 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +55 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1166 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +91 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +2640 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +384 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1532 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7602 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +289 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +995 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +664 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +377 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +131 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +149 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +245 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +486 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +592 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +564 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +437 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +182 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +516 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +89 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +285 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +145 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +122 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +622 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +121 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +371 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +169 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +599 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +485 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +449 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +404 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +566 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +260 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +276 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +186 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +820 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +489 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +209 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +181 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +258 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +90 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +82 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +161 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +129 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +263 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +199 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +183 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +90 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +200 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +545 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +192 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +136 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +98 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +102 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +580 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +224 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +504 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +601 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +201 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
- package/build/src/McpContext.js +400 -0
- package/build/src/McpResponse.js +237 -0
- package/build/src/Mutex.js +40 -0
- package/build/src/PageCollector.js +68 -0
- package/build/src/WaitForHelper.js +134 -0
- package/build/src/browser-connection-manager.js +373 -0
- package/build/src/browser.js +719 -0
- package/build/src/cli.js +120 -0
- package/build/src/client-detector.js +93 -0
- package/build/src/config.js +38 -0
- package/build/src/formatters/consoleFormatter.js +73 -0
- package/build/src/formatters/extensionsPageFormatter.js +184 -0
- package/build/src/formatters/networkFormatter.js +34 -0
- package/build/src/formatters/snapshotFormatter.js +80 -0
- package/build/src/graceful.js +125 -0
- package/build/src/index.js +13 -0
- package/build/src/logger.js +27 -0
- package/build/src/login-helper.js +431 -0
- package/build/src/main.js +268 -0
- package/build/src/plugin-api.js +189 -0
- package/build/src/profile-migration.js +82 -0
- package/build/src/profile-resolver.js +555 -0
- package/build/src/project-detector.js +71 -0
- package/build/src/project-root-state.js +18 -0
- package/build/src/roots-manager.js +253 -0
- package/build/src/selectors/chatgpt.json +61 -0
- package/build/src/selectors/gemini.json +24 -0
- package/build/src/selectors/loader.js +128 -0
- package/build/src/stable-identity.js +193 -0
- package/build/src/startup-check.js +147 -0
- package/build/src/system-profile.js +181 -0
- package/build/src/tools/ToolDefinition.js +9 -0
- package/build/src/tools/bookmarks.js +170 -0
- package/build/src/tools/categories.js +15 -0
- package/build/src/tools/chatgpt-web.js +507 -0
- package/build/src/tools/console.js +19 -0
- package/build/src/tools/core-tools.js +65 -0
- package/build/src/tools/diagnose-ui.js +328 -0
- package/build/src/tools/emulation.js +67 -0
- package/build/src/tools/extensions.js +185 -0
- package/build/src/tools/gemini-web.js +491 -0
- package/build/src/tools/iframe-popup-tools.js +204 -0
- package/build/src/tools/input.js +185 -0
- package/build/src/tools/network.js +68 -0
- package/build/src/tools/optional-tools.js +69 -0
- package/build/src/tools/pages.js +172 -0
- package/build/src/tools/performance.js +127 -0
- package/build/src/tools/screenshot.js +48 -0
- package/build/src/tools/script.js +39 -0
- package/build/src/tools/snapshot.js +45 -0
- package/build/src/trace-processing/parse.js +93 -0
- package/build/src/utils/pagination.js +49 -0
- package/package.json +90 -0
- package/scripts/cli.mjs +49 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// Copyright 2022 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import * as Platform from '../../../core/platform/platform.js';
|
|
5
|
+
import * as CPUProfile from '../../cpu_profile/cpu_profile.js';
|
|
6
|
+
import * as Helpers from '../helpers/helpers.js';
|
|
7
|
+
import * as Types from '../types/types.js';
|
|
8
|
+
let profilesInProcess = new Map();
|
|
9
|
+
let entryToNode = new Map();
|
|
10
|
+
// The profile head, containing its metadata like its start
|
|
11
|
+
// time, comes in a "Profile" event. The sample data comes in
|
|
12
|
+
// "ProfileChunk" events. We match these ProfileChunks with their head
|
|
13
|
+
// using process and profile ids. However, in order to integrate sample
|
|
14
|
+
// data with trace data, we need the thread id that owns each profile.
|
|
15
|
+
// This thread id is extracted from the head event.
|
|
16
|
+
// For this reason, we have a preprocessed data structure, where events
|
|
17
|
+
// are matched by profile id, which we then finish processing to export
|
|
18
|
+
// events matched by thread id.
|
|
19
|
+
let preprocessedData = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* Profile source selection priority when multiple profiles exist for the same thread.
|
|
22
|
+
*
|
|
23
|
+
* Profile sources and their typical scenarios:
|
|
24
|
+
* - 'Internal': Browser-initiated profiling performance panel traces.
|
|
25
|
+
* This is the profiling mechanism when users click "Record" in the Devtools UI.
|
|
26
|
+
* - 'Inspector': User-initiated via console.profile()/profileEnd() calls.
|
|
27
|
+
* Represents explicit developer intent to profile specific code.
|
|
28
|
+
* - 'SelfProfiling': Page-initiated via JS Self-Profiling API.
|
|
29
|
+
* Lower signal vs the two above; treated as fallback.
|
|
30
|
+
*
|
|
31
|
+
* Selection strategy:
|
|
32
|
+
* - CPU Profile mode: Prefer 'Inspector' (explicit user request).
|
|
33
|
+
* - Performance trace: Prefer 'Internal' (integrated timeline context), then 'Inspector'.
|
|
34
|
+
* - Sources not in the priority list (including 'SelfProfiling') act as fallbacks.
|
|
35
|
+
* When no priority source matches, the first candidate profile is selected.
|
|
36
|
+
*/
|
|
37
|
+
const PROFILE_SOURCES_BY_PRIORITY = {
|
|
38
|
+
cpuProfile: ['Inspector'],
|
|
39
|
+
performanceTrace: ['Internal', 'Inspector'],
|
|
40
|
+
};
|
|
41
|
+
function parseCPUProfileData(parseOptions) {
|
|
42
|
+
const priorityList = parseOptions.isCPUProfile ? PROFILE_SOURCES_BY_PRIORITY.cpuProfile : PROFILE_SOURCES_BY_PRIORITY.performanceTrace;
|
|
43
|
+
for (const [processId, profiles] of preprocessedData) {
|
|
44
|
+
const profilesByThread = new Map();
|
|
45
|
+
for (const [profileId, preProcessedData] of profiles) {
|
|
46
|
+
const threadId = preProcessedData.threadId;
|
|
47
|
+
if (threadId === undefined) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const listForThread = Platform.MapUtilities.getWithDefault(profilesByThread, threadId, () => []);
|
|
51
|
+
listForThread.push({ id: profileId, data: preProcessedData });
|
|
52
|
+
}
|
|
53
|
+
for (const [threadId, candidates] of profilesByThread) {
|
|
54
|
+
if (!candidates.length) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
let chosen = candidates[0];
|
|
58
|
+
for (const source of priorityList) {
|
|
59
|
+
const match = candidates.find(p => p.data.source === source);
|
|
60
|
+
if (match) {
|
|
61
|
+
chosen = match;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const chosenData = chosen.data;
|
|
66
|
+
if (!chosenData.rawProfile.nodes.length) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const indexStack = [];
|
|
70
|
+
const profileModel = new CPUProfile.CPUProfileDataModel.CPUProfileDataModel(chosenData.rawProfile);
|
|
71
|
+
const profileTree = Helpers.TreeHelpers.makeEmptyTraceEntryTree();
|
|
72
|
+
profileTree.maxDepth = profileModel.maxDepth;
|
|
73
|
+
const selectedProfileId = chosen.id;
|
|
74
|
+
const finalizedData = {
|
|
75
|
+
rawProfile: chosenData.rawProfile,
|
|
76
|
+
parsedProfile: profileModel,
|
|
77
|
+
profileCalls: [],
|
|
78
|
+
profileTree,
|
|
79
|
+
profileId: selectedProfileId,
|
|
80
|
+
};
|
|
81
|
+
const dataByThread = Platform.MapUtilities.getWithDefault(profilesInProcess, processId, () => new Map());
|
|
82
|
+
dataByThread.set(threadId, finalizedData);
|
|
83
|
+
// Only need to build pure JS ProfileCalls if we're parsing a CPU Profile, otherwise SamplesIntegrator does the work.
|
|
84
|
+
if (parseOptions.isCPUProfile) {
|
|
85
|
+
buildProfileCallsForCPUProfile();
|
|
86
|
+
}
|
|
87
|
+
function buildProfileCallsForCPUProfile() {
|
|
88
|
+
profileModel.forEachFrame(openFrameCallback, closeFrameCallback);
|
|
89
|
+
function openFrameCallback(depth, node, sampleIndex, timeStampMilliseconds) {
|
|
90
|
+
if (threadId === undefined) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const ts = Helpers.Timing.milliToMicro(Types.Timing.Milli(timeStampMilliseconds));
|
|
94
|
+
const nodeId = node.id;
|
|
95
|
+
const profileCall = Helpers.Trace.makeProfileCall(node, selectedProfileId, sampleIndex, ts, processId, threadId);
|
|
96
|
+
finalizedData.profileCalls.push(profileCall);
|
|
97
|
+
indexStack.push(finalizedData.profileCalls.length - 1);
|
|
98
|
+
const traceEntryNode = Helpers.TreeHelpers.makeEmptyTraceEntryNode(profileCall, nodeId);
|
|
99
|
+
entryToNode.set(profileCall, traceEntryNode);
|
|
100
|
+
traceEntryNode.depth = depth;
|
|
101
|
+
if (indexStack.length === 1) {
|
|
102
|
+
// First call in the stack is a root call.
|
|
103
|
+
finalizedData.profileTree?.roots.add(traceEntryNode);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function closeFrameCallback(_depth, _node, _sampleIndex, _timeStampMillis, durMs, selfTimeMs) {
|
|
107
|
+
const profileCallIndex = indexStack.pop();
|
|
108
|
+
const profileCall = profileCallIndex !== undefined && finalizedData.profileCalls[profileCallIndex];
|
|
109
|
+
if (!profileCall) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const { callFrame, ts, pid, tid } = profileCall;
|
|
113
|
+
const traceEntryNode = entryToNode.get(profileCall);
|
|
114
|
+
if (callFrame === undefined || ts === undefined || pid === undefined || selectedProfileId === undefined ||
|
|
115
|
+
tid === undefined || traceEntryNode === undefined) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const dur = Helpers.Timing.milliToMicro(Types.Timing.Milli(durMs));
|
|
119
|
+
const selfTime = Helpers.Timing.milliToMicro(Types.Timing.Milli(selfTimeMs));
|
|
120
|
+
profileCall.dur = dur;
|
|
121
|
+
traceEntryNode.selfTime = selfTime;
|
|
122
|
+
const parentIndex = indexStack.at(-1);
|
|
123
|
+
const parent = parentIndex !== undefined && finalizedData.profileCalls.at(parentIndex);
|
|
124
|
+
const parentNode = parent && entryToNode.get(parent);
|
|
125
|
+
if (!parentNode) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
traceEntryNode.parent = parentNode;
|
|
129
|
+
parentNode.children.push(traceEntryNode);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export function reset() {
|
|
136
|
+
preprocessedData = new Map();
|
|
137
|
+
profilesInProcess = new Map();
|
|
138
|
+
entryToNode = new Map();
|
|
139
|
+
}
|
|
140
|
+
export function handleEvent(event) {
|
|
141
|
+
/**
|
|
142
|
+
* A fake trace event created to support CDP.Profiler.Profiles in the
|
|
143
|
+
* trace engine.
|
|
144
|
+
*/
|
|
145
|
+
if (Types.Events.isSyntheticCpuProfile(event)) {
|
|
146
|
+
// At the moment we are attaching to a single node target so we
|
|
147
|
+
// should only get a single CPU profile. The values of the process
|
|
148
|
+
// id and thread id are not really important, so we use the data
|
|
149
|
+
// in the fake event. Should multi-thread CPU profiling be supported
|
|
150
|
+
// we could use these fields in the event to pass thread info.
|
|
151
|
+
const profileData = getOrCreatePreProcessedData(event.pid, event.id);
|
|
152
|
+
profileData.rawProfile = event.args.data.cpuProfile;
|
|
153
|
+
profileData.threadId = event.tid;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (Types.Events.isProfile(event)) {
|
|
157
|
+
// Do not use event.args.data.startTime as it is in CLOCK_MONOTONIC domain,
|
|
158
|
+
// but use profileEvent.ts which has been translated to Perfetto's clock
|
|
159
|
+
// domain. Also convert from ms to us.
|
|
160
|
+
// Note: events are collected on a different thread than what's sampled.
|
|
161
|
+
// The correct process and thread ids are specified by the profile.
|
|
162
|
+
const profileData = getOrCreatePreProcessedData(event.pid, event.id);
|
|
163
|
+
profileData.rawProfile.startTime = event.ts;
|
|
164
|
+
profileData.threadId = event.tid;
|
|
165
|
+
assignProfileSourceIfKnown(profileData, event.args?.data?.source);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (Types.Events.isProfileChunk(event)) {
|
|
169
|
+
const profileData = getOrCreatePreProcessedData(event.pid, event.id);
|
|
170
|
+
const cdpProfile = profileData.rawProfile;
|
|
171
|
+
const nodesAndSamples = event.args?.data?.cpuProfile || { samples: [] };
|
|
172
|
+
const samples = nodesAndSamples?.samples || [];
|
|
173
|
+
const traceIds = event.args?.data?.cpuProfile?.trace_ids;
|
|
174
|
+
for (const n of nodesAndSamples?.nodes || []) {
|
|
175
|
+
const lineNumber = typeof n.callFrame.lineNumber === 'undefined' ? -1 : n.callFrame.lineNumber;
|
|
176
|
+
const columnNumber = typeof n.callFrame.columnNumber === 'undefined' ? -1 : n.callFrame.columnNumber;
|
|
177
|
+
const scriptId = String(n.callFrame.scriptId);
|
|
178
|
+
const url = n.callFrame.url || '';
|
|
179
|
+
const node = {
|
|
180
|
+
...n,
|
|
181
|
+
callFrame: {
|
|
182
|
+
...n.callFrame,
|
|
183
|
+
url,
|
|
184
|
+
lineNumber,
|
|
185
|
+
columnNumber,
|
|
186
|
+
scriptId,
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
cdpProfile.nodes.push(node);
|
|
190
|
+
}
|
|
191
|
+
const timeDeltas = event.args.data?.timeDeltas || [];
|
|
192
|
+
const lines = event.args.data?.lines || Array(samples.length).fill(0);
|
|
193
|
+
const columns = event.args.data?.columns || Array(samples.length).fill(0);
|
|
194
|
+
cdpProfile.samples?.push(...samples);
|
|
195
|
+
cdpProfile.timeDeltas?.push(...timeDeltas);
|
|
196
|
+
cdpProfile.lines?.push(...lines);
|
|
197
|
+
cdpProfile.columns?.push(...columns);
|
|
198
|
+
if (traceIds) {
|
|
199
|
+
cdpProfile.traceIds ??= {};
|
|
200
|
+
for (const key in traceIds) {
|
|
201
|
+
cdpProfile.traceIds[key] = traceIds[key];
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (cdpProfile.samples && cdpProfile.timeDeltas && cdpProfile.samples.length !== cdpProfile.timeDeltas.length) {
|
|
205
|
+
console.error('Failed to parse CPU profile.');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (!cdpProfile.endTime && cdpProfile.timeDeltas) {
|
|
209
|
+
const timeDeltas = cdpProfile.timeDeltas;
|
|
210
|
+
cdpProfile.endTime = timeDeltas.reduce((x, y) => x + y, cdpProfile.startTime);
|
|
211
|
+
}
|
|
212
|
+
assignProfileSourceIfKnown(profileData, event.args?.data?.source);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export async function finalize(parseOptions = {}) {
|
|
217
|
+
parseCPUProfileData(parseOptions);
|
|
218
|
+
}
|
|
219
|
+
function assignProfileSourceIfKnown(profileData, source) {
|
|
220
|
+
if (Types.Events.VALID_PROFILE_SOURCES.includes(source)) {
|
|
221
|
+
profileData.source = source;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
export function data() {
|
|
225
|
+
return {
|
|
226
|
+
profilesInProcess,
|
|
227
|
+
entryToNode,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function getOrCreatePreProcessedData(processId, profileId) {
|
|
231
|
+
const profileById = Platform.MapUtilities.getWithDefault(preprocessedData, processId, () => new Map());
|
|
232
|
+
return Platform.MapUtilities.getWithDefault(profileById, profileId, () => ({
|
|
233
|
+
rawProfile: {
|
|
234
|
+
startTime: 0,
|
|
235
|
+
endTime: 0,
|
|
236
|
+
nodes: [],
|
|
237
|
+
samples: [],
|
|
238
|
+
timeDeltas: [],
|
|
239
|
+
lines: [],
|
|
240
|
+
columns: [],
|
|
241
|
+
},
|
|
242
|
+
profileId,
|
|
243
|
+
}));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Returns the name of a function for a given synthetic profile call.
|
|
247
|
+
* We first look to find the ProfileNode representing this call, and use its
|
|
248
|
+
* function name. This is preferred (and should always exist) because if we
|
|
249
|
+
* resolve sourcemaps, we will update this name. If that name is not present,
|
|
250
|
+
* we fall back to the function name that was in the callframe that we got
|
|
251
|
+
* when parsing the profile's trace data.
|
|
252
|
+
*/
|
|
253
|
+
export function getProfileCallFunctionName(data, entry) {
|
|
254
|
+
const profile = data.profilesInProcess.get(entry.pid)?.get(entry.tid);
|
|
255
|
+
const node = profile?.parsedProfile.nodeById(entry.nodeId);
|
|
256
|
+
if (node?.functionName) {
|
|
257
|
+
return node.functionName;
|
|
258
|
+
}
|
|
259
|
+
return entry.callFrame.functionName;
|
|
260
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// Copyright 2022 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import * as Helpers from '../helpers/helpers.js';
|
|
5
|
+
import * as Types from '../types/types.js';
|
|
6
|
+
// Each thread contains events. Events indicate the thread and process IDs, which are
|
|
7
|
+
// used to store the event in the correct process thread entry below.
|
|
8
|
+
let unpairedAsyncEvents = [];
|
|
9
|
+
let legacyScreenshotEvents = [];
|
|
10
|
+
let modernScreenshotEvents = [];
|
|
11
|
+
let syntheticScreenshots = [];
|
|
12
|
+
let frameSequenceToTs = {};
|
|
13
|
+
export function reset() {
|
|
14
|
+
unpairedAsyncEvents = [];
|
|
15
|
+
legacyScreenshotEvents = [];
|
|
16
|
+
syntheticScreenshots = [];
|
|
17
|
+
modernScreenshotEvents = [];
|
|
18
|
+
frameSequenceToTs = {};
|
|
19
|
+
}
|
|
20
|
+
export function handleEvent(event) {
|
|
21
|
+
if (Types.Events.isLegacyScreenshot(event)) {
|
|
22
|
+
legacyScreenshotEvents.push(event);
|
|
23
|
+
}
|
|
24
|
+
else if (Types.Events.isScreenshot(event)) {
|
|
25
|
+
modernScreenshotEvents.push(event);
|
|
26
|
+
}
|
|
27
|
+
else if (Types.Events.isPipelineReporter(event)) {
|
|
28
|
+
unpairedAsyncEvents.push(event);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function finalize() {
|
|
32
|
+
const pipelineReporterEvents = Helpers.Trace.createMatchedSortedSyntheticEvents(unpairedAsyncEvents);
|
|
33
|
+
frameSequenceToTs = Object.fromEntries(pipelineReporterEvents.map(evt => {
|
|
34
|
+
const args = evt.args.data.beginEvent.args;
|
|
35
|
+
const frameReporter = 'frame_reporter' in args ? args.frame_reporter : args.chrome_frame_reporter;
|
|
36
|
+
const frameSequenceId = frameReporter.frame_sequence;
|
|
37
|
+
const presentationTs = Types.Timing.Micro(evt.ts + evt.dur);
|
|
38
|
+
return [frameSequenceId, presentationTs];
|
|
39
|
+
}));
|
|
40
|
+
for (const snapshotEvent of legacyScreenshotEvents) {
|
|
41
|
+
const { cat, name, ph, pid, tid } = snapshotEvent;
|
|
42
|
+
const syntheticEvent = Helpers.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({
|
|
43
|
+
rawSourceEvent: snapshotEvent,
|
|
44
|
+
cat,
|
|
45
|
+
name,
|
|
46
|
+
ph,
|
|
47
|
+
pid,
|
|
48
|
+
tid,
|
|
49
|
+
// TODO(paulirish, crbug.com/41363012): investigate why getPresentationTimestamp(snapshotEvent) seems less accurate. Resolve screenshot timing inaccuracy.
|
|
50
|
+
// `getPresentationTimestamp(snapshotEvent) - snapshotEvent.ts` is how many microsec the screenshot should be adjusted to the right/later
|
|
51
|
+
ts: snapshotEvent.ts,
|
|
52
|
+
args: {
|
|
53
|
+
dataUri: `data:image/jpg;base64,${snapshotEvent.args.snapshot}`,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
syntheticScreenshots.push(syntheticEvent);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function screenshotImageDataUri(event) {
|
|
60
|
+
if (Types.Events.isLegacySyntheticScreenshot(event)) {
|
|
61
|
+
return event.args.dataUri;
|
|
62
|
+
}
|
|
63
|
+
return `data:image/jpg;base64,${event.args.snapshot}`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Correct the screenshot timestamps
|
|
67
|
+
* The screenshot 'snapshot object' trace event has the "frame sequence number" attached as an ID.
|
|
68
|
+
* We match that up with the "PipelineReporter" trace events as they terminate at presentation.
|
|
69
|
+
* Presentation == when the pixels hit the screen. AKA Swap on the GPU
|
|
70
|
+
*/
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
72
|
+
function getPresentationTimestamp(screenshotEvent) {
|
|
73
|
+
const frameSequence = parseInt(screenshotEvent.id, 16);
|
|
74
|
+
// If it's 1, then it's an old trace (before https://crrev.com/c/4957973) and cannot be corrected.
|
|
75
|
+
if (frameSequence === 1) {
|
|
76
|
+
return screenshotEvent.ts;
|
|
77
|
+
}
|
|
78
|
+
// The screenshot trace event's `ts` reflects the "expected display time" which is ESTIMATE.
|
|
79
|
+
// It is set by the compositor frame sink from the `expected_display_time`, which is based on a previously known
|
|
80
|
+
// frame start PLUS the vsync interval (eg 16.6ms)
|
|
81
|
+
const updatedTs = frameSequenceToTs[frameSequence];
|
|
82
|
+
// Do we always find a match? No...
|
|
83
|
+
// We generally don't match the very first screenshot and, sometimes, the last
|
|
84
|
+
// The very first screenshot is requested immediately (even if nothing is painting). As a result there's no compositor
|
|
85
|
+
// instrumentation running alongside.
|
|
86
|
+
// The last one is sometimes missing as because the trace terminates right before the associated PipelineReporter is emitted.
|
|
87
|
+
return updatedTs ?? screenshotEvent.ts;
|
|
88
|
+
}
|
|
89
|
+
export function data() {
|
|
90
|
+
return {
|
|
91
|
+
legacySyntheticScreenshots: syntheticScreenshots.length ? syntheticScreenshots : null,
|
|
92
|
+
screenshots: modernScreenshotEvents.length ? modernScreenshotEvents : null,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export function deps() {
|
|
96
|
+
return ['Meta'];
|
|
97
|
+
}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
// Copyright 2025 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import * as Common from '../../../core/common/common.js';
|
|
5
|
+
import * as Platform from '../../../core/platform/platform.js';
|
|
6
|
+
import * as Types from '../types/types.js';
|
|
7
|
+
import { data as metaHandlerData } from './MetaHandler.js';
|
|
8
|
+
import { data as networkRequestsHandlerData } from './NetworkRequestsHandler.js';
|
|
9
|
+
let scriptById = new Map();
|
|
10
|
+
let frameIdByIsolate = new Map();
|
|
11
|
+
export function deps() {
|
|
12
|
+
return ['Meta', 'NetworkRequests'];
|
|
13
|
+
}
|
|
14
|
+
export function reset() {
|
|
15
|
+
scriptById = new Map();
|
|
16
|
+
frameIdByIsolate = new Map();
|
|
17
|
+
}
|
|
18
|
+
export function handleEvent(event) {
|
|
19
|
+
const getOrMakeScript = (isolate, scriptIdAsNumber) => {
|
|
20
|
+
const scriptId = String(scriptIdAsNumber);
|
|
21
|
+
const key = `${isolate}.${scriptId}`;
|
|
22
|
+
return Platform.MapUtilities.getWithDefault(scriptById, key, () => ({ isolate, scriptId, frame: '', ts: event.ts }));
|
|
23
|
+
};
|
|
24
|
+
if (Types.Events.isRundownScriptCompiled(event) && event.args.data) {
|
|
25
|
+
const { isolate, scriptId, frame } = event.args.data;
|
|
26
|
+
const script = getOrMakeScript(isolate, scriptId);
|
|
27
|
+
script.frame = frame;
|
|
28
|
+
script.ts = event.ts;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (Types.Events.isRundownScript(event)) {
|
|
32
|
+
const { isolate, scriptId, url, sourceUrl, sourceMapUrl, sourceMapUrlElided } = event.args.data;
|
|
33
|
+
const script = getOrMakeScript(isolate, scriptId);
|
|
34
|
+
if (!script.frame) {
|
|
35
|
+
script.frame = frameIdByIsolate.get(String(isolate)) ?? '';
|
|
36
|
+
}
|
|
37
|
+
script.url = url;
|
|
38
|
+
script.ts = event.ts;
|
|
39
|
+
if (sourceUrl) {
|
|
40
|
+
script.sourceUrl = sourceUrl;
|
|
41
|
+
}
|
|
42
|
+
// Older traces may have data source map urls. Those can be very large, so a change
|
|
43
|
+
// was made to elide them from the trace.
|
|
44
|
+
// If elided, a fresh trace will fetch the source map from the Script model
|
|
45
|
+
// (see TimelinePanel getExistingSourceMap). If not fresh, the source map is resolved
|
|
46
|
+
// instead in this handler via `findCachedRawSourceMap`.
|
|
47
|
+
if (sourceMapUrlElided) {
|
|
48
|
+
script.sourceMapUrlElided = true;
|
|
49
|
+
}
|
|
50
|
+
else if (sourceMapUrl) {
|
|
51
|
+
script.sourceMapUrl = sourceMapUrl;
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (Types.Events.isRundownScriptSource(event)) {
|
|
56
|
+
const { isolate, scriptId, sourceText } = event.args.data;
|
|
57
|
+
const script = getOrMakeScript(isolate, scriptId);
|
|
58
|
+
script.content = sourceText;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (Types.Events.isRundownScriptSourceLarge(event)) {
|
|
62
|
+
const { isolate, scriptId, sourceText } = event.args.data;
|
|
63
|
+
const script = getOrMakeScript(isolate, scriptId);
|
|
64
|
+
script.content = (script.content ?? '') + sourceText;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Setup frameIdByIsolate, which is used only in the case that we are missing
|
|
68
|
+
// rundown events for a script. We won't get a frame association from the rundown
|
|
69
|
+
// events if the recording started only after the script was first compiled. In
|
|
70
|
+
// that scenario, derive the frame via the isolate / FunctionCall events.
|
|
71
|
+
// TODO: ideally, we put the frame on ScriptCatchup event. So much easier. This approach has some
|
|
72
|
+
// issues.
|
|
73
|
+
if (Types.Events.isFunctionCall(event) && event.args.data?.isolate && event.args.data.frame) {
|
|
74
|
+
const { isolate, frame } = event.args.data;
|
|
75
|
+
const existingValue = frameIdByIsolate.get(isolate);
|
|
76
|
+
if (existingValue !== frame) {
|
|
77
|
+
frameIdByIsolate.set(isolate, frame);
|
|
78
|
+
// Update the scripts we discovered but without knowing their frame.
|
|
79
|
+
for (const script of scriptById.values()) {
|
|
80
|
+
if (!script.frame && script.isolate === isolate) {
|
|
81
|
+
script.frame = frame;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function findFrame(meta, frameId) {
|
|
88
|
+
for (const frames of meta.frameByProcessId?.values()) {
|
|
89
|
+
const frame = frames.get(frameId);
|
|
90
|
+
if (frame) {
|
|
91
|
+
return frame;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
function findNetworkRequest(networkRequests, script) {
|
|
97
|
+
if (!script.url) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return networkRequests.find(request => request.args.data.url === script.url) ?? null;
|
|
101
|
+
}
|
|
102
|
+
function computeMappingEndColumns(map) {
|
|
103
|
+
const result = new Map();
|
|
104
|
+
const mappings = map.mappings();
|
|
105
|
+
for (let i = 0; i < mappings.length - 1; i++) {
|
|
106
|
+
const mapping = mappings[i];
|
|
107
|
+
const nextMapping = mappings[i + 1];
|
|
108
|
+
if (mapping.lineNumber === nextMapping.lineNumber) {
|
|
109
|
+
result.set(mapping, nextMapping.columnNumber);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Now, all but the last mapping on each line will have a value in this map.
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Using a script's contents and source map, attribute every generated byte to an authored source file.
|
|
117
|
+
*/
|
|
118
|
+
function computeGeneratedFileSizes(script) {
|
|
119
|
+
if (!script.sourceMap) {
|
|
120
|
+
throw new Error('expected source map');
|
|
121
|
+
}
|
|
122
|
+
const map = script.sourceMap;
|
|
123
|
+
const content = script.content ?? '';
|
|
124
|
+
const contentLength = content.length;
|
|
125
|
+
const lines = content.split('\n');
|
|
126
|
+
const files = {};
|
|
127
|
+
const totalBytes = contentLength;
|
|
128
|
+
let unmappedBytes = totalBytes;
|
|
129
|
+
const mappingEndCols = computeMappingEndColumns(script.sourceMap);
|
|
130
|
+
for (const mapping of map.mappings()) {
|
|
131
|
+
const source = mapping.sourceURL;
|
|
132
|
+
const lineNum = mapping.lineNumber;
|
|
133
|
+
const colNum = mapping.columnNumber;
|
|
134
|
+
const lastColNum = mappingEndCols.get(mapping);
|
|
135
|
+
// Webpack sometimes emits null mappings.
|
|
136
|
+
// https://github.com/mozilla/source-map/pull/303
|
|
137
|
+
if (!source) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Lines and columns are zero-based indices. Visually, lines are shown as a 1-based index.
|
|
141
|
+
const line = lines[lineNum];
|
|
142
|
+
if (line === null || line === undefined) {
|
|
143
|
+
const errorMessage = `${map.url()} mapping for line out of bounds: ${lineNum + 1}`;
|
|
144
|
+
return { errorMessage };
|
|
145
|
+
}
|
|
146
|
+
if (colNum > line.length) {
|
|
147
|
+
const errorMessage = `${map.url()} mapping for column out of bounds: ${lineNum + 1}:${colNum}`;
|
|
148
|
+
return { errorMessage };
|
|
149
|
+
}
|
|
150
|
+
let mappingLength = 0;
|
|
151
|
+
if (lastColNum !== undefined) {
|
|
152
|
+
if (lastColNum > line.length) {
|
|
153
|
+
const errorMessage = `${map.url()} mapping for last column out of bounds: ${lineNum + 1}:${lastColNum}`;
|
|
154
|
+
return { errorMessage };
|
|
155
|
+
}
|
|
156
|
+
mappingLength = lastColNum - colNum;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Add +1 to account for the newline.
|
|
160
|
+
mappingLength = line.length - colNum + 1;
|
|
161
|
+
}
|
|
162
|
+
files[source] = (files[source] || 0) + mappingLength;
|
|
163
|
+
unmappedBytes -= mappingLength;
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
files,
|
|
167
|
+
unmappedBytes,
|
|
168
|
+
totalBytes,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
export function getScriptGeneratedSizes(script) {
|
|
172
|
+
if (script.sourceMap && !script.sizes) {
|
|
173
|
+
script.sizes = computeGeneratedFileSizes(script);
|
|
174
|
+
}
|
|
175
|
+
return script.sizes ?? null;
|
|
176
|
+
}
|
|
177
|
+
function findCachedRawSourceMap(script, options) {
|
|
178
|
+
if (options.isFreshRecording || !options.metadata?.sourceMaps) {
|
|
179
|
+
// Exit if this is not a loaded trace w/ source maps in the metadata.
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// For elided data url source maps, search the metadata source maps by script url.
|
|
183
|
+
if (script.sourceMapUrlElided) {
|
|
184
|
+
if (!script.url) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const cachedSourceMap = options.metadata.sourceMaps.find(m => m.url === script.url);
|
|
188
|
+
if (cachedSourceMap) {
|
|
189
|
+
return cachedSourceMap.sourceMap;
|
|
190
|
+
}
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (!script.sourceMapUrl) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Otherwise, search by source map url.
|
|
197
|
+
// Note: early enhanced traces may have this field set for data urls. Ignore those,
|
|
198
|
+
// as they were never stored in metadata sourcemap.
|
|
199
|
+
const isDataUrl = script.sourceMapUrl.startsWith('data:');
|
|
200
|
+
if (!isDataUrl) {
|
|
201
|
+
const cachedSourceMap = options.metadata.sourceMaps.find(m => m.sourceMapUrl === script.sourceMapUrl);
|
|
202
|
+
if (cachedSourceMap) {
|
|
203
|
+
return cachedSourceMap.sourceMap;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
export async function finalize(options) {
|
|
209
|
+
const meta = metaHandlerData();
|
|
210
|
+
const networkRequests = [...networkRequestsHandlerData().byId.values()];
|
|
211
|
+
const documentUrls = new Set();
|
|
212
|
+
for (const frames of meta.frameByProcessId.values()) {
|
|
213
|
+
for (const frame of frames.values()) {
|
|
214
|
+
documentUrls.add(frame.url);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
for (const script of scriptById.values()) {
|
|
218
|
+
script.request = findNetworkRequest(networkRequests, script) ?? undefined;
|
|
219
|
+
script.inline = !!script.url && documentUrls.has(script.url);
|
|
220
|
+
}
|
|
221
|
+
if (!options.resolveSourceMap) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const promises = [];
|
|
225
|
+
for (const script of scriptById.values()) {
|
|
226
|
+
// No frame or url means the script came from somewhere we don't care about.
|
|
227
|
+
// Note: scripts from inline <SCRIPT> elements use the url of the HTML document,
|
|
228
|
+
// so aren't ignored.
|
|
229
|
+
if (!script.frame || !script.url || (!script.sourceMapUrl && !script.sourceMapUrlElided)) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const frameUrl = findFrame(meta, script.frame)?.url;
|
|
233
|
+
if (!frameUrl) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
// If there is a `sourceURL` magic comment, resolve the compiledUrl against the frame url.
|
|
237
|
+
// example: `// #sourceURL=foo.js` for target frame https://www.example.com/home -> https://www.example.com/home/foo.js
|
|
238
|
+
let sourceUrl = script.url;
|
|
239
|
+
if (script.sourceUrl) {
|
|
240
|
+
sourceUrl = Common.ParsedURL.ParsedURL.completeURL(frameUrl, script.sourceUrl) ?? script.sourceUrl;
|
|
241
|
+
}
|
|
242
|
+
let sourceMapUrl;
|
|
243
|
+
if (script.sourceMapUrl) {
|
|
244
|
+
// Resolve the source map url. The value given by v8 may be relative, so resolve it here.
|
|
245
|
+
// This process should match the one in `SourceMapManager.attachSourceMap`.
|
|
246
|
+
sourceMapUrl =
|
|
247
|
+
Common.ParsedURL.ParsedURL.completeURL(sourceUrl, script.sourceMapUrl);
|
|
248
|
+
if (!sourceMapUrl) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
script.sourceMapUrl = sourceMapUrl;
|
|
252
|
+
}
|
|
253
|
+
const params = {
|
|
254
|
+
scriptId: script.scriptId,
|
|
255
|
+
scriptUrl: script.url,
|
|
256
|
+
sourceUrl: sourceUrl,
|
|
257
|
+
sourceMapUrl: sourceMapUrl ?? '',
|
|
258
|
+
frame: script.frame,
|
|
259
|
+
cachedRawSourceMap: findCachedRawSourceMap(script, options),
|
|
260
|
+
};
|
|
261
|
+
const promise = options.resolveSourceMap(params).then(sourceMap => {
|
|
262
|
+
if (sourceMap) {
|
|
263
|
+
script.sourceMap = sourceMap;
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
promises.push(promise.catch(e => {
|
|
267
|
+
console.error('Uncaught error when resolving source map', params, e);
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
await Promise.all(promises);
|
|
271
|
+
}
|
|
272
|
+
export function data() {
|
|
273
|
+
return {
|
|
274
|
+
scripts: [...scriptById.values()],
|
|
275
|
+
};
|
|
276
|
+
}
|