devtools-tracing 1.1.0 → 1.2.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 (528) hide show
  1. package/.claude/settings.local.json +14 -0
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.js +28854 -0
  4. package/package.json +10 -8
  5. package/generate.ts +0 -649
  6. package/index.ts +0 -17
  7. package/lib/extension-api/ExtensionAPI.d.ts +0 -357
  8. package/lib/front_end/core/common/App.ts +0 -7
  9. package/lib/front_end/core/common/AppProvider.ts +0 -32
  10. package/lib/front_end/core/common/Base64.ts +0 -47
  11. package/lib/front_end/core/common/CharacterIdMap.ts +0 -30
  12. package/lib/front_end/core/common/Color.ts +0 -2506
  13. package/lib/front_end/core/common/ColorConverter.ts +0 -402
  14. package/lib/front_end/core/common/ColorUtils.ts +0 -252
  15. package/lib/front_end/core/common/Console.ts +0 -114
  16. package/lib/front_end/core/common/Debouncer.ts +0 -15
  17. package/lib/front_end/core/common/EventTarget.ts +0 -52
  18. package/lib/front_end/core/common/Gzip.ts +0 -74
  19. package/lib/front_end/core/common/JavaScriptMetaData.ts +0 -29
  20. package/lib/front_end/core/common/Lazy.ts +0 -31
  21. package/lib/front_end/core/common/Linkifier.ts +0 -55
  22. package/lib/front_end/core/common/MapWithDefault.ts +0 -26
  23. package/lib/front_end/core/common/Mutex.ts +0 -55
  24. package/lib/front_end/core/common/Object.ts +0 -145
  25. package/lib/front_end/core/common/ParsedURL.ts +0 -554
  26. package/lib/front_end/core/common/Progress.ts +0 -180
  27. package/lib/front_end/core/common/QueryParamHandler.ts +0 -7
  28. package/lib/front_end/core/common/ResolverBase.ts +0 -85
  29. package/lib/front_end/core/common/ResourceType.ts +0 -588
  30. package/lib/front_end/core/common/ReturnToPanel.ts +0 -17
  31. package/lib/front_end/core/common/Revealer.ts +0 -192
  32. package/lib/front_end/core/common/Runnable.ts +0 -41
  33. package/lib/front_end/core/common/SegmentedRange.ts +0 -87
  34. package/lib/front_end/core/common/SettingRegistration.ts +0 -339
  35. package/lib/front_end/core/common/Settings.ts +0 -1497
  36. package/lib/front_end/core/common/SimpleHistoryManager.ts +0 -124
  37. package/lib/front_end/core/common/StringOutputStream.ts +0 -26
  38. package/lib/front_end/core/common/TextDictionary.ts +0 -48
  39. package/lib/front_end/core/common/Throttler.ts +0 -99
  40. package/lib/front_end/core/common/Trie.ts +0 -152
  41. package/lib/front_end/core/common/Worker.ts +0 -60
  42. package/lib/front_end/core/common/common.ts +0 -81
  43. package/lib/front_end/core/host/AidaClient.ts +0 -733
  44. package/lib/front_end/core/host/GdpClient.ts +0 -316
  45. package/lib/front_end/core/host/InspectorFrontendHost.ts +0 -648
  46. package/lib/front_end/core/host/InspectorFrontendHostAPI.ts +0 -551
  47. package/lib/front_end/core/host/Platform.ts +0 -76
  48. package/lib/front_end/core/host/ResourceLoader.ts +0 -282
  49. package/lib/front_end/core/host/UserMetrics.ts +0 -1230
  50. package/lib/front_end/core/host/host.ts +0 -23
  51. package/lib/front_end/core/i18n/ByteUtilities.ts +0 -82
  52. package/lib/front_end/core/i18n/DevToolsLocale.ts +0 -87
  53. package/lib/front_end/core/i18n/NumberFormatter.ts +0 -82
  54. package/lib/front_end/core/i18n/i18n.ts +0 -17
  55. package/lib/front_end/core/i18n/i18nImpl.ts +0 -204
  56. package/lib/front_end/core/i18n/i18nTypes.ts +0 -10
  57. package/lib/front_end/core/i18n/locales.js +0 -14
  58. package/lib/front_end/core/i18n/time-utilities.ts +0 -174
  59. package/lib/front_end/core/platform/ArrayUtilities.ts +0 -271
  60. package/lib/front_end/core/platform/Brand.ts +0 -23
  61. package/lib/front_end/core/platform/Constructor.ts +0 -10
  62. package/lib/front_end/core/platform/DOMUtilities.ts +0 -138
  63. package/lib/front_end/core/platform/DateUtilities.ts +0 -15
  64. package/lib/front_end/core/platform/DevToolsPath.ts +0 -53
  65. package/lib/front_end/core/platform/KeyboardUtilities.ts +0 -38
  66. package/lib/front_end/core/platform/MapUtilities.ts +0 -95
  67. package/lib/front_end/core/platform/MimeType.ts +0 -175
  68. package/lib/front_end/core/platform/NumberUtilities.ts +0 -80
  69. package/lib/front_end/core/platform/StringUtilities.ts +0 -588
  70. package/lib/front_end/core/platform/Timing.ts +0 -17
  71. package/lib/front_end/core/platform/TypedArrayUtilities.ts +0 -189
  72. package/lib/front_end/core/platform/TypescriptUtilities.ts +0 -86
  73. package/lib/front_end/core/platform/UIString.ts +0 -39
  74. package/lib/front_end/core/platform/UserVisibleError.ts +0 -28
  75. package/lib/front_end/core/platform/platform.ts +0 -45
  76. package/lib/front_end/core/protocol_client/ConnectionTransport.ts +0 -26
  77. package/lib/front_end/core/protocol_client/InspectorBackend.ts +0 -1050
  78. package/lib/front_end/core/protocol_client/NodeURL.ts +0 -42
  79. package/lib/front_end/core/protocol_client/protocol_client.ts +0 -13
  80. package/lib/front_end/core/root/Runtime.ts +0 -609
  81. package/lib/front_end/core/root/root.ts +0 -6
  82. package/lib/front_end/core/sdk/AccessibilityModel.ts +0 -353
  83. package/lib/front_end/core/sdk/AnimationModel.ts +0 -1041
  84. package/lib/front_end/core/sdk/AutofillModel.ts +0 -184
  85. package/lib/front_end/core/sdk/CPUProfilerModel.ts +0 -148
  86. package/lib/front_end/core/sdk/CPUThrottlingManager.ts +0 -282
  87. package/lib/front_end/core/sdk/CSSContainerQuery.ts +0 -139
  88. package/lib/front_end/core/sdk/CSSFontFace.ts +0 -40
  89. package/lib/front_end/core/sdk/CSSLayer.ts +0 -30
  90. package/lib/front_end/core/sdk/CSSMatchedStyles.ts +0 -1646
  91. package/lib/front_end/core/sdk/CSSMedia.ts +0 -121
  92. package/lib/front_end/core/sdk/CSSMetadata.ts +0 -1647
  93. package/lib/front_end/core/sdk/CSSModel.ts +0 -1128
  94. package/lib/front_end/core/sdk/CSSProperty.ts +0 -384
  95. package/lib/front_end/core/sdk/CSSPropertyParser.ts +0 -681
  96. package/lib/front_end/core/sdk/CSSPropertyParserMatchers.ts +0 -1395
  97. package/lib/front_end/core/sdk/CSSQuery.ts +0 -72
  98. package/lib/front_end/core/sdk/CSSRule.ts +0 -465
  99. package/lib/front_end/core/sdk/CSSScope.ts +0 -30
  100. package/lib/front_end/core/sdk/CSSStartingStyle.ts +0 -29
  101. package/lib/front_end/core/sdk/CSSStyleDeclaration.ts +0 -313
  102. package/lib/front_end/core/sdk/CSSStyleSheetHeader.ts +0 -196
  103. package/lib/front_end/core/sdk/CSSSupports.ts +0 -33
  104. package/lib/front_end/core/sdk/CategorizedBreakpoint.ts +0 -64
  105. package/lib/front_end/core/sdk/ChildTargetManager.ts +0 -314
  106. package/lib/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +0 -62
  107. package/lib/front_end/core/sdk/Connections.ts +0 -293
  108. package/lib/front_end/core/sdk/ConsoleModel.ts +0 -808
  109. package/lib/front_end/core/sdk/ConsoleModelTypes.ts +0 -15
  110. package/lib/front_end/core/sdk/Cookie.ts +0 -319
  111. package/lib/front_end/core/sdk/CookieModel.ts +0 -239
  112. package/lib/front_end/core/sdk/CookieParser.ts +0 -185
  113. package/lib/front_end/core/sdk/DOMDebuggerModel.ts +0 -787
  114. package/lib/front_end/core/sdk/DOMModel.ts +0 -1961
  115. package/lib/front_end/core/sdk/DebuggerModel.ts +0 -1605
  116. package/lib/front_end/core/sdk/EmulationModel.ts +0 -648
  117. package/lib/front_end/core/sdk/EnhancedTracesParser.ts +0 -515
  118. package/lib/front_end/core/sdk/EventBreakpointsModel.ts +0 -183
  119. package/lib/front_end/core/sdk/FrameAssociated.ts +0 -11
  120. package/lib/front_end/core/sdk/FrameManager.ts +0 -259
  121. package/lib/front_end/core/sdk/HeapProfilerModel.ts +0 -225
  122. package/lib/front_end/core/sdk/HttpReasonPhraseStrings.ts +0 -77
  123. package/lib/front_end/core/sdk/IOModel.ts +0 -91
  124. package/lib/front_end/core/sdk/IsolateManager.ts +0 -257
  125. package/lib/front_end/core/sdk/IssuesModel.ts +0 -70
  126. package/lib/front_end/core/sdk/LayerTreeBase.ts +0 -169
  127. package/lib/front_end/core/sdk/LogModel.ts +0 -56
  128. package/lib/front_end/core/sdk/NetworkManager.ts +0 -2823
  129. package/lib/front_end/core/sdk/NetworkRequest.ts +0 -2253
  130. package/lib/front_end/core/sdk/OverlayColorGenerator.ts +0 -52
  131. package/lib/front_end/core/sdk/OverlayModel.ts +0 -1011
  132. package/lib/front_end/core/sdk/OverlayPersistentHighlighter.ts +0 -522
  133. package/lib/front_end/core/sdk/PageLoad.ts +0 -35
  134. package/lib/front_end/core/sdk/PageResourceLoader.ts +0 -435
  135. package/lib/front_end/core/sdk/PaintProfiler.ts +0 -110
  136. package/lib/front_end/core/sdk/PerformanceMetricsModel.ts +0 -84
  137. package/lib/front_end/core/sdk/PreloadingModel.ts +0 -863
  138. package/lib/front_end/core/sdk/RehydratingConnection.ts +0 -386
  139. package/lib/front_end/core/sdk/RehydratingObject.ts +0 -66
  140. package/lib/front_end/core/sdk/RemoteObject.ts +0 -1160
  141. package/lib/front_end/core/sdk/Resource.ts +0 -232
  142. package/lib/front_end/core/sdk/ResourceTreeModel.ts +0 -1160
  143. package/lib/front_end/core/sdk/RuntimeModel.ts +0 -732
  144. package/lib/front_end/core/sdk/SDKModel.ts +0 -65
  145. package/lib/front_end/core/sdk/ScopeTreeCache.ts +0 -45
  146. package/lib/front_end/core/sdk/ScreenCaptureModel.ts +0 -255
  147. package/lib/front_end/core/sdk/Script.ts +0 -534
  148. package/lib/front_end/core/sdk/SecurityOriginManager.ts +0 -76
  149. package/lib/front_end/core/sdk/ServerSentEvents.ts +0 -80
  150. package/lib/front_end/core/sdk/ServerSentEventsProtocol.ts +0 -122
  151. package/lib/front_end/core/sdk/ServerTiming.ts +0 -260
  152. package/lib/front_end/core/sdk/ServiceWorkerCacheModel.ts +0 -377
  153. package/lib/front_end/core/sdk/ServiceWorkerManager.ts +0 -605
  154. package/lib/front_end/core/sdk/SourceMap.ts +0 -867
  155. package/lib/front_end/core/sdk/SourceMapCache.ts +0 -54
  156. package/lib/front_end/core/sdk/SourceMapFunctionRanges.ts +0 -156
  157. package/lib/front_end/core/sdk/SourceMapManager.ts +0 -239
  158. package/lib/front_end/core/sdk/SourceMapScopeChainEntry.ts +0 -189
  159. package/lib/front_end/core/sdk/SourceMapScopesInfo.ts +0 -508
  160. package/lib/front_end/core/sdk/StorageBucketsModel.ts +0 -204
  161. package/lib/front_end/core/sdk/StorageKeyManager.ts +0 -98
  162. package/lib/front_end/core/sdk/Target.ts +0 -332
  163. package/lib/front_end/core/sdk/TargetManager.ts +0 -453
  164. package/lib/front_end/core/sdk/TraceObject.ts +0 -61
  165. package/lib/front_end/core/sdk/WebAuthnModel.ts +0 -104
  166. package/lib/front_end/core/sdk/sdk.ts +0 -174
  167. package/lib/front_end/entrypoints/formatter_worker/FormatterActions.ts +0 -59
  168. package/lib/front_end/generated/InspectorBackendCommands.js +0 -1617
  169. package/lib/front_end/generated/SupportedCSSProperties.js +0 -7512
  170. package/lib/front_end/generated/protocol-proxy-api.d.ts +0 -5022
  171. package/lib/front_end/generated/protocol.ts +0 -22014
  172. package/lib/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -318
  173. package/lib/front_end/models/bindings/CompilerScriptMapping.ts +0 -536
  174. package/lib/front_end/models/bindings/ContentProviderBasedProject.ts +0 -187
  175. package/lib/front_end/models/bindings/DebuggerLanguagePlugins.ts +0 -1197
  176. package/lib/front_end/models/bindings/DebuggerWorkspaceBinding.ts +0 -733
  177. package/lib/front_end/models/bindings/DefaultScriptMapping.ts +0 -141
  178. package/lib/front_end/models/bindings/FileUtils.ts +0 -228
  179. package/lib/front_end/models/bindings/LiveLocation.ts +0 -81
  180. package/lib/front_end/models/bindings/NetworkProject.ts +0 -157
  181. package/lib/front_end/models/bindings/PresentationConsoleMessageHelper.ts +0 -312
  182. package/lib/front_end/models/bindings/ResourceMapping.ts +0 -539
  183. package/lib/front_end/models/bindings/ResourceScriptMapping.ts +0 -491
  184. package/lib/front_end/models/bindings/ResourceUtils.ts +0 -103
  185. package/lib/front_end/models/bindings/SASSSourceMapping.ts +0 -222
  186. package/lib/front_end/models/bindings/StylesSourceMapping.ts +0 -316
  187. package/lib/front_end/models/bindings/TempFile.ts +0 -67
  188. package/lib/front_end/models/bindings/bindings.ts +0 -39
  189. package/lib/front_end/models/cpu_profile/CPUProfileDataModel.ts +0 -571
  190. package/lib/front_end/models/cpu_profile/ProfileTreeModel.ts +0 -103
  191. package/lib/front_end/models/cpu_profile/cpu_profile.ts +0 -11
  192. package/lib/front_end/models/formatter/FormatterWorkerPool.ts +0 -219
  193. package/lib/front_end/models/formatter/ScriptFormatter.ts +0 -112
  194. package/lib/front_end/models/formatter/formatter.ts +0 -8
  195. package/lib/front_end/models/source_map_scopes/NamesResolver.ts +0 -765
  196. package/lib/front_end/models/source_map_scopes/ScopeChainModel.ts +0 -84
  197. package/lib/front_end/models/source_map_scopes/source_map_scopes.ts +0 -11
  198. package/lib/front_end/models/stack_trace/StackTrace.ts +0 -53
  199. package/lib/front_end/models/stack_trace/StackTraceImpl.ts +0 -85
  200. package/lib/front_end/models/stack_trace/StackTraceModel.ts +0 -128
  201. package/lib/front_end/models/stack_trace/Trie.ts +0 -163
  202. package/lib/front_end/models/stack_trace/stack_trace.ts +0 -9
  203. package/lib/front_end/models/stack_trace/stack_trace_impl.ts +0 -13
  204. package/lib/front_end/models/text_utils/CodeMirrorUtils.ts +0 -37
  205. package/lib/front_end/models/text_utils/ContentData.ts +0 -199
  206. package/lib/front_end/models/text_utils/ContentProvider.ts +0 -68
  207. package/lib/front_end/models/text_utils/StaticContentProvider.ts +0 -49
  208. package/lib/front_end/models/text_utils/StreamingContentData.ts +0 -108
  209. package/lib/front_end/models/text_utils/Text.ts +0 -90
  210. package/lib/front_end/models/text_utils/TextCursor.ts +0 -44
  211. package/lib/front_end/models/text_utils/TextRange.ts +0 -266
  212. package/lib/front_end/models/text_utils/TextUtils.ts +0 -401
  213. package/lib/front_end/models/text_utils/WasmDisassembly.ts +0 -87
  214. package/lib/front_end/models/text_utils/text_utils.ts +0 -27
  215. package/lib/front_end/models/trace/EntityMapper.ts +0 -141
  216. package/lib/front_end/models/trace/EventsSerializer.ts +0 -101
  217. package/lib/front_end/models/trace/LanternComputationData.ts +0 -438
  218. package/lib/front_end/models/trace/ModelImpl.ts +0 -236
  219. package/lib/front_end/models/trace/Name.ts +0 -136
  220. package/lib/front_end/models/trace/Processor.ts +0 -652
  221. package/lib/front_end/models/trace/Styles.ts +0 -1138
  222. package/lib/front_end/models/trace/extras/FilmStrip.ts +0 -78
  223. package/lib/front_end/models/trace/extras/MainThreadActivity.ts +0 -86
  224. package/lib/front_end/models/trace/extras/ScriptDuplication.ts +0 -236
  225. package/lib/front_end/models/trace/extras/StackTraceForEvent.ts +0 -203
  226. package/lib/front_end/models/trace/extras/ThirdParties.ts +0 -164
  227. package/lib/front_end/models/trace/extras/TraceFilter.ts +0 -62
  228. package/lib/front_end/models/trace/extras/TraceTree.ts +0 -701
  229. package/lib/front_end/models/trace/extras/extras.ts +0 -11
  230. package/lib/front_end/models/trace/handlers/AnimationFramesHandler.ts +0 -128
  231. package/lib/front_end/models/trace/handlers/AnimationHandler.ts +0 -36
  232. package/lib/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +0 -239
  233. package/lib/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +0 -183
  234. package/lib/front_end/models/trace/handlers/DOMStatsHandler.ts +0 -31
  235. package/lib/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +0 -306
  236. package/lib/front_end/models/trace/handlers/FlowsHandler.ts +0 -175
  237. package/lib/front_end/models/trace/handlers/FramesHandler.ts +0 -571
  238. package/lib/front_end/models/trace/handlers/GPUHandler.ts +0 -50
  239. package/lib/front_end/models/trace/handlers/ImagePaintingHandler.ts +0 -183
  240. package/lib/front_end/models/trace/handlers/InitiatorsHandler.ts +0 -193
  241. package/lib/front_end/models/trace/handlers/InvalidationsHandler.ts +0 -168
  242. package/lib/front_end/models/trace/handlers/LargestImagePaintHandler.ts +0 -109
  243. package/lib/front_end/models/trace/handlers/LargestTextPaintHandler.ts +0 -35
  244. package/lib/front_end/models/trace/handlers/LayerTreeHandler.ts +0 -123
  245. package/lib/front_end/models/trace/handlers/LayoutShiftsHandler.ts +0 -573
  246. package/lib/front_end/models/trace/handlers/MemoryHandler.ts +0 -31
  247. package/lib/front_end/models/trace/handlers/MetaHandler.ts +0 -525
  248. package/lib/front_end/models/trace/handlers/ModelHandlers.ts +0 -34
  249. package/lib/front_end/models/trace/handlers/NetworkRequestsHandler.ts +0 -672
  250. package/lib/front_end/models/trace/handlers/PageFramesHandler.ts +0 -52
  251. package/lib/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +0 -460
  252. package/lib/front_end/models/trace/handlers/RendererHandler.ts +0 -428
  253. package/lib/front_end/models/trace/handlers/SamplesHandler.ts +0 -271
  254. package/lib/front_end/models/trace/handlers/ScreenshotsHandler.ts +0 -122
  255. package/lib/front_end/models/trace/handlers/ScriptsHandler.ts +0 -336
  256. package/lib/front_end/models/trace/handlers/SelectorStatsHandler.ts +0 -110
  257. package/lib/front_end/models/trace/handlers/Threads.ts +0 -139
  258. package/lib/front_end/models/trace/handlers/UserInteractionsHandler.ts +0 -400
  259. package/lib/front_end/models/trace/handlers/UserTimingsHandler.ts +0 -233
  260. package/lib/front_end/models/trace/handlers/WarningsHandler.ts +0 -162
  261. package/lib/front_end/models/trace/handlers/WorkersHandler.ts +0 -45
  262. package/lib/front_end/models/trace/handlers/handlers.ts +0 -8
  263. package/lib/front_end/models/trace/handlers/helpers.ts +0 -196
  264. package/lib/front_end/models/trace/handlers/types.ts +0 -75
  265. package/lib/front_end/models/trace/helpers/Extensions.ts +0 -54
  266. package/lib/front_end/models/trace/helpers/Network.ts +0 -129
  267. package/lib/front_end/models/trace/helpers/SamplesIntegrator.ts +0 -544
  268. package/lib/front_end/models/trace/helpers/SyntheticEvents.ts +0 -87
  269. package/lib/front_end/models/trace/helpers/Timing.ts +0 -248
  270. package/lib/front_end/models/trace/helpers/Trace.ts +0 -928
  271. package/lib/front_end/models/trace/helpers/TreeHelpers.ts +0 -320
  272. package/lib/front_end/models/trace/helpers/helpers.ts +0 -11
  273. package/lib/front_end/models/trace/insights/CLSCulprits.ts +0 -668
  274. package/lib/front_end/models/trace/insights/Cache.ts +0 -269
  275. package/lib/front_end/models/trace/insights/Common.ts +0 -453
  276. package/lib/front_end/models/trace/insights/DOMSize.ts +0 -223
  277. package/lib/front_end/models/trace/insights/DocumentLatency.ts +0 -319
  278. package/lib/front_end/models/trace/insights/DuplicatedJavaScript.ts +0 -126
  279. package/lib/front_end/models/trace/insights/FontDisplay.ts +0 -119
  280. package/lib/front_end/models/trace/insights/ForcedReflow.ts +0 -220
  281. package/lib/front_end/models/trace/insights/INPBreakdown.ts +0 -171
  282. package/lib/front_end/models/trace/insights/ImageDelivery.ts +0 -348
  283. package/lib/front_end/models/trace/insights/LCPBreakdown.ts +0 -268
  284. package/lib/front_end/models/trace/insights/LCPDiscovery.ts +0 -237
  285. package/lib/front_end/models/trace/insights/LegacyJavaScript.ts +0 -138
  286. package/lib/front_end/models/trace/insights/Models.ts +0 -22
  287. package/lib/front_end/models/trace/insights/ModernHTTP.ts +0 -257
  288. package/lib/front_end/models/trace/insights/NetworkDependencyTree.ts +0 -726
  289. package/lib/front_end/models/trace/insights/RenderBlocking.ts +0 -257
  290. package/lib/front_end/models/trace/insights/SlowCSSSelector.ts +0 -175
  291. package/lib/front_end/models/trace/insights/Statistics.ts +0 -101
  292. package/lib/front_end/models/trace/insights/ThirdParties.ts +0 -130
  293. package/lib/front_end/models/trace/insights/Viewport.ts +0 -138
  294. package/lib/front_end/models/trace/insights/insights.ts +0 -10
  295. package/lib/front_end/models/trace/insights/types.ts +0 -157
  296. package/lib/front_end/models/trace/lantern/core/LanternError.ts +0 -7
  297. package/lib/front_end/models/trace/lantern/core/NetworkAnalyzer.ts +0 -619
  298. package/lib/front_end/models/trace/lantern/core/core.ts +0 -6
  299. package/lib/front_end/models/trace/lantern/graph/BaseNode.ts +0 -345
  300. package/lib/front_end/models/trace/lantern/graph/CPUNode.ts +0 -80
  301. package/lib/front_end/models/trace/lantern/graph/NetworkNode.ts +0 -101
  302. package/lib/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +0 -636
  303. package/lib/front_end/models/trace/lantern/graph/graph.ts +0 -8
  304. package/lib/front_end/models/trace/lantern/lantern.ts +0 -17
  305. package/lib/front_end/models/trace/lantern/metrics/FirstContentfulPaint.ts +0 -187
  306. package/lib/front_end/models/trace/lantern/metrics/Interactive.ts +0 -88
  307. package/lib/front_end/models/trace/lantern/metrics/LargestContentfulPaint.ts +0 -92
  308. package/lib/front_end/models/trace/lantern/metrics/MaxPotentialFID.ts +0 -72
  309. package/lib/front_end/models/trace/lantern/metrics/Metric.ts +0 -126
  310. package/lib/front_end/models/trace/lantern/metrics/SpeedIndex.ts +0 -126
  311. package/lib/front_end/models/trace/lantern/metrics/TBTUtils.ts +0 -82
  312. package/lib/front_end/models/trace/lantern/metrics/TotalBlockingTime.ts +0 -112
  313. package/lib/front_end/models/trace/lantern/metrics/metrics.ts +0 -12
  314. package/lib/front_end/models/trace/lantern/simulation/ConnectionPool.ts +0 -150
  315. package/lib/front_end/models/trace/lantern/simulation/Constants.ts +0 -46
  316. package/lib/front_end/models/trace/lantern/simulation/DNSCache.ts +0 -61
  317. package/lib/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +0 -196
  318. package/lib/front_end/models/trace/lantern/simulation/Simulator.ts +0 -556
  319. package/lib/front_end/models/trace/lantern/simulation/TCPConnection.ts +0 -192
  320. package/lib/front_end/models/trace/lantern/simulation/simulation.ts +0 -10
  321. package/lib/front_end/models/trace/lantern/types/Lantern.ts +0 -220
  322. package/lib/front_end/models/trace/lantern/types/types.ts +0 -5
  323. package/lib/front_end/models/trace/trace.ts +0 -33
  324. package/lib/front_end/models/trace/types/Configuration.ts +0 -110
  325. package/lib/front_end/models/trace/types/Extensions.ts +0 -136
  326. package/lib/front_end/models/trace/types/File.ts +0 -281
  327. package/lib/front_end/models/trace/types/Overlays.ts +0 -138
  328. package/lib/front_end/models/trace/types/Timing.ts +0 -30
  329. package/lib/front_end/models/trace/types/TraceEvents.ts +0 -3277
  330. package/lib/front_end/models/trace/types/types.ts +0 -10
  331. package/lib/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +0 -240
  332. package/lib/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.ts +0 -5
  333. package/lib/front_end/models/workspace/FileManager.ts +0 -97
  334. package/lib/front_end/models/workspace/IgnoreListManager.ts +0 -628
  335. package/lib/front_end/models/workspace/SearchConfig.ts +0 -149
  336. package/lib/front_end/models/workspace/UISourceCode.ts +0 -698
  337. package/lib/front_end/models/workspace/WorkspaceImpl.ts +0 -339
  338. package/lib/front_end/models/workspace/workspace.ts +0 -17
  339. package/lib/front_end/panels/timeline/TimelineUIUtils.ts +0 -1029
  340. package/lib/front_end/panels/timeline/extensions/ExtensionUI.ts +0 -49
  341. package/lib/front_end/panels/timeline/extensions/extensions.ts +0 -9
  342. package/lib/front_end/third_party/codemirror.next/LICENSE +0 -21
  343. package/lib/front_end/third_party/codemirror.next/README.chromium +0 -30
  344. package/lib/front_end/third_party/codemirror.next/bundle-tsconfig.json +0 -24
  345. package/lib/front_end/third_party/codemirror.next/bundle.ts +0 -135
  346. package/lib/front_end/third_party/codemirror.next/chunk/angular.js +0 -2
  347. package/lib/front_end/third_party/codemirror.next/chunk/angular.js.map +0 -1
  348. package/lib/front_end/third_party/codemirror.next/chunk/codemirror.js +0 -2
  349. package/lib/front_end/third_party/codemirror.next/chunk/codemirror.js.map +0 -1
  350. package/lib/front_end/third_party/codemirror.next/chunk/cpp.js +0 -2
  351. package/lib/front_end/third_party/codemirror.next/chunk/cpp.js.map +0 -1
  352. package/lib/front_end/third_party/codemirror.next/chunk/css.js +0 -2
  353. package/lib/front_end/third_party/codemirror.next/chunk/html.js +0 -4
  354. package/lib/front_end/third_party/codemirror.next/chunk/java.js +0 -2
  355. package/lib/front_end/third_party/codemirror.next/chunk/java.js.map +0 -1
  356. package/lib/front_end/third_party/codemirror.next/chunk/javascript.js +0 -2
  357. package/lib/front_end/third_party/codemirror.next/chunk/legacy.js +0 -2
  358. package/lib/front_end/third_party/codemirror.next/chunk/legacy.js.map +0 -1
  359. package/lib/front_end/third_party/codemirror.next/chunk/less.js +0 -2
  360. package/lib/front_end/third_party/codemirror.next/chunk/less.js.map +0 -1
  361. package/lib/front_end/third_party/codemirror.next/chunk/markdown.js +0 -2
  362. package/lib/front_end/third_party/codemirror.next/chunk/markdown.js.map +0 -1
  363. package/lib/front_end/third_party/codemirror.next/chunk/php.js +0 -2
  364. package/lib/front_end/third_party/codemirror.next/chunk/php.js.map +0 -1
  365. package/lib/front_end/third_party/codemirror.next/chunk/python.js +0 -2
  366. package/lib/front_end/third_party/codemirror.next/chunk/python.js.map +0 -1
  367. package/lib/front_end/third_party/codemirror.next/chunk/sass.js +0 -2
  368. package/lib/front_end/third_party/codemirror.next/chunk/sass.js.map +0 -1
  369. package/lib/front_end/third_party/codemirror.next/chunk/svelte.js +0 -2
  370. package/lib/front_end/third_party/codemirror.next/chunk/svelte.js.map +0 -1
  371. package/lib/front_end/third_party/codemirror.next/chunk/vue.js +0 -2
  372. package/lib/front_end/third_party/codemirror.next/chunk/vue.js.map +0 -1
  373. package/lib/front_end/third_party/codemirror.next/chunk/wast.js +0 -2
  374. package/lib/front_end/third_party/codemirror.next/chunk/wast.js.map +0 -1
  375. package/lib/front_end/third_party/codemirror.next/chunk/xml.js +0 -2
  376. package/lib/front_end/third_party/codemirror.next/chunk/xml.js.map +0 -1
  377. package/lib/front_end/third_party/codemirror.next/codemirror.next.d.ts +0 -8057
  378. package/lib/front_end/third_party/codemirror.next/codemirror.next.js +0 -2
  379. package/lib/front_end/third_party/codemirror.next/codemirror.next.js.map +0 -1
  380. package/lib/front_end/third_party/codemirror.next/package.json +0 -43
  381. package/lib/front_end/third_party/codemirror.next/rebuild.sh +0 -6
  382. package/lib/front_end/third_party/codemirror.next/rollup.config.mjs +0 -49
  383. package/lib/front_end/third_party/i18n/LICENSE +0 -202
  384. package/lib/front_end/third_party/i18n/README.chromium +0 -15
  385. package/lib/front_end/third_party/i18n/i18n-impl.ts +0 -61
  386. package/lib/front_end/third_party/i18n/i18n.ts +0 -11
  387. package/lib/front_end/third_party/i18n/localized-string-set.ts +0 -129
  388. package/lib/front_end/third_party/intl-messageformat/LICENSE +0 -33
  389. package/lib/front_end/third_party/intl-messageformat/README.chromium +0 -24
  390. package/lib/front_end/third_party/intl-messageformat/intl-messageformat-tsconfig.json +0 -16
  391. package/lib/front_end/third_party/intl-messageformat/intl-messageformat.ts +0 -6
  392. package/lib/front_end/third_party/intl-messageformat/package/LICENSE.md +0 -33
  393. package/lib/front_end/third_party/intl-messageformat/package/README.md +0 -3
  394. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts +0 -6
  395. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts.map +0 -1
  396. package/lib/front_end/third_party/intl-messageformat/package/index.js +0 -13
  397. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.d.ts +0 -5
  398. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +0 -1710
  399. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +0 -1815
  400. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts +0 -6
  401. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts.map +0 -1
  402. package/lib/front_end/third_party/intl-messageformat/package/lib/index.js +0 -10
  403. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts +0 -34
  404. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts.map +0 -1
  405. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.js +0 -229
  406. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts +0 -28
  407. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts.map +0 -1
  408. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.js +0 -48
  409. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts +0 -34
  410. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts.map +0 -1
  411. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +0 -179
  412. package/lib/front_end/third_party/intl-messageformat/package/package.json +0 -42
  413. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts +0 -34
  414. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts.map +0 -1
  415. package/lib/front_end/third_party/intl-messageformat/package/src/core.js +0 -230
  416. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts +0 -28
  417. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts.map +0 -1
  418. package/lib/front_end/third_party/intl-messageformat/package/src/error.js +0 -51
  419. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts +0 -34
  420. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts.map +0 -1
  421. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.js +0 -182
  422. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/error.d.ts +0 -79
  423. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/index.d.ts +0 -15
  424. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/parser.d.ts +0 -153
  425. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/types.d.ts +0 -139
  426. package/lib/front_end/third_party/legacy-javascript/LICENSE +0 -202
  427. package/lib/front_end/third_party/legacy-javascript/README.chromium +0 -13
  428. package/lib/front_end/third_party/legacy-javascript/legacy-javascript-tsconfig.json +0 -8
  429. package/lib/front_end/third_party/legacy-javascript/legacy-javascript.ts +0 -3
  430. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.d.ts +0 -18
  431. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +0 -943
  432. package/lib/front_end/third_party/legacy-javascript/package.json +0 -8
  433. package/lib/front_end/third_party/legacy-javascript/rebuild.sh +0 -9
  434. package/lib/front_end/third_party/source-map-scopes-codec/LICENSE +0 -26
  435. package/lib/front_end/third_party/source-map-scopes-codec/README.chromium +0 -31
  436. package/lib/front_end/third_party/source-map-scopes-codec/package/CONTRIBUTING.md +0 -33
  437. package/lib/front_end/third_party/source-map-scopes-codec/package/LICENSE +0 -26
  438. package/lib/front_end/third_party/source-map-scopes-codec/package/README.md +0 -64
  439. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts +0 -62
  440. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts.map +0 -1
  441. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts +0 -37
  442. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts.map +0 -1
  443. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts +0 -29
  444. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts.map +0 -1
  445. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.d.ts +0 -8
  446. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.d.ts.map +0 -1
  447. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts +0 -6
  448. package/lib/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts.map +0 -1
  449. package/lib/front_end/third_party/source-map-scopes-codec/package/deno.json +0 -21
  450. package/lib/front_end/third_party/source-map-scopes-codec/package/package.json +0 -14
  451. package/lib/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +0 -196
  452. package/lib/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js.map +0 -1
  453. package/lib/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.ts +0 -262
  454. package/lib/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +0 -235
  455. package/lib/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js.map +0 -1
  456. package/lib/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.ts +0 -359
  457. package/lib/front_end/third_party/source-map-scopes-codec/package/src/codec.js +0 -39
  458. package/lib/front_end/third_party/source-map-scopes-codec/package/src/codec.js.map +0 -1
  459. package/lib/front_end/third_party/source-map-scopes-codec/package/src/codec.ts +0 -53
  460. package/lib/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +0 -438
  461. package/lib/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js.map +0 -1
  462. package/lib/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.ts +0 -539
  463. package/lib/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +0 -23
  464. package/lib/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js.map +0 -1
  465. package/lib/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.ts +0 -35
  466. package/lib/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +0 -257
  467. package/lib/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js.map +0 -1
  468. package/lib/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.ts +0 -348
  469. package/lib/front_end/third_party/source-map-scopes-codec/package/src/mod.js +0 -8
  470. package/lib/front_end/third_party/source-map-scopes-codec/package/src/mod.js.map +0 -1
  471. package/lib/front_end/third_party/source-map-scopes-codec/package/src/mod.ts +0 -20
  472. package/lib/front_end/third_party/source-map-scopes-codec/package/src/scopes-tsconfig.json +0 -8
  473. package/lib/front_end/third_party/source-map-scopes-codec/package/src/scopes.d.ts +0 -184
  474. package/lib/front_end/third_party/source-map-scopes-codec/package/src/util.js +0 -9
  475. package/lib/front_end/third_party/source-map-scopes-codec/package/src/util.js.map +0 -1
  476. package/lib/front_end/third_party/source-map-scopes-codec/package/src/util.ts +0 -12
  477. package/lib/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +0 -82
  478. package/lib/front_end/third_party/source-map-scopes-codec/package/src/vlq.js.map +0 -1
  479. package/lib/front_end/third_party/source-map-scopes-codec/package/src/vlq.ts +0 -99
  480. package/lib/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.ts +0 -5
  481. package/lib/front_end/third_party/third-party-web/LICENSE +0 -20
  482. package/lib/front_end/third_party/third-party-web/README.chromium +0 -13
  483. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.d.ts +0 -2
  484. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.js +0 -149
  485. package/lib/front_end/third_party/third-party-web/package/LICENSE +0 -20
  486. package/lib/front_end/third_party/third-party-web/package/README.md +0 -929
  487. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive-nostats.json +0 -1
  488. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive.json +0 -1
  489. package/lib/front_end/third_party/third-party-web/package/dist/entities-nostats.json +0 -1
  490. package/lib/front_end/third_party/third-party-web/package/dist/entities.json +0 -1
  491. package/lib/front_end/third_party/third-party-web/package/facades.md +0 -46
  492. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.d.ts +0 -1
  493. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +0 -1
  494. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.d.ts +0 -1
  495. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.js +0 -1
  496. package/lib/front_end/third_party/third-party-web/package/lib/__snapshots__/index.test.js.snap +0 -1006
  497. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +0 -139
  498. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +0 -44
  499. package/lib/front_end/third_party/third-party-web/package/lib/entities.test.js +0 -27
  500. package/lib/front_end/third_party/third-party-web/package/lib/index.d.ts +0 -34
  501. package/lib/front_end/third_party/third-party-web/package/lib/index.js +0 -3
  502. package/lib/front_end/third_party/third-party-web/package/lib/index.test.js +0 -246
  503. package/lib/front_end/third_party/third-party-web/package/lib/markdown/faqs.partial.md +0 -36
  504. package/lib/front_end/third_party/third-party-web/package/lib/markdown/goals.partial.md +0 -9
  505. package/lib/front_end/third_party/third-party-web/package/lib/markdown/methodology.partial.md +0 -5
  506. package/lib/front_end/third_party/third-party-web/package/lib/markdown/template.md +0 -151
  507. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-02-01.md +0 -1
  508. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-03-01.md +0 -1
  509. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-06.md +0 -1
  510. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-13.md +0 -14
  511. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2021-01-01.md +0 -1
  512. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2024-07-01.md +0 -3
  513. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.d.ts +0 -1
  514. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +0 -3
  515. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.d.ts +0 -1
  516. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +0 -3
  517. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.d.ts +0 -1
  518. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +0 -3
  519. package/lib/front_end/third_party/third-party-web/package/nostats-subset.d.ts +0 -1
  520. package/lib/front_end/third_party/third-party-web/package/nostats-subset.js +0 -1
  521. package/lib/front_end/third_party/third-party-web/package/package.json +0 -46
  522. package/lib/front_end/third_party/third-party-web/package.json +0 -8
  523. package/lib/front_end/third_party/third-party-web/rebuild.sh +0 -13
  524. package/lib/front_end/third_party/third-party-web/third-party-web-tsconfig.json +0 -8
  525. package/lib/front_end/third_party/third-party-web/third-party-web.ts +0 -3
  526. package/lib/front_end/ui/legacy/theme_support/ThemeSupport.ts +0 -222
  527. package/lib/front_end/ui/legacy/theme_support/theme_support.ts +0 -5
  528. package/patches/chrome-devtools-frontend+1.0.1533544.patch +0 -1716
@@ -1,652 +0,0 @@
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 Handlers from './handlers/handlers.js';
6
- import * as Helpers from './helpers/helpers.js';
7
- import * as Insights from './insights/insights.js';
8
- import * as Lantern from './lantern/lantern.js';
9
- import * as LanternComputationData from './LanternComputationData.js';
10
- import type * as Model from './ModelImpl.js';
11
- import * as Types from './types/types.js';
12
-
13
- const enum Status {
14
- IDLE = 'IDLE',
15
- PARSING = 'PARSING',
16
- FINISHED_PARSING = 'FINISHED_PARSING',
17
- ERRORED_WHILE_PARSING = 'ERRORED_WHILE_PARSING',
18
- }
19
-
20
- export class TraceParseProgressEvent extends Event {
21
- static readonly eventName = 'traceparseprogress';
22
- constructor(public data: Model.TraceParseEventProgressData, init: EventInit = {bubbles: true}) {
23
- super(TraceParseProgressEvent.eventName, init);
24
- }
25
- }
26
-
27
- /**
28
- * Parsing a trace can take time. On large traces we see a breakdown of time like so:
29
- * - handleEvent() loop: ~20%
30
- * - finalize() loop: ~60%
31
- * - shallowClone calls: ~20%
32
- * The numbers below are set so we can report a progress percentage of [0...1]
33
- */
34
- const enum ProgressPhase {
35
- HANDLE_EVENT = 0.2,
36
- FINALIZE = 0.8,
37
- CLONE = 1.0,
38
- }
39
- function calculateProgress(value: number, phase: ProgressPhase): number {
40
- // Finalize values should be [0.2...0.8]
41
- if (phase === ProgressPhase.FINALIZE) {
42
- return (value * (ProgressPhase.FINALIZE - ProgressPhase.HANDLE_EVENT)) + ProgressPhase.HANDLE_EVENT;
43
- }
44
- return value * phase;
45
- }
46
-
47
- declare global {
48
- interface HTMLElementEventMap {
49
- [TraceParseProgressEvent.eventName]: TraceParseProgressEvent;
50
- }
51
- }
52
-
53
- export class TraceProcessor extends EventTarget {
54
- // We force the Meta handler to be enabled, so the TraceHandlers type here is
55
- // the model handlers the user passes in and the Meta handler.
56
- readonly #traceHandlers: Partial<Handlers.Types.Handlers>;
57
- #status = Status.IDLE;
58
- #modelConfiguration = Types.Configuration.defaults();
59
- #data: Handlers.Types.HandlerData|null = null;
60
- #insights: Insights.Types.TraceInsightSets|null = null;
61
-
62
- static createWithAllHandlers(): TraceProcessor {
63
- return new TraceProcessor(Handlers.ModelHandlers, Types.Configuration.defaults());
64
- }
65
-
66
- /**
67
- * This function is kept for testing with `stub`.
68
- */
69
- static getInsightRunners(): Insights.Types.InsightModelsType {
70
- return {...Insights.Models};
71
- }
72
-
73
- constructor(traceHandlers: Partial<Handlers.Types.Handlers>, modelConfiguration?: Types.Configuration.Configuration) {
74
- super();
75
-
76
- this.#verifyHandlers(traceHandlers);
77
- this.#traceHandlers = {
78
- Meta: Handlers.ModelHandlers.Meta,
79
- ...traceHandlers,
80
- };
81
- if (modelConfiguration) {
82
- this.#modelConfiguration = modelConfiguration;
83
- }
84
- this.#passConfigToHandlers();
85
- }
86
-
87
- #passConfigToHandlers(): void {
88
- for (const handler of Object.values(this.#traceHandlers)) {
89
- // Bit of an odd double check, but without this TypeScript refuses to let
90
- // you call the function as it thinks it might be undefined.
91
- if ('handleUserConfig' in handler && handler.handleUserConfig) {
92
- handler.handleUserConfig(this.#modelConfiguration);
93
- }
94
- }
95
- }
96
-
97
- /**
98
- * When the user passes in a set of handlers, we want to ensure that we have all
99
- * the required handlers. Handlers can depend on other handlers, so if the user
100
- * passes in FooHandler which depends on BarHandler, they must also pass in
101
- * BarHandler too. This method verifies that all dependencies are met, and
102
- * throws if not.
103
- **/
104
- #verifyHandlers(providedHandlers: Partial<Handlers.Types.Handlers>): void {
105
- // Tiny optimisation: if the amount of provided handlers matches the amount
106
- // of handlers in the Handlers.ModelHandlers object, that means that the
107
- // user has passed in every handler we have. So therefore they cannot have
108
- // missed any, and there is no need to iterate through the handlers and
109
- // check the dependencies.
110
- if (Object.keys(providedHandlers).length === Object.keys(Handlers.ModelHandlers).length) {
111
- return;
112
- }
113
- const requiredHandlerKeys = new Set<Handlers.Types.HandlerName>();
114
- for (const [handlerName, handler] of Object.entries(providedHandlers)) {
115
- requiredHandlerKeys.add(handlerName as Handlers.Types.HandlerName);
116
- const deps = 'deps' in handler ? handler.deps() : [];
117
- for (const depName of deps) {
118
- requiredHandlerKeys.add(depName);
119
- }
120
- }
121
-
122
- const providedHandlerKeys = new Set(Object.keys(providedHandlers));
123
- // We always force the Meta handler to be enabled when creating the
124
- // Processor, so if it is missing from the set the user gave us that is OK,
125
- // as we will have enabled it anyway.
126
- requiredHandlerKeys.delete('Meta');
127
-
128
- for (const requiredKey of requiredHandlerKeys) {
129
- if (!providedHandlerKeys.has(requiredKey)) {
130
- throw new Error(`Required handler ${requiredKey} not provided.`);
131
- }
132
- }
133
- }
134
-
135
- reset(): void {
136
- if (this.#status === Status.PARSING) {
137
- throw new Error('Trace processor can\'t reset while parsing.');
138
- }
139
-
140
- const handlers = Object.values(this.#traceHandlers);
141
- for (const handler of handlers) {
142
- handler.reset();
143
- }
144
-
145
- this.#data = null;
146
- this.#insights = null;
147
- this.#status = Status.IDLE;
148
- }
149
-
150
- async parse(traceEvents: readonly Types.Events.Event[], options: Types.Configuration.ParseOptions): Promise<void> {
151
- if (this.#status !== Status.IDLE) {
152
- throw new Error(`Trace processor can't start parsing when not idle. Current state: ${this.#status}`);
153
- }
154
-
155
- if (typeof options.isCPUProfile === 'undefined' && options.metadata) {
156
- options.isCPUProfile = options.metadata.dataOrigin === Types.File.DataOrigin.CPU_PROFILE;
157
- }
158
-
159
- options.logger?.start('total');
160
- try {
161
- this.#status = Status.PARSING;
162
- options.logger?.start('parse');
163
- await this.#computeParsedTrace(traceEvents, options);
164
- options.logger?.end('parse');
165
- if (this.#data && !options.isCPUProfile) { // We do not calculate insights for CPU Profiles.
166
- options.logger?.start('insights');
167
- this.#computeInsights(this.#data, traceEvents, options);
168
- options.logger?.end('insights');
169
- }
170
- this.#status = Status.FINISHED_PARSING;
171
- } catch (e) {
172
- this.#status = Status.ERRORED_WHILE_PARSING;
173
- throw e;
174
- } finally {
175
- options.logger?.end('total');
176
- }
177
- }
178
-
179
- /**
180
- * Run all the handlers and set the result to `#data`.
181
- */
182
- async #computeParsedTrace(traceEvents: readonly Types.Events.Event[], options: Types.Configuration.ParseOptions):
183
- Promise<void> {
184
- /**
185
- * We want to yield regularly to maintain responsiveness. If we yield too often, we're wasting idle time.
186
- * We could do this by checking `performance.now()` regularly, but it's an expensive call in such a hot loop.
187
- * `eventsPerChunk` is an approximated proxy metric.
188
- * But how big a chunk? We're aiming for long tasks that are no smaller than 100ms and not bigger than 200ms.
189
- * It's CPU dependent, so it should be calibrated on oldish hardware.
190
- * Illustration of a previous change to `eventsPerChunk`: https://imgur.com/wzp8BnR
191
- */
192
- const eventsPerChunk = 50_000;
193
- // Convert to array so that we are able to iterate all handlers multiple times.
194
- const sortedHandlers = [...sortHandlers(this.#traceHandlers).entries()];
195
-
196
- // Reset.
197
- for (const [, handler] of sortedHandlers) {
198
- handler.reset();
199
- }
200
-
201
- options.logger?.start('parse:handleEvent');
202
-
203
- // Handle each event.
204
- for (let i = 0; i < traceEvents.length; ++i) {
205
- // Every so often we take a break just to render.
206
- if (i % eventsPerChunk === 0 && i) {
207
- // Take the opportunity to provide status update events.
208
- const percent = calculateProgress(i / traceEvents.length, ProgressPhase.HANDLE_EVENT);
209
- this.dispatchEvent(new TraceParseProgressEvent({percent}));
210
- // TODO(paulirish): consider using `scheduler.yield()` or `scheduler.postTask(() => {}, {priority: 'user-blocking'})`
211
- await new Promise(resolve => setTimeout(resolve, 0));
212
- }
213
- const event = traceEvents[i];
214
- for (let j = 0; j < sortedHandlers.length; ++j) {
215
- const [, handler] = sortedHandlers[j];
216
- handler.handleEvent(event);
217
- }
218
- }
219
-
220
- options.logger?.end('parse:handleEvent');
221
-
222
- // Finalize.
223
- const finalizeOptions: Handlers.Types.FinalizeOptions = {
224
- ...options,
225
- allTraceEvents: traceEvents,
226
- };
227
- for (let i = 0; i < sortedHandlers.length; i++) {
228
- const [name, handler] = sortedHandlers[i];
229
- if (handler.finalize) {
230
- options.logger?.start(`parse:${name}:finalize`);
231
- // Yield to the UI because finalize() calls can be expensive
232
- // TODO(jacktfranklin): consider using `scheduler.yield()` or `scheduler.postTask(() => {}, {priority: 'user-blocking'})`
233
- await new Promise(resolve => setTimeout(resolve, 0));
234
- await handler.finalize(finalizeOptions);
235
- options.logger?.end(`parse:${name}:finalize`);
236
- }
237
- const percent = calculateProgress(i / sortedHandlers.length, ProgressPhase.FINALIZE);
238
- this.dispatchEvent(new TraceParseProgressEvent({percent}));
239
- }
240
-
241
- options.logger?.start('parse:handler.data()');
242
- const parsedTrace = {};
243
- for (const [name, handler] of Object.entries(this.#traceHandlers)) {
244
- Object.assign(parsedTrace, {[name]: handler.data()});
245
- }
246
- options.logger?.end('parse:handler.data()');
247
-
248
- this.dispatchEvent(new TraceParseProgressEvent({percent: ProgressPhase.CLONE}));
249
-
250
- this.#data = parsedTrace as Handlers.Types.HandlerData;
251
- }
252
-
253
- get data(): Handlers.Types.HandlerData|null {
254
- if (this.#status !== Status.FINISHED_PARSING) {
255
- return null;
256
- }
257
-
258
- return this.#data;
259
- }
260
-
261
- get insights(): Insights.Types.TraceInsightSets|null {
262
- if (this.#status !== Status.FINISHED_PARSING) {
263
- return null;
264
- }
265
-
266
- return this.#insights;
267
- }
268
-
269
- #createLanternContext(
270
- data: Handlers.Types.HandlerData, traceEvents: readonly Types.Events.Event[], frameId: string,
271
- navigationId: string, options: Types.Configuration.ParseOptions): Insights.Types.LanternContext|undefined {
272
- // Check for required handlers.
273
- if (!data.NetworkRequests || !data.Workers || !data.PageLoadMetrics) {
274
- return;
275
- }
276
- if (!data.NetworkRequests.byTime.length) {
277
- throw new Lantern.Core.LanternError('No network requests found in trace');
278
- }
279
-
280
- const navStarts = data.Meta.navigationsByFrameId.get(frameId);
281
- const navStartIndex = navStarts?.findIndex(n => n.args.data?.navigationId === navigationId);
282
- if (!navStarts || navStartIndex === undefined || navStartIndex === -1) {
283
- throw new Lantern.Core.LanternError('Could not find navigation start');
284
- }
285
-
286
- const startTime = navStarts[navStartIndex].ts;
287
- const endTime = navStartIndex + 1 < navStarts.length ? navStarts[navStartIndex + 1].ts : Number.POSITIVE_INFINITY;
288
- const boundedTraceEvents = traceEvents.filter(e => e.ts >= startTime && e.ts < endTime);
289
-
290
- // Lantern.Types.TraceEvent and Types.Events.Event represent the same
291
- // object - a trace event - but one is more flexible than the other. It should be safe to cast between them.
292
- const trace: Lantern.Types.Trace = {
293
- traceEvents: boundedTraceEvents as unknown as Lantern.Types.TraceEvent[],
294
- };
295
-
296
- const requests = LanternComputationData.createNetworkRequests(trace, data, startTime, endTime);
297
- const graph = LanternComputationData.createGraph(requests, trace, data);
298
- const processedNavigation = LanternComputationData.createProcessedNavigation(data, frameId, navigationId);
299
-
300
- const networkAnalysis = Lantern.Core.NetworkAnalyzer.analyze(requests);
301
- if (!networkAnalysis) {
302
- return;
303
- }
304
-
305
- const lanternSettings: Lantern.Types.Simulation.Settings = {
306
- // TODO(crbug.com/372674229): if devtools throttling was on, does this network analysis capture
307
- // that? Do we need to set 'devtools' throttlingMethod?
308
- networkAnalysis,
309
- throttlingMethod: 'provided',
310
- ...options.lanternSettings,
311
- };
312
- const simulator: Lantern.Simulation.Simulator<Types.Events.SyntheticNetworkRequest> =
313
- Lantern.Simulation.Simulator.createSimulator(lanternSettings);
314
-
315
- const computeData = {graph, simulator, processedNavigation};
316
- const fcpResult = Lantern.Metrics.FirstContentfulPaint.compute(computeData);
317
- const lcpResult = Lantern.Metrics.LargestContentfulPaint.compute(computeData, {fcpResult});
318
- const interactiveResult = Lantern.Metrics.Interactive.compute(computeData, {lcpResult});
319
- const tbtResult = Lantern.Metrics.TotalBlockingTime.compute(computeData, {fcpResult, interactiveResult});
320
- const metrics = {
321
- firstContentfulPaint: fcpResult,
322
- interactive: interactiveResult,
323
- largestContentfulPaint: lcpResult,
324
- totalBlockingTime: tbtResult,
325
- };
326
-
327
- return {requests, graph, simulator, metrics};
328
- }
329
-
330
- /**
331
- * Sort the insight models based on the impact of each insight's estimated savings, additionally weighted by the
332
- * worst metrics according to field data (if present).
333
- */
334
- sortInsightSet(insightSet: Insights.Types.InsightSet, metadata: Types.File.MetaData|null): void {
335
- // The initial order of the insights is alphabetical, based on `front_end/models/trace/insights/Models.ts`.
336
- // The order here provides a baseline that groups insights in a more logical way.
337
- const baselineOrder: Record<keyof Insights.Types.InsightModels, null> = {
338
- INPBreakdown: null,
339
- LCPBreakdown: null,
340
- LCPDiscovery: null,
341
- CLSCulprits: null,
342
- RenderBlocking: null,
343
- NetworkDependencyTree: null,
344
- ImageDelivery: null,
345
- DocumentLatency: null,
346
- FontDisplay: null,
347
- Viewport: null,
348
- DOMSize: null,
349
- ThirdParties: null,
350
- DuplicatedJavaScript: null,
351
- SlowCSSSelector: null,
352
- ForcedReflow: null,
353
- Cache: null,
354
- ModernHTTP: null,
355
- LegacyJavaScript: null,
356
- };
357
-
358
- // Determine the weights for each metric based on field data, utilizing the same scoring curve that Lighthouse uses.
359
- const weights = Insights.Common.calculateMetricWeightsForSorting(insightSet, metadata);
360
-
361
- // Normalize the estimated savings to a single number, weighted by its relative impact
362
- // to the page experience based on the same scoring curve that Lighthouse uses.
363
- const observedLcpMicro = Insights.Common.getLCP(insightSet)?.value;
364
- const observedLcp = observedLcpMicro ? Helpers.Timing.microToMilli(observedLcpMicro) : Types.Timing.Milli(0);
365
- const observedCls = Insights.Common.getCLS(insightSet).value;
366
-
367
- // INP is special - if users did not interact with the page, we'll have no INP, but we should still
368
- // be able to prioritize insights based on this metric. When we observe no interaction, instead use
369
- // a default value for the baseline INP.
370
- const observedInpMicro = Insights.Common.getINP(insightSet)?.value;
371
- const observedInp = observedInpMicro ? Helpers.Timing.microToMilli(observedInpMicro) : Types.Timing.Milli(200);
372
-
373
- const observedLcpScore =
374
- observedLcp !== undefined ? Insights.Common.evaluateLCPMetricScore(observedLcp) : undefined;
375
- const observedInpScore = Insights.Common.evaluateINPMetricScore(observedInp);
376
- const observedClsScore = Insights.Common.evaluateCLSMetricScore(observedCls);
377
-
378
- const insightToSortingRank = new Map<string, number>();
379
- for (const [name, model] of Object.entries(insightSet.model)) {
380
- const lcp = model.metricSavings?.LCP ?? 0;
381
- const inp = model.metricSavings?.INP ?? 0;
382
- const cls = model.metricSavings?.CLS ?? 0;
383
-
384
- const lcpPostSavings =
385
- observedLcp !== undefined ? Math.max(0, observedLcp - lcp) as Types.Timing.Milli : undefined;
386
- const inpPostSavings = Math.max(0, observedInp - inp) as Types.Timing.Milli;
387
- const clsPostSavings = Math.max(0, observedCls - cls);
388
-
389
- let score = 0;
390
- if (weights.lcp && lcp && observedLcpScore !== undefined && lcpPostSavings !== undefined) {
391
- score += weights.lcp * (Insights.Common.evaluateLCPMetricScore(lcpPostSavings) - observedLcpScore);
392
- }
393
- if (weights.inp && inp && observedInpScore !== undefined) {
394
- score += weights.inp * (Insights.Common.evaluateINPMetricScore(inpPostSavings) - observedInpScore);
395
- }
396
- if (weights.cls && cls && observedClsScore !== undefined) {
397
- score += weights.cls * (Insights.Common.evaluateCLSMetricScore(clsPostSavings) - observedClsScore);
398
- }
399
-
400
- insightToSortingRank.set(name, score);
401
- }
402
-
403
- // Now perform the actual sorting.
404
- const baselineOrderKeys = Object.keys(baselineOrder);
405
- const orderedKeys = Object.keys(insightSet.model);
406
- orderedKeys.sort((a, b) => {
407
- const a1 = baselineOrderKeys.indexOf(a);
408
- const b1 = baselineOrderKeys.indexOf(b);
409
- if (a1 >= 0 && b1 >= 0) {
410
- return a1 - b1;
411
- }
412
- if (a1 >= 0) {
413
- return -1;
414
- }
415
- if (b1 >= 0) {
416
- return 1;
417
- }
418
- return 0;
419
- });
420
- orderedKeys.sort((a, b) => (insightToSortingRank.get(b) ?? 0) - (insightToSortingRank.get(a) ?? 0));
421
-
422
- const newModel = {} as Insights.Types.InsightModels;
423
- for (const key of orderedKeys as Array<keyof Insights.Types.InsightModels>) {
424
- const model = insightSet.model[key];
425
- // @ts-expect-error Maybe someday typescript will be powerful enough to handle this.
426
- newModel[key] = model;
427
- }
428
- insightSet.model = newModel;
429
- }
430
-
431
- #computeInsightSet(data: Handlers.Types.HandlerData, context: Insights.Types.InsightSetContext): void {
432
- const logger = context.options.logger;
433
-
434
- let id, urlString, navigation;
435
- if (context.navigation) {
436
- id = context.navigationId;
437
- urlString = data.Meta.finalDisplayUrlByNavigationId.get(context.navigationId) ?? data.Meta.mainFrameURL;
438
- navigation = context.navigation;
439
- } else {
440
- id = Types.Events.NO_NAVIGATION;
441
- urlString = data.Meta.finalDisplayUrlByNavigationId.get('') ?? data.Meta.mainFrameURL;
442
- }
443
-
444
- const insightSetModel = {} as Insights.Types.InsightSet['model'];
445
-
446
- for (const [name, insight] of Object.entries(TraceProcessor.getInsightRunners())) {
447
- let model: Insights.Types.InsightModel|Error;
448
- try {
449
- logger?.start(`insights:${name}`);
450
- model = insight.generateInsight(data, context);
451
- model.frameId = context.frameId;
452
- const navId = context.navigation?.args.data?.navigationId;
453
- if (navId) {
454
- model.navigationId = navId;
455
- }
456
- model.createOverlays = () => {
457
- // @ts-expect-error: model is a union of all possible insight model types.
458
- return insight.createOverlays(model);
459
- };
460
- } catch (err) {
461
- model = err;
462
- } finally {
463
- logger?.end(`insights:${name}`);
464
- }
465
- Object.assign(insightSetModel, {[name]: model});
466
- }
467
-
468
- // We may choose to exclude the insightSet if it's trivial. Trivial means:
469
- // 1. There's no navigation (it's an initial trace period)
470
- // 2. The duration is short.
471
- // 3. All the insights are passing (aka no insights to show the user)
472
- // 4. It has no metrics to report (apart from a CLS of 0, which is default)
473
- // Generally, these cases are the short time ranges before a page reload starts.
474
- const isNavigation = id === Types.Events.NO_NAVIGATION;
475
- const trivialThreshold = Helpers.Timing.milliToMicro(Types.Timing.Milli(5000));
476
- const everyInsightPasses = Object.values(insightSetModel)
477
- .filter(model => !(model instanceof Error))
478
- .every(model => model.state === 'pass');
479
-
480
- const noLcp = !insightSetModel.LCPBreakdown.lcpEvent;
481
- const noInp = !insightSetModel.INPBreakdown.longestInteractionEvent;
482
- const noLayoutShifts = insightSetModel.CLSCulprits.shifts?.size === 0;
483
- const shouldExclude = isNavigation && context.bounds.range < trivialThreshold && everyInsightPasses && noLcp &&
484
- noInp && noLayoutShifts;
485
- if (shouldExclude) {
486
- return;
487
- }
488
-
489
- let url;
490
- try {
491
- url = new URL(urlString);
492
- } catch {
493
- // We're pretty sure this only happens for our test fixture: missing-url.json.gz. Shouldn't
494
- // happen for real traces.
495
- return;
496
- }
497
-
498
- const insightSet: Insights.Types.InsightSet = {
499
- id,
500
- url,
501
- navigation,
502
- frameId: context.frameId,
503
- bounds: context.bounds,
504
- model: insightSetModel,
505
- };
506
- if (!this.#insights) {
507
- this.#insights = new Map();
508
- }
509
- this.#insights.set(insightSet.id, insightSet);
510
- this.sortInsightSet(insightSet, context.options.metadata ?? null);
511
- }
512
-
513
- /**
514
- * Run all the insights and set the result to `#insights`.
515
- */
516
- #computeInsights(
517
- data: Handlers.Types.HandlerData, traceEvents: readonly Types.Events.Event[],
518
- options: Types.Configuration.ParseOptions): void {
519
- // This insights map will be populated by the helper methods.
520
- this.#insights = new Map();
521
-
522
- // Filter main frame navigations to those that have the necessary data (frameId and navigationId).
523
- // TODO(cjamcl): Does this filtering makes the "use the next nav as the end time" logic potentially broken? Are navs without nav id or frame even real?
524
- const navigations = data.Meta.mainFrameNavigations.filter(
525
- navigation => navigation.args.frame && navigation.args.data?.navigationId);
526
-
527
- this.#computeInsightsForInitialTracePeriod(data, navigations, options);
528
-
529
- for (const [index, navigation] of navigations.entries()) {
530
- const min = navigation.ts;
531
- // Use trace end for the last navigation, otherwise use the start of the next navigation.
532
- const max = index + 1 < navigations.length ? navigations[index + 1].ts : data.Meta.traceBounds.max;
533
- const bounds = Helpers.Timing.traceWindowFromMicroSeconds(min, max);
534
- this.#computeInsightsForNavigation(navigation, bounds, data, traceEvents, options);
535
- }
536
- }
537
-
538
- /**
539
- * Computes insights for the period before the first navigation, or for the entire trace if no navigations exist.
540
- */
541
- #computeInsightsForInitialTracePeriod(
542
- data: Handlers.Types.HandlerData, navigations: readonly Types.Events.NavigationStart[],
543
- options: Types.Configuration.ParseOptions): void {
544
- // Determine bounds: Use the period before the first navigation if navigations exist, otherwise use the entire trace bounds.
545
- const bounds = navigations.length > 0 ?
546
- Helpers.Timing.traceWindowFromMicroSeconds(data.Meta.traceBounds.min, navigations[0].ts) :
547
- data.Meta.traceBounds;
548
-
549
- const context: Insights.Types.InsightSetContext = {
550
- options,
551
- bounds,
552
- frameId: data.Meta.mainFrameId,
553
- // No navigation or lantern context applies to this initial/no-navigation period.
554
- };
555
- this.#computeInsightSet(data, context);
556
- }
557
-
558
- /**
559
- * Computes insights for a specific navigation event.
560
- */
561
- #computeInsightsForNavigation(
562
- navigation: Types.Events.NavigationStart, bounds: Types.Timing.TraceWindowMicro, data: Handlers.Types.HandlerData,
563
- traceEvents: readonly Types.Events.Event[], options: Types.Configuration.ParseOptions): void {
564
- const frameId = navigation.args.frame;
565
- // Guaranteed by the filter in #computeInsights
566
- const navigationId = navigation.args.data?.navigationId as string;
567
-
568
- // The lantern sub-context is optional on InsightSetContext, so not setting it is OK.
569
- // This is also a hedge against an error inside Lantern resulting in breaking the entire performance panel.
570
- // Additionally, many trace fixtures are too old to be processed by Lantern.
571
- let lantern: Insights.Types.LanternContext|undefined;
572
- try {
573
- options.logger?.start('insights:createLanternContext');
574
- lantern = this.#createLanternContext(data, traceEvents, frameId, navigationId, options);
575
- } catch (e) {
576
- // Handle Lantern errors gracefully
577
- // Don't allow an error in constructing the Lantern graphs to break the rest of the trace processor.
578
- // Log unexpected errors, but suppress anything that occurs from a trace being too old.
579
- // Otherwise tests using old fixtures become way too noisy.
580
- const expectedErrors = [
581
- 'mainDocumentRequest not found',
582
- 'missing metric scores for main frame',
583
- 'missing metric: FCP',
584
- 'missing metric: LCP',
585
- 'No network requests found in trace',
586
- 'Trace is too old',
587
- ];
588
- if (!(e instanceof Lantern.Core.LanternError)) {
589
- // If this wasn't a managed LanternError, the stack trace is likely needed for debugging.
590
- console.error(e);
591
- } else if (!expectedErrors.some(err => e.message === err)) {
592
- // To reduce noise from tests, only print errors that are not expected to occur because a trace is
593
- // too old (for which there is no single check).
594
- console.error(e);
595
- }
596
- } finally {
597
- options.logger?.end('insights:createLanternContext');
598
- }
599
-
600
- const context: Insights.Types.InsightSetContext = {
601
- options,
602
- bounds,
603
- frameId,
604
- navigation,
605
- navigationId,
606
- lantern,
607
- };
608
- this.#computeInsightSet(data, context);
609
- }
610
- }
611
-
612
- /**
613
- * Some Handlers need data provided by others. Dependencies of a handler handler are
614
- * declared in the `deps` field.
615
- * @returns A map from trace event handler name to trace event handler whose entries
616
- * iterate in such a way that each handler is visited after its dependencies.
617
- */
618
- export function sortHandlers(traceHandlers: Partial<Record<Handlers.Types.HandlerName, Handlers.Types.Handler>>):
619
- Map<Handlers.Types.HandlerName, Handlers.Types.Handler> {
620
- const sortedMap = new Map<Handlers.Types.HandlerName, Handlers.Types.Handler>();
621
- const visited = new Set<Handlers.Types.HandlerName>();
622
- const visitHandler = (handlerName: Handlers.Types.HandlerName): void => {
623
- if (sortedMap.has(handlerName)) {
624
- return;
625
- }
626
- if (visited.has(handlerName)) {
627
- let stackPath = '';
628
- for (const handler of visited) {
629
- if (stackPath || handler === handlerName) {
630
- stackPath += `${handler}->`;
631
- }
632
- }
633
- stackPath += handlerName;
634
- throw new Error(`Found dependency cycle in trace event handlers: ${stackPath}`);
635
- }
636
- visited.add(handlerName);
637
- const handler = traceHandlers[handlerName];
638
- if (!handler) {
639
- return;
640
- }
641
- const deps = handler.deps?.();
642
- if (deps) {
643
- deps.forEach(visitHandler);
644
- }
645
- sortedMap.set(handlerName, handler);
646
- };
647
-
648
- for (const handlerName of Object.keys(traceHandlers)) {
649
- visitHandler(handlerName as Handlers.Types.HandlerName);
650
- }
651
- return sortedMap;
652
- }