@paulirish/trace_engine 0.0.58 → 0.0.60

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 (450) 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 +224 -14
  46. package/generated/protocol.js +1 -1
  47. package/locales/af.json +0 -9
  48. package/locales/am.json +0 -9
  49. package/locales/ar.json +0 -9
  50. package/locales/as.json +0 -9
  51. package/locales/az.json +0 -9
  52. package/locales/be.json +0 -9
  53. package/locales/bg.json +0 -9
  54. package/locales/bn.json +1 -10
  55. package/locales/bs.json +0 -9
  56. package/locales/ca.json +0 -9
  57. package/locales/cs.json +0 -9
  58. package/locales/cy.json +0 -9
  59. package/locales/da.json +0 -9
  60. package/locales/de.json +0 -9
  61. package/locales/el.json +0 -9
  62. package/locales/en-GB.json +0 -9
  63. package/locales/en-US.json +8 -8
  64. package/locales/en-XL.json +8 -8
  65. package/locales/es-419.json +0 -9
  66. package/locales/es.json +0 -9
  67. package/locales/et.json +0 -9
  68. package/locales/eu.json +0 -9
  69. package/locales/fa.json +0 -9
  70. package/locales/fi.json +0 -9
  71. package/locales/fil.json +0 -9
  72. package/locales/fr-CA.json +0 -9
  73. package/locales/fr.json +0 -9
  74. package/locales/gl.json +0 -9
  75. package/locales/gu.json +0 -9
  76. package/locales/he.json +0 -9
  77. package/locales/hi.json +0 -9
  78. package/locales/hr.json +4 -13
  79. package/locales/hu.json +0 -9
  80. package/locales/hy.json +0 -9
  81. package/locales/id.json +0 -9
  82. package/locales/is.json +0 -9
  83. package/locales/it.json +0 -9
  84. package/locales/ja.json +0 -9
  85. package/locales/ka.json +0 -9
  86. package/locales/kk.json +0 -9
  87. package/locales/km.json +0 -9
  88. package/locales/kn.json +0 -9
  89. package/locales/ko.json +0 -9
  90. package/locales/ky.json +0 -9
  91. package/locales/lo.json +0 -9
  92. package/locales/lt.json +0 -9
  93. package/locales/lv.json +0 -9
  94. package/locales/mk.json +0 -9
  95. package/locales/ml.json +0 -9
  96. package/locales/mn.json +0 -9
  97. package/locales/mr.json +0 -9
  98. package/locales/ms.json +0 -9
  99. package/locales/my.json +1 -10
  100. package/locales/ne.json +22 -31
  101. package/locales/nl.json +0 -9
  102. package/locales/no.json +0 -9
  103. package/locales/or.json +0 -9
  104. package/locales/pa.json +0 -9
  105. package/locales/pl.json +0 -9
  106. package/locales/pt-PT.json +0 -9
  107. package/locales/pt.json +0 -9
  108. package/locales/ro.json +0 -9
  109. package/locales/ru.json +0 -9
  110. package/locales/si.json +1 -10
  111. package/locales/sk.json +0 -9
  112. package/locales/sl.json +0 -9
  113. package/locales/sq.json +0 -9
  114. package/locales/sr-Latn.json +0 -9
  115. package/locales/sr.json +0 -9
  116. package/locales/sv.json +0 -9
  117. package/locales/sw.json +0 -9
  118. package/locales/ta.json +0 -9
  119. package/locales/te.json +0 -9
  120. package/locales/th.json +0 -9
  121. package/locales/tr.json +0 -9
  122. package/locales/uk.json +0 -9
  123. package/locales/ur.json +0 -9
  124. package/locales/uz.json +0 -9
  125. package/locales/vi.json +0 -9
  126. package/locales/zh-HK.json +0 -9
  127. package/locales/zh-TW.json +0 -9
  128. package/locales/zh.json +0 -9
  129. package/locales/zu.json +0 -9
  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 +12 -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.js.map +1 -1
  184. package/models/trace/handlers/AnimationFramesHandler.js +11 -11
  185. package/models/trace/handlers/AnimationFramesHandler.js.map +1 -1
  186. package/models/trace/handlers/AnimationHandler.js +5 -5
  187. package/models/trace/handlers/AnimationHandler.js.map +1 -1
  188. package/models/trace/handlers/AsyncJSCallsHandler.d.ts +3 -3
  189. package/models/trace/handlers/AsyncJSCallsHandler.js +9 -9
  190. package/models/trace/handlers/AsyncJSCallsHandler.js.map +1 -1
  191. package/models/trace/handlers/AuctionWorkletsHandler.js +12 -12
  192. package/models/trace/handlers/AuctionWorkletsHandler.js.map +1 -1
  193. package/models/trace/handlers/DOMStatsHandler.js +3 -3
  194. package/models/trace/handlers/DOMStatsHandler.js.map +1 -1
  195. package/models/trace/handlers/ExtensionTraceDataHandler.d.ts +15 -2
  196. package/models/trace/handlers/ExtensionTraceDataHandler.js +53 -64
  197. package/models/trace/handlers/ExtensionTraceDataHandler.js.map +1 -1
  198. package/models/trace/handlers/FlowsHandler.js +11 -11
  199. package/models/trace/handlers/FlowsHandler.js.map +1 -1
  200. package/models/trace/handlers/FramesHandler.d.ts +7 -0
  201. package/models/trace/handlers/FramesHandler.js +12 -10
  202. package/models/trace/handlers/FramesHandler.js.map +1 -1
  203. package/models/trace/handlers/GPUHandler.js +3 -3
  204. package/models/trace/handlers/GPUHandler.js.map +1 -1
  205. package/models/trace/handlers/ImagePaintingHandler.js +13 -13
  206. package/models/trace/handlers/ImagePaintingHandler.js.map +1 -1
  207. package/models/trace/handlers/InitiatorsHandler.js +32 -41
  208. package/models/trace/handlers/InitiatorsHandler.js.map +1 -1
  209. package/models/trace/handlers/InvalidationsHandler.js +63 -44
  210. package/models/trace/handlers/InvalidationsHandler.js.map +1 -1
  211. package/models/trace/handlers/LargestImagePaintHandler.js +5 -4
  212. package/models/trace/handlers/LargestImagePaintHandler.js.map +1 -1
  213. package/models/trace/handlers/LargestTextPaintHandler.js +3 -3
  214. package/models/trace/handlers/LargestTextPaintHandler.js.map +1 -1
  215. package/models/trace/handlers/LayerTreeHandler.js +11 -11
  216. package/models/trace/handlers/LayerTreeHandler.js.map +1 -1
  217. package/models/trace/handlers/LayoutShiftsHandler.d.ts +17 -4
  218. package/models/trace/handlers/LayoutShiftsHandler.js +47 -40
  219. package/models/trace/handlers/LayoutShiftsHandler.js.map +1 -1
  220. package/models/trace/handlers/MemoryHandler.js +3 -3
  221. package/models/trace/handlers/MemoryHandler.js.map +1 -1
  222. package/models/trace/handlers/MetaHandler.d.ts +22 -1
  223. package/models/trace/handlers/MetaHandler.js +30 -29
  224. package/models/trace/handlers/MetaHandler.js.map +1 -1
  225. package/models/trace/handlers/ModelHandlers.js +1 -1
  226. package/models/trace/handlers/ModelHandlers.js.map +1 -1
  227. package/models/trace/handlers/NetworkRequestsHandler.d.ts +10 -0
  228. package/models/trace/handlers/NetworkRequestsHandler.js +44 -25
  229. package/models/trace/handlers/NetworkRequestsHandler.js.map +1 -1
  230. package/models/trace/handlers/PageFramesHandler.js +3 -3
  231. package/models/trace/handlers/PageFramesHandler.js.map +1 -1
  232. package/models/trace/handlers/PageLoadMetricsHandler.js +5 -5
  233. package/models/trace/handlers/PageLoadMetricsHandler.js.map +1 -1
  234. package/models/trace/handlers/RendererHandler.d.ts +1 -1
  235. package/models/trace/handlers/RendererHandler.js +22 -22
  236. package/models/trace/handlers/RendererHandler.js.map +1 -1
  237. package/models/trace/handlers/SamplesHandler.d.ts +2 -2
  238. package/models/trace/handlers/SamplesHandler.js +7 -9
  239. package/models/trace/handlers/SamplesHandler.js.map +1 -1
  240. package/models/trace/handlers/ScreenshotsHandler.js +9 -10
  241. package/models/trace/handlers/ScreenshotsHandler.js.map +1 -1
  242. package/models/trace/handlers/ScriptsHandler.js +9 -8
  243. package/models/trace/handlers/ScriptsHandler.js.map +1 -1
  244. package/models/trace/handlers/SelectorStatsHandler.d.ts +2 -2
  245. package/models/trace/handlers/SelectorStatsHandler.js +13 -13
  246. package/models/trace/handlers/SelectorStatsHandler.js.map +1 -1
  247. package/models/trace/handlers/Threads.d.ts +2 -2
  248. package/models/trace/handlers/Threads.js +9 -9
  249. package/models/trace/handlers/Threads.js.map +1 -1
  250. package/models/trace/handlers/UserInteractionsHandler.d.ts +10 -3
  251. package/models/trace/handlers/UserInteractionsHandler.js +104 -84
  252. package/models/trace/handlers/UserInteractionsHandler.js.map +1 -1
  253. package/models/trace/handlers/UserTimingsHandler.d.ts +21 -0
  254. package/models/trace/handlers/UserTimingsHandler.js +67 -39
  255. package/models/trace/handlers/UserTimingsHandler.js.map +1 -1
  256. package/models/trace/handlers/WarningsHandler.js +14 -14
  257. package/models/trace/handlers/WarningsHandler.js.map +1 -1
  258. package/models/trace/handlers/WorkersHandler.js +7 -7
  259. package/models/trace/handlers/WorkersHandler.js.map +1 -1
  260. package/models/trace/handlers/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  261. package/models/trace/handlers/handlers-tsconfig.json +6 -2
  262. package/models/trace/handlers/handlers.js +1 -1
  263. package/models/trace/handlers/handlers.js.map +1 -1
  264. package/models/trace/handlers/helpers.d.ts +3 -2
  265. package/models/trace/handlers/helpers.js +10 -10
  266. package/models/trace/handlers/helpers.js.map +1 -1
  267. package/models/trace/handlers/types.d.ts +25 -2
  268. package/models/trace/handlers/types.js.map +1 -1
  269. package/models/trace/helpers/Extensions.js +8 -8
  270. package/models/trace/helpers/Extensions.js.map +1 -1
  271. package/models/trace/helpers/Network.js.map +1 -1
  272. package/models/trace/helpers/SamplesIntegrator.js +11 -9
  273. package/models/trace/helpers/SamplesIntegrator.js.map +1 -1
  274. package/models/trace/helpers/SyntheticEvents.js +1 -1
  275. package/models/trace/helpers/SyntheticEvents.js.map +1 -1
  276. package/models/trace/helpers/Timing.d.ts +4 -0
  277. package/models/trace/helpers/Timing.js +6 -4
  278. package/models/trace/helpers/Timing.js.map +1 -1
  279. package/models/trace/helpers/Trace.d.ts +21 -23
  280. package/models/trace/helpers/Trace.js +188 -67
  281. package/models/trace/helpers/Trace.js.map +1 -1
  282. package/models/trace/helpers/TreeHelpers.js +1 -1
  283. package/models/trace/helpers/TreeHelpers.js.map +1 -1
  284. package/models/trace/helpers/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  285. package/models/trace/helpers/helpers-tsconfig.json +6 -2
  286. package/models/trace/helpers/helpers.js +1 -1
  287. package/models/trace/helpers/helpers.js.map +1 -1
  288. package/models/trace/insights/CLSCulprits.d.ts +2 -2
  289. package/models/trace/insights/CLSCulprits.js +14 -14
  290. package/models/trace/insights/CLSCulprits.js.map +1 -1
  291. package/models/trace/insights/Cache.d.ts +2 -1
  292. package/models/trace/insights/Cache.js +8 -5
  293. package/models/trace/insights/Cache.js.map +1 -1
  294. package/models/trace/insights/Common.d.ts +9 -1
  295. package/models/trace/insights/Common.js +33 -1
  296. package/models/trace/insights/Common.js.map +1 -1
  297. package/models/trace/insights/DOMSize.d.ts +3 -2
  298. package/models/trace/insights/DOMSize.js +10 -7
  299. package/models/trace/insights/DOMSize.js.map +1 -1
  300. package/models/trace/insights/DocumentLatency.d.ts +2 -2
  301. package/models/trace/insights/DocumentLatency.js +18 -17
  302. package/models/trace/insights/DocumentLatency.js.map +1 -1
  303. package/models/trace/insights/DuplicatedJavaScript.d.ts +2 -2
  304. package/models/trace/insights/DuplicatedJavaScript.js +5 -5
  305. package/models/trace/insights/DuplicatedJavaScript.js.map +1 -1
  306. package/models/trace/insights/FontDisplay.d.ts +2 -1
  307. package/models/trace/insights/FontDisplay.js +7 -4
  308. package/models/trace/insights/FontDisplay.js.map +1 -1
  309. package/models/trace/insights/ForcedReflow.d.ts +2 -1
  310. package/models/trace/insights/ForcedReflow.js +6 -3
  311. package/models/trace/insights/ForcedReflow.js.map +1 -1
  312. package/models/trace/insights/INPBreakdown.d.ts +3 -3
  313. package/models/trace/insights/INPBreakdown.js +16 -5
  314. package/models/trace/insights/INPBreakdown.js.map +1 -1
  315. package/models/trace/insights/ImageDelivery.d.ts +2 -2
  316. package/models/trace/insights/ImageDelivery.js +13 -13
  317. package/models/trace/insights/ImageDelivery.js.map +1 -1
  318. package/models/trace/insights/LCPBreakdown.d.ts +3 -2
  319. package/models/trace/insights/LCPBreakdown.js +21 -15
  320. package/models/trace/insights/LCPBreakdown.js.map +1 -1
  321. package/models/trace/insights/LCPDiscovery.d.ts +2 -2
  322. package/models/trace/insights/LCPDiscovery.js +9 -11
  323. package/models/trace/insights/LCPDiscovery.js.map +1 -1
  324. package/models/trace/insights/LegacyJavaScript.d.ts +1 -1
  325. package/models/trace/insights/LegacyJavaScript.js +5 -4
  326. package/models/trace/insights/LegacyJavaScript.js.map +1 -1
  327. package/models/trace/insights/Models.js +1 -1
  328. package/models/trace/insights/Models.js.map +1 -1
  329. package/models/trace/insights/ModernHTTP.d.ts +2 -2
  330. package/models/trace/insights/ModernHTTP.js +6 -6
  331. package/models/trace/insights/ModernHTTP.js.map +1 -1
  332. package/models/trace/insights/NetworkDependencyTree.d.ts +6 -3
  333. package/models/trace/insights/NetworkDependencyTree.js +19 -16
  334. package/models/trace/insights/NetworkDependencyTree.js.map +1 -1
  335. package/models/trace/insights/RenderBlocking.d.ts +2 -2
  336. package/models/trace/insights/RenderBlocking.js +11 -11
  337. package/models/trace/insights/RenderBlocking.js.map +1 -1
  338. package/models/trace/insights/SlowCSSSelector.d.ts +3 -2
  339. package/models/trace/insights/SlowCSSSelector.js +9 -6
  340. package/models/trace/insights/SlowCSSSelector.js.map +1 -1
  341. package/models/trace/insights/Statistics.js +1 -1
  342. package/models/trace/insights/Statistics.js.map +1 -1
  343. package/models/trace/insights/ThirdParties.d.ts +2 -1
  344. package/models/trace/insights/ThirdParties.js +8 -5
  345. package/models/trace/insights/ThirdParties.js.map +1 -1
  346. package/models/trace/insights/Viewport.d.ts +2 -1
  347. package/models/trace/insights/Viewport.js +8 -5
  348. package/models/trace/insights/Viewport.js.map +1 -1
  349. package/models/trace/insights/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  350. package/models/trace/insights/insights-tsconfig.json +6 -2
  351. package/models/trace/insights/insights.d.ts +2 -0
  352. package/models/trace/insights/insights.js +3 -1
  353. package/models/trace/insights/insights.js.map +1 -1
  354. package/models/trace/insights/types.d.ts +4 -1
  355. package/models/trace/insights/types.js +2 -1
  356. package/models/trace/insights/types.js.map +1 -1
  357. package/models/trace/lantern/core/LanternError.js +1 -1
  358. package/models/trace/lantern/core/LanternError.js.map +1 -1
  359. package/models/trace/lantern/core/NetworkAnalyzer.js +1 -1
  360. package/models/trace/lantern/core/NetworkAnalyzer.js.map +1 -1
  361. package/models/trace/lantern/core/core-tsconfig.json +6 -2
  362. package/models/trace/lantern/core/core.js +1 -1
  363. package/models/trace/lantern/core/core.js.map +1 -1
  364. package/models/trace/lantern/core/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  365. package/models/trace/lantern/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  366. package/models/trace/lantern/graph/BaseNode.js +1 -1
  367. package/models/trace/lantern/graph/BaseNode.js.map +1 -1
  368. package/models/trace/lantern/graph/CPUNode.js +1 -1
  369. package/models/trace/lantern/graph/CPUNode.js.map +1 -1
  370. package/models/trace/lantern/graph/NetworkNode.js +1 -1
  371. package/models/trace/lantern/graph/NetworkNode.js.map +1 -1
  372. package/models/trace/lantern/graph/PageDependencyGraph.js +1 -1
  373. package/models/trace/lantern/graph/PageDependencyGraph.js.map +1 -1
  374. package/models/trace/lantern/graph/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  375. package/models/trace/lantern/graph/graph-tsconfig.json +6 -2
  376. package/models/trace/lantern/graph/graph.js +1 -1
  377. package/models/trace/lantern/graph/graph.js.map +1 -1
  378. package/models/trace/lantern/lantern-tsconfig.json +6 -2
  379. package/models/trace/lantern/lantern.js +1 -1
  380. package/models/trace/lantern/lantern.js.map +1 -1
  381. package/models/trace/lantern/metrics/FirstContentfulPaint.js +1 -1
  382. package/models/trace/lantern/metrics/FirstContentfulPaint.js.map +1 -1
  383. package/models/trace/lantern/metrics/Interactive.js +1 -1
  384. package/models/trace/lantern/metrics/Interactive.js.map +1 -1
  385. package/models/trace/lantern/metrics/LargestContentfulPaint.js +1 -1
  386. package/models/trace/lantern/metrics/LargestContentfulPaint.js.map +1 -1
  387. package/models/trace/lantern/metrics/MaxPotentialFID.js +1 -1
  388. package/models/trace/lantern/metrics/MaxPotentialFID.js.map +1 -1
  389. package/models/trace/lantern/metrics/Metric.js +1 -1
  390. package/models/trace/lantern/metrics/Metric.js.map +1 -1
  391. package/models/trace/lantern/metrics/SpeedIndex.js +1 -1
  392. package/models/trace/lantern/metrics/SpeedIndex.js.map +1 -1
  393. package/models/trace/lantern/metrics/TBTUtils.js +1 -1
  394. package/models/trace/lantern/metrics/TBTUtils.js.map +1 -1
  395. package/models/trace/lantern/metrics/TotalBlockingTime.js +1 -1
  396. package/models/trace/lantern/metrics/TotalBlockingTime.js.map +1 -1
  397. package/models/trace/lantern/metrics/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  398. package/models/trace/lantern/metrics/metrics-tsconfig.json +6 -2
  399. package/models/trace/lantern/metrics/metrics.js +1 -1
  400. package/models/trace/lantern/metrics/metrics.js.map +1 -1
  401. package/models/trace/lantern/simulation/ConnectionPool.js +1 -1
  402. package/models/trace/lantern/simulation/ConnectionPool.js.map +1 -1
  403. package/models/trace/lantern/simulation/Constants.js +1 -1
  404. package/models/trace/lantern/simulation/Constants.js.map +1 -1
  405. package/models/trace/lantern/simulation/DNSCache.js +1 -1
  406. package/models/trace/lantern/simulation/DNSCache.js.map +1 -1
  407. package/models/trace/lantern/simulation/SimulationTimingMap.js +1 -1
  408. package/models/trace/lantern/simulation/SimulationTimingMap.js.map +1 -1
  409. package/models/trace/lantern/simulation/Simulator.js +1 -1
  410. package/models/trace/lantern/simulation/Simulator.js.map +1 -1
  411. package/models/trace/lantern/simulation/TCPConnection.js +1 -1
  412. package/models/trace/lantern/simulation/TCPConnection.js.map +1 -1
  413. package/models/trace/lantern/simulation/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  414. package/models/trace/lantern/simulation/simulation-tsconfig.json +6 -2
  415. package/models/trace/lantern/simulation/simulation.js +1 -1
  416. package/models/trace/lantern/simulation/simulation.js.map +1 -1
  417. package/models/trace/lantern/types/Lantern.js +1 -1
  418. package/models/trace/lantern/types/Lantern.js.map +1 -1
  419. package/models/trace/lantern/types/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  420. package/models/trace/lantern/types/types-tsconfig.json +6 -2
  421. package/models/trace/lantern/types/types.js +1 -1
  422. package/models/trace/lantern/types/types.js.map +1 -1
  423. package/models/trace/trace-tsconfig.json +10 -2
  424. package/models/trace/trace.d.ts +5 -1
  425. package/models/trace/trace.js +6 -2
  426. package/models/trace/trace.js.map +1 -1
  427. package/models/trace/types/Configuration.d.ts +11 -0
  428. package/models/trace/types/Configuration.js +1 -1
  429. package/models/trace/types/Configuration.js.map +1 -1
  430. package/models/trace/types/Extensions.d.ts +25 -13
  431. package/models/trace/types/Extensions.js +6 -3
  432. package/models/trace/types/Extensions.js.map +1 -1
  433. package/models/trace/types/File.d.ts +13 -2
  434. package/models/trace/types/File.js +1 -1
  435. package/models/trace/types/File.js.map +1 -1
  436. package/models/trace/types/Overlays.d.ts +5 -4
  437. package/models/trace/types/Overlays.js +1 -1
  438. package/models/trace/types/Overlays.js.map +1 -1
  439. package/models/trace/types/Timing.d.ts +1 -0
  440. package/models/trace/types/Timing.js +1 -1
  441. package/models/trace/types/Timing.js.map +1 -1
  442. package/models/trace/types/TraceEvents.d.ts +81 -61
  443. package/models/trace/types/TraceEvents.js +42 -29
  444. package/models/trace/types/TraceEvents.js.map +1 -1
  445. package/models/trace/types/devtools_entrypoint-bundle-typescript-tsconfig.json +6 -2
  446. package/models/trace/types/types-tsconfig.json +6 -2
  447. package/models/trace/types/types.js +1 -1
  448. package/models/trace/types/types.js.map +1 -1
  449. package/package.json +1 -1
  450. package/test/test-trace-engine.mjs +4 -4
@@ -1,4 +1,4 @@
1
- // Copyright 2022 The Chromium Authors. All rights reserved.
1
+ // Copyright 2022 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 Platform from '../../../core/platform/platform.js';
@@ -24,7 +24,7 @@ export function stackTraceInEvent(event) {
24
24
  if (event.args?.stackTrace) {
25
25
  return event.args.stackTrace;
26
26
  }
27
- if (Types.Events.isUpdateLayoutTree(event)) {
27
+ if (Types.Events.isRecalcStyle(event)) {
28
28
  return event.args.beginData?.stackTrace || null;
29
29
  }
30
30
  if (Types.Events.isLayout(event)) {
@@ -69,8 +69,10 @@ export function extractOriginFromTrace(firstNavigationURL) {
69
69
  }
70
70
  return null;
71
71
  }
72
- // Each thread contains events. Events indicate the thread and process IDs, which are
73
- // used to store the event in the correct process thread entry below.
72
+ /**
73
+ * Each thread contains events. Events indicate the thread and process IDs, which are
74
+ * used to store the event in the correct process thread entry below.
75
+ **/
74
76
  export function addEventToProcessThread(event, eventsInProcessThread) {
75
77
  const { tid, pid } = event;
76
78
  let eventsInThread = eventsInProcessThread.get(pid);
@@ -85,25 +87,32 @@ export function addEventToProcessThread(event, eventsInProcessThread) {
85
87
  eventsInThread.set(event.tid, events);
86
88
  eventsInProcessThread.set(event.pid, eventsInThread);
87
89
  }
88
- export function eventTimeComparator(a, b) {
89
- const aBeginTime = a.ts;
90
- const bBeginTime = b.ts;
90
+ export function compareBeginAndEnd(aBeginTime, bBeginTime, aEndTime, bEndTime) {
91
91
  if (aBeginTime < bBeginTime) {
92
92
  return -1;
93
93
  }
94
94
  if (aBeginTime > bBeginTime) {
95
95
  return 1;
96
96
  }
97
- const aDuration = a.dur ?? 0;
98
- const bDuration = b.dur ?? 0;
99
- const aEndTime = aBeginTime + aDuration;
100
- const bEndTime = bBeginTime + bDuration;
101
97
  if (aEndTime > bEndTime) {
102
98
  return -1;
103
99
  }
104
100
  if (aEndTime < bEndTime) {
105
101
  return 1;
106
102
  }
103
+ return 0;
104
+ }
105
+ export function eventTimeComparator(a, b) {
106
+ const aBeginTime = a.ts;
107
+ const bBeginTime = b.ts;
108
+ const aDuration = a.dur ?? 0;
109
+ const bDuration = b.dur ?? 0;
110
+ const aEndTime = aBeginTime + aDuration;
111
+ const bEndTime = bBeginTime + bDuration;
112
+ const timeDifference = compareBeginAndEnd(aBeginTime, bBeginTime, aEndTime, bEndTime);
113
+ if (timeDifference) {
114
+ return timeDifference;
115
+ }
107
116
  // If times are equal, prioritize profile calls over trace events,
108
117
  // since an exactly equal timestamp with a trace event is likely
109
118
  // indicates that the SamplesIntegrator meant to parent the trace
@@ -152,6 +161,29 @@ export function mergeEventsInOrder(eventsArray1, eventsArray2) {
152
161
  }
153
162
  return result;
154
163
  }
164
+ export function parseDevtoolsDetails(timingDetail, key) {
165
+ try {
166
+ // Attempt to parse the detail as an object that might be coming from a
167
+ // DevTools Perf extension.
168
+ // Wrapped in a try-catch because timingDetail might either:
169
+ // 1. Not be `json.parse`-able (it should, but just in case...)
170
+ // 2. Not be an object - in which case the `in` check will error.
171
+ // If we hit either of these cases, we just ignore this mark and move on.
172
+ const detailObj = JSON.parse(timingDetail);
173
+ if (!(key in detailObj)) {
174
+ return null;
175
+ }
176
+ if (!Types.Extensions.isValidExtensionPayload(detailObj[key])) {
177
+ return null;
178
+ }
179
+ return detailObj[key];
180
+ }
181
+ catch {
182
+ // No need to worry about this error, just discard this event and don't
183
+ // treat it as having any useful information for the purposes of extensions.
184
+ return null;
185
+ }
186
+ }
155
187
  export function getNavigationForTraceEvent(event, eventFrameId, navigationsByFrameId) {
156
188
  const navigations = navigationsByFrameId.get(eventFrameId);
157
189
  if (!navigations || eventFrameId === '') {
@@ -211,52 +243,109 @@ export function makeProfileCall(node, profileId, sampleIndex, ts, pid, tid) {
211
243
  };
212
244
  }
213
245
  /**
214
- * Matches beginning events with PairableAsyncEnd and PairableAsyncInstant (ASYNC_NESTABLE_INSTANT)
215
- * if provided, though currently only coming from Animations. Traces may contain multiple instant events so we need to
216
- * account for that.
246
+ * Matches beginning events with PairableAsyncEnd and PairableAsyncInstant
247
+ * if provided. Traces may contain multiple instant events so we need to
248
+ * account for that. Additionally we have seen cases where we might only have a
249
+ * begin event & instant event(s), with no end event. So we account for that
250
+ * situation also.
251
+ *
252
+ * You might also like to read the models/trace/README.md which has some
253
+ * documentation on trace IDs. This is important as Perfetto will reuse trace
254
+ * IDs when emitting events (if they do not overlap). This means it's not as
255
+ * simple as grouping events by IDs. Instead, we group begin & instant events
256
+ * by ID as we find them. When we find end events, we then pop any matching
257
+ * begin/instant events off the stack and group those. That way, if we meet the
258
+ * same ID later on it doesn't cause us collisions.
217
259
  *
218
- * @returns Map of the animation's ID to it's matching events.
260
+ * @returns An array of all the matched event groups, along with their ID. Note
261
+ * that two event groups can have the same ID if they were non-overlapping
262
+ * events. You cannot rely on ID being unique across a trace. The returned set
263
+ * of groups are NOT SORTED in any order.
219
264
  */
220
- export function matchEvents(unpairedEvents) {
265
+ function matchEvents(unpairedEvents) {
266
+ sortTraceEventsInPlace(unpairedEvents);
221
267
  // map to store begin and end of the event
222
- const matchedPairs = new Map();
223
- // looking for start and end
268
+ const matches = [];
269
+ const beginEventsById = new Map();
270
+ const instantEventsById = new Map();
224
271
  for (const event of unpairedEvents) {
225
- const syntheticId = getSyntheticId(event);
226
- if (syntheticId === undefined) {
272
+ const id = getSyntheticId(event);
273
+ if (id === undefined) {
227
274
  continue;
228
275
  }
229
- // Create a synthetic id to prevent collisions across categories.
230
- // Console timings can be dispatched with the same id, so use the
231
- // event name as well to generate unique ids.
232
- const otherEventsWithID = Platform.MapUtilities.getWithDefault(matchedPairs, syntheticId, () => {
233
- return { begin: null, end: null, instant: [] };
234
- });
235
- const isStartEvent = event.ph === Types.Events.Phase.ASYNC_NESTABLE_START;
236
- const isEndEvent = event.ph === Types.Events.Phase.ASYNC_NESTABLE_END;
237
- const isInstantEvent = event.ph === Types.Events.Phase.ASYNC_NESTABLE_INSTANT;
238
- if (isStartEvent) {
239
- otherEventsWithID.begin = event;
240
- }
241
- else if (isEndEvent) {
242
- otherEventsWithID.end = event;
243
- }
244
- else if (isInstantEvent) {
245
- if (!otherEventsWithID.instant) {
246
- otherEventsWithID.instant = [];
276
+ if (Types.Events.isPairableAsyncBegin(event)) {
277
+ const existingEvents = beginEventsById.get(id) ?? [];
278
+ existingEvents.push(event);
279
+ beginEventsById.set(id, existingEvents);
280
+ }
281
+ else if (Types.Events.isPairableAsyncInstant(event)) {
282
+ const existingEvents = instantEventsById.get(id) ?? [];
283
+ existingEvents.push(event);
284
+ instantEventsById.set(id, existingEvents);
285
+ }
286
+ else if (Types.Events.isPairableAsyncEnd(event)) {
287
+ // Find matching begin event by ID
288
+ const beginEventsWithMatchingId = beginEventsById.get(id) ?? [];
289
+ const beginEvent = beginEventsWithMatchingId.pop();
290
+ if (!beginEvent) {
291
+ continue;
247
292
  }
248
- otherEventsWithID.instant.push(event);
293
+ const instantEventsWithMatchingId = instantEventsById.get(id) ?? [];
294
+ // Find all instant events after the begin event ts.
295
+ const instantEventsForThisGroup = [];
296
+ while (instantEventsWithMatchingId.length > 0) {
297
+ if (instantEventsWithMatchingId[0].ts >= beginEvent.ts) {
298
+ const event = instantEventsWithMatchingId.pop();
299
+ if (event) {
300
+ instantEventsForThisGroup.push(event);
301
+ }
302
+ }
303
+ else {
304
+ break;
305
+ }
306
+ }
307
+ const matchingGroup = {
308
+ begin: beginEvent,
309
+ end: event,
310
+ instant: instantEventsForThisGroup,
311
+ syntheticId: id,
312
+ };
313
+ matches.push(matchingGroup);
314
+ }
315
+ }
316
+ // At this point we know we have paired up all the Begin & End & Instant
317
+ // events. But it is possible to see only begin & instant events with the
318
+ // same ID, and no end event. So now we do a second pass through our begin
319
+ // events to find any that did not have an end event. If we find some
320
+ // instant events for the begin event, we create a new group.
321
+ // Also, because there were no end events, we know that the IDs will be
322
+ // unique now; e.g. each key in the map should have no more than one item in
323
+ // it.
324
+ for (const [id, beginEvents] of beginEventsById) {
325
+ const beginEvent = beginEvents.pop();
326
+ if (!beginEvent) {
327
+ continue;
328
+ }
329
+ const matchingInstantEvents = instantEventsById.get(id);
330
+ if (matchingInstantEvents?.length) {
331
+ matches.push({
332
+ syntheticId: id,
333
+ begin: beginEvent,
334
+ end: null,
335
+ instant: matchingInstantEvents,
336
+ });
249
337
  }
250
338
  }
251
- return matchedPairs;
339
+ return matches;
252
340
  }
253
- function getSyntheticId(event) {
341
+ export function getSyntheticId(event) {
254
342
  const id = extractId(event);
255
343
  return id && `${event.cat}:${id}:${event.name}`;
256
344
  }
257
- export function createSortedSyntheticEvents(matchedPairs, syntheticEventCallback) {
345
+ function createSortedSyntheticEvents(matchedPairs) {
258
346
  const syntheticEvents = [];
259
- for (const [id, eventsTriplet] of matchedPairs.entries()) {
347
+ for (const eventsTriplet of matchedPairs) {
348
+ const id = eventsTriplet.syntheticId;
260
349
  const beginEvent = eventsTriplet.begin;
261
350
  const endEvent = eventsTriplet.end;
262
351
  const instantEvents = eventsTriplet.instant;
@@ -304,14 +393,19 @@ export function createSortedSyntheticEvents(matchedPairs, syntheticEventCallback
304
393
  // crbug.com/1472375
305
394
  continue;
306
395
  }
307
- syntheticEventCallback?.(event);
308
396
  syntheticEvents.push(event);
309
397
  }
310
- return syntheticEvents.sort((a, b) => a.ts - b.ts);
398
+ sortTraceEventsInPlace(syntheticEvents);
399
+ return syntheticEvents;
311
400
  }
312
- export function createMatchedSortedSyntheticEvents(unpairedAsyncEvents, syntheticEventCallback) {
401
+ /**
402
+ * Groups up sets of async events into synthetic events.
403
+ * @param unpairedAsyncEvents the raw array of begin, end and async instant
404
+ * events. These MUST be sorted in timestamp ASC order.
405
+ */
406
+ export function createMatchedSortedSyntheticEvents(unpairedAsyncEvents) {
313
407
  const matchedPairs = matchEvents(unpairedAsyncEvents);
314
- const syntheticEvents = createSortedSyntheticEvents(matchedPairs, syntheticEventCallback);
408
+ const syntheticEvents = createSortedSyntheticEvents(matchedPairs);
315
409
  return syntheticEvents;
316
410
  }
317
411
  /**
@@ -367,23 +461,45 @@ export function getZeroIndexedStackTraceInEventPayload(event) {
367
461
  if (!stack) {
368
462
  return null;
369
463
  }
370
- return stack.map(callFrame => {
371
- switch (event.name) {
372
- case Types.Events.Name.SCHEDULE_STYLE_RECALCULATION:
373
- case Types.Events.Name.INVALIDATE_LAYOUT:
374
- case Types.Events.Name.FUNCTION_CALL:
375
- case Types.Events.Name.LAYOUT:
376
- case Types.Events.Name.UPDATE_LAYOUT_TREE: {
377
- return makeZeroBasedCallFrame(callFrame);
464
+ switch (event.name) {
465
+ case Types.Events.Name.SCHEDULE_STYLE_RECALCULATION:
466
+ case Types.Events.Name.INVALIDATE_LAYOUT:
467
+ case Types.Events.Name.FUNCTION_CALL:
468
+ case Types.Events.Name.LAYOUT:
469
+ case Types.Events.Name.RECALC_STYLE: {
470
+ return stack.map(makeZeroBasedCallFrame);
471
+ }
472
+ default: {
473
+ if (Types.Events.isUserTiming(event) || Types.Extensions.isSyntheticExtensionEntry(event)) {
474
+ return stack.map(makeZeroBasedCallFrame);
378
475
  }
379
- default: {
380
- if (Types.Events.isUserTiming(event) || Types.Extensions.isSyntheticExtensionEntry(event)) {
381
- return makeZeroBasedCallFrame(callFrame);
382
- }
476
+ return stack;
477
+ }
478
+ }
479
+ }
480
+ /**
481
+ * Same as getZeroIndexedStackTraceInEventPayload, but only returns the top call frame.
482
+ */
483
+ export function getStackTraceTopCallFrameInEventPayload(event) {
484
+ const stack = stackTraceInEvent(event);
485
+ if (!stack || stack.length === 0) {
486
+ return null;
487
+ }
488
+ switch (event.name) {
489
+ case Types.Events.Name.SCHEDULE_STYLE_RECALCULATION:
490
+ case Types.Events.Name.INVALIDATE_LAYOUT:
491
+ case Types.Events.Name.FUNCTION_CALL:
492
+ case Types.Events.Name.LAYOUT:
493
+ case Types.Events.Name.RECALC_STYLE: {
494
+ return makeZeroBasedCallFrame(stack[0]);
495
+ }
496
+ default: {
497
+ if (Types.Events.isUserTiming(event) || Types.Extensions.isSyntheticExtensionEntry(event)) {
498
+ return makeZeroBasedCallFrame(stack[0]);
383
499
  }
500
+ return stack[0];
384
501
  }
385
- return callFrame;
386
- });
502
+ }
387
503
  }
388
504
  /**
389
505
  * Given a 1-based call frame creates a 0-based one.
@@ -421,7 +537,7 @@ function getRawLineAndColumnNumbersForEvent(event) {
421
537
  return { lineNumber, columnNumber };
422
538
  }
423
539
  export function frameIDForEvent(event) {
424
- // There are a few events (for example UpdateLayoutTree, ParseHTML) that have
540
+ // There are a few events (for example RecalcStyle, ParseHTML) that have
425
541
  // the frame stored in args.beginData
426
542
  // Rather than list them all we just check for the presence of the field, so
427
543
  // we are robust against future trace events also doing this.
@@ -443,6 +559,9 @@ const DevToolsTimelineEventCategory = 'disabled-by-default-devtools.timeline';
443
559
  export function isTopLevelEvent(event) {
444
560
  return event.cat.includes(DevToolsTimelineEventCategory) && event.name === Types.Events.Name.RUN_TASK;
445
561
  }
562
+ export function isExtensionUrl(url) {
563
+ return url.startsWith('extensions:') || url.startsWith('chrome-extension:');
564
+ }
446
565
  function topLevelEventIndexEndingAfter(events, time) {
447
566
  let index = Platform.ArrayUtilities.upperBound(events, time, (time, event) => time - event.ts) - 1;
448
567
  while (index > 0 && !isTopLevelEvent(events[index])) {
@@ -450,12 +569,12 @@ function topLevelEventIndexEndingAfter(events, time) {
450
569
  }
451
570
  return Math.max(index, 0);
452
571
  }
453
- export function findUpdateLayoutTreeEvents(events, startTime, endTime) {
572
+ export function findRecalcStyleEvents(events, startTime, endTime) {
454
573
  const foundEvents = [];
455
574
  const startEventIndex = topLevelEventIndexEndingAfter(events, startTime);
456
575
  for (let i = startEventIndex; i < events.length; i++) {
457
576
  const event = events[i];
458
- if (!Types.Events.isUpdateLayoutTree(event)) {
577
+ if (!Types.Events.isRecalcStyle(event)) {
459
578
  continue;
460
579
  }
461
580
  if (event.ts >= (endTime || Infinity)) {
@@ -586,8 +705,10 @@ export function extractSampleTraceId(event) {
586
705
  }
587
706
  return event.args?.sampleTraceId ?? event.args?.data?.sampleTraceId ?? null;
588
707
  }
589
- // This exactly matches EntryStyles.visibleTypes. See the runtime verification in maybeInitSylesMap.
590
- // TODO(crbug.com/410884528)
708
+ /**
709
+ * This exactly matches Trace.Styles.visibleTypes. See the runtime verification in maybeInitStylesMap.
710
+ * TODO(crbug.com/410884528)
711
+ **/
591
712
  export const VISIBLE_TRACE_EVENT_TYPES = new Set([
592
713
  Types.Events.Name.ABORT_POST_TASK_CALLBACK,
593
714
  Types.Events.Name.ANIMATION,
@@ -669,7 +790,7 @@ export const VISIBLE_TRACE_EVENT_TYPES = new Set([
669
790
  Types.Events.Name.TIMER_INSTALL,
670
791
  Types.Events.Name.TIMER_REMOVE,
671
792
  Types.Events.Name.UPDATE_LAYER_TREE,
672
- Types.Events.Name.UPDATE_LAYOUT_TREE,
793
+ Types.Events.Name.RECALC_STYLE,
673
794
  Types.Events.Name.USER_TIMING,
674
795
  Types.Events.Name.V8_CONSOLE_RUN_TASK,
675
796
  Types.Events.Name.WASM_CACHED_MODULE,