@paulirish/trace_engine 0.0.59 → 0.0.61

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 (452) hide show
  1. package/.tmp/tsbuildinfo/analyze-trace.d.mts +2 -3
  2. package/.tmp/tsbuildinfo/analyze-trace.d.mts.map +1 -1
  3. package/.tmp/tsbuildinfo/tsconfig.tsbuildinfo +1 -1
  4. package/LICENSE +1 -1
  5. package/README.md +28 -1
  6. package/analyze-trace.mjs +5 -3
  7. package/core/platform/ArrayUtilities.d.ts +1 -0
  8. package/core/platform/ArrayUtilities.js +2 -2
  9. package/core/platform/ArrayUtilities.js.map +1 -1
  10. package/core/platform/Brand.js +1 -1
  11. package/core/platform/Brand.js.map +1 -1
  12. package/core/platform/Constructor.js +1 -1
  13. package/core/platform/Constructor.js.map +1 -1
  14. package/core/platform/DOMUtilities.js +1 -1
  15. package/core/platform/DOMUtilities.js.map +1 -1
  16. package/core/platform/DateUtilities.js +1 -1
  17. package/core/platform/DateUtilities.js.map +1 -1
  18. package/core/platform/DevToolsPath.js +1 -1
  19. package/core/platform/DevToolsPath.js.map +1 -1
  20. package/core/platform/KeyboardUtilities.js +1 -1
  21. package/core/platform/KeyboardUtilities.js.map +1 -1
  22. package/core/platform/MapUtilities.js +1 -1
  23. package/core/platform/MapUtilities.js.map +1 -1
  24. package/core/platform/MimeType.js +1 -1
  25. package/core/platform/MimeType.js.map +1 -1
  26. package/core/platform/NumberUtilities.js +1 -1
  27. package/core/platform/NumberUtilities.js.map +1 -1
  28. package/core/platform/StringUtilities.d.ts +2 -1
  29. package/core/platform/StringUtilities.js +34 -32
  30. package/core/platform/StringUtilities.js.map +1 -1
  31. package/core/platform/Timing.js +1 -1
  32. package/core/platform/Timing.js.map +1 -1
  33. package/core/platform/TypedArrayUtilities.js +1 -1
  34. package/core/platform/TypedArrayUtilities.js.map +1 -1
  35. package/core/platform/TypescriptUtilities.js +1 -1
  36. package/core/platform/TypescriptUtilities.js.map +1 -1
  37. package/core/platform/UIString.js +1 -1
  38. package/core/platform/UIString.js.map +1 -1
  39. package/core/platform/UserVisibleError.js +1 -1
  40. package/core/platform/UserVisibleError.js.map +1 -1
  41. package/core/platform/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  42. package/core/platform/platform-tsconfig.json +6 -2
  43. package/core/platform/platform.js +3 -29
  44. package/core/platform/platform.js.map +1 -1
  45. package/generated/protocol.d.ts +188 -15
  46. package/generated/protocol.js +1 -1
  47. package/locales/af.json +3 -3
  48. package/locales/am.json +4 -4
  49. package/locales/ar.json +14 -14
  50. package/locales/as.json +3 -3
  51. package/locales/az.json +4 -4
  52. package/locales/be.json +3 -3
  53. package/locales/bg.json +3 -3
  54. package/locales/bn.json +4 -4
  55. package/locales/bs.json +4 -4
  56. package/locales/ca.json +3 -3
  57. package/locales/cs.json +3 -3
  58. package/locales/cy.json +4 -4
  59. package/locales/da.json +3 -3
  60. package/locales/de.json +3 -3
  61. package/locales/el.json +3 -3
  62. package/locales/en-GB.json +3 -3
  63. package/locales/en-US.json +26 -26
  64. package/locales/en-XL.json +26 -26
  65. package/locales/es-419.json +3 -3
  66. package/locales/es.json +3 -3
  67. package/locales/et.json +3 -3
  68. package/locales/eu.json +4 -4
  69. package/locales/fa.json +5 -5
  70. package/locales/fi.json +3 -3
  71. package/locales/fil.json +3 -3
  72. package/locales/fr-CA.json +4 -4
  73. package/locales/fr.json +3 -3
  74. package/locales/gl.json +3 -3
  75. package/locales/gu.json +3 -3
  76. package/locales/he.json +26 -26
  77. package/locales/hi.json +3 -3
  78. package/locales/hr.json +7 -7
  79. package/locales/hu.json +3 -3
  80. package/locales/hy.json +3 -3
  81. package/locales/id.json +3 -3
  82. package/locales/is.json +3 -3
  83. package/locales/it.json +3 -3
  84. package/locales/ja.json +3 -3
  85. package/locales/ka.json +4 -4
  86. package/locales/kk.json +3 -3
  87. package/locales/km.json +4 -4
  88. package/locales/kn.json +5 -5
  89. package/locales/ko.json +4 -4
  90. package/locales/ky.json +3 -3
  91. package/locales/lo.json +4 -4
  92. package/locales/lt.json +3 -3
  93. package/locales/lv.json +4 -4
  94. package/locales/mk.json +3 -3
  95. package/locales/ml.json +5 -5
  96. package/locales/mn.json +3 -3
  97. package/locales/mr.json +3 -3
  98. package/locales/ms.json +3 -3
  99. package/locales/my.json +6 -6
  100. package/locales/ne.json +25 -25
  101. package/locales/nl.json +3 -3
  102. package/locales/no.json +3 -3
  103. package/locales/or.json +3 -3
  104. package/locales/pa.json +3 -3
  105. package/locales/pl.json +3 -3
  106. package/locales/pt-PT.json +3 -3
  107. package/locales/pt.json +3 -3
  108. package/locales/ro.json +4 -4
  109. package/locales/ru.json +3 -3
  110. package/locales/si.json +4 -4
  111. package/locales/sk.json +3 -3
  112. package/locales/sl.json +3 -3
  113. package/locales/sq.json +4 -4
  114. package/locales/sr-Latn.json +3 -3
  115. package/locales/sr.json +3 -3
  116. package/locales/sv.json +3 -3
  117. package/locales/sw.json +3 -3
  118. package/locales/ta.json +3 -3
  119. package/locales/te.json +4 -4
  120. package/locales/th.json +3 -3
  121. package/locales/tr.json +3 -3
  122. package/locales/uk.json +3 -3
  123. package/locales/ur.json +4 -4
  124. package/locales/uz.json +3 -3
  125. package/locales/vi.json +3 -3
  126. package/locales/zh-HK.json +3 -3
  127. package/locales/zh-TW.json +4 -4
  128. package/locales/zh.json +3 -3
  129. package/locales/zu.json +3 -3
  130. package/models/cpu_profile/CPUProfileDataModel.d.ts +1 -0
  131. package/models/cpu_profile/CPUProfileDataModel.js +1 -1
  132. package/models/cpu_profile/CPUProfileDataModel.js.map +1 -1
  133. package/models/cpu_profile/ProfileTreeModel.d.ts +1 -1
  134. package/models/cpu_profile/ProfileTreeModel.js +1 -1
  135. package/models/cpu_profile/ProfileTreeModel.js.map +1 -1
  136. package/models/cpu_profile/cpu_profile-tsconfig.json +6 -2
  137. package/models/cpu_profile/cpu_profile.js +1 -1
  138. package/models/cpu_profile/cpu_profile.js.map +1 -1
  139. package/models/cpu_profile/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  140. package/models/trace/EntityMapper.d.ts +33 -0
  141. package/models/trace/EntityMapper.js +123 -0
  142. package/models/trace/EntityMapper.js.map +1 -0
  143. package/models/trace/EventsSerializer.d.ts +11 -0
  144. package/models/trace/EventsSerializer.js +82 -0
  145. package/models/trace/EventsSerializer.js.map +1 -0
  146. package/models/trace/LanternComputationData.d.ts +3 -3
  147. package/models/trace/LanternComputationData.js +11 -10
  148. package/models/trace/LanternComputationData.js.map +1 -1
  149. package/models/trace/ModelImpl.d.ts +7 -14
  150. package/models/trace/ModelImpl.js +25 -52
  151. package/models/trace/ModelImpl.js.map +1 -1
  152. package/models/trace/Name.d.ts +12 -0
  153. package/models/trace/Name.js +115 -0
  154. package/models/trace/Name.js.map +1 -0
  155. package/models/trace/Processor.d.ts +1 -1
  156. package/models/trace/Processor.js +42 -61
  157. package/models/trace/Processor.js.map +1 -1
  158. package/models/trace/Styles.d.ts +50 -0
  159. package/models/trace/Styles.js +816 -0
  160. package/models/trace/Styles.js.map +1 -0
  161. package/models/trace/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  162. package/models/trace/extras/FilmStrip.d.ts +1 -1
  163. package/models/trace/extras/FilmStrip.js +7 -7
  164. package/models/trace/extras/FilmStrip.js.map +1 -1
  165. package/models/trace/extras/MainThreadActivity.js +1 -1
  166. package/models/trace/extras/MainThreadActivity.js.map +1 -1
  167. package/models/trace/extras/ScriptDuplication.js +1 -1
  168. package/models/trace/extras/ScriptDuplication.js.map +1 -1
  169. package/models/trace/extras/StackTraceForEvent.d.ts +2 -2
  170. package/models/trace/extras/StackTraceForEvent.js +21 -21
  171. package/models/trace/extras/StackTraceForEvent.js.map +1 -1
  172. package/models/trace/extras/ThirdParties.d.ts +2 -2
  173. package/models/trace/extras/ThirdParties.js +17 -17
  174. package/models/trace/extras/ThirdParties.js.map +1 -1
  175. package/models/trace/extras/TraceFilter.d.ts +1 -1
  176. package/models/trace/extras/TraceFilter.js +1 -1
  177. package/models/trace/extras/TraceFilter.js.map +1 -1
  178. package/models/trace/extras/TraceTree.d.ts +1 -0
  179. package/models/trace/extras/TraceTree.js +2 -2
  180. package/models/trace/extras/TraceTree.js.map +1 -1
  181. package/models/trace/extras/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  182. package/models/trace/extras/extras-tsconfig.json +6 -2
  183. package/models/trace/extras/extras.d.ts +0 -3978
  184. package/models/trace/extras/extras.js +0 -3978
  185. package/models/trace/extras/extras.js.map +1 -1
  186. package/models/trace/handlers/AnimationFramesHandler.js +11 -11
  187. package/models/trace/handlers/AnimationFramesHandler.js.map +1 -1
  188. package/models/trace/handlers/AnimationHandler.js +5 -5
  189. package/models/trace/handlers/AnimationHandler.js.map +1 -1
  190. package/models/trace/handlers/AsyncJSCallsHandler.d.ts +3 -3
  191. package/models/trace/handlers/AsyncJSCallsHandler.js +9 -9
  192. package/models/trace/handlers/AsyncJSCallsHandler.js.map +1 -1
  193. package/models/trace/handlers/AuctionWorkletsHandler.js +12 -12
  194. package/models/trace/handlers/AuctionWorkletsHandler.js.map +1 -1
  195. package/models/trace/handlers/DOMStatsHandler.js +3 -3
  196. package/models/trace/handlers/DOMStatsHandler.js.map +1 -1
  197. package/models/trace/handlers/ExtensionTraceDataHandler.d.ts +15 -2
  198. package/models/trace/handlers/ExtensionTraceDataHandler.js +53 -41
  199. package/models/trace/handlers/ExtensionTraceDataHandler.js.map +1 -1
  200. package/models/trace/handlers/FlowsHandler.js +11 -11
  201. package/models/trace/handlers/FlowsHandler.js.map +1 -1
  202. package/models/trace/handlers/FramesHandler.d.ts +7 -0
  203. package/models/trace/handlers/FramesHandler.js +12 -10
  204. package/models/trace/handlers/FramesHandler.js.map +1 -1
  205. package/models/trace/handlers/GPUHandler.js +3 -3
  206. package/models/trace/handlers/GPUHandler.js.map +1 -1
  207. package/models/trace/handlers/ImagePaintingHandler.js +13 -13
  208. package/models/trace/handlers/ImagePaintingHandler.js.map +1 -1
  209. package/models/trace/handlers/InitiatorsHandler.js +32 -41
  210. package/models/trace/handlers/InitiatorsHandler.js.map +1 -1
  211. package/models/trace/handlers/InvalidationsHandler.js +63 -44
  212. package/models/trace/handlers/InvalidationsHandler.js.map +1 -1
  213. package/models/trace/handlers/LargestImagePaintHandler.js +5 -4
  214. package/models/trace/handlers/LargestImagePaintHandler.js.map +1 -1
  215. package/models/trace/handlers/LargestTextPaintHandler.js +3 -3
  216. package/models/trace/handlers/LargestTextPaintHandler.js.map +1 -1
  217. package/models/trace/handlers/LayerTreeHandler.js +11 -11
  218. package/models/trace/handlers/LayerTreeHandler.js.map +1 -1
  219. package/models/trace/handlers/LayoutShiftsHandler.d.ts +17 -4
  220. package/models/trace/handlers/LayoutShiftsHandler.js +41 -38
  221. package/models/trace/handlers/LayoutShiftsHandler.js.map +1 -1
  222. package/models/trace/handlers/MemoryHandler.js +3 -3
  223. package/models/trace/handlers/MemoryHandler.js.map +1 -1
  224. package/models/trace/handlers/MetaHandler.d.ts +16 -0
  225. package/models/trace/handlers/MetaHandler.js +29 -28
  226. package/models/trace/handlers/MetaHandler.js.map +1 -1
  227. package/models/trace/handlers/ModelHandlers.js +1 -1
  228. package/models/trace/handlers/ModelHandlers.js.map +1 -1
  229. package/models/trace/handlers/NetworkRequestsHandler.d.ts +10 -0
  230. package/models/trace/handlers/NetworkRequestsHandler.js +44 -25
  231. package/models/trace/handlers/NetworkRequestsHandler.js.map +1 -1
  232. package/models/trace/handlers/PageFramesHandler.js +3 -3
  233. package/models/trace/handlers/PageFramesHandler.js.map +1 -1
  234. package/models/trace/handlers/PageLoadMetricsHandler.js +5 -5
  235. package/models/trace/handlers/PageLoadMetricsHandler.js.map +1 -1
  236. package/models/trace/handlers/RendererHandler.d.ts +1 -1
  237. package/models/trace/handlers/RendererHandler.js +22 -22
  238. package/models/trace/handlers/RendererHandler.js.map +1 -1
  239. package/models/trace/handlers/SamplesHandler.d.ts +2 -2
  240. package/models/trace/handlers/SamplesHandler.js +7 -9
  241. package/models/trace/handlers/SamplesHandler.js.map +1 -1
  242. package/models/trace/handlers/ScreenshotsHandler.js +9 -10
  243. package/models/trace/handlers/ScreenshotsHandler.js.map +1 -1
  244. package/models/trace/handlers/ScriptsHandler.js +9 -8
  245. package/models/trace/handlers/ScriptsHandler.js.map +1 -1
  246. package/models/trace/handlers/SelectorStatsHandler.d.ts +2 -2
  247. package/models/trace/handlers/SelectorStatsHandler.js +13 -13
  248. package/models/trace/handlers/SelectorStatsHandler.js.map +1 -1
  249. package/models/trace/handlers/Threads.d.ts +2 -2
  250. package/models/trace/handlers/Threads.js +9 -9
  251. package/models/trace/handlers/Threads.js.map +1 -1
  252. package/models/trace/handlers/UserInteractionsHandler.d.ts +10 -3
  253. package/models/trace/handlers/UserInteractionsHandler.js +104 -84
  254. package/models/trace/handlers/UserInteractionsHandler.js.map +1 -1
  255. package/models/trace/handlers/UserTimingsHandler.d.ts +1 -1
  256. package/models/trace/handlers/UserTimingsHandler.js +16 -17
  257. package/models/trace/handlers/UserTimingsHandler.js.map +1 -1
  258. package/models/trace/handlers/WarningsHandler.js +14 -14
  259. package/models/trace/handlers/WarningsHandler.js.map +1 -1
  260. package/models/trace/handlers/WorkersHandler.js +7 -7
  261. package/models/trace/handlers/WorkersHandler.js.map +1 -1
  262. package/models/trace/handlers/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  263. package/models/trace/handlers/handlers-tsconfig.json +6 -2
  264. package/models/trace/handlers/handlers.js +1 -1
  265. package/models/trace/handlers/handlers.js.map +1 -1
  266. package/models/trace/handlers/helpers.d.ts +3 -2
  267. package/models/trace/handlers/helpers.js +10 -10
  268. package/models/trace/handlers/helpers.js.map +1 -1
  269. package/models/trace/handlers/types.d.ts +25 -2
  270. package/models/trace/handlers/types.js.map +1 -1
  271. package/models/trace/helpers/Extensions.js +8 -8
  272. package/models/trace/helpers/Extensions.js.map +1 -1
  273. package/models/trace/helpers/Network.js.map +1 -1
  274. package/models/trace/helpers/SamplesIntegrator.js +11 -9
  275. package/models/trace/helpers/SamplesIntegrator.js.map +1 -1
  276. package/models/trace/helpers/SyntheticEvents.js +1 -1
  277. package/models/trace/helpers/SyntheticEvents.js.map +1 -1
  278. package/models/trace/helpers/Timing.d.ts +4 -0
  279. package/models/trace/helpers/Timing.js +6 -4
  280. package/models/trace/helpers/Timing.js.map +1 -1
  281. package/models/trace/helpers/Trace.d.ts +19 -20
  282. package/models/trace/helpers/Trace.js +148 -60
  283. package/models/trace/helpers/Trace.js.map +1 -1
  284. package/models/trace/helpers/TreeHelpers.js +1 -1
  285. package/models/trace/helpers/TreeHelpers.js.map +1 -1
  286. package/models/trace/helpers/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  287. package/models/trace/helpers/helpers-tsconfig.json +6 -2
  288. package/models/trace/helpers/helpers.js +1 -1
  289. package/models/trace/helpers/helpers.js.map +1 -1
  290. package/models/trace/insights/CLSCulprits.d.ts +3 -3
  291. package/models/trace/insights/CLSCulprits.js +16 -15
  292. package/models/trace/insights/CLSCulprits.js.map +1 -1
  293. package/models/trace/insights/Cache.d.ts +3 -2
  294. package/models/trace/insights/Cache.js +10 -6
  295. package/models/trace/insights/Cache.js.map +1 -1
  296. package/models/trace/insights/Common.d.ts +8 -1
  297. package/models/trace/insights/Common.js +16 -1
  298. package/models/trace/insights/Common.js.map +1 -1
  299. package/models/trace/insights/DOMSize.d.ts +4 -3
  300. package/models/trace/insights/DOMSize.js +12 -8
  301. package/models/trace/insights/DOMSize.js.map +1 -1
  302. package/models/trace/insights/DocumentLatency.d.ts +3 -3
  303. package/models/trace/insights/DocumentLatency.js +20 -18
  304. package/models/trace/insights/DocumentLatency.js.map +1 -1
  305. package/models/trace/insights/DuplicatedJavaScript.d.ts +3 -3
  306. package/models/trace/insights/DuplicatedJavaScript.js +7 -6
  307. package/models/trace/insights/DuplicatedJavaScript.js.map +1 -1
  308. package/models/trace/insights/FontDisplay.d.ts +3 -2
  309. package/models/trace/insights/FontDisplay.js +9 -5
  310. package/models/trace/insights/FontDisplay.js.map +1 -1
  311. package/models/trace/insights/ForcedReflow.d.ts +3 -2
  312. package/models/trace/insights/ForcedReflow.js +8 -4
  313. package/models/trace/insights/ForcedReflow.js.map +1 -1
  314. package/models/trace/insights/INPBreakdown.d.ts +4 -4
  315. package/models/trace/insights/INPBreakdown.js +18 -6
  316. package/models/trace/insights/INPBreakdown.js.map +1 -1
  317. package/models/trace/insights/ImageDelivery.d.ts +3 -3
  318. package/models/trace/insights/ImageDelivery.js +15 -14
  319. package/models/trace/insights/ImageDelivery.js.map +1 -1
  320. package/models/trace/insights/LCPBreakdown.d.ts +4 -3
  321. package/models/trace/insights/LCPBreakdown.js +19 -8
  322. package/models/trace/insights/LCPBreakdown.js.map +1 -1
  323. package/models/trace/insights/LCPDiscovery.d.ts +3 -3
  324. package/models/trace/insights/LCPDiscovery.js +8 -7
  325. package/models/trace/insights/LCPDiscovery.js.map +1 -1
  326. package/models/trace/insights/LegacyJavaScript.d.ts +2 -2
  327. package/models/trace/insights/LegacyJavaScript.js +7 -5
  328. package/models/trace/insights/LegacyJavaScript.js.map +1 -1
  329. package/models/trace/insights/Models.js +1 -1
  330. package/models/trace/insights/Models.js.map +1 -1
  331. package/models/trace/insights/ModernHTTP.d.ts +3 -3
  332. package/models/trace/insights/ModernHTTP.js +8 -7
  333. package/models/trace/insights/ModernHTTP.js.map +1 -1
  334. package/models/trace/insights/NetworkDependencyTree.d.ts +7 -4
  335. package/models/trace/insights/NetworkDependencyTree.js +21 -17
  336. package/models/trace/insights/NetworkDependencyTree.js.map +1 -1
  337. package/models/trace/insights/RenderBlocking.d.ts +2 -2
  338. package/models/trace/insights/RenderBlocking.js +13 -12
  339. package/models/trace/insights/RenderBlocking.js.map +1 -1
  340. package/models/trace/insights/SlowCSSSelector.d.ts +4 -3
  341. package/models/trace/insights/SlowCSSSelector.js +11 -7
  342. package/models/trace/insights/SlowCSSSelector.js.map +1 -1
  343. package/models/trace/insights/Statistics.js +1 -1
  344. package/models/trace/insights/Statistics.js.map +1 -1
  345. package/models/trace/insights/ThirdParties.d.ts +2 -1
  346. package/models/trace/insights/ThirdParties.js +10 -6
  347. package/models/trace/insights/ThirdParties.js.map +1 -1
  348. package/models/trace/insights/Viewport.d.ts +3 -2
  349. package/models/trace/insights/Viewport.js +10 -6
  350. package/models/trace/insights/Viewport.js.map +1 -1
  351. package/models/trace/insights/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  352. package/models/trace/insights/insights-tsconfig.json +6 -2
  353. package/models/trace/insights/insights.d.ts +2 -0
  354. package/models/trace/insights/insights.js +3 -1
  355. package/models/trace/insights/insights.js.map +1 -1
  356. package/models/trace/insights/types.d.ts +6 -2
  357. package/models/trace/insights/types.js +2 -1
  358. package/models/trace/insights/types.js.map +1 -1
  359. package/models/trace/lantern/core/LanternError.js +1 -1
  360. package/models/trace/lantern/core/LanternError.js.map +1 -1
  361. package/models/trace/lantern/core/NetworkAnalyzer.js +1 -1
  362. package/models/trace/lantern/core/NetworkAnalyzer.js.map +1 -1
  363. package/models/trace/lantern/core/core-tsconfig.json +6 -2
  364. package/models/trace/lantern/core/core.js +1 -1
  365. package/models/trace/lantern/core/core.js.map +1 -1
  366. package/models/trace/lantern/core/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  367. package/models/trace/lantern/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  368. package/models/trace/lantern/graph/BaseNode.js +1 -1
  369. package/models/trace/lantern/graph/BaseNode.js.map +1 -1
  370. package/models/trace/lantern/graph/CPUNode.js +1 -1
  371. package/models/trace/lantern/graph/CPUNode.js.map +1 -1
  372. package/models/trace/lantern/graph/NetworkNode.js +1 -1
  373. package/models/trace/lantern/graph/NetworkNode.js.map +1 -1
  374. package/models/trace/lantern/graph/PageDependencyGraph.js +1 -1
  375. package/models/trace/lantern/graph/PageDependencyGraph.js.map +1 -1
  376. package/models/trace/lantern/graph/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  377. package/models/trace/lantern/graph/graph-tsconfig.json +6 -2
  378. package/models/trace/lantern/graph/graph.js +1 -1
  379. package/models/trace/lantern/graph/graph.js.map +1 -1
  380. package/models/trace/lantern/lantern-tsconfig.json +6 -2
  381. package/models/trace/lantern/lantern.js +1 -1
  382. package/models/trace/lantern/lantern.js.map +1 -1
  383. package/models/trace/lantern/metrics/FirstContentfulPaint.js +1 -1
  384. package/models/trace/lantern/metrics/FirstContentfulPaint.js.map +1 -1
  385. package/models/trace/lantern/metrics/Interactive.js +1 -1
  386. package/models/trace/lantern/metrics/Interactive.js.map +1 -1
  387. package/models/trace/lantern/metrics/LargestContentfulPaint.js +1 -1
  388. package/models/trace/lantern/metrics/LargestContentfulPaint.js.map +1 -1
  389. package/models/trace/lantern/metrics/MaxPotentialFID.js +1 -1
  390. package/models/trace/lantern/metrics/MaxPotentialFID.js.map +1 -1
  391. package/models/trace/lantern/metrics/Metric.js +1 -1
  392. package/models/trace/lantern/metrics/Metric.js.map +1 -1
  393. package/models/trace/lantern/metrics/SpeedIndex.js +1 -1
  394. package/models/trace/lantern/metrics/SpeedIndex.js.map +1 -1
  395. package/models/trace/lantern/metrics/TBTUtils.js +1 -1
  396. package/models/trace/lantern/metrics/TBTUtils.js.map +1 -1
  397. package/models/trace/lantern/metrics/TotalBlockingTime.js +1 -1
  398. package/models/trace/lantern/metrics/TotalBlockingTime.js.map +1 -1
  399. package/models/trace/lantern/metrics/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  400. package/models/trace/lantern/metrics/metrics-tsconfig.json +6 -2
  401. package/models/trace/lantern/metrics/metrics.js +1 -1
  402. package/models/trace/lantern/metrics/metrics.js.map +1 -1
  403. package/models/trace/lantern/simulation/ConnectionPool.js +1 -1
  404. package/models/trace/lantern/simulation/ConnectionPool.js.map +1 -1
  405. package/models/trace/lantern/simulation/Constants.js +1 -1
  406. package/models/trace/lantern/simulation/Constants.js.map +1 -1
  407. package/models/trace/lantern/simulation/DNSCache.js +1 -1
  408. package/models/trace/lantern/simulation/DNSCache.js.map +1 -1
  409. package/models/trace/lantern/simulation/SimulationTimingMap.js +1 -1
  410. package/models/trace/lantern/simulation/SimulationTimingMap.js.map +1 -1
  411. package/models/trace/lantern/simulation/Simulator.js +1 -1
  412. package/models/trace/lantern/simulation/Simulator.js.map +1 -1
  413. package/models/trace/lantern/simulation/TCPConnection.js +1 -1
  414. package/models/trace/lantern/simulation/TCPConnection.js.map +1 -1
  415. package/models/trace/lantern/simulation/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  416. package/models/trace/lantern/simulation/simulation-tsconfig.json +6 -2
  417. package/models/trace/lantern/simulation/simulation.js +1 -1
  418. package/models/trace/lantern/simulation/simulation.js.map +1 -1
  419. package/models/trace/lantern/types/Lantern.js +1 -1
  420. package/models/trace/lantern/types/Lantern.js.map +1 -1
  421. package/models/trace/lantern/types/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  422. package/models/trace/lantern/types/types-tsconfig.json +6 -2
  423. package/models/trace/lantern/types/types.js +1 -1
  424. package/models/trace/lantern/types/types.js.map +1 -1
  425. package/models/trace/trace-tsconfig.json +10 -2
  426. package/models/trace/trace.d.ts +5 -1
  427. package/models/trace/trace.js +6 -2
  428. package/models/trace/trace.js.map +1 -1
  429. package/models/trace/types/Configuration.d.ts +11 -0
  430. package/models/trace/types/Configuration.js +1 -1
  431. package/models/trace/types/Configuration.js.map +1 -1
  432. package/models/trace/types/Extensions.d.ts +25 -13
  433. package/models/trace/types/Extensions.js +6 -3
  434. package/models/trace/types/Extensions.js.map +1 -1
  435. package/models/trace/types/File.d.ts +12 -0
  436. package/models/trace/types/File.js +1 -1
  437. package/models/trace/types/File.js.map +1 -1
  438. package/models/trace/types/Overlays.d.ts +1 -2
  439. package/models/trace/types/Overlays.js +1 -1
  440. package/models/trace/types/Overlays.js.map +1 -1
  441. package/models/trace/types/Timing.d.ts +1 -0
  442. package/models/trace/types/Timing.js +1 -1
  443. package/models/trace/types/Timing.js.map +1 -1
  444. package/models/trace/types/TraceEvents.d.ts +75 -56
  445. package/models/trace/types/TraceEvents.js +42 -29
  446. package/models/trace/types/TraceEvents.js.map +1 -1
  447. package/models/trace/types/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  448. package/models/trace/types/types-tsconfig.json +6 -2
  449. package/models/trace/types/types.js +1 -1
  450. package/models/trace/types/types.js.map +1 -1
  451. package/package.json +1 -1
  452. package/test/test-trace-engine.mjs +4 -4
@@ -1,4 +1,4 @@
1
- // Copyright 2024 The Chromium Authors. All rights reserved.
1
+ // Copyright 2024 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
  import * as Handlers from '../handlers/handlers.js';
@@ -11,9 +11,9 @@ import * as TraceTree from './TraceTree.js';
11
11
  * Returns Main frame main thread events.
12
12
  * These events are inline with the ones used by selectedEvents() of TimelineTreeViews
13
13
  */
14
- function collectMainThreadActivity(parsedTrace) {
14
+ function collectMainThreadActivity(data) {
15
15
  // TODO: Note b/402658800 could be an issue here.
16
- const mainFrameMainThread = parsedTrace.Renderer.processes.values()
16
+ const mainFrameMainThread = data.Renderer.processes.values()
17
17
  .find(p => {
18
18
  const url = p.url ?? '';
19
19
  // Frame url checked a la CompatibilityTracksAppenders's addThreadAppenders
@@ -26,29 +26,29 @@ function collectMainThreadActivity(parsedTrace) {
26
26
  }
27
27
  return mainFrameMainThread.entries;
28
28
  }
29
- export function summarizeByThirdParty(parsedTrace, traceBounds) {
30
- const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);
29
+ export function summarizeByThirdParty(data, traceBounds) {
30
+ const mainThreadEvents = collectMainThreadActivity(data).sort(Helpers.Trace.eventTimeComparator);
31
31
  const groupingFunction = (event) => {
32
- const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(event);
32
+ const entity = data.Renderer.entityMappings.entityByEvent.get(event);
33
33
  return entity?.name ?? '';
34
34
  };
35
35
  const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);
36
- const summaries = summarizeBottomUpByEntity(node, parsedTrace);
36
+ const summaries = summarizeBottomUpByEntity(node, data);
37
37
  return summaries;
38
38
  }
39
39
  /**
40
40
  * Used only by Lighthouse.
41
41
  */
42
- export function summarizeByURL(parsedTrace, traceBounds) {
43
- const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);
42
+ export function summarizeByURL(data, traceBounds) {
43
+ const mainThreadEvents = collectMainThreadActivity(data).sort(Helpers.Trace.eventTimeComparator);
44
44
  const groupingFunction = (event) => {
45
- return Handlers.Helpers.getNonResolvedURL(event, parsedTrace) ?? '';
45
+ return Handlers.Helpers.getNonResolvedURL(event, data) ?? '';
46
46
  };
47
47
  const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);
48
- const summaries = summarizeBottomUpByURL(node, parsedTrace);
48
+ const summaries = summarizeBottomUpByURL(node, data);
49
49
  return summaries;
50
50
  }
51
- function summarizeBottomUpByEntity(root, parsedTrace) {
51
+ function summarizeBottomUpByEntity(root, data) {
52
52
  const summaries = [];
53
53
  // Top nodes are the 3P entities.
54
54
  const topNodes = [...root.children().values()].flat();
@@ -56,7 +56,7 @@ function summarizeBottomUpByEntity(root, parsedTrace) {
56
56
  if (node.id === '') {
57
57
  continue;
58
58
  }
59
- const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);
59
+ const entity = data.Renderer.entityMappings.entityByEvent.get(node.event);
60
60
  if (!entity) {
61
61
  continue;
62
62
  }
@@ -66,22 +66,22 @@ function summarizeBottomUpByEntity(root, parsedTrace) {
66
66
  transferSize: node.transferSize,
67
67
  mainThreadTime: Types.Timing.Milli(node.selfTime),
68
68
  entity,
69
- relatedEvents: parsedTrace.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],
69
+ relatedEvents: data.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],
70
70
  };
71
71
  summaries.push(summary);
72
72
  }
73
73
  return summaries;
74
74
  }
75
- function summarizeBottomUpByURL(root, parsedTrace) {
75
+ function summarizeBottomUpByURL(root, data) {
76
76
  const summaries = [];
77
- const allRequests = parsedTrace.NetworkRequests.byTime;
77
+ const allRequests = data.NetworkRequests.byTime;
78
78
  // Top nodes are URLs.
79
79
  const topNodes = [...root.children().values()].flat();
80
80
  for (const node of topNodes) {
81
81
  if (node.id === '' || typeof node.id !== 'string') {
82
82
  continue;
83
83
  }
84
- const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);
84
+ const entity = data.Renderer.entityMappings.entityByEvent.get(node.event);
85
85
  if (!entity) {
86
86
  continue;
87
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ThirdParties.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/extras/ThirdParties.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as ThirdPartyWeb from '../../../third_party/third-party-web/third-party-web.js';\nimport * as Handlers from '../handlers/handlers.js';\nimport * as Helpers from '../helpers/helpers.js';\nimport * as Types from '../types/types.js';\n\nimport * as TraceFilter from './TraceFilter.js';\nimport * as TraceTree from './TraceTree.js';\n\nexport type Entity = typeof ThirdPartyWeb.ThirdPartyWeb.entities[number];\n\ninterface BaseSummary {\n entity: Entity;\n transferSize: number;\n mainThreadTime: Types.Timing.Milli;\n}\n\nexport interface EntitySummary extends BaseSummary {\n relatedEvents: Types.Events.Event[];\n}\n\nexport interface URLSummary extends BaseSummary {\n url: string;\n request?: Types.Events.SyntheticNetworkRequest;\n}\n\n/**\n *\n * Returns Main frame main thread events.\n * These events are inline with the ones used by selectedEvents() of TimelineTreeViews\n */\nfunction collectMainThreadActivity(parsedTrace: Handlers.Types.ParsedTrace): Types.Events.Event[] {\n // TODO: Note b/402658800 could be an issue here.\n const mainFrameMainThread = parsedTrace.Renderer.processes.values()\n .find(p => {\n const url = p.url ?? '';\n // Frame url checked a la CompatibilityTracksAppenders's addThreadAppenders\n return p.isOnMainFrame && !url.startsWith('about:') && !url.startsWith('chrome:');\n })\n ?.threads.values()\n .find(t => t.name === 'CrRendererMain');\n\n if (!mainFrameMainThread) {\n return [];\n }\n\n return mainFrameMainThread.entries;\n}\n\nexport function summarizeByThirdParty(\n parsedTrace: Handlers.Types.ParsedTrace, traceBounds: Types.Timing.TraceWindowMicro): EntitySummary[] {\n const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);\n const groupingFunction = (event: Types.Events.Event): string => {\n const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(event);\n return entity?.name ?? '';\n };\n const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);\n const summaries = summarizeBottomUpByEntity(node, parsedTrace);\n\n return summaries;\n}\n\n/**\n * Used only by Lighthouse.\n */\nexport function summarizeByURL(\n parsedTrace: Handlers.Types.ParsedTrace, traceBounds: Types.Timing.TraceWindowMicro): URLSummary[] {\n const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);\n const groupingFunction = (event: Types.Events.Event): string => {\n return Handlers.Helpers.getNonResolvedURL(event, parsedTrace) ?? '';\n };\n const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);\n const summaries = summarizeBottomUpByURL(node, parsedTrace);\n\n return summaries;\n}\n\nfunction summarizeBottomUpByEntity(\n root: TraceTree.BottomUpRootNode, parsedTrace: Handlers.Types.ParsedTrace): EntitySummary[] {\n const summaries: EntitySummary[] = [];\n\n // Top nodes are the 3P entities.\n const topNodes = [...root.children().values()].flat();\n for (const node of topNodes) {\n if (node.id === '') {\n continue;\n }\n\n const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);\n if (!entity) {\n continue;\n }\n\n // Lets use the mapper events as our source of events, since we use the main thread to construct\n // the bottom up tree. The mapper will give us all related events.\n const summary: EntitySummary = {\n transferSize: node.transferSize,\n mainThreadTime: Types.Timing.Milli(node.selfTime),\n entity,\n relatedEvents: parsedTrace.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],\n };\n summaries.push(summary);\n }\n\n return summaries;\n}\n\nfunction summarizeBottomUpByURL(\n root: TraceTree.BottomUpRootNode, parsedTrace: Handlers.Types.ParsedTrace): URLSummary[] {\n const summaries: URLSummary[] = [];\n const allRequests = parsedTrace.NetworkRequests.byTime;\n\n // Top nodes are URLs.\n const topNodes = [...root.children().values()].flat();\n for (const node of topNodes) {\n if (node.id === '' || typeof node.id !== 'string') {\n continue;\n }\n\n const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);\n if (!entity) {\n continue;\n }\n\n const url = node.id;\n const request = allRequests.find(r => r.args.data.url === url);\n\n const summary: URLSummary = {\n request,\n url,\n entity,\n transferSize: node.transferSize,\n mainThreadTime: Types.Timing.Milli(node.selfTime),\n };\n summaries.push(summary);\n }\n\n return summaries;\n}\n\nfunction getBottomUpTree(\n mainThreadEvents: Types.Events.Event[], tracebounds: Types.Timing.TraceWindowMicro,\n groupingFunction: ((arg0: Types.Events.Event) => string)|null): TraceTree.BottomUpRootNode {\n // Use the same filtering as front_end/panels/timeline/TimelineTreeView.ts.\n const visibleEvents = Helpers.Trace.VISIBLE_TRACE_EVENT_TYPES.values().toArray();\n const filter =\n new TraceFilter.VisibleEventsFilter(visibleEvents.concat([Types.Events.Name.SYNTHETIC_NETWORK_REQUEST]));\n\n // The bottom up root node handles all the \"in Tracebounds\" checks we need for the insight.\n const startTime = Helpers.Timing.microToMilli(tracebounds.min);\n const endTime = Helpers.Timing.microToMilli(tracebounds.max);\n return new TraceTree.BottomUpRootNode(mainThreadEvents, {\n textFilter: new TraceFilter.ExclusiveNameFilter([]),\n filters: [filter],\n startTime,\n endTime,\n eventGroupIdCallback: groupingFunction,\n calculateTransferSize: true,\n // Ensure we group by 3P alongside eventID for correct 3P grouping.\n forceGroupIdCallback: true,\n });\n}\n"]}
1
+ {"version":3,"file":"ThirdParties.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/extras/ThirdParties.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 The Chromium Authors\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as ThirdPartyWeb from '../../../third_party/third-party-web/third-party-web.js';\nimport * as Handlers from '../handlers/handlers.js';\nimport * as Helpers from '../helpers/helpers.js';\nimport * as Types from '../types/types.js';\n\nimport * as TraceFilter from './TraceFilter.js';\nimport * as TraceTree from './TraceTree.js';\n\nexport type Entity = typeof ThirdPartyWeb.ThirdPartyWeb.entities[number];\n\ninterface BaseSummary {\n entity: Entity;\n transferSize: number;\n mainThreadTime: Types.Timing.Milli;\n}\n\nexport interface EntitySummary extends BaseSummary {\n relatedEvents: Types.Events.Event[];\n}\n\nexport interface URLSummary extends BaseSummary {\n url: string;\n request?: Types.Events.SyntheticNetworkRequest;\n}\n\n/**\n *\n * Returns Main frame main thread events.\n * These events are inline with the ones used by selectedEvents() of TimelineTreeViews\n */\nfunction collectMainThreadActivity(data: Handlers.Types.HandlerData): Types.Events.Event[] {\n // TODO: Note b/402658800 could be an issue here.\n const mainFrameMainThread = data.Renderer.processes.values()\n .find(p => {\n const url = p.url ?? '';\n // Frame url checked a la CompatibilityTracksAppenders's addThreadAppenders\n return p.isOnMainFrame && !url.startsWith('about:') && !url.startsWith('chrome:');\n })\n ?.threads.values()\n .find(t => t.name === 'CrRendererMain');\n\n if (!mainFrameMainThread) {\n return [];\n }\n\n return mainFrameMainThread.entries;\n}\n\nexport function summarizeByThirdParty(\n data: Handlers.Types.HandlerData, traceBounds: Types.Timing.TraceWindowMicro): EntitySummary[] {\n const mainThreadEvents = collectMainThreadActivity(data).sort(Helpers.Trace.eventTimeComparator);\n const groupingFunction = (event: Types.Events.Event): string => {\n const entity = data.Renderer.entityMappings.entityByEvent.get(event);\n return entity?.name ?? '';\n };\n const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);\n const summaries = summarizeBottomUpByEntity(node, data);\n\n return summaries;\n}\n\n/**\n * Used only by Lighthouse.\n */\nexport function summarizeByURL(\n data: Handlers.Types.HandlerData, traceBounds: Types.Timing.TraceWindowMicro): URLSummary[] {\n const mainThreadEvents = collectMainThreadActivity(data).sort(Helpers.Trace.eventTimeComparator);\n const groupingFunction = (event: Types.Events.Event): string => {\n return Handlers.Helpers.getNonResolvedURL(event, data) ?? '';\n };\n const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);\n const summaries = summarizeBottomUpByURL(node, data);\n\n return summaries;\n}\n\nfunction summarizeBottomUpByEntity(\n root: TraceTree.BottomUpRootNode, data: Handlers.Types.HandlerData): EntitySummary[] {\n const summaries: EntitySummary[] = [];\n\n // Top nodes are the 3P entities.\n const topNodes = [...root.children().values()].flat();\n for (const node of topNodes) {\n if (node.id === '') {\n continue;\n }\n\n const entity = data.Renderer.entityMappings.entityByEvent.get(node.event);\n if (!entity) {\n continue;\n }\n\n // Lets use the mapper events as our source of events, since we use the main thread to construct\n // the bottom up tree. The mapper will give us all related events.\n const summary: EntitySummary = {\n transferSize: node.transferSize,\n mainThreadTime: Types.Timing.Milli(node.selfTime),\n entity,\n relatedEvents: data.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],\n };\n summaries.push(summary);\n }\n\n return summaries;\n}\n\nfunction summarizeBottomUpByURL(root: TraceTree.BottomUpRootNode, data: Handlers.Types.HandlerData): URLSummary[] {\n const summaries: URLSummary[] = [];\n const allRequests = data.NetworkRequests.byTime;\n\n // Top nodes are URLs.\n const topNodes = [...root.children().values()].flat();\n for (const node of topNodes) {\n if (node.id === '' || typeof node.id !== 'string') {\n continue;\n }\n\n const entity = data.Renderer.entityMappings.entityByEvent.get(node.event);\n if (!entity) {\n continue;\n }\n\n const url = node.id;\n const request = allRequests.find(r => r.args.data.url === url);\n\n const summary: URLSummary = {\n request,\n url,\n entity,\n transferSize: node.transferSize,\n mainThreadTime: Types.Timing.Milli(node.selfTime),\n };\n summaries.push(summary);\n }\n\n return summaries;\n}\n\nfunction getBottomUpTree(\n mainThreadEvents: Types.Events.Event[], tracebounds: Types.Timing.TraceWindowMicro,\n groupingFunction: ((arg0: Types.Events.Event) => string)|null): TraceTree.BottomUpRootNode {\n // Use the same filtering as front_end/panels/timeline/TimelineTreeView.ts.\n const visibleEvents = Helpers.Trace.VISIBLE_TRACE_EVENT_TYPES.values().toArray();\n const filter =\n new TraceFilter.VisibleEventsFilter(visibleEvents.concat([Types.Events.Name.SYNTHETIC_NETWORK_REQUEST]));\n\n // The bottom up root node handles all the \"in Tracebounds\" checks we need for the insight.\n const startTime = Helpers.Timing.microToMilli(tracebounds.min);\n const endTime = Helpers.Timing.microToMilli(tracebounds.max);\n return new TraceTree.BottomUpRootNode(mainThreadEvents, {\n textFilter: new TraceFilter.ExclusiveNameFilter([]),\n filters: [filter],\n startTime,\n endTime,\n eventGroupIdCallback: groupingFunction,\n calculateTransferSize: true,\n // Ensure we group by 3P alongside eventID for correct 3P grouping.\n forceGroupIdCallback: true,\n });\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type * as Handlers from '../handlers/handlers.js';
2
2
  import * as Types from '../types/types.js';
3
3
  export declare abstract class TraceFilter {
4
- abstract accept(_event: Types.Events.Event, parsedTrace?: Handlers.Types.ParsedTrace): boolean;
4
+ abstract accept(_event: Types.Events.Event, handlerData?: Handlers.Types.HandlerData): boolean;
5
5
  }
6
6
  export declare class VisibleEventsFilter extends TraceFilter {
7
7
  private readonly visibleTypes;
@@ -1,4 +1,4 @@
1
- // Copyright 2017 The Chromium Authors. All rights reserved.
1
+ // Copyright 2017 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
  import * as Types from '../types/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"TraceFilter.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/extras/TraceFilter.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAG7B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAgB,WAAW;CAEhC;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IACjC,YAAY,CAAc;IAC3C,YAAY,YAAsB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAyB;QACxC,sEAAsE;QACtE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACxC,CAAC;QACD,sEAAsE;QACtE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC,IAAyB,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IACpD,eAAe,CAAyB;IAExC,YAAY,cAAmC;QAC7C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,aAAa,CAAyB;IACtC,YAAY,YAAiC;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["// Copyright 2017 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Handlers from '../handlers/handlers.js';\nimport * as Types from '../types/types.js';\n\nexport abstract class TraceFilter {\n abstract accept(_event: Types.Events.Event, parsedTrace?: Handlers.Types.ParsedTrace): boolean;\n}\n\nexport class VisibleEventsFilter extends TraceFilter {\n private readonly visibleTypes: Set<string>;\n constructor(visibleTypes: string[]) {\n super();\n this.visibleTypes = new Set(visibleTypes);\n }\n\n accept(event: Types.Events.Event): boolean {\n if (Types.Extensions.isSyntheticExtensionEntry(event)) {\n return true;\n }\n return this.visibleTypes.has(VisibleEventsFilter.eventType(event));\n }\n\n static eventType(event: Types.Events.Event): Types.Events.Name {\n // Any blink.console category events are treated as ConsoleTime events\n if (event.cat.includes('blink.console')) {\n return Types.Events.Name.CONSOLE_TIME;\n }\n // Any blink.user_timing egory events are treated as UserTiming events\n if (event.cat.includes('blink.user_timing')) {\n return Types.Events.Name.USER_TIMING;\n }\n return event.name as Types.Events.Name;\n }\n}\n\nexport class InvisibleEventsFilter extends TraceFilter {\n #invisibleTypes: Set<Types.Events.Name>;\n\n constructor(invisibleTypes: Types.Events.Name[]) {\n super();\n this.#invisibleTypes = new Set(invisibleTypes);\n }\n\n accept(event: Types.Events.Event): boolean {\n return !this.#invisibleTypes.has(VisibleEventsFilter.eventType(event));\n }\n}\n\nexport class ExclusiveNameFilter extends TraceFilter {\n #excludeNames: Set<Types.Events.Name>;\n constructor(excludeNames: Types.Events.Name[]) {\n super();\n this.#excludeNames = new Set(excludeNames);\n }\n\n accept(event: Types.Events.Event): boolean {\n return !this.#excludeNames.has(event.name as Types.Events.Name);\n }\n}\n"]}
1
+ {"version":3,"file":"TraceFilter.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/extras/TraceFilter.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,yEAAyE;AACzE,6BAA6B;AAG7B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAgB,WAAW;CAEhC;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IACjC,YAAY,CAAc;IAC3C,YAAY,YAAsB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAyB;QACxC,sEAAsE;QACtE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACxC,CAAC;QACD,sEAAsE;QACtE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC,IAAyB,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IACpD,eAAe,CAAyB;IAExC,YAAY,cAAmC;QAC7C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,aAAa,CAAyB;IACtC,YAAY,YAAiC;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAyB,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["// Copyright 2017 The Chromium Authors\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Handlers from '../handlers/handlers.js';\nimport * as Types from '../types/types.js';\n\nexport abstract class TraceFilter {\n abstract accept(_event: Types.Events.Event, handlerData?: Handlers.Types.HandlerData): boolean;\n}\n\nexport class VisibleEventsFilter extends TraceFilter {\n private readonly visibleTypes: Set<string>;\n constructor(visibleTypes: string[]) {\n super();\n this.visibleTypes = new Set(visibleTypes);\n }\n\n accept(event: Types.Events.Event): boolean {\n if (Types.Extensions.isSyntheticExtensionEntry(event)) {\n return true;\n }\n return this.visibleTypes.has(VisibleEventsFilter.eventType(event));\n }\n\n static eventType(event: Types.Events.Event): Types.Events.Name {\n // Any blink.console category events are treated as ConsoleTime events\n if (event.cat.includes('blink.console')) {\n return Types.Events.Name.CONSOLE_TIME;\n }\n // Any blink.user_timing egory events are treated as UserTiming events\n if (event.cat.includes('blink.user_timing')) {\n return Types.Events.Name.USER_TIMING;\n }\n return event.name as Types.Events.Name;\n }\n}\n\nexport class InvisibleEventsFilter extends TraceFilter {\n #invisibleTypes: Set<Types.Events.Name>;\n\n constructor(invisibleTypes: Types.Events.Name[]) {\n super();\n this.#invisibleTypes = new Set(invisibleTypes);\n }\n\n accept(event: Types.Events.Event): boolean {\n return !this.#invisibleTypes.has(VisibleEventsFilter.eventType(event));\n }\n}\n\nexport class ExclusiveNameFilter extends TraceFilter {\n #excludeNames: Set<Types.Events.Name>;\n constructor(excludeNames: Types.Events.Name[]) {\n super();\n this.#excludeNames = new Set(excludeNames);\n }\n\n accept(event: Types.Events.Event): boolean {\n return !this.#excludeNames.has(event.name as Types.Events.Name);\n }\n}\n"]}
@@ -120,5 +120,6 @@ export declare class BottomUpNode extends Node {
120
120
  searchTree(matchFunction: (arg0: Types.Events.Event) => boolean, results?: Node[]): Node[];
121
121
  }
122
122
  export declare function eventStackFrame(event: Types.Events.Event): Protocol.Runtime.CallFrame | null;
123
+ /** TODO(paulirish): rename to generateNodeId **/
123
124
  export declare function generateEventID(event: Types.Events.Event): string;
124
125
  export type ChildrenCache = Map<string | symbol, Node>;
@@ -1,4 +1,4 @@
1
- // Copyright 2016 The Chromium Authors. All rights reserved.
1
+ // Copyright 2016 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
  import * as Helpers from '../helpers/helpers.js';
@@ -573,7 +573,7 @@ export function eventStackFrame(event) {
573
573
  }
574
574
  return { ...topFrame, scriptId: String(topFrame.scriptId) };
575
575
  }
576
- // TODO(paulirish): rename to generateNodeId
576
+ /** TODO(paulirish): rename to generateNodeId **/
577
577
  export function generateEventID(event) {
578
578
  if (Types.Events.isProfileCall(event)) {
579
579
  const name = SamplesIntegrator.isNativeRuntimeFrame(event.callFrame) ?
@@ -1 +1 @@
1
- {"version":3,"file":"TraceTree.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/extras/TraceTree.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAG7B,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAI3C,MAAM,OAAO,IAAI;IACf,SAAS;IACT,SAAS,CAAS;IAClB,SAAS;IACT,QAAQ,CAAS;IACjB,YAAY,CAAS;IACrB,EAAE,CAAgB;IAClB,0FAA0F;IAC1F,KAAK,CAAqB;IAC1B;;;OAGG;IACH,MAAM,CAAuB;IAC7B,MAAM,CAAa;IACnB,OAAO,CAAS;IAChB,mBAAmB,CAAU;IAC7B,KAAK,CAAS;IAEd,YAAY,EAAiB,EAAE,KAAyB;QACtD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;QAEtB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,WAAW;QACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,MAAe;QAC5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD;;;OAGG;IACH,QAAQ;QACN,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,aAAoD,EAAE,OAAgB;QAC/E,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,IAAI;IACnC,IAAI,CAAuB;IACnB,mBAAmB,CAAU;IACrC,gBAAgB,CAAqB;IAC5B,MAAM,CAAmB;IAElC,YAAY,EAAiB,EAAE,KAAyB,EAAE,MAAwB;QAChF,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEQ,WAAW;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEQ,cAAc,CAAC,KAAc;QACpC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IAEQ,QAAQ;QACf,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACvD,CAAC;IAEO,aAAa;QACnB,oEAAoE;QACpE,MAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,KAAK,IAAI,IAAI,GAAgB,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1F,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,QAAQ,GAAkB,IAAI,GAAG,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;YACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7G,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC;QAC1E,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,+DAA+D;QAC/D,8BAA8B;QAC9B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,kBAAkB,GAAc,IAAI,CAAC;QAEzC,4DAA4D;QAC5D,OAAO,CAAC,KAAK,CAAC,YAAY,CACtB,IAAI,CAAC,MAAM,EACX;YACE,YAAY;YACZ,UAAU;YACV,cAAc,EAAE,oBAAoB;YACpC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YACjD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,iBAAiB,EAAE,KAAK;SACzB,CACJ,CAAC;QAEF,SAAS,YAAY,CAAC,CAAqB;YACzC,MAAM,EAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAE1G,EAAE,KAAK,CAAC;YACR,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,MAAM,aAAa,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjG,MAAM,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACvE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3C,CAAC;YACD,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,SAAS,cAAc,CAAC,CAAqB;YAC3C,EAAE,KAAK,CAAC;YACR,IAAI,YAAY,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7D,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,EAAE,KAAK,CAAC;QACV,CAAC;QAED;;WAEG;QACH,SAAS,YAAY,CAAC,CAAqB,EAAE,QAAgB;YAC3D,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,OAAO;gBACT,CAAC;gBACD,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACxC,kBAAkB,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,IAAI,EAAE,CAAC;YACP,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,GAAG,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,IAAI,OAAO,EAAE,CAAC;oBACZ,EAAE,IAAI,GAAG,GAAG,OAAO,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;gBACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAC1B,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACrD,CAAC;YACD,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED;;;;;WAKG;QACH,SAAS,SAAS,CAAC,CAAqB;YACtC,MAAM,EAAC,OAAO,EAAC,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,YAAY,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,YAAY,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;oBACnC,EAAE,YAAY,CAAC;gBACjB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,OAAO,EAAE,CAAC;gBACZ,EAAE,IAAI,GAAG,GAAG,OAAO,CAAC;YACtB,CAAC;YACD,IAAI,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC;gBACjC,EAAE,YAAY,CAAC;YACjB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,UAAU;YACjB,EAAE,KAAK,CAAC;YACR,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC;gBACzB,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACrC,MAAM,CAAqC;IAC3C,SAAS,CAAqB;IAC9B,OAAO,CAAqB;IACrC,oBAAoB,CAAwD;IAC5E,2KAA2K;IAClK,cAAc,CAAoB;IAClC,oBAAoB,CAAW;IAC/B,SAAS,CAAS;IAClB,QAAQ,CAAS;IAE1B,YACI,MAA4B,EAC5B,EAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAOvF;QACH,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAqB,EAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAEjD,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,CAAC;IACQ,QAAQ;QACf,8EAA8E;QAC9E,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IAEO,gBAAgB;QACtB,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtD,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YACD,SAAS,CAAC,QAAQ,CAAC,IAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,IAAI;IAChC,gBAAgB,CAAqB;IACrC,UAAU,CAAc;IACvB,MAAM,CAAqC;IAC3C,SAAS,CAAqB;IAC9B,OAAO,CAAqB;IAC5B,SAAS,CAAS;IAC3B,oBAAoB,CAAwD;IACpE,qBAAqB,CAAW;IAChC,oBAAoB,CAAW;IAEvC,YAAY,MAA4B,EAAE,EACxC,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,GAmBrB;QACC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAqB,EAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;IAEQ,WAAW;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,QAAuB;QACpC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACnC,mEAAmE;YACnE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5E,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEQ,QAAQ;QACf,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,uGAAuG;IACvG,sEAAsE;IACtE,2FAA2F;IACnF,iBAAiB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;QACzC,MAAM,aAAa,GAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;QACtD,MAAM,cAAc,GAAc,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,4CAA4C;QAC5C,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACvD,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEvD,0DAA0D;QAC1D,MAAM,6BAA6B,GAAG,CAAC,CAAqB,EAAQ,EAAE;YACpE,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC3D,EAAE,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,CAAC;gBACD,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;gBAED,4EAA4E;gBAC5E,yEAAyE;gBACzE,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBACtC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACrD,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;oBAC7C,qEAAqE;oBACrE,oBAAoB;oBACpB,2EAA2E;oBAC3E,wEAAwE;oBACxE,uEAAuE;oBACvE,gBAAgB;oBAChB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,YAAY,CACtB,IAAI,CAAC,MAAM,EACX;YACE,YAAY;YACZ,UAAU;YACV,cAAc,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,SAAS;YACtF,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YACtD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAClD,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,iBAAiB,EAAE,KAAK;SACzB,CACJ,CAAC;QAEF,SAAS,YAAY,CAAC,CAAqB;YACzC,MAAM,EAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAE1G,MAAM,aAAa,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjG,MAAM,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YACvE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC;YACpD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,oBAAoB,IAAI,oBAAoB,EAAE,CAAC;gBACjD,EAAE,GAAG,GAAG,EAAE,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,CAAC;YACD,MAAM,aAAa,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,SAAS,UAAU,CAAC,KAAyB;YAC3C,IAAI,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,oBAAoB,IAAI,oBAAoB,EAAE,CAAC;gBACjD,EAAE,GAAG,GAAG,EAAE,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,CAAC;YACD,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC7C,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,qFAAqF;QACrF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC;gBACxF,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtD,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC5B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,SAAS,CAAC,QAAQ,CAAC,IAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,IAAI;IAChB,gBAAgB,CAAgB;IACxC,mBAAmB,CAAU;IAC7B,MAAM,CAAuB;IAEtC,YAAY,EAAU,EAAE,MAAwC,EAAE,MAA4B;QAC5F,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,KAAmB,EAAE,QAAgB,EAAE,SAAiB,EAAE,YAAoB;QACrF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;QAC5B,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;QAClC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC;IAEQ,WAAW;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,QAAQ;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,IAAI;IAC3B,MAAM,CAAO;IACd,IAAI,CAAmB;IACtB,KAAK,CAAS;IACf,cAAc,CAAqB;IACnC,mBAAmB,CAAU;IAErC,YAAY,IAAsB,EAAE,EAAU,EAAE,KAAyB,EAAE,WAAoB,EAAE,MAAY;QAC3G,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACzC,CAAC;IAEQ,WAAW;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEQ,cAAc,CAAC,KAAc;QACpC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IAEQ,QAAQ;QACf,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QACD,MAAM,aAAa,GAAa,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,cAAc,GAAW,SAAS,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,YAAY,CACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB;YACE,YAAY;YACZ,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YACjD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YAC7B,iBAAiB,EAAE,KAAK;SACzB,CACJ,CAAC;QACF,SAAS,YAAY,CAAC,CAAqB;YACzC,MAAM,EAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC1G,MAAM,aAAa,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjG,MAAM,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YACvE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;YACzD,CAAC;YACD,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC;YACpD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAED,SAAS,UAAU,CAAC,CAAqB;YACvC,MAAM,EAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC1G,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;YAC9B,UAAU,CAAC,GAAG,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC;YACT,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrD,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnE,OAAO;gBACT,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvD,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/D,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACnD,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBACtE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,MAAM,aAAa,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjG,MAAM,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;YAC7E,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;YAC5B,cAAc,GAAG,aAAa,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEQ,UAAU,CAAC,aAAoD,EAAE,OAAgB;QACxF,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,SAAS,CAAC;IACzB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA8B,EAAC,CAAC;AACzF,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAClE,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;QACvE,OAAO,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9D,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7F,OAAO,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC","sourcesContent":["// Copyright 2016 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Protocol from '../../../generated/protocol.js';\nimport * as Helpers from '../helpers/helpers.js';\nimport {SamplesIntegrator} from '../helpers/SamplesIntegrator.js';\nimport * as Types from '../types/types.js';\n\nimport type {TraceFilter} from './TraceFilter.js';\n\nexport class Node {\n /** ms */\n totalTime: number;\n /** ms */\n selfTime: number;\n transferSize: number;\n id: string|symbol;\n /** The first trace event encountered that necessitated the creation of this tree node. */\n event: Types.Events.Event;\n /**\n * All of the trace events associated with this aggregate node.\n * Minor: In the case of Event Log (EventsTimelineTreeView), the node is not aggregate and this will only hold 1 event, the same that's in this.event\n */\n events: Types.Events.Event[];\n parent!: Node|null;\n groupId: string;\n isGroupNodeInternal: boolean;\n depth: number;\n\n constructor(id: string|symbol, event: Types.Events.Event) {\n this.totalTime = 0;\n this.selfTime = 0;\n this.transferSize = 0;\n this.id = id;\n this.event = event;\n this.events = [event];\n\n this.groupId = '';\n this.isGroupNodeInternal = false;\n this.depth = 0;\n }\n\n isGroupNode(): boolean {\n return this.isGroupNodeInternal;\n }\n\n hasChildren(): boolean {\n throw new Error('Not implemented');\n }\n\n setHasChildren(_value: boolean): void {\n throw new Error('Not implemented');\n }\n /**\n * Returns the direct descendants of this node.\n * @returns a map with ordered <nodeId, Node> tuples.\n */\n children(): ChildrenCache {\n throw new Error('Not implemented');\n }\n\n searchTree(matchFunction: (arg0: Types.Events.Event) => boolean, results?: Node[]): Node[] {\n results = results || [];\n if (this.event && matchFunction(this.event)) {\n results.push(this);\n }\n for (const child of this.children().values()) {\n child.searchTree(matchFunction, results);\n }\n return results;\n }\n}\n\nexport class TopDownNode extends Node {\n root: TopDownRootNode|null;\n private hasChildrenInternal: boolean;\n childrenInternal: ChildrenCache|null;\n override parent: TopDownNode|null;\n\n constructor(id: string|symbol, event: Types.Events.Event, parent: TopDownNode|null) {\n super(id, event);\n this.root = parent?.root ?? null;\n this.hasChildrenInternal = false;\n this.childrenInternal = null;\n this.parent = parent;\n }\n\n override hasChildren(): boolean {\n return this.hasChildrenInternal;\n }\n\n override setHasChildren(value: boolean): void {\n this.hasChildrenInternal = value;\n }\n\n override children(): ChildrenCache {\n return this.childrenInternal || this.buildChildren();\n }\n\n private buildChildren(): ChildrenCache {\n // Tracks the ancestor path of this node, includes the current node.\n const path: TopDownNode[] = [];\n for (let node: TopDownNode = this; node.parent && !node.isGroupNode(); node = node.parent) {\n path.push((node));\n }\n path.reverse();\n const children: ChildrenCache = new Map();\n const self = this;\n const root = this.root;\n if (!root) {\n this.childrenInternal = children;\n return this.childrenInternal;\n }\n const startTime = root.startTime;\n const endTime = root.endTime;\n const instantEventCallback = (root.doNotAggregate || root.includeInstantEvents) ? onInstantEvent : undefined;\n const eventIdCallback = root.doNotAggregate ? undefined : generateEventID;\n const eventGroupIdCallback = root.getEventGroupIdCallback();\n let depth = 0;\n // The amount of ancestors found to match this node's ancestors\n // during the event tree walk.\n let matchedDepth = 0;\n let currentDirectChild: Node|null = null;\n\n // Walk on the full event tree to find this node's children.\n Helpers.Trace.forEachEvent(\n root.events,\n {\n onStartEvent,\n onEndEvent,\n onInstantEvent: instantEventCallback,\n startTime: Helpers.Timing.milliToMicro(startTime),\n endTime: Helpers.Timing.milliToMicro(endTime),\n eventFilter: root.filter,\n ignoreAsyncEvents: false,\n },\n );\n\n function onStartEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n\n ++depth;\n if (depth > path.length + 2) {\n return;\n }\n if (!matchPath(e)) {\n return;\n }\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const duration = actualEndTime - Math.max(startTime, currentStartTime);\n if (duration < 0) {\n console.error('Negative event duration');\n }\n processEvent(e, duration);\n }\n\n function onInstantEvent(e: Types.Events.Event): void {\n ++depth;\n if (matchedDepth === path.length && depth <= path.length + 2) {\n processEvent(e, 0);\n }\n --depth;\n }\n\n /**\n * Creates a child node.\n */\n function processEvent(e: Types.Events.Event, duration: number): void {\n if (depth === path.length + 2) {\n if (!currentDirectChild) {\n return;\n }\n currentDirectChild.setHasChildren(true);\n currentDirectChild.selfTime -= duration;\n return;\n }\n let id;\n let groupId = '';\n if (!eventIdCallback) {\n id = Symbol('uniqueId');\n } else {\n id = eventIdCallback(e);\n groupId = eventGroupIdCallback ? eventGroupIdCallback(e) : '';\n if (groupId) {\n id += '/' + groupId;\n }\n }\n let node = children.get(id);\n if (!node) {\n node = new TopDownNode(id, e, self);\n node.groupId = groupId;\n children.set(id, node);\n } else {\n node.events.push(e);\n }\n node.selfTime += duration;\n node.totalTime += duration;\n if (Types.Events.isReceivedDataEvent(e)) {\n node.transferSize += e.args.data.encodedDataLength;\n }\n currentDirectChild = node;\n }\n\n /**\n * Checks if the path of ancestors of an event matches the path of\n * ancestors of the current node. In other words, checks if an event\n * is a child of this node. As the check is done, the partial result\n * is cached on `matchedDepth`, for future checks.\n */\n function matchPath(e: Types.Events.Event): boolean {\n const {endTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n if (matchedDepth === path.length) {\n return true;\n }\n if (matchedDepth !== depth - 1) {\n return false;\n }\n if (!endTime) {\n return false;\n }\n if (!eventIdCallback) {\n if (e === path[matchedDepth].event) {\n ++matchedDepth;\n }\n return false;\n }\n let id = eventIdCallback(e);\n const groupId = eventGroupIdCallback ? eventGroupIdCallback(e) : '';\n if (groupId) {\n id += '/' + groupId;\n }\n if (id === path[matchedDepth].id) {\n ++matchedDepth;\n }\n return false;\n }\n\n function onEndEvent(): void {\n --depth;\n if (matchedDepth > depth) {\n matchedDepth = depth;\n }\n }\n\n this.childrenInternal = children;\n return children;\n }\n}\n\nexport class TopDownRootNode extends TopDownNode {\n readonly filter: (e: Types.Events.Event) => boolean;\n readonly startTime: Types.Timing.Milli;\n readonly endTime: Types.Timing.Milli;\n eventGroupIdCallback: ((arg0: Types.Events.Event) => string)|null|undefined;\n /** Default behavior is to aggregate similar trace events into one Node based on generateEventID(), eventGroupIdCallback(), etc. Set true to keep nodes 1:1 with events. */\n readonly doNotAggregate: boolean|undefined;\n readonly includeInstantEvents?: boolean;\n override totalTime: number;\n override selfTime: number;\n\n constructor(\n events: Types.Events.Event[],\n {filters, startTime, endTime, doNotAggregate, eventGroupIdCallback, includeInstantEvents}: {\n filters: TraceFilter[],\n startTime: Types.Timing.Milli,\n endTime: Types.Timing.Milli,\n doNotAggregate?: boolean,\n eventGroupIdCallback?: ((arg0: Types.Events.Event) => string)|null,\n includeInstantEvents?: boolean,\n }) {\n super('', events[0], null);\n this.event = events[0];\n this.root = this;\n this.events = events;\n this.filter = (e: Types.Events.Event): boolean => filters.every(f => f.accept(e));\n this.startTime = startTime;\n this.endTime = endTime;\n this.eventGroupIdCallback = eventGroupIdCallback;\n this.doNotAggregate = doNotAggregate;\n this.includeInstantEvents = includeInstantEvents;\n\n this.totalTime = endTime - startTime;\n this.selfTime = this.totalTime;\n }\n override children(): ChildrenCache {\n // FYI tree nodes are built lazily. https://codereview.chromium.org/2674283003\n return this.childrenInternal || this.grouppedTopNodes();\n }\n\n private grouppedTopNodes(): ChildrenCache {\n const flatNodes = super.children();\n for (const node of flatNodes.values()) {\n this.selfTime -= node.totalTime;\n }\n if (!this.eventGroupIdCallback) {\n return flatNodes;\n }\n const groupNodes = new Map<string, GroupNode>();\n for (const node of flatNodes.values()) {\n const groupId = this.eventGroupIdCallback(node.event);\n let groupNode = groupNodes.get(groupId);\n if (!groupNode) {\n groupNode = new GroupNode(groupId, this, node.events);\n groupNodes.set(groupId, groupNode);\n } else {\n groupNode.events.push(...node.events);\n }\n groupNode.addChild(node as BottomUpNode, node.selfTime, node.totalTime, node.transferSize);\n }\n this.childrenInternal = groupNodes;\n return groupNodes;\n }\n\n getEventGroupIdCallback(): ((arg0: Types.Events.Event) => string)|null|undefined {\n return this.eventGroupIdCallback;\n }\n}\n\nexport class BottomUpRootNode extends Node {\n private childrenInternal: ChildrenCache|null;\n private textFilter: TraceFilter;\n readonly filter: (e: Types.Events.Event) => boolean;\n readonly startTime: Types.Timing.Milli;\n readonly endTime: Types.Timing.Milli;\n override totalTime: number;\n eventGroupIdCallback: ((arg0: Types.Events.Event) => string)|null|undefined;\n private calculateTransferSize?: boolean;\n private forceGroupIdCallback?: boolean;\n\n constructor(events: Types.Events.Event[], {\n textFilter,\n filters,\n startTime,\n endTime,\n eventGroupIdCallback,\n calculateTransferSize,\n forceGroupIdCallback,\n }: {\n textFilter: TraceFilter,\n filters: readonly TraceFilter[],\n startTime: Types.Timing.Milli,\n endTime: Types.Timing.Milli,\n eventGroupIdCallback?: ((arg0: Types.Events.Event) => string)|null,\n calculateTransferSize?: boolean,\n /**\n * This forces using `eventGroupIdCallback` in combination with generateEventID\n * to generate the ID of the node.\n *\n * This is used in the ThirdPartyTreeView and BottomUpTreeView, where we want to group all events\n * related to a specific 3P entity together, regardless of the specific event name/type.\n * There are cases where events under the same event name belong to different entities. But, because\n * they get grouped first by event name/type, it throws off the 3P groupBy - grouping events of different\n * 3P entities together.\n */\n forceGroupIdCallback?: boolean,\n }) {\n super('', events[0]);\n this.childrenInternal = null;\n this.events = events;\n this.textFilter = textFilter;\n this.filter = (e: Types.Events.Event): boolean => filters.every(f => f.accept(e));\n this.startTime = startTime;\n this.endTime = endTime;\n this.eventGroupIdCallback = eventGroupIdCallback;\n this.totalTime = endTime - startTime;\n this.calculateTransferSize = calculateTransferSize;\n this.forceGroupIdCallback = forceGroupIdCallback;\n }\n\n override hasChildren(): boolean {\n return true;\n }\n\n filterChildren(children: ChildrenCache): ChildrenCache {\n for (const [id, child] of children) {\n // to provide better context to user only filter first (top) level.\n if (child.event && child.depth <= 1 && !this.textFilter.accept(child.event)) {\n children.delete((id));\n }\n }\n return children;\n }\n\n override children(): ChildrenCache {\n // FYI tree nodes are built lazily. https://codereview.chromium.org/2674283003\n if (!this.childrenInternal) {\n this.childrenInternal = this.filterChildren(this.grouppedTopNodes());\n }\n return this.childrenInternal;\n }\n\n // If no grouping is applied, the nodes returned here are what's initially shown in the bottom-up view.\n // \"No grouping\" == no grouping in UI dropdown == no groupingFunction…\n // … HOWEVER, nodes are still aggregated via `generateEventID`, which is ~= the event name.\n private ungroupedTopNodes(): ChildrenCache {\n const root = this;\n const startTime = this.startTime;\n const endTime = this.endTime;\n const nodeById = new Map<string, Node>();\n const selfTimeStack: number[] = [endTime - startTime];\n const firstNodeStack: boolean[] = [];\n const totalTimeById = new Map<string, number>();\n // TODO(paulirish): rename to getGroupNodeId\n const eventGroupIdCallback = this.eventGroupIdCallback;\n const forceGroupIdCallback = this.forceGroupIdCallback;\n\n // encodedDataLength is provided solely on instant events.\n const sumTransferSizeOfInstantEvent = (e: Types.Events.Event): void => {\n if (Types.Events.isReceivedDataEvent(e)) {\n let id = generateEventID(e);\n if (this.forceGroupIdCallback && this.eventGroupIdCallback) {\n id = `${id}-${this.eventGroupIdCallback(e)}`;\n }\n let node = nodeById.get(id);\n if (!node) {\n node = new BottomUpNode(root, id, e, false, root);\n nodeById.set(id, node);\n } else {\n node.events.push(e);\n }\n\n // ResourceReceivedData events tally up the transfer size over time, but the\n // ResourceReceiveResponse / ResourceFinish events hold the final result.\n if (e.name === 'ResourceReceivedData') {\n node.transferSize += e.args.data.encodedDataLength;\n } else if (e.args.data.encodedDataLength > 0) {\n // For some reason, ResourceFinish can be zero even if data was sent.\n // Ignore that case.\n // Note: this will count the entire resource size if just the last bit of a\n // request is in view. If it isn't in view, the transfer size is counted\n // gradually, in proportion with the ResourceReceivedData events in the\n // current view.\n node.transferSize = e.args.data.encodedDataLength;\n }\n }\n };\n\n Helpers.Trace.forEachEvent(\n this.events,\n {\n onStartEvent,\n onEndEvent,\n onInstantEvent: this.calculateTransferSize ? sumTransferSizeOfInstantEvent : undefined,\n startTime: Helpers.Timing.milliToMicro(this.startTime),\n endTime: Helpers.Timing.milliToMicro(this.endTime),\n eventFilter: this.filter,\n ignoreAsyncEvents: false,\n },\n );\n\n function onStartEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const duration = actualEndTime - Math.max(currentStartTime, startTime);\n selfTimeStack[selfTimeStack.length - 1] -= duration;\n selfTimeStack.push(duration);\n let id = generateEventID(e);\n if (forceGroupIdCallback && eventGroupIdCallback) {\n id = `${id}-${eventGroupIdCallback(e)}`;\n }\n const noNodeOnStack = !totalTimeById.has(id);\n if (noNodeOnStack) {\n totalTimeById.set(id, duration);\n }\n firstNodeStack.push(noNodeOnStack);\n }\n\n function onEndEvent(event: Types.Events.Event): void {\n let id = generateEventID(event);\n if (forceGroupIdCallback && eventGroupIdCallback) {\n id = `${id}-${eventGroupIdCallback(event)}`;\n }\n let node = nodeById.get(id);\n if (!node) {\n node = new BottomUpNode(root, id, event, false, root);\n nodeById.set(id, node);\n } else {\n node.events.push(event);\n }\n node.selfTime += selfTimeStack.pop() || 0;\n if (firstNodeStack.pop()) {\n node.totalTime += totalTimeById.get(id) || 0;\n totalTimeById.delete(id);\n }\n if (firstNodeStack.length) {\n node.setHasChildren(true);\n }\n }\n\n this.selfTime = selfTimeStack.pop() || 0;\n // Delete any nodes that have no selfTime (or transferSize, if it's being calculated)\n for (const pair of nodeById) {\n if (pair[1].selfTime <= 0 && (!this.calculateTransferSize || pair[1].transferSize <= 0)) {\n nodeById.delete((pair[0]));\n }\n }\n return nodeById;\n }\n\n private grouppedTopNodes(): ChildrenCache {\n const flatNodes = this.ungroupedTopNodes();\n if (!this.eventGroupIdCallback) {\n return flatNodes;\n }\n const groupNodes = new Map<string, GroupNode>();\n for (const node of flatNodes.values()) {\n const groupId = this.eventGroupIdCallback(node.event);\n let groupNode = groupNodes.get(groupId);\n if (!groupNode) {\n groupNode = new GroupNode(groupId, this, node.events);\n groupNodes.set(groupId, groupNode);\n } else {\n for (const e of node.events) {\n groupNode.events.push(e);\n }\n }\n groupNode.addChild(node as BottomUpNode, node.selfTime, node.selfTime, node.transferSize);\n }\n return groupNodes;\n }\n}\n\nexport class GroupNode extends Node {\n private readonly childrenInternal: ChildrenCache;\n override isGroupNodeInternal: boolean;\n override events: Types.Events.Event[];\n\n constructor(id: string, parent: BottomUpRootNode|TopDownRootNode, events: Types.Events.Event[]) {\n super(id, events[0]);\n this.events = events;\n this.childrenInternal = new Map();\n this.parent = parent;\n this.isGroupNodeInternal = true;\n }\n\n addChild(child: BottomUpNode, selfTime: number, totalTime: number, transferSize: number): void {\n this.childrenInternal.set(child.id, child);\n this.selfTime += selfTime;\n this.totalTime += totalTime;\n this.transferSize += transferSize;\n child.parent = this;\n }\n\n override hasChildren(): boolean {\n return true;\n }\n\n override children(): ChildrenCache {\n return this.childrenInternal;\n }\n}\n\nexport class BottomUpNode extends Node {\n override parent: Node;\n private root: BottomUpRootNode;\n override depth: number;\n private cachedChildren: ChildrenCache|null;\n private hasChildrenInternal: boolean;\n\n constructor(root: BottomUpRootNode, id: string, event: Types.Events.Event, hasChildren: boolean, parent: Node) {\n super(id, event);\n this.parent = parent;\n this.root = root;\n this.depth = (parent.depth || 0) + 1;\n this.cachedChildren = null;\n this.hasChildrenInternal = hasChildren;\n }\n\n override hasChildren(): boolean {\n return this.hasChildrenInternal;\n }\n\n override setHasChildren(value: boolean): void {\n this.hasChildrenInternal = value;\n }\n\n override children(): ChildrenCache {\n if (this.cachedChildren) {\n return this.cachedChildren;\n }\n const selfTimeStack: number[] = [0];\n const eventIdStack: string[] = [];\n const eventStack: Types.Events.Event[] = [];\n const nodeById = new Map<string, BottomUpNode>();\n const startTime = this.root.startTime;\n const endTime = this.root.endTime;\n let lastTimeMarker: number = startTime;\n const self = this;\n Helpers.Trace.forEachEvent(\n this.root.events,\n {\n onStartEvent,\n onEndEvent,\n startTime: Helpers.Timing.milliToMicro(startTime),\n endTime: Helpers.Timing.milliToMicro(endTime),\n eventFilter: this.root.filter,\n ignoreAsyncEvents: false,\n },\n );\n function onStartEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const duration = actualEndTime - Math.max(currentStartTime, startTime);\n if (duration < 0) {\n console.assert(false, 'Negative duration of an event');\n }\n selfTimeStack[selfTimeStack.length - 1] -= duration;\n selfTimeStack.push(duration);\n const id = generateEventID(e);\n eventIdStack.push(id);\n eventStack.push(e);\n }\n\n function onEndEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n const selfTime = selfTimeStack.pop();\n const id = eventIdStack.pop();\n eventStack.pop();\n let node;\n for (node = self; node.depth > 1; node = node.parent) {\n if (node.id !== eventIdStack[eventIdStack.length + 1 - node.depth]) {\n return;\n }\n }\n if (node.id !== id || eventIdStack.length < self.depth) {\n return;\n }\n const childId = eventIdStack[eventIdStack.length - self.depth];\n node = nodeById.get(childId);\n if (!node) {\n const event = eventStack[eventStack.length - self.depth];\n const hasChildren = eventStack.length > self.depth;\n node = new BottomUpNode(self.root, childId, event, hasChildren, self);\n nodeById.set(childId, node);\n } else {\n node.events.push(e);\n }\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const totalTime = actualEndTime - Math.max(currentStartTime, lastTimeMarker);\n node.selfTime += selfTime || 0;\n node.totalTime += totalTime;\n lastTimeMarker = actualEndTime;\n }\n\n this.cachedChildren = this.root.filterChildren(nodeById);\n return this.cachedChildren;\n }\n\n override searchTree(matchFunction: (arg0: Types.Events.Event) => boolean, results?: Node[]): Node[] {\n results = results || [];\n if (this.event && matchFunction(this.event)) {\n results.push(this);\n }\n return results;\n }\n}\n\nexport function eventStackFrame(event: Types.Events.Event): Protocol.Runtime.CallFrame|null {\n if (Types.Events.isProfileCall(event)) {\n return event.callFrame;\n }\n const topFrame = event.args?.data?.stackTrace?.[0];\n if (!topFrame) {\n return null;\n }\n return {...topFrame, scriptId: String(topFrame.scriptId) as Protocol.Runtime.ScriptId};\n}\n\n// TODO(paulirish): rename to generateNodeId\nexport function generateEventID(event: Types.Events.Event): string {\n if (Types.Events.isProfileCall(event)) {\n const name = SamplesIntegrator.isNativeRuntimeFrame(event.callFrame) ?\n SamplesIntegrator.nativeGroup(event.callFrame.functionName) :\n event.callFrame.functionName;\n const location = event.callFrame.scriptId || event.callFrame.url || '';\n return `f:${name}@${location}`;\n }\n\n if (Types.Events.isConsoleTimeStamp(event) && event.args.data) {\n return `${event.name}:${event.args.data.name}`;\n }\n if (Types.Events.isSyntheticNetworkRequest(event) || Types.Events.isReceivedDataEvent(event)) {\n return `req:${event.args.data.requestId}`;\n }\n\n return event.name;\n}\n\nexport type ChildrenCache = Map<string|symbol, Node>;\n"]}
1
+ {"version":3,"file":"TraceTree.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/extras/TraceTree.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2016 The Chromium Authors\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Protocol from '../../../generated/protocol.js';\nimport * as Helpers from '../helpers/helpers.js';\nimport {SamplesIntegrator} from '../helpers/SamplesIntegrator.js';\nimport * as Types from '../types/types.js';\n\nimport type {TraceFilter} from './TraceFilter.js';\n\nexport class Node {\n /** ms */\n totalTime: number;\n /** ms */\n selfTime: number;\n transferSize: number;\n id: string|symbol;\n /** The first trace event encountered that necessitated the creation of this tree node. */\n event: Types.Events.Event;\n /**\n * All of the trace events associated with this aggregate node.\n * Minor: In the case of Event Log (EventsTimelineTreeView), the node is not aggregate and this will only hold 1 event, the same that's in this.event\n */\n events: Types.Events.Event[];\n parent!: Node|null;\n groupId: string;\n isGroupNodeInternal: boolean;\n depth: number;\n\n constructor(id: string|symbol, event: Types.Events.Event) {\n this.totalTime = 0;\n this.selfTime = 0;\n this.transferSize = 0;\n this.id = id;\n this.event = event;\n this.events = [event];\n\n this.groupId = '';\n this.isGroupNodeInternal = false;\n this.depth = 0;\n }\n\n isGroupNode(): boolean {\n return this.isGroupNodeInternal;\n }\n\n hasChildren(): boolean {\n throw new Error('Not implemented');\n }\n\n setHasChildren(_value: boolean): void {\n throw new Error('Not implemented');\n }\n /**\n * Returns the direct descendants of this node.\n * @returns a map with ordered <nodeId, Node> tuples.\n */\n children(): ChildrenCache {\n throw new Error('Not implemented');\n }\n\n searchTree(matchFunction: (arg0: Types.Events.Event) => boolean, results?: Node[]): Node[] {\n results = results || [];\n if (this.event && matchFunction(this.event)) {\n results.push(this);\n }\n for (const child of this.children().values()) {\n child.searchTree(matchFunction, results);\n }\n return results;\n }\n}\n\nexport class TopDownNode extends Node {\n root: TopDownRootNode|null;\n private hasChildrenInternal: boolean;\n childrenInternal: ChildrenCache|null;\n override parent: TopDownNode|null;\n\n constructor(id: string|symbol, event: Types.Events.Event, parent: TopDownNode|null) {\n super(id, event);\n this.root = parent?.root ?? null;\n this.hasChildrenInternal = false;\n this.childrenInternal = null;\n this.parent = parent;\n }\n\n override hasChildren(): boolean {\n return this.hasChildrenInternal;\n }\n\n override setHasChildren(value: boolean): void {\n this.hasChildrenInternal = value;\n }\n\n override children(): ChildrenCache {\n return this.childrenInternal || this.buildChildren();\n }\n\n private buildChildren(): ChildrenCache {\n // Tracks the ancestor path of this node, includes the current node.\n const path: TopDownNode[] = [];\n for (let node: TopDownNode = this; node.parent && !node.isGroupNode(); node = node.parent) {\n path.push((node));\n }\n path.reverse();\n const children: ChildrenCache = new Map();\n const self = this;\n const root = this.root;\n if (!root) {\n this.childrenInternal = children;\n return this.childrenInternal;\n }\n const startTime = root.startTime;\n const endTime = root.endTime;\n const instantEventCallback = (root.doNotAggregate || root.includeInstantEvents) ? onInstantEvent : undefined;\n const eventIdCallback = root.doNotAggregate ? undefined : generateEventID;\n const eventGroupIdCallback = root.getEventGroupIdCallback();\n let depth = 0;\n // The amount of ancestors found to match this node's ancestors\n // during the event tree walk.\n let matchedDepth = 0;\n let currentDirectChild: Node|null = null;\n\n // Walk on the full event tree to find this node's children.\n Helpers.Trace.forEachEvent(\n root.events,\n {\n onStartEvent,\n onEndEvent,\n onInstantEvent: instantEventCallback,\n startTime: Helpers.Timing.milliToMicro(startTime),\n endTime: Helpers.Timing.milliToMicro(endTime),\n eventFilter: root.filter,\n ignoreAsyncEvents: false,\n },\n );\n\n function onStartEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n\n ++depth;\n if (depth > path.length + 2) {\n return;\n }\n if (!matchPath(e)) {\n return;\n }\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const duration = actualEndTime - Math.max(startTime, currentStartTime);\n if (duration < 0) {\n console.error('Negative event duration');\n }\n processEvent(e, duration);\n }\n\n function onInstantEvent(e: Types.Events.Event): void {\n ++depth;\n if (matchedDepth === path.length && depth <= path.length + 2) {\n processEvent(e, 0);\n }\n --depth;\n }\n\n /**\n * Creates a child node.\n */\n function processEvent(e: Types.Events.Event, duration: number): void {\n if (depth === path.length + 2) {\n if (!currentDirectChild) {\n return;\n }\n currentDirectChild.setHasChildren(true);\n currentDirectChild.selfTime -= duration;\n return;\n }\n let id;\n let groupId = '';\n if (!eventIdCallback) {\n id = Symbol('uniqueId');\n } else {\n id = eventIdCallback(e);\n groupId = eventGroupIdCallback ? eventGroupIdCallback(e) : '';\n if (groupId) {\n id += '/' + groupId;\n }\n }\n let node = children.get(id);\n if (!node) {\n node = new TopDownNode(id, e, self);\n node.groupId = groupId;\n children.set(id, node);\n } else {\n node.events.push(e);\n }\n node.selfTime += duration;\n node.totalTime += duration;\n if (Types.Events.isReceivedDataEvent(e)) {\n node.transferSize += e.args.data.encodedDataLength;\n }\n currentDirectChild = node;\n }\n\n /**\n * Checks if the path of ancestors of an event matches the path of\n * ancestors of the current node. In other words, checks if an event\n * is a child of this node. As the check is done, the partial result\n * is cached on `matchedDepth`, for future checks.\n */\n function matchPath(e: Types.Events.Event): boolean {\n const {endTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n if (matchedDepth === path.length) {\n return true;\n }\n if (matchedDepth !== depth - 1) {\n return false;\n }\n if (!endTime) {\n return false;\n }\n if (!eventIdCallback) {\n if (e === path[matchedDepth].event) {\n ++matchedDepth;\n }\n return false;\n }\n let id = eventIdCallback(e);\n const groupId = eventGroupIdCallback ? eventGroupIdCallback(e) : '';\n if (groupId) {\n id += '/' + groupId;\n }\n if (id === path[matchedDepth].id) {\n ++matchedDepth;\n }\n return false;\n }\n\n function onEndEvent(): void {\n --depth;\n if (matchedDepth > depth) {\n matchedDepth = depth;\n }\n }\n\n this.childrenInternal = children;\n return children;\n }\n}\n\nexport class TopDownRootNode extends TopDownNode {\n readonly filter: (e: Types.Events.Event) => boolean;\n readonly startTime: Types.Timing.Milli;\n readonly endTime: Types.Timing.Milli;\n eventGroupIdCallback: ((arg0: Types.Events.Event) => string)|null|undefined;\n /** Default behavior is to aggregate similar trace events into one Node based on generateEventID(), eventGroupIdCallback(), etc. Set true to keep nodes 1:1 with events. */\n readonly doNotAggregate: boolean|undefined;\n readonly includeInstantEvents?: boolean;\n override totalTime: number;\n override selfTime: number;\n\n constructor(\n events: Types.Events.Event[],\n {filters, startTime, endTime, doNotAggregate, eventGroupIdCallback, includeInstantEvents}: {\n filters: TraceFilter[],\n startTime: Types.Timing.Milli,\n endTime: Types.Timing.Milli,\n doNotAggregate?: boolean,\n eventGroupIdCallback?: ((arg0: Types.Events.Event) => string)|null,\n includeInstantEvents?: boolean,\n }) {\n super('', events[0], null);\n this.event = events[0];\n this.root = this;\n this.events = events;\n this.filter = (e: Types.Events.Event): boolean => filters.every(f => f.accept(e));\n this.startTime = startTime;\n this.endTime = endTime;\n this.eventGroupIdCallback = eventGroupIdCallback;\n this.doNotAggregate = doNotAggregate;\n this.includeInstantEvents = includeInstantEvents;\n\n this.totalTime = endTime - startTime;\n this.selfTime = this.totalTime;\n }\n override children(): ChildrenCache {\n // FYI tree nodes are built lazily. https://codereview.chromium.org/2674283003\n return this.childrenInternal || this.grouppedTopNodes();\n }\n\n private grouppedTopNodes(): ChildrenCache {\n const flatNodes = super.children();\n for (const node of flatNodes.values()) {\n this.selfTime -= node.totalTime;\n }\n if (!this.eventGroupIdCallback) {\n return flatNodes;\n }\n const groupNodes = new Map<string, GroupNode>();\n for (const node of flatNodes.values()) {\n const groupId = this.eventGroupIdCallback(node.event);\n let groupNode = groupNodes.get(groupId);\n if (!groupNode) {\n groupNode = new GroupNode(groupId, this, node.events);\n groupNodes.set(groupId, groupNode);\n } else {\n groupNode.events.push(...node.events);\n }\n groupNode.addChild(node as BottomUpNode, node.selfTime, node.totalTime, node.transferSize);\n }\n this.childrenInternal = groupNodes;\n return groupNodes;\n }\n\n getEventGroupIdCallback(): ((arg0: Types.Events.Event) => string)|null|undefined {\n return this.eventGroupIdCallback;\n }\n}\n\nexport class BottomUpRootNode extends Node {\n private childrenInternal: ChildrenCache|null;\n private textFilter: TraceFilter;\n readonly filter: (e: Types.Events.Event) => boolean;\n readonly startTime: Types.Timing.Milli;\n readonly endTime: Types.Timing.Milli;\n override totalTime: number;\n eventGroupIdCallback: ((arg0: Types.Events.Event) => string)|null|undefined;\n private calculateTransferSize?: boolean;\n private forceGroupIdCallback?: boolean;\n\n constructor(events: Types.Events.Event[], {\n textFilter,\n filters,\n startTime,\n endTime,\n eventGroupIdCallback,\n calculateTransferSize,\n forceGroupIdCallback,\n }: {\n textFilter: TraceFilter,\n filters: readonly TraceFilter[],\n startTime: Types.Timing.Milli,\n endTime: Types.Timing.Milli,\n eventGroupIdCallback?: ((arg0: Types.Events.Event) => string)|null,\n calculateTransferSize?: boolean,\n /**\n * This forces using `eventGroupIdCallback` in combination with generateEventID\n * to generate the ID of the node.\n *\n * This is used in the ThirdPartyTreeView and BottomUpTreeView, where we want to group all events\n * related to a specific 3P entity together, regardless of the specific event name/type.\n * There are cases where events under the same event name belong to different entities. But, because\n * they get grouped first by event name/type, it throws off the 3P groupBy - grouping events of different\n * 3P entities together.\n */\n forceGroupIdCallback?: boolean,\n }) {\n super('', events[0]);\n this.childrenInternal = null;\n this.events = events;\n this.textFilter = textFilter;\n this.filter = (e: Types.Events.Event): boolean => filters.every(f => f.accept(e));\n this.startTime = startTime;\n this.endTime = endTime;\n this.eventGroupIdCallback = eventGroupIdCallback;\n this.totalTime = endTime - startTime;\n this.calculateTransferSize = calculateTransferSize;\n this.forceGroupIdCallback = forceGroupIdCallback;\n }\n\n override hasChildren(): boolean {\n return true;\n }\n\n filterChildren(children: ChildrenCache): ChildrenCache {\n for (const [id, child] of children) {\n // to provide better context to user only filter first (top) level.\n if (child.event && child.depth <= 1 && !this.textFilter.accept(child.event)) {\n children.delete((id));\n }\n }\n return children;\n }\n\n override children(): ChildrenCache {\n // FYI tree nodes are built lazily. https://codereview.chromium.org/2674283003\n if (!this.childrenInternal) {\n this.childrenInternal = this.filterChildren(this.grouppedTopNodes());\n }\n return this.childrenInternal;\n }\n\n // If no grouping is applied, the nodes returned here are what's initially shown in the bottom-up view.\n // \"No grouping\" == no grouping in UI dropdown == no groupingFunction…\n // … HOWEVER, nodes are still aggregated via `generateEventID`, which is ~= the event name.\n private ungroupedTopNodes(): ChildrenCache {\n const root = this;\n const startTime = this.startTime;\n const endTime = this.endTime;\n const nodeById = new Map<string, Node>();\n const selfTimeStack: number[] = [endTime - startTime];\n const firstNodeStack: boolean[] = [];\n const totalTimeById = new Map<string, number>();\n // TODO(paulirish): rename to getGroupNodeId\n const eventGroupIdCallback = this.eventGroupIdCallback;\n const forceGroupIdCallback = this.forceGroupIdCallback;\n\n // encodedDataLength is provided solely on instant events.\n const sumTransferSizeOfInstantEvent = (e: Types.Events.Event): void => {\n if (Types.Events.isReceivedDataEvent(e)) {\n let id = generateEventID(e);\n if (this.forceGroupIdCallback && this.eventGroupIdCallback) {\n id = `${id}-${this.eventGroupIdCallback(e)}`;\n }\n let node = nodeById.get(id);\n if (!node) {\n node = new BottomUpNode(root, id, e, false, root);\n nodeById.set(id, node);\n } else {\n node.events.push(e);\n }\n\n // ResourceReceivedData events tally up the transfer size over time, but the\n // ResourceReceiveResponse / ResourceFinish events hold the final result.\n if (e.name === 'ResourceReceivedData') {\n node.transferSize += e.args.data.encodedDataLength;\n } else if (e.args.data.encodedDataLength > 0) {\n // For some reason, ResourceFinish can be zero even if data was sent.\n // Ignore that case.\n // Note: this will count the entire resource size if just the last bit of a\n // request is in view. If it isn't in view, the transfer size is counted\n // gradually, in proportion with the ResourceReceivedData events in the\n // current view.\n node.transferSize = e.args.data.encodedDataLength;\n }\n }\n };\n\n Helpers.Trace.forEachEvent(\n this.events,\n {\n onStartEvent,\n onEndEvent,\n onInstantEvent: this.calculateTransferSize ? sumTransferSizeOfInstantEvent : undefined,\n startTime: Helpers.Timing.milliToMicro(this.startTime),\n endTime: Helpers.Timing.milliToMicro(this.endTime),\n eventFilter: this.filter,\n ignoreAsyncEvents: false,\n },\n );\n\n function onStartEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const duration = actualEndTime - Math.max(currentStartTime, startTime);\n selfTimeStack[selfTimeStack.length - 1] -= duration;\n selfTimeStack.push(duration);\n let id = generateEventID(e);\n if (forceGroupIdCallback && eventGroupIdCallback) {\n id = `${id}-${eventGroupIdCallback(e)}`;\n }\n const noNodeOnStack = !totalTimeById.has(id);\n if (noNodeOnStack) {\n totalTimeById.set(id, duration);\n }\n firstNodeStack.push(noNodeOnStack);\n }\n\n function onEndEvent(event: Types.Events.Event): void {\n let id = generateEventID(event);\n if (forceGroupIdCallback && eventGroupIdCallback) {\n id = `${id}-${eventGroupIdCallback(event)}`;\n }\n let node = nodeById.get(id);\n if (!node) {\n node = new BottomUpNode(root, id, event, false, root);\n nodeById.set(id, node);\n } else {\n node.events.push(event);\n }\n node.selfTime += selfTimeStack.pop() || 0;\n if (firstNodeStack.pop()) {\n node.totalTime += totalTimeById.get(id) || 0;\n totalTimeById.delete(id);\n }\n if (firstNodeStack.length) {\n node.setHasChildren(true);\n }\n }\n\n this.selfTime = selfTimeStack.pop() || 0;\n // Delete any nodes that have no selfTime (or transferSize, if it's being calculated)\n for (const pair of nodeById) {\n if (pair[1].selfTime <= 0 && (!this.calculateTransferSize || pair[1].transferSize <= 0)) {\n nodeById.delete((pair[0]));\n }\n }\n return nodeById;\n }\n\n private grouppedTopNodes(): ChildrenCache {\n const flatNodes = this.ungroupedTopNodes();\n if (!this.eventGroupIdCallback) {\n return flatNodes;\n }\n const groupNodes = new Map<string, GroupNode>();\n for (const node of flatNodes.values()) {\n const groupId = this.eventGroupIdCallback(node.event);\n let groupNode = groupNodes.get(groupId);\n if (!groupNode) {\n groupNode = new GroupNode(groupId, this, node.events);\n groupNodes.set(groupId, groupNode);\n } else {\n for (const e of node.events) {\n groupNode.events.push(e);\n }\n }\n groupNode.addChild(node as BottomUpNode, node.selfTime, node.selfTime, node.transferSize);\n }\n return groupNodes;\n }\n}\n\nexport class GroupNode extends Node {\n private readonly childrenInternal: ChildrenCache;\n override isGroupNodeInternal: boolean;\n override events: Types.Events.Event[];\n\n constructor(id: string, parent: BottomUpRootNode|TopDownRootNode, events: Types.Events.Event[]) {\n super(id, events[0]);\n this.events = events;\n this.childrenInternal = new Map();\n this.parent = parent;\n this.isGroupNodeInternal = true;\n }\n\n addChild(child: BottomUpNode, selfTime: number, totalTime: number, transferSize: number): void {\n this.childrenInternal.set(child.id, child);\n this.selfTime += selfTime;\n this.totalTime += totalTime;\n this.transferSize += transferSize;\n child.parent = this;\n }\n\n override hasChildren(): boolean {\n return true;\n }\n\n override children(): ChildrenCache {\n return this.childrenInternal;\n }\n}\n\nexport class BottomUpNode extends Node {\n override parent: Node;\n private root: BottomUpRootNode;\n override depth: number;\n private cachedChildren: ChildrenCache|null;\n private hasChildrenInternal: boolean;\n\n constructor(root: BottomUpRootNode, id: string, event: Types.Events.Event, hasChildren: boolean, parent: Node) {\n super(id, event);\n this.parent = parent;\n this.root = root;\n this.depth = (parent.depth || 0) + 1;\n this.cachedChildren = null;\n this.hasChildrenInternal = hasChildren;\n }\n\n override hasChildren(): boolean {\n return this.hasChildrenInternal;\n }\n\n override setHasChildren(value: boolean): void {\n this.hasChildrenInternal = value;\n }\n\n override children(): ChildrenCache {\n if (this.cachedChildren) {\n return this.cachedChildren;\n }\n const selfTimeStack: number[] = [0];\n const eventIdStack: string[] = [];\n const eventStack: Types.Events.Event[] = [];\n const nodeById = new Map<string, BottomUpNode>();\n const startTime = this.root.startTime;\n const endTime = this.root.endTime;\n let lastTimeMarker: number = startTime;\n const self = this;\n Helpers.Trace.forEachEvent(\n this.root.events,\n {\n onStartEvent,\n onEndEvent,\n startTime: Helpers.Timing.milliToMicro(startTime),\n endTime: Helpers.Timing.milliToMicro(endTime),\n eventFilter: this.root.filter,\n ignoreAsyncEvents: false,\n },\n );\n function onStartEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const duration = actualEndTime - Math.max(currentStartTime, startTime);\n if (duration < 0) {\n console.assert(false, 'Negative duration of an event');\n }\n selfTimeStack[selfTimeStack.length - 1] -= duration;\n selfTimeStack.push(duration);\n const id = generateEventID(e);\n eventIdStack.push(id);\n eventStack.push(e);\n }\n\n function onEndEvent(e: Types.Events.Event): void {\n const {startTime: currentStartTime, endTime: currentEndTime} = Helpers.Timing.eventTimingsMilliSeconds(e);\n const selfTime = selfTimeStack.pop();\n const id = eventIdStack.pop();\n eventStack.pop();\n let node;\n for (node = self; node.depth > 1; node = node.parent) {\n if (node.id !== eventIdStack[eventIdStack.length + 1 - node.depth]) {\n return;\n }\n }\n if (node.id !== id || eventIdStack.length < self.depth) {\n return;\n }\n const childId = eventIdStack[eventIdStack.length - self.depth];\n node = nodeById.get(childId);\n if (!node) {\n const event = eventStack[eventStack.length - self.depth];\n const hasChildren = eventStack.length > self.depth;\n node = new BottomUpNode(self.root, childId, event, hasChildren, self);\n nodeById.set(childId, node);\n } else {\n node.events.push(e);\n }\n const actualEndTime = currentEndTime !== undefined ? Math.min(currentEndTime, endTime) : endTime;\n const totalTime = actualEndTime - Math.max(currentStartTime, lastTimeMarker);\n node.selfTime += selfTime || 0;\n node.totalTime += totalTime;\n lastTimeMarker = actualEndTime;\n }\n\n this.cachedChildren = this.root.filterChildren(nodeById);\n return this.cachedChildren;\n }\n\n override searchTree(matchFunction: (arg0: Types.Events.Event) => boolean, results?: Node[]): Node[] {\n results = results || [];\n if (this.event && matchFunction(this.event)) {\n results.push(this);\n }\n return results;\n }\n}\n\nexport function eventStackFrame(event: Types.Events.Event): Protocol.Runtime.CallFrame|null {\n if (Types.Events.isProfileCall(event)) {\n return event.callFrame;\n }\n const topFrame = event.args?.data?.stackTrace?.[0];\n if (!topFrame) {\n return null;\n }\n return {...topFrame, scriptId: String(topFrame.scriptId) as Protocol.Runtime.ScriptId};\n}\n\n/** TODO(paulirish): rename to generateNodeId **/\nexport function generateEventID(event: Types.Events.Event): string {\n if (Types.Events.isProfileCall(event)) {\n const name = SamplesIntegrator.isNativeRuntimeFrame(event.callFrame) ?\n SamplesIntegrator.nativeGroup(event.callFrame.functionName) :\n event.callFrame.functionName;\n const location = event.callFrame.scriptId || event.callFrame.url || '';\n return `f:${name}@${location}`;\n }\n\n if (Types.Events.isConsoleTimeStamp(event) && event.args.data) {\n return `${event.name}:${event.args.data.name}`;\n }\n if (Types.Events.isSyntheticNetworkRequest(event) || Types.Events.isReceivedDataEvent(event)) {\n return `req:${event.args.data.requestId}`;\n }\n\n return event.name;\n}\n\nexport type ChildrenCache = Map<string|symbol, Node>;\n"]}
@@ -8,7 +8,11 @@
8
8
  "forceConsistentCasingInFileNames": true,
9
9
  "inlineSources": true,
10
10
  "lib": [
11
- "esnext",
11
+ "ES2023",
12
+ "ES2024.Promise",
13
+ "ESNext.Iterator",
14
+ "ESNext.Collection",
15
+ "ESNext.Array",
12
16
  "dom",
13
17
  "dom.iterable"
14
18
  ],
@@ -24,7 +28,7 @@
24
28
  "skipLibCheck": true,
25
29
  "sourceMap": true,
26
30
  "strict": true,
27
- "target": "esnext",
31
+ "target": "ES2023",
28
32
  "tsBuildInfoFile": "devtools_entrypoint-bundle-typescript-tsconfig.json.tsbuildinfo",
29
33
  "typeRoots": [],
30
34
  "useUnknownInCatchVariables": false
@@ -8,7 +8,11 @@
8
8
  "forceConsistentCasingInFileNames": true,
9
9
  "inlineSources": true,
10
10
  "lib": [
11
- "esnext",
11
+ "ES2023",
12
+ "ES2024.Promise",
13
+ "ESNext.Iterator",
14
+ "ESNext.Collection",
15
+ "ESNext.Array",
12
16
  "dom",
13
17
  "dom.iterable"
14
18
  ],
@@ -24,7 +28,7 @@
24
28
  "skipLibCheck": true,
25
29
  "sourceMap": true,
26
30
  "strict": true,
27
- "target": "esnext",
31
+ "target": "ES2023",
28
32
  "tsBuildInfoFile": "extras-tsconfig.json.tsbuildinfo",
29
33
  "typeRoots": [],
30
34
  "useUnknownInCatchVariables": false