@paulirish/trace_engine 0.0.31 → 0.0.33

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 (283) hide show
  1. package/README.md +6 -10
  2. package/analyze-trace.mjs +9 -10
  3. package/core/platform/ArrayUtilities.js +1 -0
  4. package/core/platform/ArrayUtilities.js.map +1 -1
  5. package/core/platform/DevToolsPath.d.ts +1 -1
  6. package/core/platform/DevToolsPath.js.map +1 -1
  7. package/core/platform/MimeType.js +4 -2
  8. package/core/platform/MimeType.js.map +1 -1
  9. package/core/platform/NumberUtilities.js +8 -0
  10. package/core/platform/NumberUtilities.js.map +1 -1
  11. package/core/platform/ServerTiming.d.ts +31 -0
  12. package/core/platform/ServerTiming.js +212 -0
  13. package/core/platform/ServerTiming.js.map +1 -0
  14. package/core/platform/Timing.d.ts +1 -1
  15. package/core/platform/Timing.js.map +1 -1
  16. package/core/platform/TypescriptUtilities.d.ts +3 -0
  17. package/core/platform/TypescriptUtilities.js.map +1 -1
  18. package/core/platform/UIString.d.ts +1 -1
  19. package/core/platform/UIString.js.map +1 -1
  20. package/core/platform/UserVisibleError.d.ts +1 -1
  21. package/core/platform/UserVisibleError.js.map +1 -1
  22. package/core/platform/platform-tsconfig.json +1 -1
  23. package/core/platform/platform.d.ts +2 -2
  24. package/core/platform/platform.js +2 -2
  25. package/core/platform/platform.js.map +1 -1
  26. package/generated/protocol.d.ts +258 -14
  27. package/models/trace/LanternComputationData.d.ts +4 -4
  28. package/models/trace/LanternComputationData.js +22 -23
  29. package/models/trace/LanternComputationData.js.map +1 -1
  30. package/models/trace/ModelImpl.d.ts +11 -12
  31. package/models/trace/ModelImpl.js +22 -33
  32. package/models/trace/ModelImpl.js.map +1 -1
  33. package/models/trace/Processor.d.ts +21 -12
  34. package/models/trace/Processor.js +148 -67
  35. package/models/trace/Processor.js.map +1 -1
  36. package/models/trace/TracingManager.js.map +1 -1
  37. package/models/trace/extras/FetchNodes.d.ts +8 -8
  38. package/models/trace/extras/FetchNodes.js +16 -11
  39. package/models/trace/extras/FetchNodes.js.map +1 -1
  40. package/models/trace/extras/FilmStrip.d.ts +2 -2
  41. package/models/trace/extras/FilmStrip.js +8 -8
  42. package/models/trace/extras/FilmStrip.js.map +1 -1
  43. package/models/trace/extras/MainThreadActivity.d.ts +1 -1
  44. package/models/trace/extras/MainThreadActivity.js +1 -1
  45. package/models/trace/extras/MainThreadActivity.js.map +1 -1
  46. package/models/trace/extras/Metadata.js +2 -2
  47. package/models/trace/extras/Metadata.js.map +1 -1
  48. package/models/trace/extras/URLForEntry.d.ts +9 -1
  49. package/models/trace/extras/URLForEntry.js +18 -10
  50. package/models/trace/extras/URLForEntry.js.map +1 -1
  51. package/models/trace/extras/extras.js +1 -1
  52. package/models/trace/handlers/AnimationHandler.d.ts +2 -2
  53. package/models/trace/handlers/AnimationHandler.js +1 -1
  54. package/models/trace/handlers/AnimationHandler.js.map +1 -1
  55. package/models/trace/handlers/AuctionWorkletsHandler.d.ts +2 -2
  56. package/models/trace/handlers/AuctionWorkletsHandler.js +11 -11
  57. package/models/trace/handlers/AuctionWorkletsHandler.js.map +1 -1
  58. package/models/trace/handlers/ExtensionTraceDataHandler.d.ts +7 -5
  59. package/models/trace/handlers/ExtensionTraceDataHandler.js +16 -10
  60. package/models/trace/handlers/ExtensionTraceDataHandler.js.map +1 -1
  61. package/models/trace/handlers/FramesHandler.d.ts +24 -19
  62. package/models/trace/handlers/FramesHandler.js +46 -25
  63. package/models/trace/handlers/FramesHandler.js.map +1 -1
  64. package/models/trace/handlers/GPUHandler.d.ts +4 -4
  65. package/models/trace/handlers/GPUHandler.js +3 -3
  66. package/models/trace/handlers/GPUHandler.js.map +1 -1
  67. package/models/trace/handlers/ImagePaintingHandler.d.ts +3 -3
  68. package/models/trace/handlers/ImagePaintingHandler.js +6 -8
  69. package/models/trace/handlers/ImagePaintingHandler.js.map +1 -1
  70. package/models/trace/handlers/InitiatorsHandler.d.ts +3 -3
  71. package/models/trace/handlers/InitiatorsHandler.js +14 -14
  72. package/models/trace/handlers/InitiatorsHandler.js.map +1 -1
  73. package/models/trace/handlers/InvalidationsHandler.d.ts +4 -2
  74. package/models/trace/handlers/InvalidationsHandler.js +29 -11
  75. package/models/trace/handlers/InvalidationsHandler.js.map +1 -1
  76. package/models/trace/handlers/LargestImagePaintHandler.d.ts +2 -2
  77. package/models/trace/handlers/LargestImagePaintHandler.js +1 -1
  78. package/models/trace/handlers/LargestImagePaintHandler.js.map +1 -1
  79. package/models/trace/handlers/LargestTextPaintHandler.d.ts +2 -2
  80. package/models/trace/handlers/LargestTextPaintHandler.js +1 -1
  81. package/models/trace/handlers/LargestTextPaintHandler.js.map +1 -1
  82. package/models/trace/handlers/LayerTreeHandler.d.ts +6 -6
  83. package/models/trace/handlers/LayerTreeHandler.js +6 -6
  84. package/models/trace/handlers/LayerTreeHandler.js.map +1 -1
  85. package/models/trace/handlers/LayoutShiftsHandler.d.ts +12 -20
  86. package/models/trace/handlers/LayoutShiftsHandler.js +73 -12
  87. package/models/trace/handlers/LayoutShiftsHandler.js.map +1 -1
  88. package/models/trace/handlers/MemoryHandler.d.ts +2 -2
  89. package/models/trace/handlers/MemoryHandler.js +1 -1
  90. package/models/trace/handlers/MemoryHandler.js.map +1 -1
  91. package/models/trace/handlers/MetaHandler.d.ts +15 -14
  92. package/models/trace/handlers/MetaHandler.js +32 -30
  93. package/models/trace/handlers/MetaHandler.js.map +1 -1
  94. package/models/trace/handlers/ModelHandlers.d.ts +1 -1
  95. package/models/trace/handlers/ModelHandlers.js +1 -1
  96. package/models/trace/handlers/ModelHandlers.js.map +1 -1
  97. package/models/trace/handlers/NetworkRequestsHandler.d.ts +13 -12
  98. package/models/trace/handlers/NetworkRequestsHandler.js +68 -66
  99. package/models/trace/handlers/NetworkRequestsHandler.js.map +1 -1
  100. package/models/trace/handlers/PageFramesHandler.d.ts +2 -2
  101. package/models/trace/handlers/PageFramesHandler.js +2 -2
  102. package/models/trace/handlers/PageFramesHandler.js.map +1 -1
  103. package/models/trace/handlers/PageLoadMetricsHandler.d.ts +7 -7
  104. package/models/trace/handlers/PageLoadMetricsHandler.js +21 -24
  105. package/models/trace/handlers/PageLoadMetricsHandler.js.map +1 -1
  106. package/models/trace/handlers/RendererHandler.d.ts +19 -19
  107. package/models/trace/handlers/RendererHandler.js +5 -5
  108. package/models/trace/handlers/RendererHandler.js.map +1 -1
  109. package/models/trace/handlers/SamplesHandler.d.ts +6 -6
  110. package/models/trace/handlers/SamplesHandler.js +4 -4
  111. package/models/trace/handlers/SamplesHandler.js.map +1 -1
  112. package/models/trace/handlers/ScreenshotsHandler.d.ts +6 -4
  113. package/models/trace/handlers/ScreenshotsHandler.js +11 -9
  114. package/models/trace/handlers/ScreenshotsHandler.js.map +1 -1
  115. package/models/trace/handlers/SelectorStatsHandler.d.ts +3 -3
  116. package/models/trace/handlers/SelectorStatsHandler.js +2 -2
  117. package/models/trace/handlers/SelectorStatsHandler.js.map +1 -1
  118. package/models/trace/handlers/ServerTimingsHandler.d.ts +10 -0
  119. package/models/trace/handlers/ServerTimingsHandler.js +118 -0
  120. package/models/trace/handlers/ServerTimingsHandler.js.map +1 -0
  121. package/models/trace/handlers/Threads.d.ts +7 -7
  122. package/models/trace/handlers/Threads.js +5 -5
  123. package/models/trace/handlers/Threads.js.map +1 -1
  124. package/models/trace/handlers/UserInteractionsHandler.d.ts +13 -11
  125. package/models/trace/handlers/UserInteractionsHandler.js +13 -7
  126. package/models/trace/handlers/UserInteractionsHandler.js.map +1 -1
  127. package/models/trace/handlers/UserTimingsHandler.d.ts +5 -5
  128. package/models/trace/handlers/UserTimingsHandler.js +52 -9
  129. package/models/trace/handlers/UserTimingsHandler.js.map +1 -1
  130. package/models/trace/handlers/WarningsHandler.d.ts +5 -5
  131. package/models/trace/handlers/WarningsHandler.js +4 -5
  132. package/models/trace/handlers/WarningsHandler.js.map +1 -1
  133. package/models/trace/handlers/WorkersHandler.d.ts +4 -4
  134. package/models/trace/handlers/WorkersHandler.js +1 -1
  135. package/models/trace/handlers/WorkersHandler.js.map +1 -1
  136. package/models/trace/handlers/handlers-tsconfig.json +1 -1
  137. package/models/trace/handlers/types.d.ts +7 -7
  138. package/models/trace/handlers/types.js.map +1 -1
  139. package/models/trace/helpers/Extensions.d.ts +5 -1
  140. package/models/trace/helpers/Extensions.js +5 -3
  141. package/models/trace/helpers/Extensions.js.map +1 -1
  142. package/models/trace/helpers/Network.d.ts +2 -2
  143. package/models/trace/helpers/Network.js +19 -2
  144. package/models/trace/helpers/Network.js.map +1 -1
  145. package/models/trace/helpers/SamplesIntegrator.d.ts +5 -5
  146. package/models/trace/helpers/SamplesIntegrator.js +10 -11
  147. package/models/trace/helpers/SamplesIntegrator.js.map +1 -1
  148. package/models/trace/helpers/SyntheticEvents.d.ts +8 -14
  149. package/models/trace/helpers/SyntheticEvents.js +20 -31
  150. package/models/trace/helpers/SyntheticEvents.js.map +1 -1
  151. package/models/trace/helpers/Timing.d.ts +16 -5
  152. package/models/trace/helpers/Timing.js +33 -7
  153. package/models/trace/helpers/Timing.js.map +1 -1
  154. package/models/trace/helpers/Trace.d.ts +46 -33
  155. package/models/trace/helpers/Trace.js +53 -38
  156. package/models/trace/helpers/Trace.js.map +1 -1
  157. package/models/trace/helpers/TreeHelpers.d.ts +30 -8
  158. package/models/trace/helpers/TreeHelpers.js +91 -23
  159. package/models/trace/helpers/TreeHelpers.js.map +1 -1
  160. package/models/trace/insights/Common.d.ts +8 -2
  161. package/models/trace/insights/Common.js +33 -7
  162. package/models/trace/insights/Common.js.map +1 -1
  163. package/models/trace/insights/CumulativeLayoutShift.d.ts +34 -13
  164. package/models/trace/insights/CumulativeLayoutShift.js +151 -59
  165. package/models/trace/insights/CumulativeLayoutShift.js.map +1 -1
  166. package/models/trace/insights/DocumentLatency.d.ts +9 -4
  167. package/models/trace/insights/DocumentLatency.js +82 -7
  168. package/models/trace/insights/DocumentLatency.js.map +1 -1
  169. package/models/trace/insights/FontDisplay.d.ts +11 -0
  170. package/models/trace/insights/FontDisplay.js +44 -0
  171. package/models/trace/insights/FontDisplay.js.map +1 -0
  172. package/models/trace/insights/InsightRunners.d.ts +3 -0
  173. package/models/trace/insights/InsightRunners.js +3 -0
  174. package/models/trace/insights/InsightRunners.js.map +1 -1
  175. package/models/trace/insights/InteractionToNextPaint.d.ts +4 -5
  176. package/models/trace/insights/InteractionToNextPaint.js +5 -3
  177. package/models/trace/insights/InteractionToNextPaint.js.map +1 -1
  178. package/models/trace/insights/LargestContentfulPaint.d.ts +20 -7
  179. package/models/trace/insights/LargestContentfulPaint.js +57 -37
  180. package/models/trace/insights/LargestContentfulPaint.js.map +1 -1
  181. package/models/trace/insights/RenderBlocking.d.ts +3 -3
  182. package/models/trace/insights/RenderBlocking.js +29 -24
  183. package/models/trace/insights/RenderBlocking.js.map +1 -1
  184. package/models/trace/insights/SlowCSSSelector.d.ts +11 -0
  185. package/models/trace/insights/SlowCSSSelector.js +67 -0
  186. package/models/trace/insights/SlowCSSSelector.js.map +1 -0
  187. package/models/trace/insights/ThirdPartyWeb.d.ts +18 -0
  188. package/models/trace/insights/ThirdPartyWeb.js +174 -0
  189. package/models/trace/insights/ThirdPartyWeb.js.map +1 -0
  190. package/models/trace/insights/Viewport.d.ts +5 -2
  191. package/models/trace/insights/Viewport.js +14 -9
  192. package/models/trace/insights/Viewport.js.map +1 -1
  193. package/models/trace/insights/insights-tsconfig.json +9 -0
  194. package/models/trace/insights/insights.d.ts +1 -0
  195. package/models/trace/insights/insights.js +1 -0
  196. package/models/trace/insights/insights.js.map +1 -1
  197. package/models/trace/insights/types.d.ts +43 -25
  198. package/models/trace/insights/types.js.map +1 -1
  199. package/models/trace/lantern/core/NetworkAnalyzer.d.ts +6 -6
  200. package/models/trace/lantern/core/NetworkAnalyzer.js +12 -12
  201. package/models/trace/lantern/core/NetworkAnalyzer.js.map +1 -1
  202. package/models/trace/lantern/graph/BaseNode.d.ts +4 -4
  203. package/models/trace/lantern/graph/BaseNode.js +21 -21
  204. package/models/trace/lantern/graph/BaseNode.js.map +1 -1
  205. package/models/trace/lantern/graph/CPUNode.d.ts +1 -1
  206. package/models/trace/lantern/graph/CPUNode.js +5 -5
  207. package/models/trace/lantern/graph/CPUNode.js.map +1 -1
  208. package/models/trace/lantern/graph/PageDependencyGraph.d.ts +4 -4
  209. package/models/trace/lantern/graph/PageDependencyGraph.js +5 -5
  210. package/models/trace/lantern/graph/PageDependencyGraph.js.map +1 -1
  211. package/models/trace/lantern/simulation/ConnectionPool.d.ts +7 -7
  212. package/models/trace/lantern/simulation/ConnectionPool.js +26 -26
  213. package/models/trace/lantern/simulation/ConnectionPool.js.map +1 -1
  214. package/models/trace/lantern/simulation/DNSCache.d.ts +3 -3
  215. package/models/trace/lantern/simulation/DNSCache.js +11 -11
  216. package/models/trace/lantern/simulation/DNSCache.js.map +1 -1
  217. package/models/trace/lantern/simulation/SimulationTimingMap.d.ts +1 -1
  218. package/models/trace/lantern/simulation/SimulationTimingMap.js +15 -15
  219. package/models/trace/lantern/simulation/SimulationTimingMap.js.map +1 -1
  220. package/models/trace/lantern/simulation/Simulator.d.ts +28 -28
  221. package/models/trace/lantern/simulation/Simulator.js +113 -113
  222. package/models/trace/lantern/simulation/Simulator.js.map +1 -1
  223. package/models/trace/lantern/simulation/TCPConnection.d.ts +9 -9
  224. package/models/trace/lantern/simulation/TCPConnection.js +36 -36
  225. package/models/trace/lantern/simulation/TCPConnection.js.map +1 -1
  226. package/models/trace/root-causes/LayoutShift.d.ts +13 -13
  227. package/models/trace/root-causes/LayoutShift.js +7 -25
  228. package/models/trace/root-causes/LayoutShift.js.map +1 -1
  229. package/models/trace/types/Configuration.d.ts +16 -0
  230. package/models/trace/types/Configuration.js +1 -0
  231. package/models/trace/types/Configuration.js.map +1 -1
  232. package/models/trace/types/Extensions.d.ts +9 -12
  233. package/models/trace/types/Extensions.js +2 -1
  234. package/models/trace/types/Extensions.js.map +1 -1
  235. package/models/trace/types/File.d.ts +68 -25
  236. package/models/trace/types/File.js +15 -3
  237. package/models/trace/types/File.js.map +1 -1
  238. package/models/trace/types/TraceEvents.d.ts +819 -730
  239. package/models/trace/types/TraceEvents.js +270 -280
  240. package/models/trace/types/TraceEvents.js.map +1 -1
  241. package/models/trace/types/types.d.ts +1 -1
  242. package/models/trace/types/types.js +1 -1
  243. package/models/trace/types/types.js.map +1 -1
  244. package/package.json +4 -2
  245. package/test/test-trace-engine.mjs +47 -2
  246. package/third_party/third-party-web/third-party-web.js +1 -0
  247. package/core/platform/PromiseUtilities.d.ts +0 -10
  248. package/core/platform/PromiseUtilities.js +0 -18
  249. package/core/platform/PromiseUtilities.js.map +0 -1
  250. package/core/platform/SetUtilities.d.ts +0 -2
  251. package/core/platform/SetUtilities.js +0 -23
  252. package/core/platform/SetUtilities.js.map +0 -1
  253. package/models/trace/EntriesFilter.d.ts +0 -72
  254. package/models/trace/EntriesFilter.js +0 -296
  255. package/models/trace/EntriesFilter.js.map +0 -1
  256. package/models/trace/LegacyTracingModel.js.map +0 -1
  257. package/models/trace/handlers/EnhancedTracesHandler.d.ts +0 -48
  258. package/models/trace/handlers/EnhancedTracesHandler.js +0 -165
  259. package/models/trace/handlers/EnhancedTracesHandler.js.map +0 -1
  260. package/models/trace/lantern/BaseNode.d.ts +0 -91
  261. package/models/trace/lantern/BaseNode.js +0 -268
  262. package/models/trace/lantern/BaseNode.js.map +0 -1
  263. package/models/trace/lantern/CPUNode.d.ts +0 -24
  264. package/models/trace/lantern/CPUNode.js +0 -64
  265. package/models/trace/lantern/CPUNode.js.map +0 -1
  266. package/models/trace/lantern/LanternError.d.ts +0 -3
  267. package/models/trace/lantern/LanternError.js +0 -7
  268. package/models/trace/lantern/LanternError.js.map +0 -1
  269. package/models/trace/lantern/MetricsModule.d.ts +0 -11
  270. package/models/trace/lantern/MetricsModule.js +0 -14
  271. package/models/trace/lantern/MetricsModule.js.map +0 -1
  272. package/models/trace/lantern/NetworkNode.d.ts +0 -22
  273. package/models/trace/lantern/NetworkNode.js +0 -83
  274. package/models/trace/lantern/NetworkNode.js.map +0 -1
  275. package/models/trace/lantern/PageDependencyGraph.d.ts +0 -43
  276. package/models/trace/lantern/PageDependencyGraph.js +0 -509
  277. package/models/trace/lantern/PageDependencyGraph.js.map +0 -1
  278. package/models/trace/lantern/SimulationModule.d.ts +0 -17
  279. package/models/trace/lantern/SimulationModule.js +0 -13
  280. package/models/trace/lantern/SimulationModule.js.map +0 -1
  281. package/models/trace/lantern/simulation/NetworkAnalyzer.d.ts +0 -112
  282. package/models/trace/lantern/simulation/NetworkAnalyzer.js +0 -486
  283. package/models/trace/lantern/simulation/NetworkAnalyzer.js.map +0 -1
@@ -24,15 +24,31 @@ export function timeStampForEventAdjustedByClosestNavigation(event, traceBounds,
24
24
  }
25
25
  return Types.Timing.MicroSeconds(eventTimeStamp);
26
26
  }
27
+ // Expands the trace window by a provided percentage or, if it the expanded window is smaller than 1 millisecond, expands it to 1 millisecond.
28
+ // If the expanded window is outside of the max trace window, cut the overflowing bound to the max trace window bound.
29
+ export function expandWindowByPercentOrToOneMillisecond(annotationWindow, maxTraceWindow, percentage) {
30
+ // Expand min and max of the window by half of the provided percentage. That way, in total, the window will be expanded by the provided percentage.
31
+ let newMin = annotationWindow.min - annotationWindow.range * (percentage / 100) / 2;
32
+ let newMax = annotationWindow.max + annotationWindow.range * (percentage / 100) / 2;
33
+ if (newMax - newMin < 1_000) {
34
+ const rangeMiddle = (annotationWindow.min + annotationWindow.max) / 2;
35
+ newMin = rangeMiddle - 500;
36
+ newMax = rangeMiddle + 500;
37
+ }
38
+ newMin = Math.max(newMin, maxTraceWindow.min);
39
+ newMax = Math.min(newMax, maxTraceWindow.max);
40
+ const expandedWindow = {
41
+ min: Types.Timing.MicroSeconds(newMin),
42
+ max: Types.Timing.MicroSeconds(newMax),
43
+ range: Types.Timing.MicroSeconds(newMax - newMin),
44
+ };
45
+ return expandedWindow;
46
+ }
27
47
  export function eventTimingsMicroSeconds(event) {
28
48
  return {
29
49
  startTime: event.ts,
30
- endTime: Types.Timing.MicroSeconds(event.ts + (event.dur || Types.Timing.MicroSeconds(0))),
50
+ endTime: Types.Timing.MicroSeconds(event.ts + (event.dur ?? Types.Timing.MicroSeconds(0))),
31
51
  duration: Types.Timing.MicroSeconds(event.dur || 0),
32
- // TODO(crbug.com/1434599): Implement selfTime calculation for events
33
- // from the new engine.
34
- selfTime: Types.TraceEvents.isSyntheticTraceEntry(event) ? Types.Timing.MicroSeconds(event.selfTime || 0) :
35
- Types.Timing.MicroSeconds(event.dur || 0),
36
52
  };
37
53
  }
38
54
  export function eventTimingsMilliSeconds(event) {
@@ -41,7 +57,6 @@ export function eventTimingsMilliSeconds(event) {
41
57
  startTime: microSecondsToMilliseconds(microTimes.startTime),
42
58
  endTime: microSecondsToMilliseconds(microTimes.endTime),
43
59
  duration: microSecondsToMilliseconds(microTimes.duration),
44
- selfTime: microSecondsToMilliseconds(microTimes.selfTime),
45
60
  };
46
61
  }
47
62
  export function eventTimingsSeconds(event) {
@@ -50,7 +65,6 @@ export function eventTimingsSeconds(event) {
50
65
  startTime: microSecondsToSeconds(microTimes.startTime),
51
66
  endTime: microSecondsToSeconds(microTimes.endTime),
52
67
  duration: microSecondsToSeconds(microTimes.duration),
53
- selfTime: microSecondsToSeconds(microTimes.selfTime),
54
68
  };
55
69
  }
56
70
  export function traceWindowMilliSeconds(bounds) {
@@ -100,7 +114,19 @@ export function boundsIncludeTimeRange(data) {
100
114
  const { min: rangeMin, max: rangeMax } = data.timeRange;
101
115
  return visibleMin <= rangeMax && visibleMax >= rangeMin;
102
116
  }
117
+ /** Checks to see if the event is within or overlaps the bounds */
118
+ export function eventIsInBounds(event, bounds) {
119
+ const startTime = event.ts;
120
+ return startTime <= bounds.max && bounds.min <= (startTime + (event.dur ?? 0));
121
+ }
103
122
  export function timestampIsInBounds(bounds, timestamp) {
104
123
  return timestamp >= bounds.min && timestamp <= bounds.max;
105
124
  }
125
+ /**
126
+ * Returns true if the window fits entirely within the bounds.
127
+ * Note that if the window is equivalent to the bounds, that is considered to fit
128
+ */
129
+ export function windowFitsInsideBounds(data) {
130
+ return data.window.min >= data.bounds.min && data.window.max <= data.bounds.max;
131
+ }
106
132
  //# sourceMappingURL=Timing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timing.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/helpers/Timing.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2022 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 * as Types from '../types/types.js';\n\nimport {getNavigationForTraceEvent} from './Trace.js';\n\nexport const millisecondsToMicroseconds = (value: Types.Timing.MilliSeconds): Types.Timing.MicroSeconds =>\n Types.Timing.MicroSeconds(value * 1000);\n\nexport const secondsToMilliseconds = (value: Types.Timing.Seconds): Types.Timing.MilliSeconds =>\n Types.Timing.MilliSeconds(value * 1000);\n\nexport const secondsToMicroseconds = (value: Types.Timing.Seconds): Types.Timing.MicroSeconds =>\n millisecondsToMicroseconds(secondsToMilliseconds(value));\n\nexport const microSecondsToMilliseconds = (value: Types.Timing.MicroSeconds): Types.Timing.MilliSeconds =>\n Types.Timing.MilliSeconds(value / 1000);\n\nexport const microSecondsToSeconds = (value: Types.Timing.MicroSeconds): Types.Timing.Seconds =>\n Types.Timing.Seconds(value / 1000 / 1000);\n\nexport function timeStampForEventAdjustedByClosestNavigation(\n event: Types.TraceEvents.TraceEventData,\n traceBounds: Types.Timing.TraceWindowMicroSeconds,\n navigationsByNavigationId: Map<string, Types.TraceEvents.TraceEventNavigationStart>,\n navigationsByFrameId: Map<string, Types.TraceEvents.TraceEventNavigationStart[]>,\n ): Types.Timing.MicroSeconds {\n let eventTimeStamp = event.ts - traceBounds.min;\n if (event.args?.data?.navigationId) {\n const navigationForEvent = navigationsByNavigationId.get(event.args.data.navigationId);\n if (navigationForEvent) {\n eventTimeStamp = event.ts - navigationForEvent.ts;\n }\n } else if (event.args?.data?.frame) {\n const navigationForEvent = getNavigationForTraceEvent(event, event.args.data.frame, navigationsByFrameId);\n if (navigationForEvent) {\n eventTimeStamp = event.ts - navigationForEvent.ts;\n }\n }\n return Types.Timing.MicroSeconds(eventTimeStamp);\n}\n\nexport interface EventTimingsData<\n ValueType extends Types.Timing.MicroSeconds|Types.Timing.MilliSeconds|Types.Timing.Seconds,\n> {\n startTime: ValueType;\n endTime: ValueType;\n duration: ValueType;\n selfTime: ValueType;\n}\n\nexport function eventTimingsMicroSeconds(event: Types.TraceEvents.TraceEventData):\n EventTimingsData<Types.Timing.MicroSeconds> {\n return {\n startTime: event.ts,\n endTime: Types.Timing.MicroSeconds(event.ts + (event.dur || Types.Timing.MicroSeconds(0))),\n duration: Types.Timing.MicroSeconds(event.dur || 0),\n // TODO(crbug.com/1434599): Implement selfTime calculation for events\n // from the new engine.\n selfTime: Types.TraceEvents.isSyntheticTraceEntry(event) ? Types.Timing.MicroSeconds(event.selfTime || 0) :\n Types.Timing.MicroSeconds(event.dur || 0),\n };\n}\nexport function eventTimingsMilliSeconds(event: Types.TraceEvents.TraceEventData):\n EventTimingsData<Types.Timing.MilliSeconds> {\n const microTimes = eventTimingsMicroSeconds(event);\n return {\n startTime: microSecondsToMilliseconds(microTimes.startTime),\n endTime: microSecondsToMilliseconds(microTimes.endTime),\n duration: microSecondsToMilliseconds(microTimes.duration),\n selfTime: microSecondsToMilliseconds(microTimes.selfTime),\n };\n}\nexport function eventTimingsSeconds(event: Types.TraceEvents.TraceEventData): EventTimingsData<Types.Timing.Seconds> {\n const microTimes = eventTimingsMicroSeconds(event);\n return {\n startTime: microSecondsToSeconds(microTimes.startTime),\n endTime: microSecondsToSeconds(microTimes.endTime),\n duration: microSecondsToSeconds(microTimes.duration),\n selfTime: microSecondsToSeconds(microTimes.selfTime),\n };\n}\n\nexport function traceWindowMilliSeconds(bounds: Types.Timing.TraceWindowMicroSeconds):\n Types.Timing.TraceWindowMilliSeconds {\n return {\n min: microSecondsToMilliseconds(bounds.min),\n max: microSecondsToMilliseconds(bounds.max),\n range: microSecondsToMilliseconds(bounds.range),\n };\n}\n\nexport function traceWindowMillisecondsToMicroSeconds(bounds: Types.Timing.TraceWindowMilliSeconds):\n Types.Timing.TraceWindowMicroSeconds {\n return {\n min: millisecondsToMicroseconds(bounds.min),\n max: millisecondsToMicroseconds(bounds.max),\n range: millisecondsToMicroseconds(bounds.range),\n };\n}\n\nexport function traceWindowFromMilliSeconds(\n min: Types.Timing.MilliSeconds, max: Types.Timing.MilliSeconds): Types.Timing.TraceWindowMicroSeconds {\n const traceWindow: Types.Timing.TraceWindowMicroSeconds = {\n min: millisecondsToMicroseconds(min),\n max: millisecondsToMicroseconds(max),\n range: Types.Timing.MicroSeconds(millisecondsToMicroseconds(max) - millisecondsToMicroseconds(min)),\n };\n return traceWindow;\n}\n\nexport function traceWindowFromMicroSeconds(\n min: Types.Timing.MicroSeconds, max: Types.Timing.MicroSeconds): Types.Timing.TraceWindowMicroSeconds {\n const traceWindow: Types.Timing.TraceWindowMicroSeconds = {\n min,\n max,\n range: Types.Timing.MicroSeconds(max - min),\n };\n return traceWindow;\n}\n\nexport interface BoundsIncludeTimeRange {\n timeRange: Types.Timing.TraceWindowMicroSeconds;\n bounds: Types.Timing.TraceWindowMicroSeconds;\n}\n\n/**\n * Checks to see if the timeRange is within the bounds. By \"within\" we mean\n * \"has any overlap\":\n * |------------------------|\n * == no overlap (entirely before)\n * ========= overlap\n * ========= overlap\n * ========= overlap\n * ==== no overlap (entirely after)\n * ============================== overlap (time range is larger than bounds)\n * |------------------------|\n */\nexport function boundsIncludeTimeRange(data: BoundsIncludeTimeRange): boolean {\n const {min: visibleMin, max: visibleMax} = data.bounds;\n const {min: rangeMin, max: rangeMax} = data.timeRange;\n\n return visibleMin <= rangeMax && visibleMax >= rangeMin;\n}\n\nexport function timestampIsInBounds(\n bounds: Types.Timing.TraceWindowMicroSeconds, timestamp: Types.Timing.MicroSeconds): boolean {\n return timestamp >= bounds.min && timestamp <= bounds.max;\n}\n"]}
1
+ {"version":3,"file":"Timing.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/helpers/Timing.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2022 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 * as Types from '../types/types.js';\n\nimport {getNavigationForTraceEvent} from './Trace.js';\n\nexport const millisecondsToMicroseconds = (value: Types.Timing.MilliSeconds): Types.Timing.MicroSeconds =>\n Types.Timing.MicroSeconds(value * 1000);\n\nexport const secondsToMilliseconds = (value: Types.Timing.Seconds): Types.Timing.MilliSeconds =>\n Types.Timing.MilliSeconds(value * 1000);\n\nexport const secondsToMicroseconds = (value: Types.Timing.Seconds): Types.Timing.MicroSeconds =>\n millisecondsToMicroseconds(secondsToMilliseconds(value));\n\nexport const microSecondsToMilliseconds = (value: Types.Timing.MicroSeconds): Types.Timing.MilliSeconds =>\n Types.Timing.MilliSeconds(value / 1000);\n\nexport const microSecondsToSeconds = (value: Types.Timing.MicroSeconds): Types.Timing.Seconds =>\n Types.Timing.Seconds(value / 1000 / 1000);\n\nexport function timeStampForEventAdjustedByClosestNavigation(\n event: Types.Events.Event,\n traceBounds: Types.Timing.TraceWindowMicroSeconds,\n navigationsByNavigationId: Map<string, Types.Events.NavigationStart>,\n navigationsByFrameId: Map<string, Types.Events.NavigationStart[]>,\n ): Types.Timing.MicroSeconds {\n let eventTimeStamp = event.ts - traceBounds.min;\n if (event.args?.data?.navigationId) {\n const navigationForEvent = navigationsByNavigationId.get(event.args.data.navigationId);\n if (navigationForEvent) {\n eventTimeStamp = event.ts - navigationForEvent.ts;\n }\n } else if (event.args?.data?.frame) {\n const navigationForEvent = getNavigationForTraceEvent(event, event.args.data.frame, navigationsByFrameId);\n if (navigationForEvent) {\n eventTimeStamp = event.ts - navigationForEvent.ts;\n }\n }\n return Types.Timing.MicroSeconds(eventTimeStamp);\n}\n\n// Expands the trace window by a provided percentage or, if it the expanded window is smaller than 1 millisecond, expands it to 1 millisecond.\n// If the expanded window is outside of the max trace window, cut the overflowing bound to the max trace window bound.\nexport function expandWindowByPercentOrToOneMillisecond(\n annotationWindow: Types.Timing.TraceWindowMicroSeconds, maxTraceWindow: Types.Timing.TraceWindowMicroSeconds,\n percentage: number): Types.Timing.TraceWindowMicroSeconds {\n // Expand min and max of the window by half of the provided percentage. That way, in total, the window will be expanded by the provided percentage.\n let newMin = annotationWindow.min - annotationWindow.range * (percentage / 100) / 2;\n let newMax = annotationWindow.max + annotationWindow.range * (percentage / 100) / 2;\n\n if (newMax - newMin < 1_000) {\n const rangeMiddle = (annotationWindow.min + annotationWindow.max) / 2;\n newMin = rangeMiddle - 500;\n newMax = rangeMiddle + 500;\n }\n\n newMin = Math.max(newMin, maxTraceWindow.min);\n newMax = Math.min(newMax, maxTraceWindow.max);\n\n const expandedWindow: Types.Timing.TraceWindowMicroSeconds = {\n min: Types.Timing.MicroSeconds(newMin),\n max: Types.Timing.MicroSeconds(newMax),\n range: Types.Timing.MicroSeconds(newMax - newMin),\n };\n\n return expandedWindow;\n}\n\nexport interface EventTimingsData<\n ValueType extends Types.Timing.MicroSeconds|Types.Timing.MilliSeconds|Types.Timing.Seconds,\n> {\n startTime: ValueType;\n endTime: ValueType;\n duration: ValueType;\n}\n\nexport function eventTimingsMicroSeconds(event: Types.Events.Event): EventTimingsData<Types.Timing.MicroSeconds> {\n return {\n startTime: event.ts,\n endTime: Types.Timing.MicroSeconds(event.ts + (event.dur ?? Types.Timing.MicroSeconds(0))),\n duration: Types.Timing.MicroSeconds(event.dur || 0),\n };\n}\nexport function eventTimingsMilliSeconds(event: Types.Events.Event): EventTimingsData<Types.Timing.MilliSeconds> {\n const microTimes = eventTimingsMicroSeconds(event);\n return {\n startTime: microSecondsToMilliseconds(microTimes.startTime),\n endTime: microSecondsToMilliseconds(microTimes.endTime),\n duration: microSecondsToMilliseconds(microTimes.duration),\n };\n}\nexport function eventTimingsSeconds(event: Types.Events.Event): EventTimingsData<Types.Timing.Seconds> {\n const microTimes = eventTimingsMicroSeconds(event);\n return {\n startTime: microSecondsToSeconds(microTimes.startTime),\n endTime: microSecondsToSeconds(microTimes.endTime),\n duration: microSecondsToSeconds(microTimes.duration),\n };\n}\n\nexport function traceWindowMilliSeconds(bounds: Types.Timing.TraceWindowMicroSeconds):\n Types.Timing.TraceWindowMilliSeconds {\n return {\n min: microSecondsToMilliseconds(bounds.min),\n max: microSecondsToMilliseconds(bounds.max),\n range: microSecondsToMilliseconds(bounds.range),\n };\n}\n\nexport function traceWindowMillisecondsToMicroSeconds(bounds: Types.Timing.TraceWindowMilliSeconds):\n Types.Timing.TraceWindowMicroSeconds {\n return {\n min: millisecondsToMicroseconds(bounds.min),\n max: millisecondsToMicroseconds(bounds.max),\n range: millisecondsToMicroseconds(bounds.range),\n };\n}\n\nexport function traceWindowFromMilliSeconds(\n min: Types.Timing.MilliSeconds, max: Types.Timing.MilliSeconds): Types.Timing.TraceWindowMicroSeconds {\n const traceWindow: Types.Timing.TraceWindowMicroSeconds = {\n min: millisecondsToMicroseconds(min),\n max: millisecondsToMicroseconds(max),\n range: Types.Timing.MicroSeconds(millisecondsToMicroseconds(max) - millisecondsToMicroseconds(min)),\n };\n return traceWindow;\n}\n\nexport function traceWindowFromMicroSeconds(\n min: Types.Timing.MicroSeconds, max: Types.Timing.MicroSeconds): Types.Timing.TraceWindowMicroSeconds {\n const traceWindow: Types.Timing.TraceWindowMicroSeconds = {\n min,\n max,\n range: Types.Timing.MicroSeconds(max - min),\n };\n return traceWindow;\n}\n\nexport interface BoundsIncludeTimeRange {\n timeRange: Types.Timing.TraceWindowMicroSeconds;\n bounds: Types.Timing.TraceWindowMicroSeconds;\n}\n\n/**\n * Checks to see if the timeRange is within the bounds. By \"within\" we mean\n * \"has any overlap\":\n * |------------------------|\n * == no overlap (entirely before)\n * ========= overlap\n * ========= overlap\n * ========= overlap\n * ==== no overlap (entirely after)\n * ============================== overlap (time range is larger than bounds)\n * |------------------------|\n */\nexport function boundsIncludeTimeRange(data: BoundsIncludeTimeRange): boolean {\n const {min: visibleMin, max: visibleMax} = data.bounds;\n const {min: rangeMin, max: rangeMax} = data.timeRange;\n\n return visibleMin <= rangeMax && visibleMax >= rangeMin;\n}\n\n/** Checks to see if the event is within or overlaps the bounds */\nexport function eventIsInBounds(event: Types.Events.Event, bounds: Types.Timing.TraceWindowMicroSeconds): boolean {\n const startTime = event.ts;\n return startTime <= bounds.max && bounds.min <= (startTime + (event.dur ?? 0));\n}\n\nexport function timestampIsInBounds(\n bounds: Types.Timing.TraceWindowMicroSeconds, timestamp: Types.Timing.MicroSeconds): boolean {\n return timestamp >= bounds.min && timestamp <= bounds.max;\n}\n\nexport interface WindowFitsInsideBounds {\n window: Types.Timing.TraceWindowMicroSeconds;\n bounds: Types.Timing.TraceWindowMicroSeconds;\n}\n\n/**\n * Returns true if the window fits entirely within the bounds.\n * Note that if the window is equivalent to the bounds, that is considered to fit\n */\nexport function windowFitsInsideBounds(data: WindowFitsInsideBounds): boolean {\n return data.window.min >= data.bounds.min && data.window.max <= data.bounds.max;\n}\n"]}
@@ -1,16 +1,24 @@
1
1
  import type * as Protocol from '../../../generated/protocol.js';
2
2
  import type * as CPUProfile from '../../cpu_profile/cpu_profile.js';
3
3
  import * as Types from '../types/types.js';
4
- type MatchedPairType<T extends Types.TraceEvents.TraceEventPairableAsync> = Types.TraceEvents.SyntheticEventPair<T>;
4
+ type MatchedPairType<T extends Types.Events.PairableAsync> = Types.Events.SyntheticEventPair<T>;
5
5
  type MatchingPairableAsyncEvents = {
6
- begin: Types.TraceEvents.TraceEventPairableAsyncBegin | null;
7
- end: Types.TraceEvents.TraceEventPairableAsyncEnd | null;
8
- instant?: Types.TraceEvents.TraceEventPairableAsyncInstant[];
6
+ begin: Types.Events.PairableAsyncBegin | null;
7
+ end: Types.Events.PairableAsyncEnd | null;
8
+ instant?: Types.Events.PairableAsyncInstant[];
9
9
  };
10
+ /**
11
+ * Extracts the raw stack trace of known trace events. Most likely than
12
+ * not you want to use `getZeroIndexedStackTraceForEvent`, which returns
13
+ * the stack with zero based numbering. Since some trace events are
14
+ * one based this function can yield unexpected results when used
15
+ * indiscriminately.
16
+ */
17
+ export declare function stackTraceForEvent(event: Types.Events.Event): Types.Events.CallFrame[] | null;
10
18
  export declare function extractOriginFromTrace(firstNavigationURL: string): string | null;
11
- export type EventsInThread<T extends Types.TraceEvents.TraceEventData> = Map<Types.TraceEvents.ThreadID, T[]>;
12
- export declare function addEventToProcessThread<T extends Types.TraceEvents.TraceEventData>(event: T, eventsInProcessThread: Map<Types.TraceEvents.ProcessID, EventsInThread<T>>): void;
13
- type TimeSpan = {
19
+ export type EventsInThread<T extends Types.Events.Event> = Map<Types.Events.ThreadID, T[]>;
20
+ export declare function addEventToProcessThread<T extends Types.Events.Event>(event: T, eventsInProcessThread: Map<Types.Events.ProcessID, EventsInThread<T>>): void;
21
+ export type TimeSpan = {
14
22
  ts: Types.Timing.MicroSeconds;
15
23
  dur?: Types.Timing.MicroSeconds;
16
24
  };
@@ -27,11 +35,11 @@ export declare function sortTraceEventsInPlace(events: {
27
35
  * Returns an array of ordered events that results after merging the two
28
36
  * ordered input arrays.
29
37
  */
30
- export declare function mergeEventsInOrder<T1 extends Types.TraceEvents.TraceEventData, T2 extends Types.TraceEvents.TraceEventData>(eventsArray1: readonly T1[], eventsArray2: readonly T2[]): (T1 | T2)[];
31
- export declare function getNavigationForTraceEvent(event: Types.TraceEvents.TraceEventData, eventFrameId: string, navigationsByFrameId: Map<string, Types.TraceEvents.TraceEventNavigationStart[]>): Types.TraceEvents.TraceEventNavigationStart | null;
32
- export declare function extractId(event: Types.TraceEvents.TraceEventPairableAsync | MatchedPairType<Types.TraceEvents.TraceEventPairableAsync>): string | undefined;
33
- export declare function activeURLForFrameAtTime(frameId: string, time: Types.Timing.MicroSeconds, rendererProcessesByFrame: Map<string, Map<Types.TraceEvents.ProcessID, {
34
- frame: Types.TraceEvents.TraceFrame;
38
+ export declare function mergeEventsInOrder<T1 extends Types.Events.Event, T2 extends Types.Events.Event>(eventsArray1: readonly T1[], eventsArray2: readonly T2[]): (T1 | T2)[];
39
+ export declare function getNavigationForTraceEvent(event: Types.Events.Event, eventFrameId: string, navigationsByFrameId: Map<string, Types.Events.NavigationStart[]>): Types.Events.NavigationStart | null;
40
+ export declare function extractId(event: Types.Events.PairableAsync | MatchedPairType<Types.Events.PairableAsync>): string | undefined;
41
+ export declare function activeURLForFrameAtTime(frameId: string, time: Types.Timing.MicroSeconds, rendererProcessesByFrame: Map<string, Map<Types.Events.ProcessID, {
42
+ frame: Types.Events.TraceFrame;
35
43
  window: Types.Timing.TraceWindowMicroSeconds;
36
44
  }[]>>): string | null;
37
45
  /**
@@ -44,28 +52,27 @@ export declare function activeURLForFrameAtTime(frameId: string, time: Types.Tim
44
52
  *
45
53
  * See `panels/timeline/docs/profile_calls.md` for more context on how these events are created.
46
54
  */
47
- export declare function makeProfileCall(node: CPUProfile.ProfileTreeModel.ProfileNode, profileId: Types.TraceEvents.ProfileID, sampleIndex: number, ts: Types.Timing.MicroSeconds, pid: Types.TraceEvents.ProcessID, tid: Types.TraceEvents.ThreadID): Types.TraceEvents.SyntheticProfileCall;
48
- export declare function makeSyntheticTraceEntry(name: string, ts: Types.Timing.MicroSeconds, pid: Types.TraceEvents.ProcessID, tid: Types.TraceEvents.ThreadID): Types.TraceEvents.SyntheticTraceEntry;
55
+ export declare function makeProfileCall(node: CPUProfile.ProfileTreeModel.ProfileNode, profileId: Types.Events.ProfileID, sampleIndex: number, ts: Types.Timing.MicroSeconds, pid: Types.Events.ProcessID, tid: Types.Events.ThreadID): Types.Events.SyntheticProfileCall;
49
56
  /**
50
- * Matches beginning events with TraceEventPairableAsyncEnd and TraceEventPairableAsyncInstant (ASYNC_NESTABLE_INSTANT)
57
+ * Matches beginning events with PairableAsyncEnd and PairableAsyncInstant (ASYNC_NESTABLE_INSTANT)
51
58
  * if provided, though currently only coming from Animations. Traces may contain multiple instant events so we need to
52
59
  * account for that.
53
60
  *
54
61
  * @returns {Map<string, MatchingPairableAsyncEvents>} Map of the animation's ID to it's matching events.
55
62
  */
56
- export declare function matchEvents(unpairedEvents: Types.TraceEvents.TraceEventPairableAsync[]): Map<string, MatchingPairableAsyncEvents>;
57
- export declare function createSortedSyntheticEvents<T extends Types.TraceEvents.TraceEventPairableAsync>(matchedPairs: Map<string, {
58
- begin: Types.TraceEvents.TraceEventPairableAsyncBegin | null;
59
- end: Types.TraceEvents.TraceEventPairableAsyncEnd | null;
60
- instant?: Types.TraceEvents.TraceEventPairableAsyncInstant[];
63
+ export declare function matchEvents(unpairedEvents: Types.Events.PairableAsync[]): Map<string, MatchingPairableAsyncEvents>;
64
+ export declare function createSortedSyntheticEvents<T extends Types.Events.PairableAsync>(matchedPairs: Map<string, {
65
+ begin: Types.Events.PairableAsyncBegin | null;
66
+ end: Types.Events.PairableAsyncEnd | null;
67
+ instant?: Types.Events.PairableAsyncInstant[];
61
68
  }>, syntheticEventCallback?: (syntheticEvent: MatchedPairType<T>) => void): MatchedPairType<T>[];
62
- export declare function createMatchedSortedSyntheticEvents<T extends Types.TraceEvents.TraceEventPairableAsync>(unpairedAsyncEvents: T[], syntheticEventCallback?: (syntheticEvent: MatchedPairType<T>) => void): MatchedPairType<T>[];
69
+ export declare function createMatchedSortedSyntheticEvents<T extends Types.Events.PairableAsync>(unpairedAsyncEvents: T[], syntheticEventCallback?: (syntheticEvent: MatchedPairType<T>) => void): MatchedPairType<T>[];
63
70
  /**
64
71
  * Different trace events return line/column numbers that are 1 or 0 indexed.
65
72
  * This function knows which events return 1 indexed numbers and normalizes
66
73
  * them. The UI expects 0 indexed line numbers, so that is what we return.
67
74
  */
68
- export declare function getZeroIndexedLineAndColumnForEvent(event: Types.TraceEvents.TraceEventData): {
75
+ export declare function getZeroIndexedLineAndColumnForEvent(event: Types.Events.Event): {
69
76
  lineNumber?: number;
70
77
  columnNumber?: number;
71
78
  };
@@ -75,15 +82,21 @@ export declare function getZeroIndexedLineAndColumnForEvent(event: Types.TraceEv
75
82
  * This function knows which events return 1 indexed numbers and normalizes
76
83
  * them. The UI expects 0 indexed line numbers, so that is what we return.
77
84
  */
78
- export declare function getZeroIndexedStackTraceForEvent(event: Types.TraceEvents.TraceEventData): Types.TraceEvents.TraceEventCallFrame[] | null;
79
- export declare function frameIDForEvent(event: Types.TraceEvents.TraceEventData): string | null;
80
- export declare function isTopLevelEvent(event: Types.TraceEvents.TraceEventData): boolean;
81
- export declare function findUpdateLayoutTreeEvents(events: Types.TraceEvents.TraceEventData[], startTime: Types.Timing.MicroSeconds, endTime?: Types.Timing.MicroSeconds): Types.TraceEvents.TraceEventUpdateLayoutTree[];
85
+ export declare function getZeroIndexedStackTraceForEvent(event: Types.Events.Event): Types.Events.CallFrame[] | null;
86
+ /**
87
+ * Given a 1-based call frame creates a 0-based one.
88
+ */
89
+ export declare function makeZeroBasedCallFrame(callFrame: Types.Events.CallFrame): Types.Events.CallFrame;
90
+ export declare function frameIDForEvent(event: Types.Events.Event): string | null;
91
+ export declare function isTopLevelEvent(event: Types.Events.Event): boolean;
92
+ export declare function findUpdateLayoutTreeEvents(events: Types.Events.Event[], startTime: Types.Timing.MicroSeconds, endTime?: Types.Timing.MicroSeconds): Types.Events.UpdateLayoutTree[];
93
+ export declare function findNextEventAfterTimestamp<T extends Types.Events.Event>(candidates: T[], ts: Types.Timing.MicroSeconds): T | null;
94
+ export declare function findPreviousEventBeforeTimestamp<T extends Types.Events.Event>(candidates: T[], ts: Types.Timing.MicroSeconds): T | null;
82
95
  export interface ForEachEventConfig {
83
- onStartEvent: (event: Types.TraceEvents.TraceEventData) => void;
84
- onEndEvent: (event: Types.TraceEvents.TraceEventData) => void;
85
- onInstantEvent?: (event: Types.TraceEvents.TraceEventData) => void;
86
- eventFilter?: (event: Types.TraceEvents.TraceEventData) => boolean;
96
+ onStartEvent: (event: Types.Events.Event) => void;
97
+ onEndEvent: (event: Types.Events.Event) => void;
98
+ onInstantEvent?: (event: Types.Events.Event) => void;
99
+ eventFilter?: (event: Types.Events.Event) => boolean;
87
100
  startTime?: Types.Timing.MicroSeconds;
88
101
  endTime?: Types.Timing.MicroSeconds;
89
102
  ignoreAsyncEvents?: boolean;
@@ -118,7 +131,7 @@ export interface ForEachEventConfig {
118
131
  * By default, async events are skipped. This behaviour can be
119
132
  * overriden making use of the config.ignoreAsyncEvents parameter.
120
133
  */
121
- export declare function forEachEvent(events: Types.TraceEvents.TraceEventData[], config: ForEachEventConfig): void;
122
- export declare function eventHasCategory(event: Types.TraceEvents.TraceEventData, category: string): boolean;
123
- export declare function nodeIdForInvalidationEvent(event: Types.TraceEvents.InvalidationTrackingEvent): Protocol.DOM.BackendNodeId | null;
134
+ export declare function forEachEvent(events: Types.Events.Event[], config: ForEachEventConfig): void;
135
+ export declare function eventHasCategory(event: Types.Events.Event, category: string): boolean;
136
+ export declare function nodeIdForInvalidationEvent(event: Types.Events.InvalidationTrackingEvent): Protocol.DOM.BackendNodeId | null;
124
137
  export {};
@@ -12,13 +12,22 @@ import { eventTimingsMicroSeconds } from './Timing.js';
12
12
  * one based this function can yield unexpected results when used
13
13
  * indiscriminately.
14
14
  */
15
- function stackTraceForEvent(event) {
15
+ export function stackTraceForEvent(event) {
16
16
  if (event.args?.data?.stackTrace) {
17
17
  return event.args.data.stackTrace;
18
18
  }
19
- if (Types.TraceEvents.isTraceEventUpdateLayoutTree(event)) {
19
+ if (event.args?.stackTrace) {
20
+ return event.args.stackTrace;
21
+ }
22
+ if (Types.Events.isUpdateLayoutTree(event)) {
20
23
  return event.args.beginData?.stackTrace || null;
21
24
  }
25
+ if (Types.Extensions.isSyntheticExtensionEntry(event)) {
26
+ return stackTraceForEvent(event.rawSourceEvent);
27
+ }
28
+ if (Types.Events.isSyntheticUserTiming(event)) {
29
+ return stackTraceForEvent(event.rawSourceEvent);
30
+ }
22
31
  return null;
23
32
  }
24
33
  export function extractOriginFromTrace(firstNavigationURL) {
@@ -154,32 +163,18 @@ export function makeProfileCall(node, profileId, sampleIndex, ts, pid, tid) {
154
163
  name: 'ProfileCall',
155
164
  nodeId: node.id,
156
165
  args: {},
157
- ph: "X" /* Types.TraceEvents.Phase.COMPLETE */,
166
+ ph: "X" /* Types.Events.Phase.COMPLETE */,
158
167
  pid,
159
168
  tid,
160
169
  ts,
161
170
  dur: Types.Timing.MicroSeconds(0),
162
- selfTime: Types.Timing.MicroSeconds(0),
163
171
  callFrame: node.callFrame,
164
172
  sampleIndex,
165
173
  profileId,
166
174
  };
167
175
  }
168
- export function makeSyntheticTraceEntry(name, ts, pid, tid) {
169
- return {
170
- cat: '',
171
- name,
172
- args: {},
173
- ph: "X" /* Types.TraceEvents.Phase.COMPLETE */,
174
- pid,
175
- tid,
176
- ts,
177
- dur: Types.Timing.MicroSeconds(0),
178
- selfTime: Types.Timing.MicroSeconds(0),
179
- };
180
- }
181
176
  /**
182
- * Matches beginning events with TraceEventPairableAsyncEnd and TraceEventPairableAsyncInstant (ASYNC_NESTABLE_INSTANT)
177
+ * Matches beginning events with PairableAsyncEnd and PairableAsyncInstant (ASYNC_NESTABLE_INSTANT)
183
178
  * if provided, though currently only coming from Animations. Traces may contain multiple instant events so we need to
184
179
  * account for that.
185
180
  *
@@ -200,9 +195,9 @@ export function matchEvents(unpairedEvents) {
200
195
  const otherEventsWithID = Platform.MapUtilities.getWithDefault(matchedPairs, syntheticId, () => {
201
196
  return { begin: null, end: null, instant: [] };
202
197
  });
203
- const isStartEvent = event.ph === "b" /* Types.TraceEvents.Phase.ASYNC_NESTABLE_START */;
204
- const isEndEvent = event.ph === "e" /* Types.TraceEvents.Phase.ASYNC_NESTABLE_END */;
205
- const isInstantEvent = event.ph === "n" /* Types.TraceEvents.Phase.ASYNC_NESTABLE_INSTANT */;
198
+ const isStartEvent = event.ph === "b" /* Types.Events.Phase.ASYNC_NESTABLE_START */;
199
+ const isEndEvent = event.ph === "e" /* Types.Events.Phase.ASYNC_NESTABLE_END */;
200
+ const isInstantEvent = event.ph === "n" /* Types.Events.Phase.ASYNC_NESTABLE_INSTANT */;
206
201
  if (isStartEvent) {
207
202
  otherEventsWithID.begin = event;
208
203
  }
@@ -249,7 +244,7 @@ export function createSortedSyntheticEvents(matchedPairs, syntheticEventCallback
249
244
  continue;
250
245
  }
251
246
  const targetEvent = endEvent || beginEvent;
252
- const event = SyntheticEventsManager.registerSyntheticBasedEvent({
247
+ const event = SyntheticEventsManager.registerSyntheticEvent({
253
248
  rawSourceEvent: beginEvent,
254
249
  cat: targetEvent.cat,
255
250
  ph: targetEvent.ph,
@@ -298,10 +293,10 @@ export function getZeroIndexedLineAndColumnForEvent(event) {
298
293
  switch (event.name) {
299
294
  // All these events have line/column numbers which are 1 indexed; so we
300
295
  // subtract to make them 0 indexed.
301
- case "FunctionCall" /* Types.TraceEvents.KnownEventName.FunctionCall */:
302
- case "EvaluateScript" /* Types.TraceEvents.KnownEventName.EvaluateScript */:
303
- case "v8.compile" /* Types.TraceEvents.KnownEventName.Compile */:
304
- case "v8.produceCache" /* Types.TraceEvents.KnownEventName.CacheScript */: {
296
+ case "FunctionCall" /* Types.Events.Name.FUNCTION_CALL */:
297
+ case "EvaluateScript" /* Types.Events.Name.EVALUATE_SCRIPT */:
298
+ case "v8.compile" /* Types.Events.Name.COMPILE */:
299
+ case "v8.produceCache" /* Types.Events.Name.CACHE_SCRIPT */: {
305
300
  return {
306
301
  lineNumber: typeof lineNumber === 'number' ? lineNumber - 1 : undefined,
307
302
  columnNumber: typeof columnNumber === 'number' ? columnNumber - 1 : undefined,
@@ -324,18 +319,30 @@ export function getZeroIndexedStackTraceForEvent(event) {
324
319
  return null;
325
320
  }
326
321
  return stack.map(callFrame => {
327
- const normalizedCallFrame = { ...callFrame };
328
322
  switch (event.name) {
329
- case "ScheduleStyleRecalculation" /* Types.TraceEvents.KnownEventName.ScheduleStyleRecalculation */:
330
- case "InvalidateLayout" /* Types.TraceEvents.KnownEventName.InvalidateLayout */:
331
- case "UpdateLayoutTree" /* Types.TraceEvents.KnownEventName.UpdateLayoutTree */: {
332
- normalizedCallFrame.lineNumber = callFrame.lineNumber && callFrame.lineNumber - 1;
333
- normalizedCallFrame.columnNumber = callFrame.columnNumber && callFrame.columnNumber - 1;
323
+ case "ScheduleStyleRecalculation" /* Types.Events.Name.SCHEDULE_STYLE_RECALCULATION */:
324
+ case "InvalidateLayout" /* Types.Events.Name.INVALIDATE_LAYOUT */:
325
+ case "UpdateLayoutTree" /* Types.Events.Name.UPDATE_LAYOUT_TREE */: {
326
+ return makeZeroBasedCallFrame(callFrame);
327
+ }
328
+ default: {
329
+ if (Types.Events.isUserTiming(event) || Types.Extensions.isSyntheticExtensionEntry(event)) {
330
+ return makeZeroBasedCallFrame(callFrame);
331
+ }
334
332
  }
335
333
  }
336
- return normalizedCallFrame;
334
+ return callFrame;
337
335
  });
338
336
  }
337
+ /**
338
+ * Given a 1-based call frame creates a 0-based one.
339
+ */
340
+ export function makeZeroBasedCallFrame(callFrame) {
341
+ const normalizedCallFrame = { ...callFrame };
342
+ normalizedCallFrame.lineNumber = callFrame.lineNumber && callFrame.lineNumber - 1;
343
+ normalizedCallFrame.columnNumber = callFrame.columnNumber && callFrame.columnNumber - 1;
344
+ return normalizedCallFrame;
345
+ }
339
346
  /**
340
347
  * NOTE: you probably do not want this function! (Which is why it is not exported).
341
348
  *
@@ -390,7 +397,7 @@ export function isTopLevelEvent(event) {
390
397
  // TODO(crbug.com/341234884): do we need this?
391
398
  return true;
392
399
  }
393
- return event.cat.includes(DevToolsTimelineEventCategory) && event.name === "RunTask" /* Types.TraceEvents.KnownEventName.RunTask */;
400
+ return event.cat.includes(DevToolsTimelineEventCategory) && event.name === "RunTask" /* Types.Events.Name.RUN_TASK */;
394
401
  }
395
402
  function topLevelEventIndexEndingAfter(events, time) {
396
403
  let index = Platform.ArrayUtilities.upperBound(events, time, (time, event) => time - event.ts) - 1;
@@ -404,7 +411,7 @@ export function findUpdateLayoutTreeEvents(events, startTime, endTime) {
404
411
  const startEventIndex = topLevelEventIndexEndingAfter(events, startTime);
405
412
  for (let i = startEventIndex; i < events.length; i++) {
406
413
  const event = events[i];
407
- if (!Types.TraceEvents.isTraceEventUpdateLayoutTree(event)) {
414
+ if (!Types.Events.isUpdateLayoutTree(event)) {
408
415
  continue;
409
416
  }
410
417
  if (event.ts >= (endTime || Infinity)) {
@@ -414,6 +421,14 @@ export function findUpdateLayoutTreeEvents(events, startTime, endTime) {
414
421
  }
415
422
  return foundEvents;
416
423
  }
424
+ export function findNextEventAfterTimestamp(candidates, ts) {
425
+ const index = Platform.ArrayUtilities.nearestIndexFromBeginning(candidates, candidate => ts < candidate.ts);
426
+ return index === null ? null : candidates[index];
427
+ }
428
+ export function findPreviousEventBeforeTimestamp(candidates, ts) {
429
+ const index = Platform.ArrayUtilities.nearestIndexFromEnd(candidates, candidate => candidate.ts < ts);
430
+ return index === null ? null : candidates[index];
431
+ }
417
432
  /**
418
433
  * Iterates events in a tree hierarchically, from top to bottom,
419
434
  * calling back on every event's start and end in the order
@@ -445,7 +460,7 @@ export function findUpdateLayoutTreeEvents(events, startTime, endTime) {
445
460
  * overriden making use of the config.ignoreAsyncEvents parameter.
446
461
  */
447
462
  export function forEachEvent(events, config) {
448
- const globalStartTime = config.startTime || Types.Timing.MicroSeconds(0);
463
+ const globalStartTime = config.startTime ?? Types.Timing.MicroSeconds(0);
449
464
  const globalEndTime = config.endTime || Types.Timing.MicroSeconds(Infinity);
450
465
  const ignoreAsyncEvents = config.ignoreAsyncEvents === false ? false : true;
451
466
  const stack = [];
@@ -459,8 +474,8 @@ export function forEachEvent(events, config) {
459
474
  if (currentEventTimings.startTime > globalEndTime) {
460
475
  break;
461
476
  }
462
- const isIgnoredAsyncEvent = ignoreAsyncEvents && Types.TraceEvents.isAsyncPhase(currentEvent.ph);
463
- if (isIgnoredAsyncEvent || Types.TraceEvents.isFlowPhase(currentEvent.ph)) {
477
+ const isIgnoredAsyncEvent = ignoreAsyncEvents && Types.Events.isPhaseAsync(currentEvent.ph);
478
+ if (isIgnoredAsyncEvent || Types.Events.isFlowPhase(currentEvent.ph)) {
464
479
  continue;
465
480
  }
466
481
  // If we have now reached an event that is after a bunch of events, we need