chrome-devtools-frontend 1.0.1512349 → 1.0.1513662

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 (324) hide show
  1. package/docs/cookbook/release_management.md +15 -13
  2. package/docs/get_the_code.md +114 -35
  3. package/front_end/core/common/Color.ts +40 -44
  4. package/front_end/core/common/Console.ts +4 -4
  5. package/front_end/core/common/ParsedURL.ts +14 -14
  6. package/front_end/core/common/ResourceType.ts +20 -20
  7. package/front_end/core/common/SegmentedRange.ts +13 -14
  8. package/front_end/core/common/Settings.ts +4 -4
  9. package/front_end/core/common/StringOutputStream.ts +4 -4
  10. package/front_end/core/host/GdpClient.ts +38 -0
  11. package/front_end/core/host/InspectorFrontendHost.ts +4 -1
  12. package/front_end/core/host/InspectorFrontendHostAPI.ts +2 -0
  13. package/front_end/core/host/ResourceLoader.ts +2 -2
  14. package/front_end/core/host/UserMetrics.ts +0 -2
  15. package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
  16. package/front_end/core/root/Runtime.ts +5 -2
  17. package/front_end/core/sdk/AccessibilityModel.ts +48 -48
  18. package/front_end/core/sdk/AnimationModel.ts +78 -79
  19. package/front_end/core/sdk/CPUProfilerModel.ts +5 -5
  20. package/front_end/core/sdk/CPUThrottlingManager.ts +17 -17
  21. package/front_end/core/sdk/CSSMatchedStyles.ts +44 -44
  22. package/front_end/core/sdk/CSSMedia.ts +22 -22
  23. package/front_end/core/sdk/CSSModel.ts +4 -4
  24. package/front_end/core/sdk/CSSProperty.ts +9 -9
  25. package/front_end/core/sdk/CSSPropertyParser.ts +1 -2
  26. package/front_end/core/sdk/CSSRule.ts +3 -3
  27. package/front_end/core/sdk/CSSStyleDeclaration.ts +27 -28
  28. package/front_end/core/sdk/CSSStyleSheetHeader.ts +13 -13
  29. package/front_end/core/sdk/CategorizedBreakpoint.ts +4 -4
  30. package/front_end/core/sdk/ChildTargetManager.ts +6 -6
  31. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +4 -4
  32. package/front_end/core/sdk/ConsoleModel.ts +24 -24
  33. package/front_end/core/sdk/Cookie.ts +16 -16
  34. package/front_end/core/sdk/CookieParser.ts +6 -6
  35. package/front_end/core/sdk/DOMDebuggerModel.ts +88 -89
  36. package/front_end/core/sdk/DOMModel.ts +113 -113
  37. package/front_end/core/sdk/DebuggerModel.ts +102 -103
  38. package/front_end/core/sdk/EmulationModel.ts +6 -6
  39. package/front_end/core/sdk/EventBreakpointsModel.ts +5 -5
  40. package/front_end/core/sdk/HeapProfilerModel.ts +5 -5
  41. package/front_end/core/sdk/IsolateManager.ts +26 -26
  42. package/front_end/core/sdk/LayerTreeBase.ts +29 -30
  43. package/front_end/core/sdk/OverlayModel.ts +6 -6
  44. package/front_end/core/sdk/Resource.ts +43 -43
  45. package/front_end/core/sdk/ResourceTreeModel.ts +58 -61
  46. package/front_end/core/sdk/RuntimeModel.ts +12 -13
  47. package/front_end/core/sdk/SDKModel.ts +3 -3
  48. package/front_end/core/sdk/Script.ts +17 -17
  49. package/front_end/core/sdk/SecurityOriginManager.ts +14 -14
  50. package/front_end/core/sdk/ServerTiming.ts +2 -2
  51. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +15 -15
  52. package/front_end/core/sdk/ServiceWorkerManager.ts +19 -24
  53. package/front_end/core/sdk/SourceMap.ts +10 -10
  54. package/front_end/core/sdk/StorageKeyManager.ts +12 -12
  55. package/front_end/core/sdk/Target.ts +33 -34
  56. package/front_end/core/sdk/TargetManager.ts +20 -20
  57. package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +8 -8
  58. package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +7 -7
  59. package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +7 -7
  60. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +24 -24
  61. package/front_end/entrypoints/main/GlobalAiButton.ts +3 -3
  62. package/front_end/entrypoints/main/MainImpl.ts +16 -14
  63. package/front_end/entrypoints/main/main-meta.ts +1 -2
  64. package/front_end/generated/InspectorBackendCommands.js +3 -2
  65. package/front_end/generated/SupportedCSSProperties.js +20 -0
  66. package/front_end/generated/protocol-mapping.d.ts +4 -0
  67. package/front_end/generated/protocol-proxy-api.d.ts +5 -0
  68. package/front_end/generated/protocol.ts +20 -0
  69. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +15 -16
  70. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +127 -0
  71. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +149 -26
  72. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +6 -0
  73. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +9 -10
  74. package/front_end/models/badges/AiExplorerBadge.ts +21 -0
  75. package/front_end/models/badges/Badge.ts +3 -5
  76. package/front_end/models/badges/CodeWhispererBadge.ts +21 -0
  77. package/front_end/models/badges/DOMDetectiveBadge.ts +4 -3
  78. package/front_end/models/badges/SpeedsterBadge.ts +6 -4
  79. package/front_end/models/badges/StarterBadge.ts +4 -3
  80. package/front_end/models/badges/UserBadges.ts +29 -3
  81. package/front_end/models/bindings/CSSWorkspaceBinding.ts +6 -6
  82. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +18 -18
  83. package/front_end/models/bindings/FileUtils.ts +15 -15
  84. package/front_end/models/bindings/ResourceScriptMapping.ts +14 -14
  85. package/front_end/models/elements/ElementUpdateRecord.ts +11 -11
  86. package/front_end/models/emulation/DeviceModeModel.ts +123 -131
  87. package/front_end/models/emulation/EmulatedDevices.ts +22 -22
  88. package/front_end/models/extensions/ExtensionPanel.ts +24 -24
  89. package/front_end/models/extensions/ExtensionServer.ts +4 -4
  90. package/front_end/models/javascript_metadata/NativeFunctions.js +14 -2
  91. package/front_end/models/persistence/IsolatedFileSystem.ts +18 -19
  92. package/front_end/models/persistence/IsolatedFileSystemManager.ts +13 -13
  93. package/front_end/models/trace/EventsSerializer.ts +5 -5
  94. package/front_end/models/trace/LanternComputationData.ts +10 -10
  95. package/front_end/models/trace/ModelImpl.ts +32 -41
  96. package/front_end/models/trace/Processor.ts +28 -30
  97. package/front_end/models/trace/extras/FilmStrip.ts +6 -6
  98. package/front_end/models/trace/extras/StackTraceForEvent.ts +22 -25
  99. package/front_end/models/trace/extras/ThirdParties.ts +16 -17
  100. package/front_end/models/trace/extras/TraceFilter.ts +1 -1
  101. package/front_end/models/trace/handlers/Threads.ts +10 -10
  102. package/front_end/models/trace/handlers/helpers.ts +9 -9
  103. package/front_end/models/trace/handlers/types.ts +3 -3
  104. package/front_end/models/trace/insights/CLSCulprits.ts +12 -14
  105. package/front_end/models/trace/insights/Cache.ts +8 -4
  106. package/front_end/models/trace/insights/DOMSize.ts +8 -5
  107. package/front_end/models/trace/insights/DocumentLatency.ts +2 -2
  108. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +3 -3
  109. package/front_end/models/trace/insights/FontDisplay.ts +3 -4
  110. package/front_end/models/trace/insights/ForcedReflow.ts +3 -3
  111. package/front_end/models/trace/insights/INPBreakdown.ts +2 -2
  112. package/front_end/models/trace/insights/ImageDelivery.ts +11 -11
  113. package/front_end/models/trace/insights/LCPBreakdown.ts +4 -4
  114. package/front_end/models/trace/insights/LCPDiscovery.ts +4 -4
  115. package/front_end/models/trace/insights/LegacyJavaScript.ts +2 -2
  116. package/front_end/models/trace/insights/ModernHTTP.ts +4 -5
  117. package/front_end/models/trace/insights/NetworkDependencyTree.ts +12 -12
  118. package/front_end/models/trace/insights/RenderBlocking.ts +9 -10
  119. package/front_end/models/trace/insights/SlowCSSSelector.ts +2 -2
  120. package/front_end/models/trace/insights/ThirdParties.ts +4 -5
  121. package/front_end/models/trace/insights/Viewport.ts +8 -5
  122. package/front_end/models/trace/insights/types.ts +1 -0
  123. package/front_end/models/trace/lantern/testing/MetricTestUtils.ts +10 -10
  124. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +52 -52
  125. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -8
  126. package/front_end/panels/animation/AnimationTimeline.ts +5 -5
  127. package/front_end/panels/animation/AnimationUI.ts +22 -23
  128. package/front_end/panels/application/ApplicationPanelSidebar.ts +12 -12
  129. package/front_end/panels/application/DOMStorageModel.ts +23 -23
  130. package/front_end/panels/application/ExtensionStorageModel.ts +31 -31
  131. package/front_end/panels/application/IndexedDBModel.ts +1 -0
  132. package/front_end/panels/application/PreloadingTreeElement.ts +8 -8
  133. package/front_end/panels/application/ServiceWorkersView.ts +0 -53
  134. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
  135. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
  136. package/front_end/panels/common/BadgeNotification.ts +24 -4
  137. package/front_end/panels/common/GdpSignUpDialog.ts +5 -0
  138. package/front_end/panels/common/badgeNotification.css +26 -9
  139. package/front_end/panels/console/ConsoleContextSelector.ts +9 -9
  140. package/front_end/panels/console/ConsolePrompt.ts +8 -5
  141. package/front_end/panels/console/ConsoleView.ts +13 -13
  142. package/front_end/panels/console/ConsoleViewport.ts +29 -29
  143. package/front_end/panels/coverage/CoverageModel.ts +22 -22
  144. package/front_end/panels/elements/ClassesPaneWidget.ts +1 -1
  145. package/front_end/panels/elements/ComputedStyleModel.ts +17 -18
  146. package/front_end/panels/elements/DOMPath.ts +2 -2
  147. package/front_end/panels/elements/ElementsPanel.ts +13 -13
  148. package/front_end/panels/elements/ElementsTreeElement.ts +18 -18
  149. package/front_end/panels/elements/ElementsTreeOutline.ts +41 -48
  150. package/front_end/panels/elements/ShortcutTreeElement.ts +4 -4
  151. package/front_end/panels/elements/StylePropertiesSection.ts +4 -4
  152. package/front_end/panels/elements/StylePropertyTreeElement.ts +49 -50
  153. package/front_end/panels/elements/StylesSidebarPane.ts +19 -19
  154. package/front_end/panels/emulation/DeviceModeToolbar.ts +7 -7
  155. package/front_end/panels/emulation/DeviceModeView.ts +6 -6
  156. package/front_end/panels/emulation/MediaQueryInspector.ts +18 -18
  157. package/front_end/panels/event_listeners/EventListenersView.ts +13 -14
  158. package/front_end/panels/layer_viewer/LayerTreeOutline.ts +3 -3
  159. package/front_end/panels/layer_viewer/LayerViewHost.ts +13 -13
  160. package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -10
  161. package/front_end/panels/layer_viewer/TransformController.ts +34 -36
  162. package/front_end/panels/layers/LayerTreeModel.ts +41 -40
  163. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +13 -13
  164. package/front_end/panels/lighthouse/LighthouseStartView.ts +7 -7
  165. package/front_end/panels/media/PlayerMessagesView.ts +5 -5
  166. package/front_end/panels/media/TickingFlameChart.ts +24 -24
  167. package/front_end/panels/media/TickingFlameChartHelpers.ts +32 -32
  168. package/front_end/panels/network/NetworkItemView.ts +4 -4
  169. package/front_end/panels/network/NetworkLogViewColumns.ts +29 -29
  170. package/front_end/panels/network/NetworkPanel.ts +8 -5
  171. package/front_end/panels/network/ResourceWebSocketFrameView.ts +10 -10
  172. package/front_end/panels/profiler/HeapDetachedElementsView.ts +3 -3
  173. package/front_end/panels/profiler/HeapProfileView.ts +1 -1
  174. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +3 -4
  175. package/front_end/panels/profiler/ProfileHeader.ts +25 -25
  176. package/front_end/panels/profiler/ProfileLauncherView.ts +5 -6
  177. package/front_end/panels/recorder/components/ReplaySection.ts +3 -1
  178. package/front_end/panels/security/OriginTreeElement.ts +8 -8
  179. package/front_end/panels/security/SecurityPanel.ts +5 -5
  180. package/front_end/panels/settings/SettingsScreen.ts +18 -12
  181. package/front_end/panels/settings/components/SyncSection.ts +20 -6
  182. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +3 -0
  183. package/front_end/panels/sources/DebuggerPausedMessage.ts +8 -9
  184. package/front_end/panels/sources/NavigatorView.ts +43 -46
  185. package/front_end/panels/sources/SourcesPanel.ts +35 -35
  186. package/front_end/panels/sources/SourcesView.ts +13 -13
  187. package/front_end/panels/sources/TabbedEditorContainer.ts +19 -22
  188. package/front_end/panels/sources/UISourceCodeFrame.ts +4 -4
  189. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +34 -36
  190. package/front_end/panels/timeline/AnimationsTrackAppender.ts +3 -3
  191. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +8 -8
  192. package/front_end/panels/timeline/CountersGraph.ts +16 -16
  193. package/front_end/panels/timeline/EntriesFilter.ts +4 -3
  194. package/front_end/panels/timeline/EventsTimelineTreeView.ts +3 -3
  195. package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
  196. package/front_end/panels/timeline/Initiators.ts +10 -10
  197. package/front_end/panels/timeline/InteractionsTrackAppender.ts +5 -5
  198. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +7 -7
  199. package/front_end/panels/timeline/ModificationsManager.ts +8 -15
  200. package/front_end/panels/timeline/TargetForEvent.ts +2 -2
  201. package/front_end/panels/timeline/ThirdPartyTreeView.ts +1 -1
  202. package/front_end/panels/timeline/ThreadAppender.ts +13 -13
  203. package/front_end/panels/timeline/TimelineDetailsView.ts +6 -14
  204. package/front_end/panels/timeline/TimelineEventOverview.ts +27 -26
  205. package/front_end/panels/timeline/TimelineFilters.ts +5 -5
  206. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +54 -53
  207. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +34 -34
  208. package/front_end/panels/timeline/TimelineFlameChartView.ts +18 -31
  209. package/front_end/panels/timeline/TimelineHistoryManager.ts +17 -18
  210. package/front_end/panels/timeline/TimelineMiniMap.ts +6 -6
  211. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +6 -6
  212. package/front_end/panels/timeline/TimelinePanel.ts +52 -59
  213. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +7 -5
  214. package/front_end/panels/timeline/TimelineTreeView.ts +10 -10
  215. package/front_end/panels/timeline/TimelineUIUtils.ts +43 -43
  216. package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -12
  217. package/front_end/panels/timeline/TracingLayerTree.ts +43 -43
  218. package/front_end/panels/timeline/TrackConfigBanner.ts +6 -6
  219. package/front_end/panels/timeline/TrackConfiguration.ts +1 -1
  220. package/front_end/panels/timeline/components/DetailsView.ts +4 -4
  221. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +12 -21
  222. package/front_end/panels/timeline/components/LiveMetricsView.ts +2 -1
  223. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +5 -5
  224. package/front_end/panels/timeline/components/Sidebar.ts +4 -14
  225. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +13 -36
  226. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +21 -19
  227. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +1 -1
  228. package/front_end/panels/timeline/components/insights/Cache.ts +4 -0
  229. package/front_end/panels/timeline/components/insights/DOMSize.ts +5 -1
  230. package/front_end/panels/timeline/components/insights/Helpers.ts +19 -0
  231. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +1 -1
  232. package/front_end/panels/timeline/components/insights/Viewport.ts +4 -0
  233. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +1 -1
  234. package/front_end/panels/timeline/utils/AICallTree.ts +11 -11
  235. package/front_end/panels/timeline/utils/AIContext.ts +17 -19
  236. package/front_end/panels/timeline/utils/EntityMapper.ts +6 -5
  237. package/front_end/panels/timeline/utils/EntryName.ts +2 -2
  238. package/front_end/panels/timeline/utils/EntryNodes.ts +5 -5
  239. package/front_end/panels/timeline/utils/EntryStyles.ts +4 -4
  240. package/front_end/panels/timeline/utils/FreshRecording.ts +3 -3
  241. package/front_end/panels/timeline/utils/Helpers.ts +0 -18
  242. package/front_end/panels/timeline/utils/InsightAIContext.ts +6 -6
  243. package/front_end/panels/timeline/utils/SourceMapsResolver.ts +7 -7
  244. package/front_end/panels/webauthn/WebauthnPane.ts +1 -0
  245. package/front_end/third_party/chromium/README.chromium +1 -1
  246. package/front_end/third_party/codemirror.next/chunk/angular.js +1 -1
  247. package/front_end/third_party/codemirror.next/chunk/angular.js.map +1 -1
  248. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  249. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  250. package/front_end/third_party/codemirror.next/chunk/cpp.js +1 -1
  251. package/front_end/third_party/codemirror.next/chunk/cpp.js.map +1 -1
  252. package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
  253. package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
  254. package/front_end/third_party/codemirror.next/chunk/legacy.js +1 -1
  255. package/front_end/third_party/codemirror.next/chunk/legacy.js.map +1 -1
  256. package/front_end/third_party/codemirror.next/chunk/less.js +1 -1
  257. package/front_end/third_party/codemirror.next/chunk/less.js.map +1 -1
  258. package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
  259. package/front_end/third_party/codemirror.next/chunk/markdown.js.map +1 -1
  260. package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
  261. package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
  262. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  263. package/front_end/third_party/codemirror.next/chunk/python.js.map +1 -1
  264. package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
  265. package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
  266. package/front_end/third_party/codemirror.next/chunk/svelte.js +1 -1
  267. package/front_end/third_party/codemirror.next/chunk/svelte.js.map +1 -1
  268. package/front_end/third_party/codemirror.next/chunk/vue.js +1 -1
  269. package/front_end/third_party/codemirror.next/chunk/vue.js.map +1 -1
  270. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  271. package/front_end/third_party/codemirror.next/chunk/wast.js.map +1 -1
  272. package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
  273. package/front_end/third_party/codemirror.next/chunk/xml.js.map +1 -1
  274. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  275. package/front_end/third_party/codemirror.next/package.json +1 -1
  276. package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
  277. package/front_end/third_party/json5/rebuild.sh +1 -1
  278. package/front_end/third_party/legacy-javascript/{update.sh → rebuild.sh} +1 -1
  279. package/front_end/third_party/lit/lib/decorators.d.ts +26 -9
  280. package/front_end/third_party/lit/lib/decorators.js +5 -5
  281. package/front_end/third_party/lit/lib/decorators.js.map +1 -1
  282. package/front_end/third_party/lit/lib/directive.js.map +1 -1
  283. package/front_end/third_party/lit/lib/directives.js +8 -13
  284. package/front_end/third_party/lit/lib/directives.js.map +1 -1
  285. package/front_end/third_party/lit/lib/lit.d.ts +26 -9
  286. package/front_end/third_party/lit/lib/lit.js +5 -5
  287. package/front_end/third_party/lit/lib/lit.js.map +1 -1
  288. package/front_end/third_party/lit/lib/static-html.js +2 -2
  289. package/front_end/third_party/lit/lib/static-html.js.map +1 -1
  290. package/front_end/third_party/lit/rebuild.sh +1 -1
  291. package/front_end/third_party/third-party-web/rebuild.sh +1 -1
  292. package/front_end/ui/components/dialogs/Dialog.ts +6 -7
  293. package/front_end/ui/legacy/ActionRegistration.ts +9 -9
  294. package/front_end/ui/legacy/DockController.ts +18 -18
  295. package/front_end/ui/legacy/FilterBar.ts +7 -7
  296. package/front_end/ui/legacy/Fragment.ts +4 -4
  297. package/front_end/ui/legacy/GlassPane.ts +12 -12
  298. package/front_end/ui/legacy/InspectorView.ts +5 -15
  299. package/front_end/ui/legacy/ListControl.ts +27 -27
  300. package/front_end/ui/legacy/ListWidget.ts +4 -4
  301. package/front_end/ui/legacy/PopoverHelper.ts +4 -4
  302. package/front_end/ui/legacy/ShortcutRegistry.ts +17 -17
  303. package/front_end/ui/legacy/TabbedPane.ts +74 -75
  304. package/front_end/ui/legacy/TextPrompt.ts +31 -31
  305. package/front_end/ui/legacy/Toolbar.ts +13 -14
  306. package/front_end/ui/legacy/ViewManager.ts +30 -31
  307. package/front_end/ui/legacy/Widget.ts +6 -6
  308. package/front_end/ui/legacy/XLink.ts +9 -9
  309. package/front_end/ui/legacy/ZoomManager.ts +9 -9
  310. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +27 -27
  311. package/front_end/ui/legacy/components/color_picker/ContrastInfo.ts +30 -32
  312. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +15 -15
  313. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +64 -64
  314. package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
  315. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +10 -11
  316. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +12 -12
  317. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +3 -3
  318. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +14 -14
  319. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +8 -8
  320. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +5 -5
  321. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +4 -4
  322. package/front_end/ui/legacy/theme_support/ThemeSupport.ts +4 -4
  323. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -2
  324. package/package.json +1 -1
@@ -10,9 +10,9 @@ import type * as Types from './types/types.js';
10
10
 
11
11
  type NetworkRequest = Lantern.Types.NetworkRequest<Types.Events.SyntheticNetworkRequest>;
12
12
 
13
- function createProcessedNavigation(parsedTrace: Handlers.Types.ParsedTrace, frameId: string, navigationId: string):
13
+ function createProcessedNavigation(data: Handlers.Types.HandlerData, frameId: string, navigationId: string):
14
14
  Lantern.Types.Simulation.ProcessedNavigation {
15
- const scoresByNav = parsedTrace.PageLoadMetrics.metricScoresByFrameId.get(frameId);
15
+ const scoresByNav = data.PageLoadMetrics.metricScoresByFrameId.get(frameId);
16
16
  if (!scoresByNav) {
17
17
  throw new Lantern.Core.LanternError('missing metric scores for frame');
18
18
  }
@@ -85,7 +85,7 @@ function findWorkerThreads(trace: Lantern.Types.Trace): Map<number, number[]> {
85
85
  }
86
86
 
87
87
  function createLanternRequest(
88
- parsedTrace: Readonly<Handlers.Types.ParsedTrace>, workerThreads: Map<number, number[]>,
88
+ parsedTrace: Readonly<Handlers.Types.HandlerData>, workerThreads: Map<number, number[]>,
89
89
  request: Types.Events.SyntheticNetworkRequest): NetworkRequest|undefined {
90
90
  if (request.args.data.hasResponse && request.args.data.connectionId === undefined) {
91
91
  throw new Lantern.Core.LanternError('Trace is too old');
@@ -273,14 +273,14 @@ function linkInitiators(lanternRequests: NetworkRequest[]): void {
273
273
  }
274
274
 
275
275
  function createNetworkRequests(
276
- trace: Lantern.Types.Trace, parsedTrace: Handlers.Types.ParsedTrace, startTime = 0,
276
+ trace: Lantern.Types.Trace, data: Handlers.Types.HandlerData, startTime = 0,
277
277
  endTime = Number.POSITIVE_INFINITY): NetworkRequest[] {
278
278
  const workerThreads = findWorkerThreads(trace);
279
279
 
280
280
  const lanternRequestsNoRedirects: NetworkRequest[] = [];
281
- for (const request of parsedTrace.NetworkRequests.byTime) {
281
+ for (const request of data.NetworkRequests.byTime) {
282
282
  if (request.ts >= startTime && request.ts < endTime) {
283
- const lanternRequest = createLanternRequest(parsedTrace, workerThreads, request);
283
+ const lanternRequest = createLanternRequest(data, workerThreads, request);
284
284
  if (lanternRequest) {
285
285
  lanternRequestsNoRedirects.push(lanternRequest);
286
286
  }
@@ -371,8 +371,8 @@ function createNetworkRequests(
371
371
  }
372
372
 
373
373
  function collectMainThreadEvents(
374
- trace: Lantern.Types.Trace, parsedTrace: Handlers.Types.ParsedTrace): Lantern.Types.TraceEvent[] {
375
- const Meta = parsedTrace.Meta;
374
+ trace: Lantern.Types.Trace, data: Handlers.Types.HandlerData): Lantern.Types.TraceEvent[] {
375
+ const Meta = data.Meta;
376
376
  const mainFramePids = Meta.mainFrameNavigations.length ? new Set(Meta.mainFrameNavigations.map(nav => nav.pid)) :
377
377
  Meta.topLevelRendererIds;
378
378
 
@@ -408,9 +408,9 @@ function collectMainThreadEvents(
408
408
  }
409
409
 
410
410
  function createGraph(
411
- requests: Lantern.Types.NetworkRequest[], trace: Lantern.Types.Trace, parsedTrace: Handlers.Types.ParsedTrace,
411
+ requests: Lantern.Types.NetworkRequest[], trace: Lantern.Types.Trace, data: Handlers.Types.HandlerData,
412
412
  url?: Lantern.Types.Simulation.URL): Lantern.Graph.Node<Types.Events.SyntheticNetworkRequest> {
413
- const mainThreadEvents = collectMainThreadEvents(trace, parsedTrace);
413
+ const mainThreadEvents = collectMainThreadEvents(trace, data);
414
414
 
415
415
  // url defines the initial request that the Lantern graph starts at (the root node) and the
416
416
  // main document request. These are equal if there are no redirects.
@@ -29,7 +29,7 @@ export interface ParseConfig {
29
29
  * `createWithSubsetOfHandlers` can be used to run just some handlers.
30
30
  **/
31
31
  export class Model extends EventTarget {
32
- readonly #traces: ParsedTraceFile[] = [];
32
+ readonly #traces: ParsedTrace[] = [];
33
33
  readonly #nextNumberByDomain = new Map<string, number>();
34
34
 
35
35
  readonly #recordingsAvailable: string[] = [];
@@ -100,14 +100,8 @@ export class Model extends EventTarget {
100
100
 
101
101
  this.#processor.addEventListener(TraceParseProgressEvent.eventName, onTraceUpdate);
102
102
 
103
- // Create a parsed trace file. It will be populated with data from the processor.
104
- const file: ParsedTraceFile = {
105
- traceEvents,
106
- metadata,
107
- parsedTrace: null,
108
- traceInsights: null,
109
- syntheticEventsManager: Helpers.SyntheticEvents.SyntheticEventsManager.createAndActivate(traceEvents),
110
- };
103
+ // TODO(cjamcl): this.#processor.parse needs this to work. So it should either take it as input, or create it itself.
104
+ const syntheticEventsManager = Helpers.SyntheticEvents.SyntheticEventsManager.createAndActivate(traceEvents);
111
105
 
112
106
  try {
113
107
  // Wait for all outstanding promises before finishing the async execution,
@@ -119,7 +113,11 @@ export class Model extends EventTarget {
119
113
  resolveSourceMap: config?.resolveSourceMap,
120
114
  };
121
115
  await this.#processor.parse(traceEvents, parseConfig);
122
- this.#storeParsedFileData(file, this.#processor.parsedTrace, this.#processor.insights);
116
+ if (!this.#processor.data) {
117
+ throw new Error('processor did not parse trace');
118
+ }
119
+ const file = this.#storeAndCreateParsedTraceFile(
120
+ syntheticEventsManager, traceEvents, metadata, this.#processor.data, this.#processor.insights);
123
121
  // We only push the file onto this.#traces here once we know it's valid
124
122
  // and there's been no errors in the parsing.
125
123
  this.#traces.push(file);
@@ -133,23 +131,27 @@ export class Model extends EventTarget {
133
131
  }
134
132
  }
135
133
 
136
- #storeParsedFileData(
137
- file: ParsedTraceFile, data: Handlers.Types.ParsedTrace|null,
138
- insights: Insights.Types.TraceInsightSets|null): void {
139
- file.parsedTrace = data;
140
- file.traceInsights = insights;
134
+ #storeAndCreateParsedTraceFile(
135
+ syntheticEventsManager: Helpers.SyntheticEvents.SyntheticEventsManager,
136
+ traceEvents: readonly Types.Events.Event[], metadata: Types.File.MetaData, data: Handlers.Types.HandlerData,
137
+ traceInsights: Insights.Types.TraceInsightSets|null): ParsedTrace {
141
138
  this.#lastRecordingIndex++;
142
139
  let recordingName = `Trace ${this.#lastRecordingIndex}`;
143
- let origin: string|null = null;
144
- if (file.parsedTrace) {
145
- origin = Helpers.Trace.extractOriginFromTrace(file.parsedTrace.Meta.mainFrameURL);
146
- if (origin) {
147
- const nextSequenceForDomain = Platform.MapUtilities.getWithDefault(this.#nextNumberByDomain, origin, () => 1);
148
- recordingName = `${origin} (${nextSequenceForDomain})`;
149
- this.#nextNumberByDomain.set(origin, nextSequenceForDomain + 1);
150
- }
140
+ const origin = Helpers.Trace.extractOriginFromTrace(data.Meta.mainFrameURL);
141
+ if (origin) {
142
+ const nextSequenceForDomain = Platform.MapUtilities.getWithDefault(this.#nextNumberByDomain, origin, () => 1);
143
+ recordingName = `${origin} (${nextSequenceForDomain})`;
144
+ this.#nextNumberByDomain.set(origin, nextSequenceForDomain + 1);
151
145
  }
152
146
  this.#recordingsAvailable.push(recordingName);
147
+
148
+ return {
149
+ traceEvents,
150
+ metadata,
151
+ data,
152
+ insights: traceInsights,
153
+ syntheticEventsManager,
154
+ };
153
155
  }
154
156
 
155
157
  lastTraceIndex(): number {
@@ -160,16 +162,8 @@ export class Model extends EventTarget {
160
162
  * Returns the parsed trace data indexed by the order in which it was stored.
161
163
  * If no index is given, the last stored parsed data is returned.
162
164
  */
163
- parsedTrace(index: number = this.#traces.length - 1): Handlers.Types.ParsedTrace|null {
164
- return this.#traces.at(index)?.parsedTrace ?? null;
165
- }
166
-
167
- traceInsights(index: number = this.#traces.length - 1): Insights.Types.TraceInsightSets|null {
168
- return this.#traces.at(index)?.traceInsights ?? null;
169
- }
170
-
171
- metadata(index: number = this.#traces.length - 1): Types.File.MetaData|null {
172
- return this.#traces.at(index)?.metadata ?? null;
165
+ parsedTrace(index: number = this.#traces.length - 1): ParsedTrace|null {
166
+ return this.#traces.at(index) ?? null;
173
167
  }
174
168
 
175
169
  overrideModifications(index: number, newModifications: Types.File.Modifications): void {
@@ -178,10 +172,6 @@ export class Model extends EventTarget {
178
172
  }
179
173
  }
180
174
 
181
- rawTraceEvents(index: number = this.#traces.length - 1): readonly Types.Events.Event[]|null {
182
- return this.#traces.at(index)?.traceEvents ?? null;
183
- }
184
-
185
175
  syntheticTraceEventsManager(index: number = this.#traces.length - 1): Helpers.SyntheticEvents.SyntheticEventsManager
186
176
  |null {
187
177
  return this.#traces.at(index)?.syntheticEventsManager ?? null;
@@ -206,13 +196,14 @@ export class Model extends EventTarget {
206
196
  }
207
197
 
208
198
  /**
209
- * This parsed trace file is used by the Model. It keeps multiple instances
199
+ * This parsed trace is used by the Model. It keeps multiple instances
210
200
  * of these so that the user can swap between them. The key is that it is
211
201
  * essentially the TraceFile plus whatever the model has parsed from it.
212
202
  */
213
- export type ParsedTraceFile = Types.File.TraceFile&{
214
- parsedTrace: Handlers.Types.ParsedTrace | null,
215
- traceInsights: Insights.Types.TraceInsightSets | null,
203
+ export type ParsedTrace = Types.File.TraceFile&{
204
+ data: Handlers.Types.HandlerData,
205
+ /** Is null for CPU profiles. */
206
+ insights: Insights.Types.TraceInsightSets | null,
216
207
  syntheticEventsManager: Helpers.SyntheticEvents.SyntheticEventsManager,
217
208
  };
218
209
 
@@ -56,7 +56,7 @@ export class TraceProcessor extends EventTarget {
56
56
  readonly #traceHandlers: Partial<Handlers.Types.Handlers>;
57
57
  #status = Status.IDLE;
58
58
  #modelConfiguration = Types.Configuration.defaults();
59
- #data: Handlers.Types.ParsedTrace|null = null;
59
+ #data: Handlers.Types.HandlerData|null = null;
60
60
  #insights: Insights.Types.TraceInsightSets|null = null;
61
61
 
62
62
  static createWithAllHandlers(): TraceProcessor {
@@ -243,10 +243,10 @@ export class TraceProcessor extends EventTarget {
243
243
 
244
244
  this.dispatchEvent(new TraceParseProgressEvent({percent: ProgressPhase.CLONE}));
245
245
 
246
- this.#data = parsedTrace as Handlers.Types.ParsedTrace;
246
+ this.#data = parsedTrace as Handlers.Types.HandlerData;
247
247
  }
248
248
 
249
- get parsedTrace(): Handlers.Types.ParsedTrace|null {
249
+ get data(): Handlers.Types.HandlerData|null {
250
250
  if (this.#status !== Status.FINISHED_PARSING) {
251
251
  return null;
252
252
  }
@@ -263,17 +263,17 @@ export class TraceProcessor extends EventTarget {
263
263
  }
264
264
 
265
265
  #createLanternContext(
266
- parsedTrace: Handlers.Types.ParsedTrace, traceEvents: readonly Types.Events.Event[], frameId: string,
266
+ data: Handlers.Types.HandlerData, traceEvents: readonly Types.Events.Event[], frameId: string,
267
267
  navigationId: string, options: Types.Configuration.ParseOptions): Insights.Types.LanternContext|undefined {
268
268
  // Check for required handlers.
269
- if (!parsedTrace.NetworkRequests || !parsedTrace.Workers || !parsedTrace.PageLoadMetrics) {
269
+ if (!data.NetworkRequests || !data.Workers || !data.PageLoadMetrics) {
270
270
  return;
271
271
  }
272
- if (!parsedTrace.NetworkRequests.byTime.length) {
272
+ if (!data.NetworkRequests.byTime.length) {
273
273
  throw new Lantern.Core.LanternError('No network requests found in trace');
274
274
  }
275
275
 
276
- const navStarts = parsedTrace.Meta.navigationsByFrameId.get(frameId);
276
+ const navStarts = data.Meta.navigationsByFrameId.get(frameId);
277
277
  const navStartIndex = navStarts?.findIndex(n => n.args.data?.navigationId === navigationId);
278
278
  if (!navStarts || navStartIndex === undefined || navStartIndex === -1) {
279
279
  throw new Lantern.Core.LanternError('Could not find navigation start');
@@ -289,9 +289,9 @@ export class TraceProcessor extends EventTarget {
289
289
  traceEvents: boundedTraceEvents as unknown as Lantern.Types.TraceEvent[],
290
290
  };
291
291
 
292
- const requests = LanternComputationData.createNetworkRequests(trace, parsedTrace, startTime, endTime);
293
- const graph = LanternComputationData.createGraph(requests, trace, parsedTrace);
294
- const processedNavigation = LanternComputationData.createProcessedNavigation(parsedTrace, frameId, navigationId);
292
+ const requests = LanternComputationData.createNetworkRequests(trace, data, startTime, endTime);
293
+ const graph = LanternComputationData.createGraph(requests, trace, data);
294
+ const processedNavigation = LanternComputationData.createProcessedNavigation(data, frameId, navigationId);
295
295
 
296
296
  const networkAnalysis = Lantern.Core.NetworkAnalyzer.analyze(requests);
297
297
  if (!networkAnalysis) {
@@ -425,17 +425,16 @@ export class TraceProcessor extends EventTarget {
425
425
  }
426
426
 
427
427
  #computeInsightSet(
428
- parsedTrace: Handlers.Types.ParsedTrace, context: Insights.Types.InsightSetContext,
428
+ data: Handlers.Types.HandlerData, context: Insights.Types.InsightSetContext,
429
429
  options: Types.Configuration.ParseOptions): void {
430
430
  let id, urlString, navigation;
431
431
  if (context.navigation) {
432
432
  id = context.navigationId;
433
- urlString =
434
- parsedTrace.Meta.finalDisplayUrlByNavigationId.get(context.navigationId) ?? parsedTrace.Meta.mainFrameURL;
433
+ urlString = data.Meta.finalDisplayUrlByNavigationId.get(context.navigationId) ?? data.Meta.mainFrameURL;
435
434
  navigation = context.navigation;
436
435
  } else {
437
436
  id = Types.Events.NO_NAVIGATION;
438
- urlString = parsedTrace.Meta.finalDisplayUrlByNavigationId.get('') ?? parsedTrace.Meta.mainFrameURL;
437
+ urlString = data.Meta.finalDisplayUrlByNavigationId.get('') ?? data.Meta.mainFrameURL;
439
438
  }
440
439
 
441
440
  const insightSetModel = {} as Insights.Types.InsightSet['model'];
@@ -444,7 +443,7 @@ export class TraceProcessor extends EventTarget {
444
443
  let model: Insights.Types.InsightModel|Error;
445
444
  try {
446
445
  options.logger?.start(`insights:${name}`);
447
- model = insight.generateInsight(parsedTrace, context);
446
+ model = insight.generateInsight(data, context);
448
447
  model.frameId = context.frameId;
449
448
  const navId = context.navigation?.args.data?.navigationId;
450
449
  if (navId) {
@@ -511,24 +510,24 @@ export class TraceProcessor extends EventTarget {
511
510
  * Run all the insights and set the result to `#insights`.
512
511
  */
513
512
  #computeInsights(
514
- parsedTrace: Handlers.Types.ParsedTrace, traceEvents: readonly Types.Events.Event[],
513
+ data: Handlers.Types.HandlerData, traceEvents: readonly Types.Events.Event[],
515
514
  options: Types.Configuration.ParseOptions): void {
516
515
  // This insights map will be populated by the helper methods.
517
516
  this.#insights = new Map();
518
517
 
519
518
  // Filter main frame navigations to those that have the necessary data (frameId and navigationId).
520
519
  // 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?
521
- const navigations = parsedTrace.Meta.mainFrameNavigations.filter(
520
+ const navigations = data.Meta.mainFrameNavigations.filter(
522
521
  navigation => navigation.args.frame && navigation.args.data?.navigationId);
523
522
 
524
- this.#computeInsightsForInitialTracePeriod(parsedTrace, navigations, options);
523
+ this.#computeInsightsForInitialTracePeriod(data, navigations, options);
525
524
 
526
525
  for (const [index, navigation] of navigations.entries()) {
527
526
  const min = navigation.ts;
528
527
  // Use trace end for the last navigation, otherwise use the start of the next navigation.
529
- const max = index + 1 < navigations.length ? navigations[index + 1].ts : parsedTrace.Meta.traceBounds.max;
528
+ const max = index + 1 < navigations.length ? navigations[index + 1].ts : data.Meta.traceBounds.max;
530
529
  const bounds = Helpers.Timing.traceWindowFromMicroSeconds(min, max);
531
- this.#computeInsightsForNavigation(navigation, bounds, parsedTrace, traceEvents, options);
530
+ this.#computeInsightsForNavigation(navigation, bounds, data, traceEvents, options);
532
531
  }
533
532
  }
534
533
 
@@ -536,28 +535,27 @@ export class TraceProcessor extends EventTarget {
536
535
  * Computes insights for the period before the first navigation, or for the entire trace if no navigations exist.
537
536
  */
538
537
  #computeInsightsForInitialTracePeriod(
539
- parsedTrace: Handlers.Types.ParsedTrace, navigations: readonly Types.Events.NavigationStart[],
538
+ data: Handlers.Types.HandlerData, navigations: readonly Types.Events.NavigationStart[],
540
539
  options: Types.Configuration.ParseOptions): void {
541
540
  // Determine bounds: Use the period before the first navigation if navigations exist, otherwise use the entire trace bounds.
542
541
  const bounds = navigations.length > 0 ?
543
- Helpers.Timing.traceWindowFromMicroSeconds(parsedTrace.Meta.traceBounds.min, navigations[0].ts) :
544
- parsedTrace.Meta.traceBounds;
542
+ Helpers.Timing.traceWindowFromMicroSeconds(data.Meta.traceBounds.min, navigations[0].ts) :
543
+ data.Meta.traceBounds;
545
544
 
546
545
  const context: Insights.Types.InsightSetContext = {
547
546
  bounds,
548
- frameId: parsedTrace.Meta.mainFrameId,
547
+ frameId: data.Meta.mainFrameId,
549
548
  // No navigation or lantern context applies to this initial/no-navigation period.
550
549
  };
551
- this.#computeInsightSet(parsedTrace, context, options);
550
+ this.#computeInsightSet(data, context, options);
552
551
  }
553
552
 
554
553
  /**
555
554
  * Computes insights for a specific navigation event.
556
555
  */
557
556
  #computeInsightsForNavigation(
558
- navigation: Types.Events.NavigationStart, bounds: Types.Timing.TraceWindowMicro,
559
- parsedTrace: Handlers.Types.ParsedTrace, traceEvents: readonly Types.Events.Event[],
560
- options: Types.Configuration.ParseOptions): void {
557
+ navigation: Types.Events.NavigationStart, bounds: Types.Timing.TraceWindowMicro, data: Handlers.Types.HandlerData,
558
+ traceEvents: readonly Types.Events.Event[], options: Types.Configuration.ParseOptions): void {
561
559
  const frameId = navigation.args.frame;
562
560
  // Guaranteed by the filter in #computeInsights
563
561
  const navigationId = navigation.args.data?.navigationId as string;
@@ -568,7 +566,7 @@ export class TraceProcessor extends EventTarget {
568
566
  let lantern: Insights.Types.LanternContext|undefined;
569
567
  try {
570
568
  options.logger?.start('insights:createLanternContext');
571
- lantern = this.#createLanternContext(parsedTrace, traceEvents, frameId, navigationId, options);
569
+ lantern = this.#createLanternContext(data, traceEvents, frameId, navigationId, options);
572
570
  } catch (e) {
573
571
  // Handle Lantern errors gracefully
574
572
  // Don't allow an error in constructing the Lantern graphs to break the rest of the trace processor.
@@ -601,7 +599,7 @@ export class TraceProcessor extends EventTarget {
601
599
  navigationId,
602
600
  lantern,
603
601
  };
604
- this.#computeInsightSet(parsedTrace, context, options);
602
+ this.#computeInsightSet(data, context, options);
605
603
  }
606
604
  }
607
605
 
@@ -32,17 +32,17 @@ export type HandlerDataWithScreenshots = Handlers.Types.EnabledHandlerDataWithMe
32
32
  // 2. The start time.
33
33
  const filmStripCache = new WeakMap<HandlerDataWithScreenshots, Map<Types.Timing.Micro, Data>>();
34
34
 
35
- export function fromParsedTrace(parsedTrace: HandlerDataWithScreenshots, customZeroTime?: Types.Timing.Micro): Data {
35
+ export function fromHandlerData(data: HandlerDataWithScreenshots, customZeroTime?: Types.Timing.Micro): Data {
36
36
  const frames: Frame[] = [];
37
37
 
38
- const zeroTime = typeof customZeroTime !== 'undefined' ? customZeroTime : parsedTrace.Meta.traceBounds.min;
39
- const spanTime = parsedTrace.Meta.traceBounds.range;
40
- const fromCache = filmStripCache.get(parsedTrace)?.get(zeroTime);
38
+ const zeroTime = typeof customZeroTime !== 'undefined' ? customZeroTime : data.Meta.traceBounds.min;
39
+ const spanTime = data.Meta.traceBounds.range;
40
+ const fromCache = filmStripCache.get(data)?.get(zeroTime);
41
41
  if (fromCache) {
42
42
  return fromCache;
43
43
  }
44
44
 
45
- const screenshots = parsedTrace.Screenshots.screenshots ?? parsedTrace.Screenshots.legacySyntheticScreenshots ?? [];
45
+ const screenshots = data.Screenshots.screenshots ?? data.Screenshots.legacySyntheticScreenshots ?? [];
46
46
 
47
47
  for (const screenshotEvent of screenshots) {
48
48
  if (screenshotEvent.ts < zeroTime) {
@@ -62,7 +62,7 @@ export function fromParsedTrace(parsedTrace: HandlerDataWithScreenshots, customZ
62
62
  };
63
63
 
64
64
  const cachedForData =
65
- Platform.MapUtilities.getWithDefault(filmStripCache, parsedTrace, () => new Map<Types.Timing.Micro, Data>());
65
+ Platform.MapUtilities.getWithDefault(filmStripCache, data, () => new Map<Types.Timing.Micro, Data>());
66
66
  cachedForData.set(zeroTime, result);
67
67
 
68
68
  return result;
@@ -8,10 +8,10 @@ import * as Helpers from '../helpers/helpers.js';
8
8
  import * as Types from '../types/types.js';
9
9
 
10
10
  export const stackTraceForEventInTrace =
11
- new Map<Handlers.Types.ParsedTrace, Map<Types.Events.Event, Protocol.Runtime.StackTrace>>();
11
+ new Map<Handlers.Types.HandlerData, Map<Types.Events.Event, Protocol.Runtime.StackTrace>>();
12
12
 
13
- export function clearCacheForTrace(parsedTrace: Handlers.Types.ParsedTrace): void {
14
- stackTraceForEventInTrace.delete(parsedTrace);
13
+ export function clearCacheForTrace(data: Handlers.Types.HandlerData): void {
14
+ stackTraceForEventInTrace.delete(data);
15
15
  }
16
16
  /**
17
17
  * This util builds a stack trace that includes async calls for a given
@@ -19,12 +19,11 @@ export function clearCacheForTrace(parsedTrace: Handlers.Types.ParsedTrace): voi
19
19
  * stacks and trace event instrumentation on the V8 debugger to stitch
20
20
  * them together.
21
21
  */
22
- export function get(event: Types.Events.Event, parsedTrace: Handlers.Types.ParsedTrace): Protocol.Runtime.StackTrace|
23
- null {
24
- let cacheForTrace = stackTraceForEventInTrace.get(parsedTrace);
22
+ export function get(event: Types.Events.Event, data: Handlers.Types.HandlerData): Protocol.Runtime.StackTrace|null {
23
+ let cacheForTrace = stackTraceForEventInTrace.get(data);
25
24
  if (!cacheForTrace) {
26
25
  cacheForTrace = new Map();
27
- stackTraceForEventInTrace.set(parsedTrace, cacheForTrace);
26
+ stackTraceForEventInTrace.set(data, cacheForTrace);
28
27
  }
29
28
  const resultFromCache = cacheForTrace.get(event);
30
29
  if (resultFromCache) {
@@ -32,11 +31,11 @@ export function get(event: Types.Events.Event, parsedTrace: Handlers.Types.Parse
32
31
  }
33
32
  let result: Protocol.Runtime.StackTrace|null = null;
34
33
  if (Types.Extensions.isSyntheticExtensionEntry(event)) {
35
- result = getForExtensionEntry(event, parsedTrace);
34
+ result = getForExtensionEntry(event, data);
36
35
  } else if (Types.Events.isPerformanceMeasureBegin(event)) {
37
- result = getForPerformanceMeasure(event, parsedTrace);
36
+ result = getForPerformanceMeasure(event, data);
38
37
  } else {
39
- result = getForEvent(event, parsedTrace);
38
+ result = getForEvent(event, data);
40
39
  const payloadCallFrames =
41
40
  getTraceEventPayloadStackAsProtocolCallFrame(event).filter(callFrame => !isNativeJSFunction(callFrame));
42
41
  // If the event has a payload stack trace, replace the synchronous
@@ -65,24 +64,22 @@ export function get(event: Types.Events.Event, parsedTrace: Handlers.Types.Parse
65
64
  * hierarchy. This shouldn't be called outside of this file, use `get`
66
65
  * instead to ensure the correct event in the tree hierarchy is used.
67
66
  */
68
- function getForEvent(event: Types.Events.Event, parsedTrace: Handlers.Types.ParsedTrace): Protocol.Runtime.StackTrace {
67
+ function getForEvent(event: Types.Events.Event, data: Handlers.Types.HandlerData): Protocol.Runtime.StackTrace {
69
68
  // When working with a CPU profile the renderer handler won't have
70
69
  // entries in its tree.
71
- const entryToNode =
72
- parsedTrace.Renderer.entryToNode.size > 0 ? parsedTrace.Renderer.entryToNode : parsedTrace.Samples.entryToNode;
70
+ const entryToNode = data.Renderer.entryToNode.size > 0 ? data.Renderer.entryToNode : data.Samples.entryToNode;
73
71
  const topStackTrace: Protocol.Runtime.StackTrace = {callFrames: []};
74
72
  let stackTrace: Protocol.Runtime.StackTrace = topStackTrace;
75
73
  let currentEntry: Types.Events.SyntheticProfileCall;
76
74
  let node: Helpers.TreeHelpers.TraceEntryNode|null|undefined = entryToNode.get(event);
77
- const traceCache =
78
- stackTraceForEventInTrace.get(parsedTrace) || new Map<Types.Events.Event, Protocol.Runtime.StackTrace>();
79
- stackTraceForEventInTrace.set(parsedTrace, traceCache);
75
+ const traceCache = stackTraceForEventInTrace.get(data) || new Map<Types.Events.Event, Protocol.Runtime.StackTrace>();
76
+ stackTraceForEventInTrace.set(data, traceCache);
80
77
  // Move up this node's ancestor tree appending JS frames to its
81
78
  // stack trace. If an async caller is detected, move up in the async
82
79
  // stack instead.
83
80
  while (node) {
84
81
  if (!Types.Events.isProfileCall(node.entry)) {
85
- const maybeAsyncParent = parsedTrace.AsyncJSCalls.runEntryPointToScheduler.get(node.entry);
82
+ const maybeAsyncParent = data.AsyncJSCalls.runEntryPointToScheduler.get(node.entry);
86
83
  if (!maybeAsyncParent) {
87
84
  node = node.parent;
88
85
  continue;
@@ -114,7 +111,7 @@ function getForEvent(event: Types.Events.Event, parsedTrace: Handlers.Types.Pars
114
111
  if (!isNativeJSFunction(currentEntry.callFrame)) {
115
112
  stackTrace.callFrames.push(currentEntry.callFrame);
116
113
  }
117
- const maybeAsyncParentEvent = parsedTrace.AsyncJSCalls.asyncCallToScheduler.get(currentEntry);
114
+ const maybeAsyncParentEvent = data.AsyncJSCalls.asyncCallToScheduler.get(currentEntry);
118
115
  const maybeAsyncParentNode = maybeAsyncParentEvent && entryToNode.get(maybeAsyncParentEvent.scheduler);
119
116
  if (maybeAsyncParentNode) {
120
117
  stackTrace = addAsyncParentToStack(stackTrace, maybeAsyncParentEvent.taskName);
@@ -147,23 +144,23 @@ function addAsyncParentToStack(stackTrace: Protocol.Runtime.StackTrace, taskName
147
144
  * code location that called the extension API), and returns its stack
148
145
  * trace.
149
146
  */
150
- function getForExtensionEntry(event: Types.Extensions.SyntheticExtensionEntry, parsedTrace: Handlers.Types.ParsedTrace):
147
+ function getForExtensionEntry(event: Types.Extensions.SyntheticExtensionEntry, data: Handlers.Types.HandlerData):
151
148
  Protocol.Runtime.StackTrace|null {
152
149
  const rawEvent: Types.Events.Event = event.rawSourceEvent;
153
150
  if (Types.Events.isPerformanceMeasureBegin(rawEvent)) {
154
- return getForPerformanceMeasure(rawEvent, parsedTrace);
151
+ return getForPerformanceMeasure(rawEvent, data);
155
152
  }
156
153
  if (!rawEvent) {
157
154
  return null;
158
155
  }
159
- return get(rawEvent, parsedTrace);
156
+ return get(rawEvent, data);
160
157
  }
161
158
 
162
159
  /**
163
160
  * Gets the raw event for a user timing and obtains its stack trace.
164
161
  */
165
- function getForPerformanceMeasure(event: Types.Events.PerformanceMeasureBegin, parsedTrace: Handlers.Types.ParsedTrace):
166
- Protocol.Runtime.StackTrace|null {
162
+ function getForPerformanceMeasure(
163
+ event: Types.Events.PerformanceMeasureBegin, data: Handlers.Types.HandlerData): Protocol.Runtime.StackTrace|null {
167
164
  let rawEvent: Types.Events.Event|undefined = event;
168
165
  if (event.args.traceId === undefined) {
169
166
  return null;
@@ -173,11 +170,11 @@ function getForPerformanceMeasure(event: Types.Events.PerformanceMeasureBegin, p
173
170
  // timeline. They are connected via a common traceId. At this
174
171
  // point `rawEvent` corresponds to the second case, we must
175
172
  // encounter the event for the call itself to obtain its callstack.
176
- rawEvent = parsedTrace.UserTimings.measureTraceByTraceId.get(event.args.traceId);
173
+ rawEvent = data.UserTimings.measureTraceByTraceId.get(event.args.traceId);
177
174
  if (!rawEvent) {
178
175
  return null;
179
176
  }
180
- return get(rawEvent, parsedTrace);
177
+ return get(rawEvent, data);
181
178
  }
182
179
  /**
183
180
  * Determines if a function is a native JS API (like setTimeout,
@@ -32,9 +32,9 @@ export interface URLSummary extends BaseSummary {
32
32
  * Returns Main frame main thread events.
33
33
  * These events are inline with the ones used by selectedEvents() of TimelineTreeViews
34
34
  */
35
- function collectMainThreadActivity(parsedTrace: Handlers.Types.ParsedTrace): Types.Events.Event[] {
35
+ function collectMainThreadActivity(data: Handlers.Types.HandlerData): Types.Events.Event[] {
36
36
  // TODO: Note b/402658800 could be an issue here.
37
- const mainFrameMainThread = parsedTrace.Renderer.processes.values()
37
+ const mainFrameMainThread = data.Renderer.processes.values()
38
38
  .find(p => {
39
39
  const url = p.url ?? '';
40
40
  // Frame url checked a la CompatibilityTracksAppenders's addThreadAppenders
@@ -51,14 +51,14 @@ function collectMainThreadActivity(parsedTrace: Handlers.Types.ParsedTrace): Typ
51
51
  }
52
52
 
53
53
  export function summarizeByThirdParty(
54
- parsedTrace: Handlers.Types.ParsedTrace, traceBounds: Types.Timing.TraceWindowMicro): EntitySummary[] {
55
- const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);
54
+ data: Handlers.Types.HandlerData, traceBounds: Types.Timing.TraceWindowMicro): EntitySummary[] {
55
+ const mainThreadEvents = collectMainThreadActivity(data).sort(Helpers.Trace.eventTimeComparator);
56
56
  const groupingFunction = (event: Types.Events.Event): string => {
57
- const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(event);
57
+ const entity = data.Renderer.entityMappings.entityByEvent.get(event);
58
58
  return entity?.name ?? '';
59
59
  };
60
60
  const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);
61
- const summaries = summarizeBottomUpByEntity(node, parsedTrace);
61
+ const summaries = summarizeBottomUpByEntity(node, data);
62
62
 
63
63
  return summaries;
64
64
  }
@@ -67,19 +67,19 @@ export function summarizeByThirdParty(
67
67
  * Used only by Lighthouse.
68
68
  */
69
69
  export function summarizeByURL(
70
- parsedTrace: Handlers.Types.ParsedTrace, traceBounds: Types.Timing.TraceWindowMicro): URLSummary[] {
71
- const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);
70
+ data: Handlers.Types.HandlerData, traceBounds: Types.Timing.TraceWindowMicro): URLSummary[] {
71
+ const mainThreadEvents = collectMainThreadActivity(data).sort(Helpers.Trace.eventTimeComparator);
72
72
  const groupingFunction = (event: Types.Events.Event): string => {
73
- return Handlers.Helpers.getNonResolvedURL(event, parsedTrace) ?? '';
73
+ return Handlers.Helpers.getNonResolvedURL(event, data) ?? '';
74
74
  };
75
75
  const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);
76
- const summaries = summarizeBottomUpByURL(node, parsedTrace);
76
+ const summaries = summarizeBottomUpByURL(node, data);
77
77
 
78
78
  return summaries;
79
79
  }
80
80
 
81
81
  function summarizeBottomUpByEntity(
82
- root: TraceTree.BottomUpRootNode, parsedTrace: Handlers.Types.ParsedTrace): EntitySummary[] {
82
+ root: TraceTree.BottomUpRootNode, data: Handlers.Types.HandlerData): EntitySummary[] {
83
83
  const summaries: EntitySummary[] = [];
84
84
 
85
85
  // Top nodes are the 3P entities.
@@ -89,7 +89,7 @@ function summarizeBottomUpByEntity(
89
89
  continue;
90
90
  }
91
91
 
92
- const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);
92
+ const entity = data.Renderer.entityMappings.entityByEvent.get(node.event);
93
93
  if (!entity) {
94
94
  continue;
95
95
  }
@@ -100,7 +100,7 @@ function summarizeBottomUpByEntity(
100
100
  transferSize: node.transferSize,
101
101
  mainThreadTime: Types.Timing.Milli(node.selfTime),
102
102
  entity,
103
- relatedEvents: parsedTrace.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],
103
+ relatedEvents: data.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],
104
104
  };
105
105
  summaries.push(summary);
106
106
  }
@@ -108,10 +108,9 @@ function summarizeBottomUpByEntity(
108
108
  return summaries;
109
109
  }
110
110
 
111
- function summarizeBottomUpByURL(
112
- root: TraceTree.BottomUpRootNode, parsedTrace: Handlers.Types.ParsedTrace): URLSummary[] {
111
+ function summarizeBottomUpByURL(root: TraceTree.BottomUpRootNode, data: Handlers.Types.HandlerData): URLSummary[] {
113
112
  const summaries: URLSummary[] = [];
114
- const allRequests = parsedTrace.NetworkRequests.byTime;
113
+ const allRequests = data.NetworkRequests.byTime;
115
114
 
116
115
  // Top nodes are URLs.
117
116
  const topNodes = [...root.children().values()].flat();
@@ -120,7 +119,7 @@ function summarizeBottomUpByURL(
120
119
  continue;
121
120
  }
122
121
 
123
- const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);
122
+ const entity = data.Renderer.entityMappings.entityByEvent.get(node.event);
124
123
  if (!entity) {
125
124
  continue;
126
125
  }
@@ -6,7 +6,7 @@ import type * as Handlers from '../handlers/handlers.js';
6
6
  import * as Types from '../types/types.js';
7
7
 
8
8
  export abstract class TraceFilter {
9
- abstract accept(_event: Types.Events.Event, parsedTrace?: Handlers.Types.ParsedTrace): boolean;
9
+ abstract accept(_event: Types.Events.Event, handlerData?: Handlers.Types.HandlerData): boolean;
10
10
  }
11
11
 
12
12
  export class VisibleEventsFilter extends TraceFilter {