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.
Files changed (397) hide show
  1. package/generate.ts +643 -0
  2. package/index.ts +16 -0
  3. package/lib/front_end/core/common/App.ts +7 -0
  4. package/lib/front_end/core/common/AppProvider.ts +32 -0
  5. package/lib/front_end/core/common/Base64.ts +47 -0
  6. package/lib/front_end/core/common/CharacterIdMap.ts +30 -0
  7. package/lib/front_end/core/common/Color.ts +2506 -0
  8. package/lib/front_end/core/common/ColorConverter.ts +402 -0
  9. package/lib/front_end/core/common/ColorUtils.ts +252 -0
  10. package/lib/front_end/core/common/Console.ts +114 -0
  11. package/lib/front_end/core/common/Debouncer.ts +15 -0
  12. package/lib/front_end/core/common/EventTarget.ts +52 -0
  13. package/lib/front_end/core/common/Gzip.ts +74 -0
  14. package/lib/front_end/core/common/JavaScriptMetaData.ts +29 -0
  15. package/lib/front_end/core/common/Lazy.ts +31 -0
  16. package/lib/front_end/core/common/Linkifier.ts +55 -0
  17. package/lib/front_end/core/common/MapWithDefault.ts +26 -0
  18. package/lib/front_end/core/common/Mutex.ts +55 -0
  19. package/lib/front_end/core/common/Object.ts +145 -0
  20. package/lib/front_end/core/common/ParsedURL.ts +554 -0
  21. package/lib/front_end/core/common/Progress.ts +180 -0
  22. package/lib/front_end/core/common/QueryParamHandler.ts +7 -0
  23. package/lib/front_end/core/common/ResolverBase.ts +85 -0
  24. package/lib/front_end/core/common/ResourceType.ts +588 -0
  25. package/lib/front_end/core/common/ReturnToPanel.ts +17 -0
  26. package/lib/front_end/core/common/Revealer.ts +192 -0
  27. package/lib/front_end/core/common/Runnable.ts +41 -0
  28. package/lib/front_end/core/common/SegmentedRange.ts +87 -0
  29. package/lib/front_end/core/common/SettingRegistration.ts +339 -0
  30. package/lib/front_end/core/common/Settings.ts +1497 -0
  31. package/lib/front_end/core/common/SimpleHistoryManager.ts +124 -0
  32. package/lib/front_end/core/common/StringOutputStream.ts +26 -0
  33. package/lib/front_end/core/common/TextDictionary.ts +48 -0
  34. package/lib/front_end/core/common/Throttler.ts +99 -0
  35. package/lib/front_end/core/common/Trie.ts +152 -0
  36. package/lib/front_end/core/common/Worker.ts +60 -0
  37. package/lib/front_end/core/common/common.ts +81 -0
  38. package/lib/front_end/core/host/AidaClient.ts +733 -0
  39. package/lib/front_end/core/host/GdpClient.ts +316 -0
  40. package/lib/front_end/core/host/InspectorFrontendHost.ts +648 -0
  41. package/lib/front_end/core/host/InspectorFrontendHostAPI.ts +551 -0
  42. package/lib/front_end/core/host/Platform.ts +76 -0
  43. package/lib/front_end/core/host/ResourceLoader.ts +282 -0
  44. package/lib/front_end/core/host/UserMetrics.ts +1230 -0
  45. package/lib/front_end/core/host/host.ts +23 -0
  46. package/lib/front_end/core/i18n/ByteUtilities.ts +82 -0
  47. package/lib/front_end/core/i18n/DevToolsLocale.ts +87 -0
  48. package/lib/front_end/core/i18n/NumberFormatter.ts +82 -0
  49. package/lib/front_end/core/i18n/i18n.ts +17 -0
  50. package/lib/front_end/core/i18n/i18nImpl.ts +204 -0
  51. package/lib/front_end/core/i18n/i18nTypes.ts +10 -0
  52. package/lib/front_end/core/i18n/locales.js +14 -0
  53. package/lib/front_end/core/i18n/time-utilities.ts +174 -0
  54. package/lib/front_end/core/platform/ArrayUtilities.ts +271 -0
  55. package/lib/front_end/core/platform/Brand.ts +23 -0
  56. package/lib/front_end/core/platform/Constructor.ts +10 -0
  57. package/lib/front_end/core/platform/DOMUtilities.ts +138 -0
  58. package/lib/front_end/core/platform/DateUtilities.ts +15 -0
  59. package/lib/front_end/core/platform/DevToolsPath.ts +53 -0
  60. package/lib/front_end/core/platform/KeyboardUtilities.ts +38 -0
  61. package/lib/front_end/core/platform/MapUtilities.ts +95 -0
  62. package/lib/front_end/core/platform/MimeType.ts +175 -0
  63. package/lib/front_end/core/platform/NumberUtilities.ts +80 -0
  64. package/lib/front_end/core/platform/StringUtilities.ts +588 -0
  65. package/lib/front_end/core/platform/Timing.ts +17 -0
  66. package/lib/front_end/core/platform/TypedArrayUtilities.ts +189 -0
  67. package/lib/front_end/core/platform/TypescriptUtilities.ts +86 -0
  68. package/lib/front_end/core/platform/UIString.ts +39 -0
  69. package/lib/front_end/core/platform/UserVisibleError.ts +28 -0
  70. package/lib/front_end/core/platform/platform.ts +45 -0
  71. package/lib/front_end/core/protocol_client/ConnectionTransport.ts +26 -0
  72. package/lib/front_end/core/protocol_client/InspectorBackend.ts +1050 -0
  73. package/lib/front_end/core/protocol_client/NodeURL.ts +42 -0
  74. package/lib/front_end/core/protocol_client/protocol_client.ts +13 -0
  75. package/lib/front_end/core/root/Runtime.ts +609 -0
  76. package/lib/front_end/core/root/root.ts +6 -0
  77. package/lib/front_end/core/sdk/AccessibilityModel.ts +353 -0
  78. package/lib/front_end/core/sdk/AnimationModel.ts +1041 -0
  79. package/lib/front_end/core/sdk/AutofillModel.ts +184 -0
  80. package/lib/front_end/core/sdk/CPUProfilerModel.ts +148 -0
  81. package/lib/front_end/core/sdk/CPUThrottlingManager.ts +282 -0
  82. package/lib/front_end/core/sdk/CSSContainerQuery.ts +139 -0
  83. package/lib/front_end/core/sdk/CSSFontFace.ts +40 -0
  84. package/lib/front_end/core/sdk/CSSLayer.ts +30 -0
  85. package/lib/front_end/core/sdk/CSSMatchedStyles.ts +1646 -0
  86. package/lib/front_end/core/sdk/CSSMedia.ts +121 -0
  87. package/lib/front_end/core/sdk/CSSMetadata.ts +1647 -0
  88. package/lib/front_end/core/sdk/CSSModel.ts +1128 -0
  89. package/lib/front_end/core/sdk/CSSProperty.ts +384 -0
  90. package/lib/front_end/core/sdk/CSSPropertyParser.ts +681 -0
  91. package/lib/front_end/core/sdk/CSSPropertyParserMatchers.ts +1395 -0
  92. package/lib/front_end/core/sdk/CSSQuery.ts +72 -0
  93. package/lib/front_end/core/sdk/CSSRule.ts +465 -0
  94. package/lib/front_end/core/sdk/CSSScope.ts +30 -0
  95. package/lib/front_end/core/sdk/CSSStartingStyle.ts +29 -0
  96. package/lib/front_end/core/sdk/CSSStyleDeclaration.ts +313 -0
  97. package/lib/front_end/core/sdk/CSSStyleSheetHeader.ts +196 -0
  98. package/lib/front_end/core/sdk/CSSSupports.ts +33 -0
  99. package/lib/front_end/core/sdk/CategorizedBreakpoint.ts +64 -0
  100. package/lib/front_end/core/sdk/ChildTargetManager.ts +314 -0
  101. package/lib/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +62 -0
  102. package/lib/front_end/core/sdk/Connections.ts +293 -0
  103. package/lib/front_end/core/sdk/ConsoleModel.ts +808 -0
  104. package/lib/front_end/core/sdk/ConsoleModelTypes.ts +15 -0
  105. package/lib/front_end/core/sdk/Cookie.ts +319 -0
  106. package/lib/front_end/core/sdk/CookieModel.ts +239 -0
  107. package/lib/front_end/core/sdk/CookieParser.ts +185 -0
  108. package/lib/front_end/core/sdk/DOMDebuggerModel.ts +787 -0
  109. package/lib/front_end/core/sdk/DOMModel.ts +1961 -0
  110. package/lib/front_end/core/sdk/DebuggerModel.ts +1605 -0
  111. package/lib/front_end/core/sdk/EmulationModel.ts +648 -0
  112. package/lib/front_end/core/sdk/EnhancedTracesParser.ts +515 -0
  113. package/lib/front_end/core/sdk/EventBreakpointsModel.ts +183 -0
  114. package/lib/front_end/core/sdk/FrameAssociated.ts +11 -0
  115. package/lib/front_end/core/sdk/FrameManager.ts +259 -0
  116. package/lib/front_end/core/sdk/HeapProfilerModel.ts +225 -0
  117. package/lib/front_end/core/sdk/HttpReasonPhraseStrings.ts +77 -0
  118. package/lib/front_end/core/sdk/IOModel.ts +91 -0
  119. package/lib/front_end/core/sdk/IsolateManager.ts +257 -0
  120. package/lib/front_end/core/sdk/IssuesModel.ts +70 -0
  121. package/lib/front_end/core/sdk/LayerTreeBase.ts +169 -0
  122. package/lib/front_end/core/sdk/LogModel.ts +56 -0
  123. package/lib/front_end/core/sdk/NetworkManager.ts +2823 -0
  124. package/lib/front_end/core/sdk/NetworkRequest.ts +2253 -0
  125. package/lib/front_end/core/sdk/OverlayColorGenerator.ts +52 -0
  126. package/lib/front_end/core/sdk/OverlayModel.ts +1011 -0
  127. package/lib/front_end/core/sdk/OverlayPersistentHighlighter.ts +522 -0
  128. package/lib/front_end/core/sdk/PageLoad.ts +35 -0
  129. package/lib/front_end/core/sdk/PageResourceLoader.ts +435 -0
  130. package/lib/front_end/core/sdk/PaintProfiler.ts +110 -0
  131. package/lib/front_end/core/sdk/PerformanceMetricsModel.ts +84 -0
  132. package/lib/front_end/core/sdk/PreloadingModel.ts +863 -0
  133. package/lib/front_end/core/sdk/RehydratingConnection.ts +386 -0
  134. package/lib/front_end/core/sdk/RehydratingObject.ts +66 -0
  135. package/lib/front_end/core/sdk/RemoteObject.ts +1160 -0
  136. package/lib/front_end/core/sdk/Resource.ts +232 -0
  137. package/lib/front_end/core/sdk/ResourceTreeModel.ts +1160 -0
  138. package/lib/front_end/core/sdk/RuntimeModel.ts +732 -0
  139. package/lib/front_end/core/sdk/SDKModel.ts +65 -0
  140. package/lib/front_end/core/sdk/ScopeTreeCache.ts +45 -0
  141. package/lib/front_end/core/sdk/ScreenCaptureModel.ts +255 -0
  142. package/lib/front_end/core/sdk/Script.ts +534 -0
  143. package/lib/front_end/core/sdk/SecurityOriginManager.ts +76 -0
  144. package/lib/front_end/core/sdk/ServerSentEvents.ts +80 -0
  145. package/lib/front_end/core/sdk/ServerSentEventsProtocol.ts +122 -0
  146. package/lib/front_end/core/sdk/ServerTiming.ts +260 -0
  147. package/lib/front_end/core/sdk/ServiceWorkerCacheModel.ts +377 -0
  148. package/lib/front_end/core/sdk/ServiceWorkerManager.ts +605 -0
  149. package/lib/front_end/core/sdk/SourceMap.ts +867 -0
  150. package/lib/front_end/core/sdk/SourceMapCache.ts +54 -0
  151. package/lib/front_end/core/sdk/SourceMapFunctionRanges.ts +156 -0
  152. package/lib/front_end/core/sdk/SourceMapManager.ts +239 -0
  153. package/lib/front_end/core/sdk/SourceMapScopeChainEntry.ts +189 -0
  154. package/lib/front_end/core/sdk/SourceMapScopesInfo.ts +508 -0
  155. package/lib/front_end/core/sdk/StorageBucketsModel.ts +204 -0
  156. package/lib/front_end/core/sdk/StorageKeyManager.ts +98 -0
  157. package/lib/front_end/core/sdk/Target.ts +332 -0
  158. package/lib/front_end/core/sdk/TargetManager.ts +453 -0
  159. package/lib/front_end/core/sdk/TraceObject.ts +61 -0
  160. package/lib/front_end/core/sdk/WebAuthnModel.ts +104 -0
  161. package/lib/front_end/core/sdk/sdk.ts +174 -0
  162. package/lib/front_end/entrypoints/formatter_worker/FormatterActions.ts +59 -0
  163. package/lib/front_end/generated/InspectorBackendCommands.js +1617 -0
  164. package/lib/front_end/generated/SupportedCSSProperties.js +7512 -0
  165. package/lib/front_end/generated/protocol-proxy-api.d.ts +5022 -0
  166. package/lib/front_end/generated/protocol.ts +22014 -0
  167. package/lib/front_end/models/cpu_profile/CPUProfileDataModel.ts +571 -0
  168. package/lib/front_end/models/cpu_profile/ProfileTreeModel.ts +103 -0
  169. package/lib/front_end/models/cpu_profile/cpu_profile.ts +11 -0
  170. package/lib/front_end/models/formatter/FormatterWorkerPool.ts +219 -0
  171. package/lib/front_end/models/formatter/ScriptFormatter.ts +112 -0
  172. package/lib/front_end/models/formatter/formatter.ts +8 -0
  173. package/lib/front_end/models/text_utils/CodeMirrorUtils.ts +37 -0
  174. package/lib/front_end/models/text_utils/ContentData.ts +199 -0
  175. package/lib/front_end/models/text_utils/ContentProvider.ts +68 -0
  176. package/lib/front_end/models/text_utils/StaticContentProvider.ts +49 -0
  177. package/lib/front_end/models/text_utils/StreamingContentData.ts +108 -0
  178. package/lib/front_end/models/text_utils/Text.ts +90 -0
  179. package/lib/front_end/models/text_utils/TextCursor.ts +44 -0
  180. package/lib/front_end/models/text_utils/TextRange.ts +266 -0
  181. package/lib/front_end/models/text_utils/TextUtils.ts +401 -0
  182. package/lib/front_end/models/text_utils/WasmDisassembly.ts +87 -0
  183. package/lib/front_end/models/text_utils/text_utils.ts +27 -0
  184. package/lib/front_end/models/trace/EntityMapper.ts +141 -0
  185. package/lib/front_end/models/trace/EventsSerializer.ts +101 -0
  186. package/lib/front_end/models/trace/LanternComputationData.ts +438 -0
  187. package/lib/front_end/models/trace/ModelImpl.ts +236 -0
  188. package/lib/front_end/models/trace/Name.ts +136 -0
  189. package/lib/front_end/models/trace/Processor.ts +652 -0
  190. package/lib/front_end/models/trace/Styles.ts +1138 -0
  191. package/lib/front_end/models/trace/extras/FilmStrip.ts +78 -0
  192. package/lib/front_end/models/trace/extras/MainThreadActivity.ts +86 -0
  193. package/lib/front_end/models/trace/extras/ScriptDuplication.ts +236 -0
  194. package/lib/front_end/models/trace/extras/StackTraceForEvent.ts +203 -0
  195. package/lib/front_end/models/trace/extras/ThirdParties.ts +164 -0
  196. package/lib/front_end/models/trace/extras/TraceFilter.ts +62 -0
  197. package/lib/front_end/models/trace/extras/TraceTree.ts +701 -0
  198. package/lib/front_end/models/trace/extras/extras.ts +11 -0
  199. package/lib/front_end/models/trace/handlers/AnimationFramesHandler.ts +128 -0
  200. package/lib/front_end/models/trace/handlers/AnimationHandler.ts +36 -0
  201. package/lib/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +239 -0
  202. package/lib/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +183 -0
  203. package/lib/front_end/models/trace/handlers/DOMStatsHandler.ts +31 -0
  204. package/lib/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +306 -0
  205. package/lib/front_end/models/trace/handlers/FlowsHandler.ts +175 -0
  206. package/lib/front_end/models/trace/handlers/FramesHandler.ts +571 -0
  207. package/lib/front_end/models/trace/handlers/GPUHandler.ts +50 -0
  208. package/lib/front_end/models/trace/handlers/ImagePaintingHandler.ts +183 -0
  209. package/lib/front_end/models/trace/handlers/InitiatorsHandler.ts +193 -0
  210. package/lib/front_end/models/trace/handlers/InvalidationsHandler.ts +168 -0
  211. package/lib/front_end/models/trace/handlers/LargestImagePaintHandler.ts +109 -0
  212. package/lib/front_end/models/trace/handlers/LargestTextPaintHandler.ts +35 -0
  213. package/lib/front_end/models/trace/handlers/LayerTreeHandler.ts +123 -0
  214. package/lib/front_end/models/trace/handlers/LayoutShiftsHandler.ts +573 -0
  215. package/lib/front_end/models/trace/handlers/MemoryHandler.ts +31 -0
  216. package/lib/front_end/models/trace/handlers/MetaHandler.ts +525 -0
  217. package/lib/front_end/models/trace/handlers/ModelHandlers.ts +34 -0
  218. package/lib/front_end/models/trace/handlers/NetworkRequestsHandler.ts +672 -0
  219. package/lib/front_end/models/trace/handlers/PageFramesHandler.ts +52 -0
  220. package/lib/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +460 -0
  221. package/lib/front_end/models/trace/handlers/RendererHandler.ts +428 -0
  222. package/lib/front_end/models/trace/handlers/SamplesHandler.ts +271 -0
  223. package/lib/front_end/models/trace/handlers/ScreenshotsHandler.ts +122 -0
  224. package/lib/front_end/models/trace/handlers/ScriptsHandler.ts +336 -0
  225. package/lib/front_end/models/trace/handlers/SelectorStatsHandler.ts +110 -0
  226. package/lib/front_end/models/trace/handlers/Threads.ts +139 -0
  227. package/lib/front_end/models/trace/handlers/UserInteractionsHandler.ts +400 -0
  228. package/lib/front_end/models/trace/handlers/UserTimingsHandler.ts +233 -0
  229. package/lib/front_end/models/trace/handlers/WarningsHandler.ts +162 -0
  230. package/lib/front_end/models/trace/handlers/WorkersHandler.ts +45 -0
  231. package/lib/front_end/models/trace/handlers/handlers.ts +8 -0
  232. package/lib/front_end/models/trace/handlers/helpers.ts +196 -0
  233. package/lib/front_end/models/trace/handlers/types.ts +75 -0
  234. package/lib/front_end/models/trace/helpers/Extensions.ts +54 -0
  235. package/lib/front_end/models/trace/helpers/Network.ts +129 -0
  236. package/lib/front_end/models/trace/helpers/SamplesIntegrator.ts +544 -0
  237. package/lib/front_end/models/trace/helpers/SyntheticEvents.ts +87 -0
  238. package/lib/front_end/models/trace/helpers/Timing.ts +248 -0
  239. package/lib/front_end/models/trace/helpers/Trace.ts +928 -0
  240. package/lib/front_end/models/trace/helpers/TreeHelpers.ts +320 -0
  241. package/lib/front_end/models/trace/helpers/helpers.ts +11 -0
  242. package/lib/front_end/models/trace/insights/CLSCulprits.ts +668 -0
  243. package/lib/front_end/models/trace/insights/Cache.ts +269 -0
  244. package/lib/front_end/models/trace/insights/Common.ts +453 -0
  245. package/lib/front_end/models/trace/insights/DOMSize.ts +223 -0
  246. package/lib/front_end/models/trace/insights/DocumentLatency.ts +319 -0
  247. package/lib/front_end/models/trace/insights/DuplicatedJavaScript.ts +126 -0
  248. package/lib/front_end/models/trace/insights/FontDisplay.ts +119 -0
  249. package/lib/front_end/models/trace/insights/ForcedReflow.ts +220 -0
  250. package/lib/front_end/models/trace/insights/INPBreakdown.ts +171 -0
  251. package/lib/front_end/models/trace/insights/ImageDelivery.ts +348 -0
  252. package/lib/front_end/models/trace/insights/LCPBreakdown.ts +268 -0
  253. package/lib/front_end/models/trace/insights/LCPDiscovery.ts +237 -0
  254. package/lib/front_end/models/trace/insights/LegacyJavaScript.ts +138 -0
  255. package/lib/front_end/models/trace/insights/Models.ts +22 -0
  256. package/lib/front_end/models/trace/insights/ModernHTTP.ts +257 -0
  257. package/lib/front_end/models/trace/insights/NetworkDependencyTree.ts +726 -0
  258. package/lib/front_end/models/trace/insights/RenderBlocking.ts +257 -0
  259. package/lib/front_end/models/trace/insights/SlowCSSSelector.ts +175 -0
  260. package/lib/front_end/models/trace/insights/Statistics.ts +101 -0
  261. package/lib/front_end/models/trace/insights/ThirdParties.ts +130 -0
  262. package/lib/front_end/models/trace/insights/Viewport.ts +138 -0
  263. package/lib/front_end/models/trace/insights/insights.ts +10 -0
  264. package/lib/front_end/models/trace/insights/types.ts +157 -0
  265. package/lib/front_end/models/trace/lantern/core/LanternError.ts +7 -0
  266. package/lib/front_end/models/trace/lantern/core/NetworkAnalyzer.ts +619 -0
  267. package/lib/front_end/models/trace/lantern/core/core.ts +6 -0
  268. package/lib/front_end/models/trace/lantern/graph/BaseNode.ts +345 -0
  269. package/lib/front_end/models/trace/lantern/graph/CPUNode.ts +80 -0
  270. package/lib/front_end/models/trace/lantern/graph/NetworkNode.ts +101 -0
  271. package/lib/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +636 -0
  272. package/lib/front_end/models/trace/lantern/graph/graph.ts +8 -0
  273. package/lib/front_end/models/trace/lantern/lantern.ts +17 -0
  274. package/lib/front_end/models/trace/lantern/metrics/FirstContentfulPaint.ts +187 -0
  275. package/lib/front_end/models/trace/lantern/metrics/Interactive.ts +88 -0
  276. package/lib/front_end/models/trace/lantern/metrics/LargestContentfulPaint.ts +92 -0
  277. package/lib/front_end/models/trace/lantern/metrics/MaxPotentialFID.ts +72 -0
  278. package/lib/front_end/models/trace/lantern/metrics/Metric.ts +126 -0
  279. package/lib/front_end/models/trace/lantern/metrics/SpeedIndex.ts +126 -0
  280. package/lib/front_end/models/trace/lantern/metrics/TBTUtils.ts +82 -0
  281. package/lib/front_end/models/trace/lantern/metrics/TotalBlockingTime.ts +112 -0
  282. package/lib/front_end/models/trace/lantern/metrics/metrics.ts +12 -0
  283. package/lib/front_end/models/trace/lantern/simulation/ConnectionPool.ts +150 -0
  284. package/lib/front_end/models/trace/lantern/simulation/Constants.ts +46 -0
  285. package/lib/front_end/models/trace/lantern/simulation/DNSCache.ts +61 -0
  286. package/lib/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +196 -0
  287. package/lib/front_end/models/trace/lantern/simulation/Simulator.ts +556 -0
  288. package/lib/front_end/models/trace/lantern/simulation/TCPConnection.ts +192 -0
  289. package/lib/front_end/models/trace/lantern/simulation/simulation.ts +10 -0
  290. package/lib/front_end/models/trace/lantern/types/Lantern.ts +220 -0
  291. package/lib/front_end/models/trace/lantern/types/types.ts +5 -0
  292. package/lib/front_end/models/trace/trace.ts +33 -0
  293. package/lib/front_end/models/trace/types/Configuration.ts +110 -0
  294. package/lib/front_end/models/trace/types/Extensions.ts +136 -0
  295. package/lib/front_end/models/trace/types/File.ts +281 -0
  296. package/lib/front_end/models/trace/types/Overlays.ts +138 -0
  297. package/lib/front_end/models/trace/types/Timing.ts +30 -0
  298. package/lib/front_end/models/trace/types/TraceEvents.ts +3277 -0
  299. package/lib/front_end/models/trace/types/types.ts +10 -0
  300. package/lib/front_end/third_party/i18n/LICENSE +202 -0
  301. package/lib/front_end/third_party/i18n/README.chromium +15 -0
  302. package/lib/front_end/third_party/i18n/i18n-impl.ts +61 -0
  303. package/lib/front_end/third_party/i18n/i18n.ts +11 -0
  304. package/lib/front_end/third_party/i18n/localized-string-set.ts +129 -0
  305. package/lib/front_end/third_party/intl-messageformat/LICENSE +33 -0
  306. package/lib/front_end/third_party/intl-messageformat/README.chromium +24 -0
  307. package/lib/front_end/third_party/intl-messageformat/intl-messageformat-tsconfig.json +16 -0
  308. package/lib/front_end/third_party/intl-messageformat/intl-messageformat.ts +6 -0
  309. package/lib/front_end/third_party/intl-messageformat/package/LICENSE.md +33 -0
  310. package/lib/front_end/third_party/intl-messageformat/package/README.md +3 -0
  311. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts +6 -0
  312. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts.map +1 -0
  313. package/lib/front_end/third_party/intl-messageformat/package/index.js +13 -0
  314. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.d.ts +5 -0
  315. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +1710 -0
  316. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +1815 -0
  317. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts +6 -0
  318. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts.map +1 -0
  319. package/lib/front_end/third_party/intl-messageformat/package/lib/index.js +10 -0
  320. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts +34 -0
  321. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts.map +1 -0
  322. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.js +229 -0
  323. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts +28 -0
  324. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts.map +1 -0
  325. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.js +48 -0
  326. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts +34 -0
  327. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts.map +1 -0
  328. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +179 -0
  329. package/lib/front_end/third_party/intl-messageformat/package/package.json +42 -0
  330. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts +34 -0
  331. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts.map +1 -0
  332. package/lib/front_end/third_party/intl-messageformat/package/src/core.js +230 -0
  333. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts +28 -0
  334. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts.map +1 -0
  335. package/lib/front_end/third_party/intl-messageformat/package/src/error.js +51 -0
  336. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts +34 -0
  337. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts.map +1 -0
  338. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.js +182 -0
  339. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/error.d.ts +79 -0
  340. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/index.d.ts +15 -0
  341. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/parser.d.ts +153 -0
  342. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/types.d.ts +139 -0
  343. package/lib/front_end/third_party/legacy-javascript/LICENSE +202 -0
  344. package/lib/front_end/third_party/legacy-javascript/README.chromium +13 -0
  345. package/lib/front_end/third_party/legacy-javascript/legacy-javascript-tsconfig.json +8 -0
  346. package/lib/front_end/third_party/legacy-javascript/legacy-javascript.ts +3 -0
  347. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.d.ts +18 -0
  348. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +943 -0
  349. package/lib/front_end/third_party/legacy-javascript/package.json +8 -0
  350. package/lib/front_end/third_party/legacy-javascript/rebuild.sh +9 -0
  351. package/lib/front_end/third_party/third-party-web/LICENSE +20 -0
  352. package/lib/front_end/third_party/third-party-web/README.chromium +13 -0
  353. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.d.ts +2 -0
  354. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.js +149 -0
  355. package/lib/front_end/third_party/third-party-web/package/LICENSE +20 -0
  356. package/lib/front_end/third_party/third-party-web/package/README.md +929 -0
  357. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive-nostats.json +1 -0
  358. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive.json +1 -0
  359. package/lib/front_end/third_party/third-party-web/package/dist/entities-nostats.json +1 -0
  360. package/lib/front_end/third_party/third-party-web/package/dist/entities.json +1 -0
  361. package/lib/front_end/third_party/third-party-web/package/facades.md +46 -0
  362. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.d.ts +1 -0
  363. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +1 -0
  364. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.d.ts +1 -0
  365. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.js +1 -0
  366. package/lib/front_end/third_party/third-party-web/package/lib/__snapshots__/index.test.js.snap +1006 -0
  367. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +139 -0
  368. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +44 -0
  369. package/lib/front_end/third_party/third-party-web/package/lib/entities.test.js +27 -0
  370. package/lib/front_end/third_party/third-party-web/package/lib/index.d.ts +34 -0
  371. package/lib/front_end/third_party/third-party-web/package/lib/index.js +3 -0
  372. package/lib/front_end/third_party/third-party-web/package/lib/index.test.js +246 -0
  373. package/lib/front_end/third_party/third-party-web/package/lib/markdown/faqs.partial.md +36 -0
  374. package/lib/front_end/third_party/third-party-web/package/lib/markdown/goals.partial.md +9 -0
  375. package/lib/front_end/third_party/third-party-web/package/lib/markdown/methodology.partial.md +5 -0
  376. package/lib/front_end/third_party/third-party-web/package/lib/markdown/template.md +151 -0
  377. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-02-01.md +1 -0
  378. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-03-01.md +1 -0
  379. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-06.md +1 -0
  380. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-13.md +14 -0
  381. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2021-01-01.md +1 -0
  382. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2024-07-01.md +3 -0
  383. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.d.ts +1 -0
  384. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +3 -0
  385. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.d.ts +1 -0
  386. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +3 -0
  387. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.d.ts +1 -0
  388. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +3 -0
  389. package/lib/front_end/third_party/third-party-web/package/nostats-subset.d.ts +1 -0
  390. package/lib/front_end/third_party/third-party-web/package/nostats-subset.js +1 -0
  391. package/lib/front_end/third_party/third-party-web/package/package.json +46 -0
  392. package/lib/front_end/third_party/third-party-web/package.json +8 -0
  393. package/lib/front_end/third_party/third-party-web/rebuild.sh +13 -0
  394. package/lib/front_end/third_party/third-party-web/third-party-web-tsconfig.json +8 -0
  395. package/lib/front_end/third_party/third-party-web/third-party-web.ts +3 -0
  396. package/package.json +24 -0
  397. package/patches/chrome-devtools-frontend+1.0.1533544.patch +187 -0
@@ -0,0 +1,122 @@
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 type {HandlerName} from './types.js';
9
+
10
+ // Each thread contains events. Events indicate the thread and process IDs, which are
11
+ // used to store the event in the correct process thread entry below.
12
+ let unpairedAsyncEvents: Types.Events.PipelineReporter[] = [];
13
+
14
+ let legacyScreenshotEvents: Types.Events.LegacyScreenshot[] = [];
15
+ let modernScreenshotEvents: Types.Events.Screenshot[] = [];
16
+ let syntheticScreenshots: Types.Events.LegacySyntheticScreenshot[] = [];
17
+ let frameSequenceToTs: Record<string, Types.Timing.Micro> = {};
18
+
19
+ export function reset(): void {
20
+ unpairedAsyncEvents = [];
21
+ legacyScreenshotEvents = [];
22
+ syntheticScreenshots = [];
23
+ modernScreenshotEvents = [];
24
+ frameSequenceToTs = {};
25
+ }
26
+
27
+ export function handleEvent(event: Types.Events.Event): void {
28
+ if (Types.Events.isLegacyScreenshot(event)) {
29
+ legacyScreenshotEvents.push(event);
30
+ } else if (Types.Events.isScreenshot(event)) {
31
+ modernScreenshotEvents.push(event);
32
+ } else if (Types.Events.isPipelineReporter(event)) {
33
+ unpairedAsyncEvents.push(event);
34
+ }
35
+ }
36
+
37
+ export async function finalize(): Promise<void> {
38
+ const pipelineReporterEvents = Helpers.Trace.createMatchedSortedSyntheticEvents(unpairedAsyncEvents);
39
+
40
+ frameSequenceToTs = Object.fromEntries(pipelineReporterEvents.map(evt => {
41
+ const args = evt.args.data.beginEvent.args;
42
+ const frameReporter = 'frame_reporter' in args ? args.frame_reporter : args.chrome_frame_reporter;
43
+ const frameSequenceId = frameReporter.frame_sequence;
44
+ const presentationTs = Types.Timing.Micro(evt.ts + evt.dur);
45
+ return [frameSequenceId, presentationTs];
46
+ }));
47
+
48
+ for (const snapshotEvent of legacyScreenshotEvents) {
49
+ const {cat, name, ph, pid, tid} = snapshotEvent;
50
+ const syntheticEvent = Helpers.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent<
51
+ Types.Events.LegacySyntheticScreenshot>({
52
+ rawSourceEvent: snapshotEvent,
53
+ cat,
54
+ name,
55
+ ph,
56
+ pid,
57
+ tid,
58
+ // TODO(paulirish, crbug.com/41363012): investigate why getPresentationTimestamp(snapshotEvent) seems less accurate. Resolve screenshot timing inaccuracy.
59
+ // `getPresentationTimestamp(snapshotEvent) - snapshotEvent.ts` is how many microsec the screenshot should be adjusted to the right/later
60
+ ts: snapshotEvent.ts,
61
+ args: {
62
+ dataUri: `data:image/jpg;base64,${snapshotEvent.args.snapshot}`,
63
+ },
64
+ });
65
+ syntheticScreenshots.push(syntheticEvent);
66
+ }
67
+ }
68
+
69
+ export function screenshotImageDataUri(event: Types.Events.LegacySyntheticScreenshot|Types.Events.Screenshot): string {
70
+ if (Types.Events.isLegacySyntheticScreenshot(event)) {
71
+ return event.args.dataUri;
72
+ }
73
+ return `data:image/jpg;base64,${event.args.snapshot}`;
74
+ }
75
+
76
+ /**
77
+ * Correct the screenshot timestamps
78
+ * The screenshot 'snapshot object' trace event has the "frame sequence number" attached as an ID.
79
+ * We match that up with the "PipelineReporter" trace events as they terminate at presentation.
80
+ * Presentation == when the pixels hit the screen. AKA Swap on the GPU
81
+ */
82
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
83
+ function getPresentationTimestamp(screenshotEvent: Types.Events.LegacyScreenshot): Types.Timing.Micro {
84
+ const frameSequence = parseInt(screenshotEvent.id, 16);
85
+ // If it's 1, then it's an old trace (before https://crrev.com/c/4957973) and cannot be corrected.
86
+ if (frameSequence === 1) {
87
+ return screenshotEvent.ts;
88
+ }
89
+ // The screenshot trace event's `ts` reflects the "expected display time" which is ESTIMATE.
90
+ // It is set by the compositor frame sink from the `expected_display_time`, which is based on a previously known
91
+ // frame start PLUS the vsync interval (eg 16.6ms)
92
+ const updatedTs = frameSequenceToTs[frameSequence];
93
+ // Do we always find a match? No...
94
+ // We generally don't match the very first screenshot and, sometimes, the last
95
+ // The very first screenshot is requested immediately (even if nothing is painting). As a result there's no compositor
96
+ // instrumentation running alongside.
97
+ // The last one is sometimes missing as because the trace terminates right before the associated PipelineReporter is emitted.
98
+ return updatedTs ?? screenshotEvent.ts;
99
+ }
100
+
101
+ export interface Data {
102
+ // These are nullable because in January 2025 a CL in Chromium
103
+ // crrev.com/c/6197645 landed which changed the format of screenshots. For a
104
+ // given trace, it can have either "legacy" screenshot events, or "modern"
105
+ // screenshot events, but no trace can ever contain both.
106
+ // So, if either of these arrays are empty, we instead return `null`. This forces consumers to check the presence of the array.
107
+ // Traces can have no screenshots if the trace category is not enabled, so it
108
+ // is possible for a trace to return null for both of these arrays.
109
+ legacySyntheticScreenshots: Types.Events.LegacySyntheticScreenshot[]|null;
110
+ screenshots: Types.Events.Screenshot[]|null;
111
+ }
112
+
113
+ export function data(): Data {
114
+ return {
115
+ legacySyntheticScreenshots: syntheticScreenshots.length ? syntheticScreenshots : null,
116
+ screenshots: modernScreenshotEvents.length ? modernScreenshotEvents : null,
117
+ };
118
+ }
119
+
120
+ export function deps(): HandlerName[] {
121
+ return ['Meta'];
122
+ }
@@ -0,0 +1,336 @@
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
+
5
+ import * as Common from '../../../core/common/common.js';
6
+ import * as Platform from '../../../core/platform/platform.js';
7
+ import type * as SDK from '../../../core/sdk/sdk.js';
8
+ import type * as Protocol from '../../../generated/protocol.js';
9
+ import * as Types from '../types/types.js';
10
+
11
+ import {data as metaHandlerData, type MetaHandlerData} from './MetaHandler.js';
12
+ import {data as networkRequestsHandlerData} from './NetworkRequestsHandler.js';
13
+ import type {FinalizeOptions, HandlerName} from './types.js';
14
+
15
+ export interface ScriptsData {
16
+ /** Note: this is only populated when the "Enhanced Traces" feature is enabled. */
17
+ scripts: Script[];
18
+ }
19
+
20
+ export interface Script {
21
+ isolate: string;
22
+ scriptId: Protocol.Runtime.ScriptId;
23
+ frame: string;
24
+ ts: Types.Timing.Micro;
25
+ inline: boolean;
26
+ url?: string;
27
+ sourceUrl?: string;
28
+ content?: string;
29
+ /**
30
+ * Note: this is the literal text given as the sourceMappingURL value. It has not been resolved relative to the script url.
31
+ * Since M138, data urls are never set here.
32
+ */
33
+ sourceMapUrl?: string;
34
+ /** If true, the source map url was a data URL, so it got removed from the trace event. */
35
+ sourceMapUrlElided?: boolean;
36
+ sourceMap?: SDK.SourceMap.SourceMap;
37
+ request?: Types.Events.SyntheticNetworkRequest;
38
+ /** Lazily generated - use getScriptGeneratedSizes to access. */
39
+ sizes?: GeneratedFileSizes;
40
+ }
41
+
42
+ type GeneratedFileSizes = {
43
+ errorMessage: string,
44
+ }|{files: Record<string, number>, unmappedBytes: number, totalBytes: number};
45
+
46
+ let scriptById = new Map<string, Script>();
47
+
48
+ export function deps(): HandlerName[] {
49
+ return ['Meta', 'NetworkRequests'];
50
+ }
51
+
52
+ export function reset(): void {
53
+ scriptById = new Map();
54
+ }
55
+
56
+ export function handleEvent(event: Types.Events.Event): void {
57
+ const getOrMakeScript = (isolate: string|number, scriptIdAsNumber: number): Script => {
58
+ const scriptId = String(scriptIdAsNumber) as Protocol.Runtime.ScriptId;
59
+ const key = `${isolate}.${scriptId}`;
60
+ return Platform.MapUtilities.getWithDefault(
61
+ scriptById, key, () => ({isolate, scriptId, frame: '', ts: event.ts} as Script));
62
+ };
63
+
64
+ if (Types.Events.isRundownScriptCompiled(event) && event.args.data) {
65
+ const {isolate, scriptId, frame} = event.args.data;
66
+ const script = getOrMakeScript(isolate, scriptId);
67
+ script.frame = frame;
68
+ script.ts = event.ts;
69
+
70
+ return;
71
+ }
72
+
73
+ if (Types.Events.isRundownScript(event)) {
74
+ const {isolate, scriptId, url, sourceUrl, sourceMapUrl, sourceMapUrlElided} = event.args.data;
75
+ const script = getOrMakeScript(isolate, scriptId);
76
+ script.url = url;
77
+ script.ts = event.ts;
78
+ if (sourceUrl) {
79
+ script.sourceUrl = sourceUrl;
80
+ }
81
+
82
+ // Older traces may have data source map urls. Those can be very large, so a change
83
+ // was made to elide them from the trace.
84
+ // If elided, a fresh trace will fetch the source map from the Script model
85
+ // (see TimelinePanel getExistingSourceMap). If not fresh, the source map is resolved
86
+ // instead in this handler via `findCachedRawSourceMap`.
87
+ if (sourceMapUrlElided) {
88
+ script.sourceMapUrlElided = true;
89
+ } else if (sourceMapUrl) {
90
+ script.sourceMapUrl = sourceMapUrl;
91
+ }
92
+ return;
93
+ }
94
+
95
+ if (Types.Events.isRundownScriptSource(event)) {
96
+ const {isolate, scriptId, sourceText} = event.args.data;
97
+ const script = getOrMakeScript(isolate, scriptId);
98
+ script.content = sourceText;
99
+ return;
100
+ }
101
+
102
+ if (Types.Events.isRundownScriptSourceLarge(event)) {
103
+ const {isolate, scriptId, sourceText} = event.args.data;
104
+ const script = getOrMakeScript(isolate, scriptId);
105
+ script.content = (script.content ?? '') + sourceText;
106
+ return;
107
+ }
108
+ }
109
+
110
+ function findFrame(meta: MetaHandlerData, frameId: string): Types.Events.TraceFrame|null {
111
+ for (const frames of meta.frameByProcessId?.values()) {
112
+ const frame = frames.get(frameId);
113
+ if (frame) {
114
+ return frame;
115
+ }
116
+ }
117
+
118
+ return null;
119
+ }
120
+
121
+ function findNetworkRequest(networkRequests: Types.Events.SyntheticNetworkRequest[], script: Script):
122
+ Types.Events.SyntheticNetworkRequest|null {
123
+ if (!script.url) {
124
+ return null;
125
+ }
126
+
127
+ return networkRequests.find(request => request.args.data.url === script.url) ?? null;
128
+ }
129
+
130
+ function computeMappingEndColumns(map: SDK.SourceMap.SourceMap): Map<SDK.SourceMap.SourceMapEntry, number> {
131
+ const result = new Map<SDK.SourceMap.SourceMapEntry, number>();
132
+
133
+ const mappings = map.mappings();
134
+ for (let i = 0; i < mappings.length - 1; i++) {
135
+ const mapping = mappings[i];
136
+ const nextMapping = mappings[i + 1];
137
+ if (mapping.lineNumber === nextMapping.lineNumber) {
138
+ result.set(mapping, nextMapping.columnNumber);
139
+ }
140
+ }
141
+
142
+ // Now, all but the last mapping on each line will have a value in this map.
143
+ return result;
144
+ }
145
+
146
+ /**
147
+ * Using a script's contents and source map, attribute every generated byte to an authored source file.
148
+ */
149
+ function computeGeneratedFileSizes(script: Script): GeneratedFileSizes {
150
+ if (!script.sourceMap) {
151
+ throw new Error('expected source map');
152
+ }
153
+
154
+ const map = script.sourceMap;
155
+ const content = script.content ?? '';
156
+ const contentLength = content.length;
157
+ const lines = content.split('\n');
158
+ const files: Record<string, number> = {};
159
+ const totalBytes = contentLength;
160
+ let unmappedBytes = totalBytes;
161
+
162
+ const mappingEndCols = computeMappingEndColumns(script.sourceMap);
163
+
164
+ for (const mapping of map.mappings()) {
165
+ const source = mapping.sourceURL;
166
+ const lineNum = mapping.lineNumber;
167
+ const colNum = mapping.columnNumber;
168
+ const lastColNum = mappingEndCols.get(mapping);
169
+
170
+ // Webpack sometimes emits null mappings.
171
+ // https://github.com/mozilla/source-map/pull/303
172
+ if (!source) {
173
+ continue;
174
+ }
175
+
176
+ // Lines and columns are zero-based indices. Visually, lines are shown as a 1-based index.
177
+
178
+ const line = lines[lineNum];
179
+ if (line === null || line === undefined) {
180
+ const errorMessage = `${map.url()} mapping for line out of bounds: ${lineNum + 1}`;
181
+ return {errorMessage};
182
+ }
183
+
184
+ if (colNum > line.length) {
185
+ const errorMessage = `${map.url()} mapping for column out of bounds: ${lineNum + 1}:${colNum}`;
186
+ return {errorMessage};
187
+ }
188
+
189
+ let mappingLength = 0;
190
+ if (lastColNum !== undefined) {
191
+ if (lastColNum > line.length) {
192
+ const errorMessage = `${map.url()} mapping for last column out of bounds: ${lineNum + 1}:${lastColNum}`;
193
+ return {errorMessage};
194
+ }
195
+ mappingLength = lastColNum - colNum;
196
+ } else {
197
+ // Add +1 to account for the newline.
198
+ mappingLength = line.length - colNum + 1;
199
+ }
200
+ files[source] = (files[source] || 0) + mappingLength;
201
+ unmappedBytes -= mappingLength;
202
+ }
203
+
204
+ return {
205
+ files,
206
+ unmappedBytes,
207
+ totalBytes,
208
+ };
209
+ }
210
+
211
+ export function getScriptGeneratedSizes(script: Script): GeneratedFileSizes|null {
212
+ if (script.sourceMap && !script.sizes) {
213
+ script.sizes = computeGeneratedFileSizes(script);
214
+ }
215
+
216
+ return script.sizes ?? null;
217
+ }
218
+
219
+ function findCachedRawSourceMap(script: Script, options: Types.Configuration.ParseOptions): SDK.SourceMap.SourceMapV3|
220
+ undefined {
221
+ if (options.isFreshRecording || !options.metadata?.sourceMaps) {
222
+ // Exit if this is not a loaded trace w/ source maps in the metadata.
223
+ return;
224
+ }
225
+
226
+ // For elided data url source maps, search the metadata source maps by script url.
227
+ if (script.sourceMapUrlElided) {
228
+ if (!script.url) {
229
+ return;
230
+ }
231
+
232
+ const cachedSourceMap = options.metadata.sourceMaps.find(m => m.url === script.url);
233
+ if (cachedSourceMap) {
234
+ return cachedSourceMap.sourceMap;
235
+ }
236
+
237
+ return;
238
+ }
239
+
240
+ if (!script.sourceMapUrl) {
241
+ return;
242
+ }
243
+
244
+ // Otherwise, search by source map url.
245
+ // Note: early enhanced traces may have this field set for data urls. Ignore those,
246
+ // as they were never stored in metadata sourcemap.
247
+ const isDataUrl = script.sourceMapUrl.startsWith('data:');
248
+ if (!isDataUrl) {
249
+ const cachedSourceMap = options.metadata.sourceMaps.find(m => m.sourceMapUrl === script.sourceMapUrl);
250
+ if (cachedSourceMap) {
251
+ return cachedSourceMap.sourceMap;
252
+ }
253
+ }
254
+
255
+ return;
256
+ }
257
+
258
+ export async function finalize(options: FinalizeOptions): Promise<void> {
259
+ const meta = metaHandlerData();
260
+ const networkRequests = [...networkRequestsHandlerData().byId.values()];
261
+
262
+ const documentUrls = new Set<string>();
263
+ for (const frames of meta.frameByProcessId.values()) {
264
+ for (const frame of frames.values()) {
265
+ documentUrls.add(frame.url);
266
+ }
267
+ }
268
+
269
+ for (const script of scriptById.values()) {
270
+ script.request = findNetworkRequest(networkRequests, script) ?? undefined;
271
+ script.inline = !!script.url && documentUrls.has(script.url);
272
+ }
273
+
274
+ if (!options.resolveSourceMap) {
275
+ return;
276
+ }
277
+
278
+ const promises = [];
279
+ for (const script of scriptById.values()) {
280
+ // No frame or url means the script came from somewhere we don't care about.
281
+ // Note: scripts from inline <SCRIPT> elements use the url of the HTML document,
282
+ // so aren't ignored.
283
+ if (!script.frame || !script.url || (!script.sourceMapUrl && !script.sourceMapUrlElided)) {
284
+ continue;
285
+ }
286
+
287
+ const frameUrl = findFrame(meta, script.frame)?.url as Platform.DevToolsPath.UrlString | undefined;
288
+ if (!frameUrl) {
289
+ continue;
290
+ }
291
+
292
+ // If there is a `sourceURL` magic comment, resolve the compiledUrl against the frame url.
293
+ // example: `// #sourceURL=foo.js` for target frame https://www.example.com/home -> https://www.example.com/home/foo.js
294
+ let sourceUrl = script.url;
295
+ if (script.sourceUrl) {
296
+ sourceUrl = Common.ParsedURL.ParsedURL.completeURL(frameUrl, script.sourceUrl) ?? script.sourceUrl;
297
+ }
298
+
299
+ let sourceMapUrl;
300
+ if (script.sourceMapUrl) {
301
+ // Resolve the source map url. The value given by v8 may be relative, so resolve it here.
302
+ // This process should match the one in `SourceMapManager.attachSourceMap`.
303
+ sourceMapUrl =
304
+ Common.ParsedURL.ParsedURL.completeURL(sourceUrl as Platform.DevToolsPath.UrlString, script.sourceMapUrl);
305
+ if (!sourceMapUrl) {
306
+ continue;
307
+ }
308
+
309
+ script.sourceMapUrl = sourceMapUrl;
310
+ }
311
+
312
+ const params: Types.Configuration.ResolveSourceMapParams = {
313
+ scriptId: script.scriptId,
314
+ scriptUrl: script.url as Platform.DevToolsPath.UrlString,
315
+ sourceUrl: sourceUrl as Platform.DevToolsPath.UrlString,
316
+ sourceMapUrl: sourceMapUrl ?? '' as Platform.DevToolsPath.UrlString,
317
+ frame: script.frame as Protocol.Page.FrameId,
318
+ cachedRawSourceMap: findCachedRawSourceMap(script, options),
319
+ };
320
+ const promise = options.resolveSourceMap(params).then(sourceMap => {
321
+ if (sourceMap) {
322
+ script.sourceMap = sourceMap;
323
+ }
324
+ });
325
+ promises.push(promise.catch(e => {
326
+ console.error('Uncaught error when resolving source map', params, e);
327
+ }));
328
+ }
329
+ await Promise.all(promises);
330
+ }
331
+
332
+ export function data(): ScriptsData {
333
+ return {
334
+ scripts: [...scriptById.values()],
335
+ };
336
+ }
@@ -0,0 +1,110 @@
1
+ // Copyright 2024 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 type * as Protocol from '../../../generated/protocol.js';
6
+ import * as Types from '../types/types.js';
7
+
8
+ interface SelectorWithStyleSheedId {
9
+ selector: string;
10
+ styleSheetId: string;
11
+ }
12
+
13
+ interface InvalidatedNode {
14
+ frame: string;
15
+ backendNodeId: Protocol.DOM.BackendNodeId;
16
+ type: Types.Events.InvalidationEventType;
17
+ selectorList: SelectorWithStyleSheedId[];
18
+ ts: Types.Timing.Micro;
19
+ tts?: Types.Timing.Micro;
20
+ subtree:
21
+ boolean; // Indicates if the invalidation applies solely to the node (false) or extends to all its descendants (true)
22
+ lastRecalcStyleEventTs: Types.Timing.Micro;
23
+ }
24
+
25
+ let lastRecalcStyleEvent: Types.Events.RecalcStyle|null = null;
26
+ let lastInvalidatedNode: InvalidatedNode|null = null;
27
+
28
+ let selectorDataForRecalcStyle = new Map<Types.Events.RecalcStyle, {
29
+ timings: Types.Events.SelectorTiming[],
30
+ }>();
31
+
32
+ let invalidatedNodeList = new Array<InvalidatedNode>();
33
+
34
+ export function reset(): void {
35
+ lastRecalcStyleEvent = null;
36
+ lastInvalidatedNode = null;
37
+ selectorDataForRecalcStyle = new Map();
38
+ invalidatedNodeList = [];
39
+ }
40
+
41
+ export function handleEvent(event: Types.Events.Event): void {
42
+ if (Types.Events.isStyleRecalcInvalidationTracking(event)) {
43
+ /**
44
+ * CSS Style substree invalidation
45
+ * A subtree invalidation comes with two records, 1) a StyleInvalidatorInvalidationTracking
46
+ * event 2) following with a StyleRecalcInvalidationTracking event. List of selectors and style
47
+ * sheet ID information is stored in the 1st event. Subtree flag is stored in the 2nd
48
+ * event.
49
+ */
50
+ if (event.args.data.subtree &&
51
+ event.args.data.reason === Types.Events.StyleRecalcInvalidationReason.RELATED_STYLE_RULE &&
52
+ lastInvalidatedNode && event.args.data.nodeId === lastInvalidatedNode.backendNodeId) {
53
+ lastInvalidatedNode.subtree = true;
54
+ return;
55
+ }
56
+ }
57
+
58
+ if (Types.Events.isSelectorStats(event) && lastRecalcStyleEvent && event.args.selector_stats) {
59
+ selectorDataForRecalcStyle.set(lastRecalcStyleEvent, {
60
+ timings: event.args.selector_stats.selector_timings,
61
+ });
62
+ return;
63
+ }
64
+
65
+ if (Types.Events.isStyleInvalidatorInvalidationTracking(event)) {
66
+ const selectorList = new Array<SelectorWithStyleSheedId>();
67
+ event.args.data.selectors?.forEach(selector => {
68
+ selectorList.push({
69
+ selector: selector.selector,
70
+ styleSheetId: selector.style_sheet_id,
71
+ });
72
+ });
73
+
74
+ if (selectorList.length > 0) {
75
+ lastInvalidatedNode = {
76
+ frame: event.args.data.frame,
77
+ backendNodeId: event.args.data.nodeId,
78
+ type: Types.Events.InvalidationEventType.StyleInvalidatorInvalidationTracking,
79
+ selectorList,
80
+ ts: event.ts,
81
+ tts: event.tts,
82
+ subtree: false,
83
+ lastRecalcStyleEventTs: lastRecalcStyleEvent ? lastRecalcStyleEvent.ts : Types.Timing.Micro(0),
84
+ };
85
+ invalidatedNodeList.push(lastInvalidatedNode);
86
+ }
87
+ }
88
+
89
+ if (Types.Events.isRecalcStyle(event)) {
90
+ lastRecalcStyleEvent = event;
91
+ return;
92
+ }
93
+ }
94
+
95
+ export async function finalize(): Promise<void> {
96
+ }
97
+
98
+ export interface SelectorStatsData {
99
+ dataForRecalcStyleEvent: Map<Types.Events.RecalcStyle, {
100
+ timings: Types.Events.SelectorTiming[],
101
+ }>;
102
+ invalidatedNodeList: InvalidatedNode[];
103
+ }
104
+
105
+ export function data(): SelectorStatsData {
106
+ return {
107
+ dataForRecalcStyleEvent: selectorDataForRecalcStyle,
108
+ invalidatedNodeList,
109
+ };
110
+ }