devtools-tracing 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/generate.ts +643 -0
- package/index.ts +16 -0
- package/lib/front_end/core/common/App.ts +7 -0
- package/lib/front_end/core/common/AppProvider.ts +32 -0
- package/lib/front_end/core/common/Base64.ts +47 -0
- package/lib/front_end/core/common/CharacterIdMap.ts +30 -0
- package/lib/front_end/core/common/Color.ts +2506 -0
- package/lib/front_end/core/common/ColorConverter.ts +402 -0
- package/lib/front_end/core/common/ColorUtils.ts +252 -0
- package/lib/front_end/core/common/Console.ts +114 -0
- package/lib/front_end/core/common/Debouncer.ts +15 -0
- package/lib/front_end/core/common/EventTarget.ts +52 -0
- package/lib/front_end/core/common/Gzip.ts +74 -0
- package/lib/front_end/core/common/JavaScriptMetaData.ts +29 -0
- package/lib/front_end/core/common/Lazy.ts +31 -0
- package/lib/front_end/core/common/Linkifier.ts +55 -0
- package/lib/front_end/core/common/MapWithDefault.ts +26 -0
- package/lib/front_end/core/common/Mutex.ts +55 -0
- package/lib/front_end/core/common/Object.ts +145 -0
- package/lib/front_end/core/common/ParsedURL.ts +554 -0
- package/lib/front_end/core/common/Progress.ts +180 -0
- package/lib/front_end/core/common/QueryParamHandler.ts +7 -0
- package/lib/front_end/core/common/ResolverBase.ts +85 -0
- package/lib/front_end/core/common/ResourceType.ts +588 -0
- package/lib/front_end/core/common/ReturnToPanel.ts +17 -0
- package/lib/front_end/core/common/Revealer.ts +192 -0
- package/lib/front_end/core/common/Runnable.ts +41 -0
- package/lib/front_end/core/common/SegmentedRange.ts +87 -0
- package/lib/front_end/core/common/SettingRegistration.ts +339 -0
- package/lib/front_end/core/common/Settings.ts +1497 -0
- package/lib/front_end/core/common/SimpleHistoryManager.ts +124 -0
- package/lib/front_end/core/common/StringOutputStream.ts +26 -0
- package/lib/front_end/core/common/TextDictionary.ts +48 -0
- package/lib/front_end/core/common/Throttler.ts +99 -0
- package/lib/front_end/core/common/Trie.ts +152 -0
- package/lib/front_end/core/common/Worker.ts +60 -0
- package/lib/front_end/core/common/common.ts +81 -0
- package/lib/front_end/core/host/AidaClient.ts +733 -0
- package/lib/front_end/core/host/GdpClient.ts +316 -0
- package/lib/front_end/core/host/InspectorFrontendHost.ts +648 -0
- package/lib/front_end/core/host/InspectorFrontendHostAPI.ts +551 -0
- package/lib/front_end/core/host/Platform.ts +76 -0
- package/lib/front_end/core/host/ResourceLoader.ts +282 -0
- package/lib/front_end/core/host/UserMetrics.ts +1230 -0
- package/lib/front_end/core/host/host.ts +23 -0
- package/lib/front_end/core/i18n/ByteUtilities.ts +82 -0
- package/lib/front_end/core/i18n/DevToolsLocale.ts +87 -0
- package/lib/front_end/core/i18n/NumberFormatter.ts +82 -0
- package/lib/front_end/core/i18n/i18n.ts +17 -0
- package/lib/front_end/core/i18n/i18nImpl.ts +204 -0
- package/lib/front_end/core/i18n/i18nTypes.ts +10 -0
- package/lib/front_end/core/i18n/locales.js +14 -0
- package/lib/front_end/core/i18n/time-utilities.ts +174 -0
- package/lib/front_end/core/platform/ArrayUtilities.ts +271 -0
- package/lib/front_end/core/platform/Brand.ts +23 -0
- package/lib/front_end/core/platform/Constructor.ts +10 -0
- package/lib/front_end/core/platform/DOMUtilities.ts +138 -0
- package/lib/front_end/core/platform/DateUtilities.ts +15 -0
- package/lib/front_end/core/platform/DevToolsPath.ts +53 -0
- package/lib/front_end/core/platform/KeyboardUtilities.ts +38 -0
- package/lib/front_end/core/platform/MapUtilities.ts +95 -0
- package/lib/front_end/core/platform/MimeType.ts +175 -0
- package/lib/front_end/core/platform/NumberUtilities.ts +80 -0
- package/lib/front_end/core/platform/StringUtilities.ts +588 -0
- package/lib/front_end/core/platform/Timing.ts +17 -0
- package/lib/front_end/core/platform/TypedArrayUtilities.ts +189 -0
- package/lib/front_end/core/platform/TypescriptUtilities.ts +86 -0
- package/lib/front_end/core/platform/UIString.ts +39 -0
- package/lib/front_end/core/platform/UserVisibleError.ts +28 -0
- package/lib/front_end/core/platform/platform.ts +45 -0
- package/lib/front_end/core/protocol_client/ConnectionTransport.ts +26 -0
- package/lib/front_end/core/protocol_client/InspectorBackend.ts +1050 -0
- package/lib/front_end/core/protocol_client/NodeURL.ts +42 -0
- package/lib/front_end/core/protocol_client/protocol_client.ts +13 -0
- package/lib/front_end/core/root/Runtime.ts +609 -0
- package/lib/front_end/core/root/root.ts +6 -0
- package/lib/front_end/core/sdk/AccessibilityModel.ts +353 -0
- package/lib/front_end/core/sdk/AnimationModel.ts +1041 -0
- package/lib/front_end/core/sdk/AutofillModel.ts +184 -0
- package/lib/front_end/core/sdk/CPUProfilerModel.ts +148 -0
- package/lib/front_end/core/sdk/CPUThrottlingManager.ts +282 -0
- package/lib/front_end/core/sdk/CSSContainerQuery.ts +139 -0
- package/lib/front_end/core/sdk/CSSFontFace.ts +40 -0
- package/lib/front_end/core/sdk/CSSLayer.ts +30 -0
- package/lib/front_end/core/sdk/CSSMatchedStyles.ts +1646 -0
- package/lib/front_end/core/sdk/CSSMedia.ts +121 -0
- package/lib/front_end/core/sdk/CSSMetadata.ts +1647 -0
- package/lib/front_end/core/sdk/CSSModel.ts +1128 -0
- package/lib/front_end/core/sdk/CSSProperty.ts +384 -0
- package/lib/front_end/core/sdk/CSSPropertyParser.ts +681 -0
- package/lib/front_end/core/sdk/CSSPropertyParserMatchers.ts +1395 -0
- package/lib/front_end/core/sdk/CSSQuery.ts +72 -0
- package/lib/front_end/core/sdk/CSSRule.ts +465 -0
- package/lib/front_end/core/sdk/CSSScope.ts +30 -0
- package/lib/front_end/core/sdk/CSSStartingStyle.ts +29 -0
- package/lib/front_end/core/sdk/CSSStyleDeclaration.ts +313 -0
- package/lib/front_end/core/sdk/CSSStyleSheetHeader.ts +196 -0
- package/lib/front_end/core/sdk/CSSSupports.ts +33 -0
- package/lib/front_end/core/sdk/CategorizedBreakpoint.ts +64 -0
- package/lib/front_end/core/sdk/ChildTargetManager.ts +314 -0
- package/lib/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +62 -0
- package/lib/front_end/core/sdk/Connections.ts +293 -0
- package/lib/front_end/core/sdk/ConsoleModel.ts +808 -0
- package/lib/front_end/core/sdk/ConsoleModelTypes.ts +15 -0
- package/lib/front_end/core/sdk/Cookie.ts +319 -0
- package/lib/front_end/core/sdk/CookieModel.ts +239 -0
- package/lib/front_end/core/sdk/CookieParser.ts +185 -0
- package/lib/front_end/core/sdk/DOMDebuggerModel.ts +787 -0
- package/lib/front_end/core/sdk/DOMModel.ts +1961 -0
- package/lib/front_end/core/sdk/DebuggerModel.ts +1605 -0
- package/lib/front_end/core/sdk/EmulationModel.ts +648 -0
- package/lib/front_end/core/sdk/EnhancedTracesParser.ts +515 -0
- package/lib/front_end/core/sdk/EventBreakpointsModel.ts +183 -0
- package/lib/front_end/core/sdk/FrameAssociated.ts +11 -0
- package/lib/front_end/core/sdk/FrameManager.ts +259 -0
- package/lib/front_end/core/sdk/HeapProfilerModel.ts +225 -0
- package/lib/front_end/core/sdk/HttpReasonPhraseStrings.ts +77 -0
- package/lib/front_end/core/sdk/IOModel.ts +91 -0
- package/lib/front_end/core/sdk/IsolateManager.ts +257 -0
- package/lib/front_end/core/sdk/IssuesModel.ts +70 -0
- package/lib/front_end/core/sdk/LayerTreeBase.ts +169 -0
- package/lib/front_end/core/sdk/LogModel.ts +56 -0
- package/lib/front_end/core/sdk/NetworkManager.ts +2823 -0
- package/lib/front_end/core/sdk/NetworkRequest.ts +2253 -0
- package/lib/front_end/core/sdk/OverlayColorGenerator.ts +52 -0
- package/lib/front_end/core/sdk/OverlayModel.ts +1011 -0
- package/lib/front_end/core/sdk/OverlayPersistentHighlighter.ts +522 -0
- package/lib/front_end/core/sdk/PageLoad.ts +35 -0
- package/lib/front_end/core/sdk/PageResourceLoader.ts +435 -0
- package/lib/front_end/core/sdk/PaintProfiler.ts +110 -0
- package/lib/front_end/core/sdk/PerformanceMetricsModel.ts +84 -0
- package/lib/front_end/core/sdk/PreloadingModel.ts +863 -0
- package/lib/front_end/core/sdk/RehydratingConnection.ts +386 -0
- package/lib/front_end/core/sdk/RehydratingObject.ts +66 -0
- package/lib/front_end/core/sdk/RemoteObject.ts +1160 -0
- package/lib/front_end/core/sdk/Resource.ts +232 -0
- package/lib/front_end/core/sdk/ResourceTreeModel.ts +1160 -0
- package/lib/front_end/core/sdk/RuntimeModel.ts +732 -0
- package/lib/front_end/core/sdk/SDKModel.ts +65 -0
- package/lib/front_end/core/sdk/ScopeTreeCache.ts +45 -0
- package/lib/front_end/core/sdk/ScreenCaptureModel.ts +255 -0
- package/lib/front_end/core/sdk/Script.ts +534 -0
- package/lib/front_end/core/sdk/SecurityOriginManager.ts +76 -0
- package/lib/front_end/core/sdk/ServerSentEvents.ts +80 -0
- package/lib/front_end/core/sdk/ServerSentEventsProtocol.ts +122 -0
- package/lib/front_end/core/sdk/ServerTiming.ts +260 -0
- package/lib/front_end/core/sdk/ServiceWorkerCacheModel.ts +377 -0
- package/lib/front_end/core/sdk/ServiceWorkerManager.ts +605 -0
- package/lib/front_end/core/sdk/SourceMap.ts +867 -0
- package/lib/front_end/core/sdk/SourceMapCache.ts +54 -0
- package/lib/front_end/core/sdk/SourceMapFunctionRanges.ts +156 -0
- package/lib/front_end/core/sdk/SourceMapManager.ts +239 -0
- package/lib/front_end/core/sdk/SourceMapScopeChainEntry.ts +189 -0
- package/lib/front_end/core/sdk/SourceMapScopesInfo.ts +508 -0
- package/lib/front_end/core/sdk/StorageBucketsModel.ts +204 -0
- package/lib/front_end/core/sdk/StorageKeyManager.ts +98 -0
- package/lib/front_end/core/sdk/Target.ts +332 -0
- package/lib/front_end/core/sdk/TargetManager.ts +453 -0
- package/lib/front_end/core/sdk/TraceObject.ts +61 -0
- package/lib/front_end/core/sdk/WebAuthnModel.ts +104 -0
- package/lib/front_end/core/sdk/sdk.ts +174 -0
- package/lib/front_end/entrypoints/formatter_worker/FormatterActions.ts +59 -0
- package/lib/front_end/generated/InspectorBackendCommands.js +1617 -0
- package/lib/front_end/generated/SupportedCSSProperties.js +7512 -0
- package/lib/front_end/generated/protocol-proxy-api.d.ts +5022 -0
- package/lib/front_end/generated/protocol.ts +22014 -0
- package/lib/front_end/models/cpu_profile/CPUProfileDataModel.ts +571 -0
- package/lib/front_end/models/cpu_profile/ProfileTreeModel.ts +103 -0
- package/lib/front_end/models/cpu_profile/cpu_profile.ts +11 -0
- package/lib/front_end/models/formatter/FormatterWorkerPool.ts +219 -0
- package/lib/front_end/models/formatter/ScriptFormatter.ts +112 -0
- package/lib/front_end/models/formatter/formatter.ts +8 -0
- package/lib/front_end/models/text_utils/CodeMirrorUtils.ts +37 -0
- package/lib/front_end/models/text_utils/ContentData.ts +199 -0
- package/lib/front_end/models/text_utils/ContentProvider.ts +68 -0
- package/lib/front_end/models/text_utils/StaticContentProvider.ts +49 -0
- package/lib/front_end/models/text_utils/StreamingContentData.ts +108 -0
- package/lib/front_end/models/text_utils/Text.ts +90 -0
- package/lib/front_end/models/text_utils/TextCursor.ts +44 -0
- package/lib/front_end/models/text_utils/TextRange.ts +266 -0
- package/lib/front_end/models/text_utils/TextUtils.ts +401 -0
- package/lib/front_end/models/text_utils/WasmDisassembly.ts +87 -0
- package/lib/front_end/models/text_utils/text_utils.ts +27 -0
- package/lib/front_end/models/trace/EntityMapper.ts +141 -0
- package/lib/front_end/models/trace/EventsSerializer.ts +101 -0
- package/lib/front_end/models/trace/LanternComputationData.ts +438 -0
- package/lib/front_end/models/trace/ModelImpl.ts +236 -0
- package/lib/front_end/models/trace/Name.ts +136 -0
- package/lib/front_end/models/trace/Processor.ts +652 -0
- package/lib/front_end/models/trace/Styles.ts +1138 -0
- package/lib/front_end/models/trace/extras/FilmStrip.ts +78 -0
- package/lib/front_end/models/trace/extras/MainThreadActivity.ts +86 -0
- package/lib/front_end/models/trace/extras/ScriptDuplication.ts +236 -0
- package/lib/front_end/models/trace/extras/StackTraceForEvent.ts +203 -0
- package/lib/front_end/models/trace/extras/ThirdParties.ts +164 -0
- package/lib/front_end/models/trace/extras/TraceFilter.ts +62 -0
- package/lib/front_end/models/trace/extras/TraceTree.ts +701 -0
- package/lib/front_end/models/trace/extras/extras.ts +11 -0
- package/lib/front_end/models/trace/handlers/AnimationFramesHandler.ts +128 -0
- package/lib/front_end/models/trace/handlers/AnimationHandler.ts +36 -0
- package/lib/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +239 -0
- package/lib/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +183 -0
- package/lib/front_end/models/trace/handlers/DOMStatsHandler.ts +31 -0
- package/lib/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +306 -0
- package/lib/front_end/models/trace/handlers/FlowsHandler.ts +175 -0
- package/lib/front_end/models/trace/handlers/FramesHandler.ts +571 -0
- package/lib/front_end/models/trace/handlers/GPUHandler.ts +50 -0
- package/lib/front_end/models/trace/handlers/ImagePaintingHandler.ts +183 -0
- package/lib/front_end/models/trace/handlers/InitiatorsHandler.ts +193 -0
- package/lib/front_end/models/trace/handlers/InvalidationsHandler.ts +168 -0
- package/lib/front_end/models/trace/handlers/LargestImagePaintHandler.ts +109 -0
- package/lib/front_end/models/trace/handlers/LargestTextPaintHandler.ts +35 -0
- package/lib/front_end/models/trace/handlers/LayerTreeHandler.ts +123 -0
- package/lib/front_end/models/trace/handlers/LayoutShiftsHandler.ts +573 -0
- package/lib/front_end/models/trace/handlers/MemoryHandler.ts +31 -0
- package/lib/front_end/models/trace/handlers/MetaHandler.ts +525 -0
- package/lib/front_end/models/trace/handlers/ModelHandlers.ts +34 -0
- package/lib/front_end/models/trace/handlers/NetworkRequestsHandler.ts +672 -0
- package/lib/front_end/models/trace/handlers/PageFramesHandler.ts +52 -0
- package/lib/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +460 -0
- package/lib/front_end/models/trace/handlers/RendererHandler.ts +428 -0
- package/lib/front_end/models/trace/handlers/SamplesHandler.ts +271 -0
- package/lib/front_end/models/trace/handlers/ScreenshotsHandler.ts +122 -0
- package/lib/front_end/models/trace/handlers/ScriptsHandler.ts +336 -0
- package/lib/front_end/models/trace/handlers/SelectorStatsHandler.ts +110 -0
- package/lib/front_end/models/trace/handlers/Threads.ts +139 -0
- package/lib/front_end/models/trace/handlers/UserInteractionsHandler.ts +400 -0
- package/lib/front_end/models/trace/handlers/UserTimingsHandler.ts +233 -0
- package/lib/front_end/models/trace/handlers/WarningsHandler.ts +162 -0
- package/lib/front_end/models/trace/handlers/WorkersHandler.ts +45 -0
- package/lib/front_end/models/trace/handlers/handlers.ts +8 -0
- package/lib/front_end/models/trace/handlers/helpers.ts +196 -0
- package/lib/front_end/models/trace/handlers/types.ts +75 -0
- package/lib/front_end/models/trace/helpers/Extensions.ts +54 -0
- package/lib/front_end/models/trace/helpers/Network.ts +129 -0
- package/lib/front_end/models/trace/helpers/SamplesIntegrator.ts +544 -0
- package/lib/front_end/models/trace/helpers/SyntheticEvents.ts +87 -0
- package/lib/front_end/models/trace/helpers/Timing.ts +248 -0
- package/lib/front_end/models/trace/helpers/Trace.ts +928 -0
- package/lib/front_end/models/trace/helpers/TreeHelpers.ts +320 -0
- package/lib/front_end/models/trace/helpers/helpers.ts +11 -0
- package/lib/front_end/models/trace/insights/CLSCulprits.ts +668 -0
- package/lib/front_end/models/trace/insights/Cache.ts +269 -0
- package/lib/front_end/models/trace/insights/Common.ts +453 -0
- package/lib/front_end/models/trace/insights/DOMSize.ts +223 -0
- package/lib/front_end/models/trace/insights/DocumentLatency.ts +319 -0
- package/lib/front_end/models/trace/insights/DuplicatedJavaScript.ts +126 -0
- package/lib/front_end/models/trace/insights/FontDisplay.ts +119 -0
- package/lib/front_end/models/trace/insights/ForcedReflow.ts +220 -0
- package/lib/front_end/models/trace/insights/INPBreakdown.ts +171 -0
- package/lib/front_end/models/trace/insights/ImageDelivery.ts +348 -0
- package/lib/front_end/models/trace/insights/LCPBreakdown.ts +268 -0
- package/lib/front_end/models/trace/insights/LCPDiscovery.ts +237 -0
- package/lib/front_end/models/trace/insights/LegacyJavaScript.ts +138 -0
- package/lib/front_end/models/trace/insights/Models.ts +22 -0
- package/lib/front_end/models/trace/insights/ModernHTTP.ts +257 -0
- package/lib/front_end/models/trace/insights/NetworkDependencyTree.ts +726 -0
- package/lib/front_end/models/trace/insights/RenderBlocking.ts +257 -0
- package/lib/front_end/models/trace/insights/SlowCSSSelector.ts +175 -0
- package/lib/front_end/models/trace/insights/Statistics.ts +101 -0
- package/lib/front_end/models/trace/insights/ThirdParties.ts +130 -0
- package/lib/front_end/models/trace/insights/Viewport.ts +138 -0
- package/lib/front_end/models/trace/insights/insights.ts +10 -0
- package/lib/front_end/models/trace/insights/types.ts +157 -0
- package/lib/front_end/models/trace/lantern/core/LanternError.ts +7 -0
- package/lib/front_end/models/trace/lantern/core/NetworkAnalyzer.ts +619 -0
- package/lib/front_end/models/trace/lantern/core/core.ts +6 -0
- package/lib/front_end/models/trace/lantern/graph/BaseNode.ts +345 -0
- package/lib/front_end/models/trace/lantern/graph/CPUNode.ts +80 -0
- package/lib/front_end/models/trace/lantern/graph/NetworkNode.ts +101 -0
- package/lib/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +636 -0
- package/lib/front_end/models/trace/lantern/graph/graph.ts +8 -0
- package/lib/front_end/models/trace/lantern/lantern.ts +17 -0
- package/lib/front_end/models/trace/lantern/metrics/FirstContentfulPaint.ts +187 -0
- package/lib/front_end/models/trace/lantern/metrics/Interactive.ts +88 -0
- package/lib/front_end/models/trace/lantern/metrics/LargestContentfulPaint.ts +92 -0
- package/lib/front_end/models/trace/lantern/metrics/MaxPotentialFID.ts +72 -0
- package/lib/front_end/models/trace/lantern/metrics/Metric.ts +126 -0
- package/lib/front_end/models/trace/lantern/metrics/SpeedIndex.ts +126 -0
- package/lib/front_end/models/trace/lantern/metrics/TBTUtils.ts +82 -0
- package/lib/front_end/models/trace/lantern/metrics/TotalBlockingTime.ts +112 -0
- package/lib/front_end/models/trace/lantern/metrics/metrics.ts +12 -0
- package/lib/front_end/models/trace/lantern/simulation/ConnectionPool.ts +150 -0
- package/lib/front_end/models/trace/lantern/simulation/Constants.ts +46 -0
- package/lib/front_end/models/trace/lantern/simulation/DNSCache.ts +61 -0
- package/lib/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +196 -0
- package/lib/front_end/models/trace/lantern/simulation/Simulator.ts +556 -0
- package/lib/front_end/models/trace/lantern/simulation/TCPConnection.ts +192 -0
- package/lib/front_end/models/trace/lantern/simulation/simulation.ts +10 -0
- package/lib/front_end/models/trace/lantern/types/Lantern.ts +220 -0
- package/lib/front_end/models/trace/lantern/types/types.ts +5 -0
- package/lib/front_end/models/trace/trace.ts +33 -0
- package/lib/front_end/models/trace/types/Configuration.ts +110 -0
- package/lib/front_end/models/trace/types/Extensions.ts +136 -0
- package/lib/front_end/models/trace/types/File.ts +281 -0
- package/lib/front_end/models/trace/types/Overlays.ts +138 -0
- package/lib/front_end/models/trace/types/Timing.ts +30 -0
- package/lib/front_end/models/trace/types/TraceEvents.ts +3277 -0
- package/lib/front_end/models/trace/types/types.ts +10 -0
- package/lib/front_end/third_party/i18n/LICENSE +202 -0
- package/lib/front_end/third_party/i18n/README.chromium +15 -0
- package/lib/front_end/third_party/i18n/i18n-impl.ts +61 -0
- package/lib/front_end/third_party/i18n/i18n.ts +11 -0
- package/lib/front_end/third_party/i18n/localized-string-set.ts +129 -0
- package/lib/front_end/third_party/intl-messageformat/LICENSE +33 -0
- package/lib/front_end/third_party/intl-messageformat/README.chromium +24 -0
- package/lib/front_end/third_party/intl-messageformat/intl-messageformat-tsconfig.json +16 -0
- package/lib/front_end/third_party/intl-messageformat/intl-messageformat.ts +6 -0
- package/lib/front_end/third_party/intl-messageformat/package/LICENSE.md +33 -0
- package/lib/front_end/third_party/intl-messageformat/package/README.md +3 -0
- package/lib/front_end/third_party/intl-messageformat/package/index.d.ts +6 -0
- package/lib/front_end/third_party/intl-messageformat/package/index.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/index.js +13 -0
- package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.d.ts +5 -0
- package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +1710 -0
- package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +1815 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts +6 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/index.js +10 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts +34 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.js +229 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts +28 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.js +48 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts +34 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +179 -0
- package/lib/front_end/third_party/intl-messageformat/package/package.json +42 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts +34 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/core.js +230 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts +28 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/error.js +51 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts +34 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts.map +1 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/formatters.js +182 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/error.d.ts +79 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/index.d.ts +15 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/parser.d.ts +153 -0
- package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/types.d.ts +139 -0
- package/lib/front_end/third_party/legacy-javascript/LICENSE +202 -0
- package/lib/front_end/third_party/legacy-javascript/README.chromium +13 -0
- package/lib/front_end/third_party/legacy-javascript/legacy-javascript-tsconfig.json +8 -0
- package/lib/front_end/third_party/legacy-javascript/legacy-javascript.ts +3 -0
- package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.d.ts +18 -0
- package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +943 -0
- package/lib/front_end/third_party/legacy-javascript/package.json +8 -0
- package/lib/front_end/third_party/legacy-javascript/rebuild.sh +9 -0
- package/lib/front_end/third_party/third-party-web/LICENSE +20 -0
- package/lib/front_end/third_party/third-party-web/README.chromium +13 -0
- package/lib/front_end/third_party/third-party-web/lib/nostats-subset.d.ts +2 -0
- package/lib/front_end/third_party/third-party-web/lib/nostats-subset.js +149 -0
- package/lib/front_end/third_party/third-party-web/package/LICENSE +20 -0
- package/lib/front_end/third_party/third-party-web/package/README.md +929 -0
- package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive-nostats.json +1 -0
- package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive.json +1 -0
- package/lib/front_end/third_party/third-party-web/package/dist/entities-nostats.json +1 -0
- package/lib/front_end/third_party/third-party-web/package/dist/entities.json +1 -0
- package/lib/front_end/third_party/third-party-web/package/facades.md +46 -0
- package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.d.ts +1 -0
- package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +1 -0
- package/lib/front_end/third_party/third-party-web/package/httparchive-subset.d.ts +1 -0
- package/lib/front_end/third_party/third-party-web/package/httparchive-subset.js +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/__snapshots__/index.test.js.snap +1006 -0
- package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +139 -0
- package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +44 -0
- package/lib/front_end/third_party/third-party-web/package/lib/entities.test.js +27 -0
- package/lib/front_end/third_party/third-party-web/package/lib/index.d.ts +34 -0
- package/lib/front_end/third_party/third-party-web/package/lib/index.js +3 -0
- package/lib/front_end/third_party/third-party-web/package/lib/index.test.js +246 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/faqs.partial.md +36 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/goals.partial.md +9 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/methodology.partial.md +5 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/template.md +151 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-02-01.md +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-03-01.md +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-06.md +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-13.md +14 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2021-01-01.md +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2024-07-01.md +3 -0
- package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.d.ts +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +3 -0
- package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.d.ts +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +3 -0
- package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.d.ts +1 -0
- package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +3 -0
- package/lib/front_end/third_party/third-party-web/package/nostats-subset.d.ts +1 -0
- package/lib/front_end/third_party/third-party-web/package/nostats-subset.js +1 -0
- package/lib/front_end/third_party/third-party-web/package/package.json +46 -0
- package/lib/front_end/third_party/third-party-web/package.json +8 -0
- package/lib/front_end/third_party/third-party-web/rebuild.sh +13 -0
- package/lib/front_end/third_party/third-party-web/third-party-web-tsconfig.json +8 -0
- package/lib/front_end/third_party/third-party-web/third-party-web.ts +3 -0
- package/package.json +24 -0
- package/patches/chrome-devtools-frontend+1.0.1533544.patch +187 -0
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
// Copyright 2023 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
|
+
|
|
5
|
+
import * as Platform from '../../../core/platform/platform.js';
|
|
6
|
+
import * as Helpers from '../helpers/helpers.js';
|
|
7
|
+
import * as Types from '../types/types.js';
|
|
8
|
+
|
|
9
|
+
import {type AuctionWorkletsData, data as auctionWorkletsData} from './AuctionWorkletsHandler.js';
|
|
10
|
+
import {data as layerTreeHandlerData, type LayerTreeData} from './LayerTreeHandler.js';
|
|
11
|
+
import {data as metaHandlerData, type MetaHandlerData} from './MetaHandler.js';
|
|
12
|
+
import {data as rendererHandlerData, type RendererHandlerData} from './RendererHandler.js';
|
|
13
|
+
import * as Threads from './Threads.js';
|
|
14
|
+
import type {HandlerName} from './types.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* IMPORTANT: this handler is slightly different to the rest. This is because
|
|
18
|
+
* it is an adaptation of the TimelineFrameModel that has been used in DevTools
|
|
19
|
+
* for many years. Rather than re-implement all the logic from scratch, instead
|
|
20
|
+
* this handler gathers up the events and instantitates the class in the
|
|
21
|
+
* finalize() method. Once the class has parsed all events, it is used to then
|
|
22
|
+
* return the array of frames.
|
|
23
|
+
*
|
|
24
|
+
* In time we expect to migrate this code to a more "typical" handler.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
let model: TimelineFrameModel|null = null;
|
|
28
|
+
let relevantFrameEvents: Types.Events.Event[] = [];
|
|
29
|
+
|
|
30
|
+
type FrameEvent = Types.Events.BeginFrame|Types.Events.DroppedFrame|Types.Events.RequestMainThreadFrame|
|
|
31
|
+
Types.Events.BeginMainThreadFrame|Types.Events.Commit|Types.Events.CompositeLayers|
|
|
32
|
+
Types.Events.ActivateLayerTree|Types.Events.NeedsBeginFrameChanged|Types.Events.DrawFrame;
|
|
33
|
+
|
|
34
|
+
function isFrameEvent(event: Types.Events.Event): event is FrameEvent {
|
|
35
|
+
return (
|
|
36
|
+
Types.Events.isSetLayerId(event) || Types.Events.isBeginFrame(event) || Types.Events.isDroppedFrame(event) ||
|
|
37
|
+
Types.Events.isRequestMainThreadFrame(event) || Types.Events.isBeginMainThreadFrame(event) ||
|
|
38
|
+
Types.Events.isNeedsBeginFrameChanged(event) ||
|
|
39
|
+
// Note that "Commit" is the replacement for "CompositeLayers" so in a trace
|
|
40
|
+
// we wouldn't expect to see a combination of these. All "new" trace
|
|
41
|
+
// recordings use "Commit", but we can easily support "CompositeLayers" too
|
|
42
|
+
// to not break older traces being imported.
|
|
43
|
+
Types.Events.isCommit(event) || Types.Events.isCompositeLayers(event) ||
|
|
44
|
+
Types.Events.isActivateLayerTree(event) || Types.Events.isDrawFrame(event));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function entryIsTopLevel(entry: Types.Events.Event): boolean {
|
|
48
|
+
const devtoolsTimelineCategory = 'disabled-by-default-devtools.timeline';
|
|
49
|
+
return entry.name === Types.Events.Name.RUN_TASK && entry.cat.includes(devtoolsTimelineCategory);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const MAIN_FRAME_MARKERS = new Set<Types.Events.Name>([
|
|
53
|
+
Types.Events.Name.SCHEDULE_STYLE_RECALCULATION,
|
|
54
|
+
Types.Events.Name.INVALIDATE_LAYOUT,
|
|
55
|
+
Types.Events.Name.BEGIN_MAIN_THREAD_FRAME,
|
|
56
|
+
Types.Events.Name.SCROLL_LAYER,
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
export function reset(): void {
|
|
60
|
+
model = null;
|
|
61
|
+
relevantFrameEvents = [];
|
|
62
|
+
}
|
|
63
|
+
export function handleEvent(event: Types.Events.Event): void {
|
|
64
|
+
// This might seem like a wide set of events to filter for, but these are all
|
|
65
|
+
// the types of events that we care about in the TimelineFrameModel class at
|
|
66
|
+
// the bottom of this file. Previously we would take a copy of an array of
|
|
67
|
+
// all trace events, but on a few test traces, this set of filtered events
|
|
68
|
+
// accounts for about 10% of the total events, so it's a big performance win
|
|
69
|
+
// to deal with a much smaller subset of the data.
|
|
70
|
+
if (isFrameEvent(event) || Types.Events.isLayerTreeHostImplSnapshot(event) || entryIsTopLevel(event) ||
|
|
71
|
+
MAIN_FRAME_MARKERS.has(event.name as Types.Events.Name) || Types.Events.isPaint(event)) {
|
|
72
|
+
relevantFrameEvents.push(event);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export async function finalize(): Promise<void> {
|
|
77
|
+
// We have to sort the events by timestamp, because the model code expects to
|
|
78
|
+
// process events in order.
|
|
79
|
+
Helpers.Trace.sortTraceEventsInPlace(relevantFrameEvents);
|
|
80
|
+
|
|
81
|
+
const modelForTrace = new TimelineFrameModel(
|
|
82
|
+
relevantFrameEvents,
|
|
83
|
+
rendererHandlerData(),
|
|
84
|
+
auctionWorkletsData(),
|
|
85
|
+
metaHandlerData(),
|
|
86
|
+
layerTreeHandlerData(),
|
|
87
|
+
);
|
|
88
|
+
model = modelForTrace;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface FramesData {
|
|
92
|
+
frames: readonly Types.Events.LegacyTimelineFrame[];
|
|
93
|
+
framesById: Readonly<Record<number, Types.Events.LegacyTimelineFrame|undefined>>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function data(): FramesData {
|
|
97
|
+
return {
|
|
98
|
+
frames: model?.frames() ?? [],
|
|
99
|
+
framesById: model?.framesById() ?? {},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function deps(): HandlerName[] {
|
|
104
|
+
return ['Meta', 'Renderer', 'AuctionWorklets', 'LayerTree'];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export class TimelineFrameModel {
|
|
108
|
+
#frames: TimelineFrame[] = [];
|
|
109
|
+
#frameById: Record<number, TimelineFrame> = {};
|
|
110
|
+
#beginFrameQueue: TimelineFrameBeginFrameQueue = new TimelineFrameBeginFrameQueue();
|
|
111
|
+
#lastFrame: TimelineFrame|null = null;
|
|
112
|
+
#mainFrameCommitted = false;
|
|
113
|
+
#mainFrameRequested = false;
|
|
114
|
+
#lastLayerTree: Types.Events.LegacyFrameLayerTreeData|null = null;
|
|
115
|
+
#framePendingActivation: PendingFrame|null = null;
|
|
116
|
+
#framePendingCommit: PendingFrame|null = null;
|
|
117
|
+
#lastBeginFrame: number|null = null;
|
|
118
|
+
#lastNeedsBeginFrame: number|null = null;
|
|
119
|
+
#lastTaskBeginTime: Types.Timing.Micro|null = null;
|
|
120
|
+
#layerTreeId: number|null = null;
|
|
121
|
+
#activeProcessId: Types.Events.ProcessID|null = null;
|
|
122
|
+
#activeThreadId: Types.Events.ThreadID|null = null;
|
|
123
|
+
#layerTreeData: LayerTreeData;
|
|
124
|
+
|
|
125
|
+
constructor(
|
|
126
|
+
allEvents: readonly Types.Events.Event[], rendererData: RendererHandlerData,
|
|
127
|
+
auctionWorkletsData: AuctionWorkletsData, metaData: MetaHandlerData, layerTreeData: LayerTreeData) {
|
|
128
|
+
// We only care about getting threads from the Renderer, not Samples,
|
|
129
|
+
// because Frames don't exist in a CPU Profile (which won't have Renderer
|
|
130
|
+
// threads.)
|
|
131
|
+
const mainThreads = Threads.threadsInRenderer(rendererData, auctionWorkletsData).filter(thread => {
|
|
132
|
+
return thread.type === Threads.ThreadType.MAIN_THREAD && thread.processIsOnMainFrame;
|
|
133
|
+
});
|
|
134
|
+
const threadData = mainThreads.map(thread => {
|
|
135
|
+
return {
|
|
136
|
+
tid: thread.tid,
|
|
137
|
+
pid: thread.pid,
|
|
138
|
+
startTime: thread.entries[0].ts,
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
this.#layerTreeData = layerTreeData;
|
|
143
|
+
this.#addTraceEvents(allEvents, threadData, metaData.mainFrameId);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
framesById(): Readonly<Record<number, TimelineFrame|undefined>> {
|
|
147
|
+
return this.#frameById;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
frames(): TimelineFrame[] {
|
|
151
|
+
return this.#frames;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
#handleBeginFrame(startTime: Types.Timing.Micro, seqId: number): void {
|
|
155
|
+
if (!this.#lastFrame) {
|
|
156
|
+
this.#startFrame(startTime, seqId);
|
|
157
|
+
}
|
|
158
|
+
this.#lastBeginFrame = startTime;
|
|
159
|
+
|
|
160
|
+
this.#beginFrameQueue.addFrameIfNotExists(seqId, startTime, false, false);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
#handleDroppedFrame(startTime: Types.Timing.Micro, seqId: number, isPartial: boolean): void {
|
|
164
|
+
if (!this.#lastFrame) {
|
|
165
|
+
this.#startFrame(startTime, seqId);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// This line handles the case where no BeginFrame event is issued for
|
|
169
|
+
// the dropped frame. In this situation, add a BeginFrame to the queue
|
|
170
|
+
// as if it actually occurred.
|
|
171
|
+
this.#beginFrameQueue.addFrameIfNotExists(seqId, startTime, true, isPartial);
|
|
172
|
+
this.#beginFrameQueue.setDropped(seqId, true);
|
|
173
|
+
this.#beginFrameQueue.setPartial(seqId, isPartial);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
#handleDrawFrame(startTime: Types.Timing.Micro, seqId: number): void {
|
|
177
|
+
if (!this.#lastFrame) {
|
|
178
|
+
this.#startFrame(startTime, seqId);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// - if it wasn't drawn, it didn't happen!
|
|
183
|
+
// - only show frames that either did not wait for the main thread frame or had one committed.
|
|
184
|
+
if (this.#mainFrameCommitted || !this.#mainFrameRequested) {
|
|
185
|
+
if (this.#lastNeedsBeginFrame) {
|
|
186
|
+
const idleTimeEnd = this.#framePendingActivation ? this.#framePendingActivation.triggerTime :
|
|
187
|
+
(this.#lastBeginFrame || this.#lastNeedsBeginFrame);
|
|
188
|
+
if (idleTimeEnd > this.#lastFrame.startTime) {
|
|
189
|
+
this.#lastFrame.idle = true;
|
|
190
|
+
this.#lastBeginFrame = null;
|
|
191
|
+
}
|
|
192
|
+
this.#lastNeedsBeginFrame = null;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const framesToVisualize = this.#beginFrameQueue.processPendingBeginFramesOnDrawFrame(seqId);
|
|
196
|
+
|
|
197
|
+
// Visualize the current frame and all pending frames before it.
|
|
198
|
+
for (const frame of framesToVisualize) {
|
|
199
|
+
const isLastFrameIdle = this.#lastFrame.idle;
|
|
200
|
+
|
|
201
|
+
// If |frame| is the first frame after an idle period, the CPU time
|
|
202
|
+
// will be logged ("committed") under |frame| if applicable.
|
|
203
|
+
this.#startFrame(frame.startTime, seqId);
|
|
204
|
+
if (isLastFrameIdle && this.#framePendingActivation) {
|
|
205
|
+
this.#commitPendingFrame();
|
|
206
|
+
}
|
|
207
|
+
if (frame.isDropped) {
|
|
208
|
+
this.#lastFrame.dropped = true;
|
|
209
|
+
}
|
|
210
|
+
if (frame.isPartial) {
|
|
211
|
+
this.#lastFrame.isPartial = true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
this.#mainFrameCommitted = false;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
#handleActivateLayerTree(): void {
|
|
219
|
+
if (!this.#lastFrame) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (this.#framePendingActivation && !this.#lastNeedsBeginFrame) {
|
|
223
|
+
this.#commitPendingFrame();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
#handleRequestMainThreadFrame(): void {
|
|
228
|
+
if (!this.#lastFrame) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
this.#mainFrameRequested = true;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
#handleCommit(): void {
|
|
235
|
+
if (!this.#framePendingCommit) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
this.#framePendingActivation = this.#framePendingCommit;
|
|
239
|
+
this.#framePendingCommit = null;
|
|
240
|
+
this.#mainFrameRequested = false;
|
|
241
|
+
this.#mainFrameCommitted = true;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
#handleLayerTreeSnapshot(layerTree: Types.Events.LegacyFrameLayerTreeData): void {
|
|
245
|
+
this.#lastLayerTree = layerTree;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
#handleNeedFrameChanged(startTime: Types.Timing.Micro, needsBeginFrame: boolean): void {
|
|
249
|
+
if (needsBeginFrame) {
|
|
250
|
+
this.#lastNeedsBeginFrame = startTime;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
#startFrame(startTime: Types.Timing.Micro, seqId: number): void {
|
|
255
|
+
if (this.#lastFrame) {
|
|
256
|
+
this.#flushFrame(this.#lastFrame, startTime);
|
|
257
|
+
}
|
|
258
|
+
this.#lastFrame =
|
|
259
|
+
new TimelineFrame(seqId, startTime, Types.Timing.Micro(startTime - metaHandlerData().traceBounds.min));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
#flushFrame(frame: TimelineFrame, endTime: Types.Timing.Micro): void {
|
|
263
|
+
frame.setLayerTree(this.#lastLayerTree);
|
|
264
|
+
frame.setEndTime(endTime);
|
|
265
|
+
if (this.#lastLayerTree) {
|
|
266
|
+
this.#lastLayerTree.paints = frame.paints;
|
|
267
|
+
}
|
|
268
|
+
const lastFrame = this.#frames[this.#frames.length - 1];
|
|
269
|
+
if (this.#frames.length && lastFrame &&
|
|
270
|
+
(frame.startTime !== lastFrame.endTime || frame.startTime > frame.endTime)) {
|
|
271
|
+
console.assert(
|
|
272
|
+
false, `Inconsistent frame time for frame ${this.#frames.length} (${frame.startTime} - ${frame.endTime})`);
|
|
273
|
+
}
|
|
274
|
+
const newFramesLength = this.#frames.push(frame);
|
|
275
|
+
frame.setIndex(newFramesLength - 1);
|
|
276
|
+
if (typeof frame.mainFrameId === 'number') {
|
|
277
|
+
this.#frameById[frame.mainFrameId] = frame;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
#commitPendingFrame(): void {
|
|
282
|
+
if (!this.#framePendingActivation || !this.#lastFrame) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
this.#lastFrame.paints = this.#framePendingActivation.paints;
|
|
287
|
+
this.#lastFrame.mainFrameId = this.#framePendingActivation.mainFrameId;
|
|
288
|
+
this.#framePendingActivation = null;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
#addTraceEvents(
|
|
292
|
+
events: readonly Types.Events.Event[], threadData: Array<{
|
|
293
|
+
pid: Types.Events.ProcessID,
|
|
294
|
+
tid: Types.Events.ThreadID,
|
|
295
|
+
startTime: Types.Timing.Micro,
|
|
296
|
+
}>,
|
|
297
|
+
mainFrameId: string): void {
|
|
298
|
+
let j = 0;
|
|
299
|
+
this.#activeThreadId = threadData.length && threadData[0].tid || null;
|
|
300
|
+
this.#activeProcessId = threadData.length && threadData[0].pid || null;
|
|
301
|
+
for (let i = 0; i < events.length; ++i) {
|
|
302
|
+
while (j + 1 < threadData.length && threadData[j + 1].startTime <= events[i].ts) {
|
|
303
|
+
this.#activeThreadId = threadData[++j].tid;
|
|
304
|
+
this.#activeProcessId = threadData[j].pid;
|
|
305
|
+
}
|
|
306
|
+
this.#addTraceEvent(events[i], mainFrameId);
|
|
307
|
+
}
|
|
308
|
+
this.#activeThreadId = null;
|
|
309
|
+
this.#activeProcessId = null;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
#addTraceEvent(event: Types.Events.Event, mainFrameId: string): void {
|
|
313
|
+
if (Types.Events.isSetLayerId(event) && event.args.data.frame === mainFrameId) {
|
|
314
|
+
this.#layerTreeId = event.args.data.layerTreeId;
|
|
315
|
+
} else if (Types.Events.isLayerTreeHostImplSnapshot(event) && Number(event.id) === this.#layerTreeId) {
|
|
316
|
+
this.#handleLayerTreeSnapshot({
|
|
317
|
+
entry: event,
|
|
318
|
+
paints: [],
|
|
319
|
+
});
|
|
320
|
+
} else {
|
|
321
|
+
if (isFrameEvent(event)) {
|
|
322
|
+
this.#processCompositorEvents(event);
|
|
323
|
+
}
|
|
324
|
+
// Make sure we only use events from the main thread: we check the PID as
|
|
325
|
+
// well in case two processes have a thread with the same TID.
|
|
326
|
+
if (event.tid === this.#activeThreadId && event.pid === this.#activeProcessId) {
|
|
327
|
+
this.#addMainThreadTraceEvent(event);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
#processCompositorEvents(entry: FrameEvent): void {
|
|
333
|
+
if (entry.args['layerTreeId'] !== this.#layerTreeId) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (Types.Events.isBeginFrame(entry)) {
|
|
337
|
+
this.#handleBeginFrame(entry.ts, entry.args['frameSeqId']);
|
|
338
|
+
} else if (Types.Events.isDrawFrame(entry)) {
|
|
339
|
+
this.#handleDrawFrame(entry.ts, entry.args['frameSeqId']);
|
|
340
|
+
} else if (Types.Events.isActivateLayerTree(entry)) {
|
|
341
|
+
this.#handleActivateLayerTree();
|
|
342
|
+
} else if (Types.Events.isRequestMainThreadFrame(entry)) {
|
|
343
|
+
this.#handleRequestMainThreadFrame();
|
|
344
|
+
} else if (Types.Events.isNeedsBeginFrameChanged(entry)) {
|
|
345
|
+
// needsBeginFrame property will either be 0 or 1, which represents
|
|
346
|
+
// true/false in this case, hence the Boolean() wrapper.
|
|
347
|
+
this.#handleNeedFrameChanged(entry.ts, entry.args['data'] && Boolean(entry.args['data']['needsBeginFrame']));
|
|
348
|
+
} else if (Types.Events.isDroppedFrame(entry)) {
|
|
349
|
+
this.#handleDroppedFrame(entry.ts, entry.args['frameSeqId'], Boolean(entry.args['hasPartialUpdate']));
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
#addMainThreadTraceEvent(entry: Types.Events.Event): void {
|
|
354
|
+
if (entryIsTopLevel(entry)) {
|
|
355
|
+
this.#lastTaskBeginTime = entry.ts;
|
|
356
|
+
}
|
|
357
|
+
if (!this.#framePendingCommit && MAIN_FRAME_MARKERS.has(entry.name as Types.Events.Name)) {
|
|
358
|
+
this.#framePendingCommit = new PendingFrame(this.#lastTaskBeginTime || entry.ts);
|
|
359
|
+
}
|
|
360
|
+
if (!this.#framePendingCommit) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (Types.Events.isBeginMainThreadFrame(entry) && entry.args.data.frameId) {
|
|
365
|
+
this.#framePendingCommit.mainFrameId = entry.args.data.frameId;
|
|
366
|
+
}
|
|
367
|
+
if (Types.Events.isPaint(entry)) {
|
|
368
|
+
const snapshot = this.#layerTreeData.paintsToSnapshots.get(entry);
|
|
369
|
+
if (snapshot) {
|
|
370
|
+
this.#framePendingCommit.paints.push(new LayerPaintEvent(entry, snapshot));
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// Commit will be replacing CompositeLayers but CompositeLayers is kept
|
|
374
|
+
// around for backwards compatibility.
|
|
375
|
+
if ((Types.Events.isCompositeLayers(entry) || Types.Events.isCommit(entry)) &&
|
|
376
|
+
entry.args['layerTreeId'] === this.#layerTreeId) {
|
|
377
|
+
this.#handleCommit();
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Legacy class that represents TimelineFrames that was ported from the old SDK.
|
|
384
|
+
* This class is purposefully not exported as it breaks the abstraction that
|
|
385
|
+
* every event shown on the timeline is a trace event. Instead, we use the Type
|
|
386
|
+
* LegacyTimelineFrame to represent frames in the codebase. These do implement
|
|
387
|
+
* the right interface to be treated just like they were a trace event.
|
|
388
|
+
*/
|
|
389
|
+
class TimelineFrame implements Types.Events.LegacyTimelineFrame {
|
|
390
|
+
// These fields exist to satisfy the base Event type which all
|
|
391
|
+
// "trace events" must implement. They aren't used, but doing this means we
|
|
392
|
+
// can pass `TimelineFrame` instances into places that expect
|
|
393
|
+
// Types.Events.Event.
|
|
394
|
+
cat = 'devtools.legacy_frame';
|
|
395
|
+
name = 'frame';
|
|
396
|
+
ph = Types.Events.Phase.COMPLETE;
|
|
397
|
+
ts: Types.Timing.Micro;
|
|
398
|
+
pid = Types.Events.ProcessID(-1);
|
|
399
|
+
tid = Types.Events.ThreadID(-1);
|
|
400
|
+
|
|
401
|
+
index = -1;
|
|
402
|
+
startTime: Types.Timing.Micro;
|
|
403
|
+
startTimeOffset: Types.Timing.Micro;
|
|
404
|
+
endTime: Types.Timing.Micro;
|
|
405
|
+
duration: Types.Timing.Micro;
|
|
406
|
+
idle: boolean;
|
|
407
|
+
dropped: boolean;
|
|
408
|
+
isPartial: boolean;
|
|
409
|
+
layerTree: Types.Events.LegacyFrameLayerTreeData|null;
|
|
410
|
+
paints: LayerPaintEvent[];
|
|
411
|
+
mainFrameId: number|undefined;
|
|
412
|
+
readonly seqId: number;
|
|
413
|
+
|
|
414
|
+
constructor(seqId: number, startTime: Types.Timing.Micro, startTimeOffset: Types.Timing.Micro) {
|
|
415
|
+
this.seqId = seqId;
|
|
416
|
+
this.startTime = startTime;
|
|
417
|
+
this.ts = startTime;
|
|
418
|
+
this.startTimeOffset = startTimeOffset;
|
|
419
|
+
this.endTime = this.startTime;
|
|
420
|
+
this.duration = Types.Timing.Micro(0);
|
|
421
|
+
this.idle = false;
|
|
422
|
+
this.dropped = false;
|
|
423
|
+
this.isPartial = false;
|
|
424
|
+
this.layerTree = null;
|
|
425
|
+
this.paints = [];
|
|
426
|
+
this.mainFrameId = undefined;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
setIndex(i: number): void {
|
|
430
|
+
this.index = i;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
setEndTime(endTime: Types.Timing.Micro): void {
|
|
434
|
+
this.endTime = endTime;
|
|
435
|
+
this.duration = Types.Timing.Micro(this.endTime - this.startTime);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
setLayerTree(layerTree: Types.Events.LegacyFrameLayerTreeData|null): void {
|
|
439
|
+
this.layerTree = layerTree;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Fake the `dur` field to meet the expected value given that we pretend
|
|
444
|
+
* these TimelineFrame classes are trace events across the codebase.
|
|
445
|
+
*/
|
|
446
|
+
get dur(): Types.Timing.Micro {
|
|
447
|
+
return this.duration;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
export class LayerPaintEvent implements Types.Events.LegacyLayerPaintEvent {
|
|
452
|
+
readonly #event: Types.Events.Paint;
|
|
453
|
+
#snapshot: Types.Events.DisplayItemListSnapshot;
|
|
454
|
+
|
|
455
|
+
constructor(event: Types.Events.Paint, snapshot: Types.Events.DisplayItemListSnapshot) {
|
|
456
|
+
this.#event = event;
|
|
457
|
+
this.#snapshot = snapshot;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
layerId(): number {
|
|
461
|
+
return this.#event.args.data.layerId;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
event(): Types.Events.Paint {
|
|
465
|
+
return this.#event;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
picture(): Types.Events.LegacyLayerPaintEventPicture|null {
|
|
469
|
+
const rect = this.#snapshot.args.snapshot.params?.layer_rect;
|
|
470
|
+
const pictureData = this.#snapshot.args.snapshot.skp64;
|
|
471
|
+
return rect && pictureData ? {rect, serializedPicture: pictureData} : null;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
export class PendingFrame {
|
|
476
|
+
paints: LayerPaintEvent[];
|
|
477
|
+
mainFrameId: number|undefined;
|
|
478
|
+
triggerTime: number;
|
|
479
|
+
constructor(triggerTime: number) {
|
|
480
|
+
this.paints = [];
|
|
481
|
+
this.mainFrameId = undefined;
|
|
482
|
+
this.triggerTime = triggerTime;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/** The parameters of an impl-side BeginFrame. **/
|
|
487
|
+
class BeginFrameInfo {
|
|
488
|
+
seqId: number;
|
|
489
|
+
startTime: Types.Timing.Micro;
|
|
490
|
+
isDropped: boolean;
|
|
491
|
+
isPartial: boolean;
|
|
492
|
+
constructor(seqId: number, startTime: Types.Timing.Micro, isDropped: boolean, isPartial: boolean) {
|
|
493
|
+
this.seqId = seqId;
|
|
494
|
+
this.startTime = startTime;
|
|
495
|
+
this.isDropped = isDropped;
|
|
496
|
+
this.isPartial = isPartial;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* A queue of BeginFrames pending visualization.
|
|
502
|
+
* BeginFrames are added into this queue as they occur; later when their
|
|
503
|
+
* corresponding DrawFrames occur (or lack thereof), the BeginFrames are removed
|
|
504
|
+
* from the queue and their timestamps are used for visualization.
|
|
505
|
+
**/
|
|
506
|
+
export class TimelineFrameBeginFrameQueue {
|
|
507
|
+
private queueFrames: number[] = [];
|
|
508
|
+
|
|
509
|
+
// Maps frameSeqId to BeginFrameInfo.
|
|
510
|
+
private mapFrames: Record<number, BeginFrameInfo> = {};
|
|
511
|
+
|
|
512
|
+
// Add a BeginFrame to the queue, if it does not already exit.
|
|
513
|
+
addFrameIfNotExists(seqId: number, startTime: Types.Timing.Micro, isDropped: boolean, isPartial: boolean): void {
|
|
514
|
+
if (!(seqId in this.mapFrames)) {
|
|
515
|
+
this.mapFrames[seqId] = new BeginFrameInfo(seqId, startTime, isDropped, isPartial);
|
|
516
|
+
this.queueFrames.push(seqId);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// Set a BeginFrame in queue as dropped.
|
|
521
|
+
setDropped(seqId: number, isDropped: boolean): void {
|
|
522
|
+
if (seqId in this.mapFrames) {
|
|
523
|
+
this.mapFrames[seqId].isDropped = isDropped;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
setPartial(seqId: number, isPartial: boolean): void {
|
|
528
|
+
if (seqId in this.mapFrames) {
|
|
529
|
+
this.mapFrames[seqId].isPartial = isPartial;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
processPendingBeginFramesOnDrawFrame(seqId: number): BeginFrameInfo[] {
|
|
534
|
+
const framesToVisualize: BeginFrameInfo[] = [];
|
|
535
|
+
|
|
536
|
+
// Do not visualize this frame in the rare case where the current DrawFrame
|
|
537
|
+
// does not have a corresponding BeginFrame.
|
|
538
|
+
if (seqId in this.mapFrames) {
|
|
539
|
+
// Pop all BeginFrames before the current frame, and add only the dropped
|
|
540
|
+
// ones in |frames_to_visualize|.
|
|
541
|
+
// Non-dropped frames popped here are BeginFrames that are never
|
|
542
|
+
// drawn (but not considered dropped either for some reason).
|
|
543
|
+
// Those frames do not require an proactive visualization effort and will
|
|
544
|
+
// be naturally presented as continuationss of other frames.
|
|
545
|
+
while (this.queueFrames[0] !== seqId) {
|
|
546
|
+
const currentSeqId = this.queueFrames[0];
|
|
547
|
+
if (this.mapFrames[currentSeqId].isDropped) {
|
|
548
|
+
framesToVisualize.push(this.mapFrames[currentSeqId]);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
delete this.mapFrames[currentSeqId];
|
|
552
|
+
this.queueFrames.shift();
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
// Pop the BeginFrame associated with the current DrawFrame.
|
|
556
|
+
framesToVisualize.push(this.mapFrames[seqId]);
|
|
557
|
+
delete this.mapFrames[seqId];
|
|
558
|
+
this.queueFrames.shift();
|
|
559
|
+
}
|
|
560
|
+
return framesToVisualize;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
export function framesWithinWindow(
|
|
565
|
+
frames: readonly Types.Events.LegacyTimelineFrame[], startTime: Types.Timing.Micro,
|
|
566
|
+
endTime: Types.Timing.Micro): Types.Events.LegacyTimelineFrame[] {
|
|
567
|
+
const firstFrame = Platform.ArrayUtilities.lowerBound(frames, startTime || 0, (time, frame) => time - frame.endTime);
|
|
568
|
+
const lastFrame =
|
|
569
|
+
Platform.ArrayUtilities.lowerBound(frames, endTime || Infinity, (time, frame) => time - frame.startTime);
|
|
570
|
+
return frames.slice(firstFrame, lastFrame);
|
|
571
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
|
|
5
|
+
import * as Helpers from '../helpers/helpers.js';
|
|
6
|
+
import * as Types from '../types/types.js';
|
|
7
|
+
|
|
8
|
+
import {data as metaHandlerData} from './MetaHandler.js';
|
|
9
|
+
import type {HandlerName} from './types.js';
|
|
10
|
+
|
|
11
|
+
// Each thread contains events. Events indicate the thread and process IDs, which are
|
|
12
|
+
// used to store the event in the correct process thread entry below.
|
|
13
|
+
let eventsInProcessThread = new Map<Types.Events.ProcessID, Map<Types.Events.ThreadID, Types.Events.GPUTask[]>>();
|
|
14
|
+
|
|
15
|
+
let mainGPUThreadTasks: Types.Events.GPUTask[] = [];
|
|
16
|
+
|
|
17
|
+
export function reset(): void {
|
|
18
|
+
eventsInProcessThread = new Map();
|
|
19
|
+
mainGPUThreadTasks = [];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function handleEvent(event: Types.Events.Event): void {
|
|
23
|
+
if (!Types.Events.isGPUTask(event)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
Helpers.Trace.addEventToProcessThread(event, eventsInProcessThread);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function finalize(): Promise<void> {
|
|
31
|
+
const {gpuProcessId, gpuThreadId} = metaHandlerData();
|
|
32
|
+
const gpuThreadsForProcess = eventsInProcessThread.get(gpuProcessId);
|
|
33
|
+
if (gpuThreadsForProcess && gpuThreadId) {
|
|
34
|
+
mainGPUThreadTasks = gpuThreadsForProcess.get(gpuThreadId) || [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface GPUHandlerReturnData {
|
|
39
|
+
mainGPUThreadTasks: readonly Types.Events.GPUTask[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function data(): GPUHandlerReturnData {
|
|
43
|
+
return {
|
|
44
|
+
mainGPUThreadTasks,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function deps(): HandlerName[] {
|
|
49
|
+
return ['Meta'];
|
|
50
|
+
}
|