@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.
- package/README.md +6 -10
- package/analyze-trace.mjs +9 -10
- package/core/platform/ArrayUtilities.js +1 -0
- package/core/platform/ArrayUtilities.js.map +1 -1
- package/core/platform/DevToolsPath.d.ts +1 -1
- package/core/platform/DevToolsPath.js.map +1 -1
- package/core/platform/MimeType.js +4 -2
- package/core/platform/MimeType.js.map +1 -1
- package/core/platform/NumberUtilities.js +8 -0
- package/core/platform/NumberUtilities.js.map +1 -1
- package/core/platform/ServerTiming.d.ts +31 -0
- package/core/platform/ServerTiming.js +212 -0
- package/core/platform/ServerTiming.js.map +1 -0
- package/core/platform/Timing.d.ts +1 -1
- package/core/platform/Timing.js.map +1 -1
- package/core/platform/TypescriptUtilities.d.ts +3 -0
- package/core/platform/TypescriptUtilities.js.map +1 -1
- package/core/platform/UIString.d.ts +1 -1
- package/core/platform/UIString.js.map +1 -1
- package/core/platform/UserVisibleError.d.ts +1 -1
- package/core/platform/UserVisibleError.js.map +1 -1
- package/core/platform/platform-tsconfig.json +1 -1
- package/core/platform/platform.d.ts +2 -2
- package/core/platform/platform.js +2 -2
- package/core/platform/platform.js.map +1 -1
- package/generated/protocol.d.ts +258 -14
- package/models/trace/LanternComputationData.d.ts +4 -4
- package/models/trace/LanternComputationData.js +22 -23
- package/models/trace/LanternComputationData.js.map +1 -1
- package/models/trace/ModelImpl.d.ts +11 -12
- package/models/trace/ModelImpl.js +22 -33
- package/models/trace/ModelImpl.js.map +1 -1
- package/models/trace/Processor.d.ts +21 -12
- package/models/trace/Processor.js +148 -67
- package/models/trace/Processor.js.map +1 -1
- package/models/trace/TracingManager.js.map +1 -1
- package/models/trace/extras/FetchNodes.d.ts +8 -8
- package/models/trace/extras/FetchNodes.js +16 -11
- package/models/trace/extras/FetchNodes.js.map +1 -1
- package/models/trace/extras/FilmStrip.d.ts +2 -2
- package/models/trace/extras/FilmStrip.js +8 -8
- package/models/trace/extras/FilmStrip.js.map +1 -1
- package/models/trace/extras/MainThreadActivity.d.ts +1 -1
- package/models/trace/extras/MainThreadActivity.js +1 -1
- package/models/trace/extras/MainThreadActivity.js.map +1 -1
- package/models/trace/extras/Metadata.js +2 -2
- package/models/trace/extras/Metadata.js.map +1 -1
- package/models/trace/extras/URLForEntry.d.ts +9 -1
- package/models/trace/extras/URLForEntry.js +18 -10
- package/models/trace/extras/URLForEntry.js.map +1 -1
- package/models/trace/extras/extras.js +1 -1
- package/models/trace/handlers/AnimationHandler.d.ts +2 -2
- package/models/trace/handlers/AnimationHandler.js +1 -1
- package/models/trace/handlers/AnimationHandler.js.map +1 -1
- package/models/trace/handlers/AuctionWorkletsHandler.d.ts +2 -2
- package/models/trace/handlers/AuctionWorkletsHandler.js +11 -11
- package/models/trace/handlers/AuctionWorkletsHandler.js.map +1 -1
- package/models/trace/handlers/ExtensionTraceDataHandler.d.ts +7 -5
- package/models/trace/handlers/ExtensionTraceDataHandler.js +16 -10
- package/models/trace/handlers/ExtensionTraceDataHandler.js.map +1 -1
- package/models/trace/handlers/FramesHandler.d.ts +24 -19
- package/models/trace/handlers/FramesHandler.js +46 -25
- package/models/trace/handlers/FramesHandler.js.map +1 -1
- package/models/trace/handlers/GPUHandler.d.ts +4 -4
- package/models/trace/handlers/GPUHandler.js +3 -3
- package/models/trace/handlers/GPUHandler.js.map +1 -1
- package/models/trace/handlers/ImagePaintingHandler.d.ts +3 -3
- package/models/trace/handlers/ImagePaintingHandler.js +6 -8
- package/models/trace/handlers/ImagePaintingHandler.js.map +1 -1
- package/models/trace/handlers/InitiatorsHandler.d.ts +3 -3
- package/models/trace/handlers/InitiatorsHandler.js +14 -14
- package/models/trace/handlers/InitiatorsHandler.js.map +1 -1
- package/models/trace/handlers/InvalidationsHandler.d.ts +4 -2
- package/models/trace/handlers/InvalidationsHandler.js +29 -11
- package/models/trace/handlers/InvalidationsHandler.js.map +1 -1
- package/models/trace/handlers/LargestImagePaintHandler.d.ts +2 -2
- package/models/trace/handlers/LargestImagePaintHandler.js +1 -1
- package/models/trace/handlers/LargestImagePaintHandler.js.map +1 -1
- package/models/trace/handlers/LargestTextPaintHandler.d.ts +2 -2
- package/models/trace/handlers/LargestTextPaintHandler.js +1 -1
- package/models/trace/handlers/LargestTextPaintHandler.js.map +1 -1
- package/models/trace/handlers/LayerTreeHandler.d.ts +6 -6
- package/models/trace/handlers/LayerTreeHandler.js +6 -6
- package/models/trace/handlers/LayerTreeHandler.js.map +1 -1
- package/models/trace/handlers/LayoutShiftsHandler.d.ts +12 -20
- package/models/trace/handlers/LayoutShiftsHandler.js +73 -12
- package/models/trace/handlers/LayoutShiftsHandler.js.map +1 -1
- package/models/trace/handlers/MemoryHandler.d.ts +2 -2
- package/models/trace/handlers/MemoryHandler.js +1 -1
- package/models/trace/handlers/MemoryHandler.js.map +1 -1
- package/models/trace/handlers/MetaHandler.d.ts +15 -14
- package/models/trace/handlers/MetaHandler.js +32 -30
- package/models/trace/handlers/MetaHandler.js.map +1 -1
- package/models/trace/handlers/ModelHandlers.d.ts +1 -1
- package/models/trace/handlers/ModelHandlers.js +1 -1
- package/models/trace/handlers/ModelHandlers.js.map +1 -1
- package/models/trace/handlers/NetworkRequestsHandler.d.ts +13 -12
- package/models/trace/handlers/NetworkRequestsHandler.js +68 -66
- package/models/trace/handlers/NetworkRequestsHandler.js.map +1 -1
- package/models/trace/handlers/PageFramesHandler.d.ts +2 -2
- package/models/trace/handlers/PageFramesHandler.js +2 -2
- package/models/trace/handlers/PageFramesHandler.js.map +1 -1
- package/models/trace/handlers/PageLoadMetricsHandler.d.ts +7 -7
- package/models/trace/handlers/PageLoadMetricsHandler.js +21 -24
- package/models/trace/handlers/PageLoadMetricsHandler.js.map +1 -1
- package/models/trace/handlers/RendererHandler.d.ts +19 -19
- package/models/trace/handlers/RendererHandler.js +5 -5
- package/models/trace/handlers/RendererHandler.js.map +1 -1
- package/models/trace/handlers/SamplesHandler.d.ts +6 -6
- package/models/trace/handlers/SamplesHandler.js +4 -4
- package/models/trace/handlers/SamplesHandler.js.map +1 -1
- package/models/trace/handlers/ScreenshotsHandler.d.ts +6 -4
- package/models/trace/handlers/ScreenshotsHandler.js +11 -9
- package/models/trace/handlers/ScreenshotsHandler.js.map +1 -1
- package/models/trace/handlers/SelectorStatsHandler.d.ts +3 -3
- package/models/trace/handlers/SelectorStatsHandler.js +2 -2
- package/models/trace/handlers/SelectorStatsHandler.js.map +1 -1
- package/models/trace/handlers/ServerTimingsHandler.d.ts +10 -0
- package/models/trace/handlers/ServerTimingsHandler.js +118 -0
- package/models/trace/handlers/ServerTimingsHandler.js.map +1 -0
- package/models/trace/handlers/Threads.d.ts +7 -7
- package/models/trace/handlers/Threads.js +5 -5
- package/models/trace/handlers/Threads.js.map +1 -1
- package/models/trace/handlers/UserInteractionsHandler.d.ts +13 -11
- package/models/trace/handlers/UserInteractionsHandler.js +13 -7
- package/models/trace/handlers/UserInteractionsHandler.js.map +1 -1
- package/models/trace/handlers/UserTimingsHandler.d.ts +5 -5
- package/models/trace/handlers/UserTimingsHandler.js +52 -9
- package/models/trace/handlers/UserTimingsHandler.js.map +1 -1
- package/models/trace/handlers/WarningsHandler.d.ts +5 -5
- package/models/trace/handlers/WarningsHandler.js +4 -5
- package/models/trace/handlers/WarningsHandler.js.map +1 -1
- package/models/trace/handlers/WorkersHandler.d.ts +4 -4
- package/models/trace/handlers/WorkersHandler.js +1 -1
- package/models/trace/handlers/WorkersHandler.js.map +1 -1
- package/models/trace/handlers/handlers-tsconfig.json +1 -1
- package/models/trace/handlers/types.d.ts +7 -7
- package/models/trace/handlers/types.js.map +1 -1
- package/models/trace/helpers/Extensions.d.ts +5 -1
- package/models/trace/helpers/Extensions.js +5 -3
- package/models/trace/helpers/Extensions.js.map +1 -1
- package/models/trace/helpers/Network.d.ts +2 -2
- package/models/trace/helpers/Network.js +19 -2
- package/models/trace/helpers/Network.js.map +1 -1
- package/models/trace/helpers/SamplesIntegrator.d.ts +5 -5
- package/models/trace/helpers/SamplesIntegrator.js +10 -11
- package/models/trace/helpers/SamplesIntegrator.js.map +1 -1
- package/models/trace/helpers/SyntheticEvents.d.ts +8 -14
- package/models/trace/helpers/SyntheticEvents.js +20 -31
- package/models/trace/helpers/SyntheticEvents.js.map +1 -1
- package/models/trace/helpers/Timing.d.ts +16 -5
- package/models/trace/helpers/Timing.js +33 -7
- package/models/trace/helpers/Timing.js.map +1 -1
- package/models/trace/helpers/Trace.d.ts +46 -33
- package/models/trace/helpers/Trace.js +53 -38
- package/models/trace/helpers/Trace.js.map +1 -1
- package/models/trace/helpers/TreeHelpers.d.ts +30 -8
- package/models/trace/helpers/TreeHelpers.js +91 -23
- package/models/trace/helpers/TreeHelpers.js.map +1 -1
- package/models/trace/insights/Common.d.ts +8 -2
- package/models/trace/insights/Common.js +33 -7
- package/models/trace/insights/Common.js.map +1 -1
- package/models/trace/insights/CumulativeLayoutShift.d.ts +34 -13
- package/models/trace/insights/CumulativeLayoutShift.js +151 -59
- package/models/trace/insights/CumulativeLayoutShift.js.map +1 -1
- package/models/trace/insights/DocumentLatency.d.ts +9 -4
- package/models/trace/insights/DocumentLatency.js +82 -7
- package/models/trace/insights/DocumentLatency.js.map +1 -1
- package/models/trace/insights/FontDisplay.d.ts +11 -0
- package/models/trace/insights/FontDisplay.js +44 -0
- package/models/trace/insights/FontDisplay.js.map +1 -0
- package/models/trace/insights/InsightRunners.d.ts +3 -0
- package/models/trace/insights/InsightRunners.js +3 -0
- package/models/trace/insights/InsightRunners.js.map +1 -1
- package/models/trace/insights/InteractionToNextPaint.d.ts +4 -5
- package/models/trace/insights/InteractionToNextPaint.js +5 -3
- package/models/trace/insights/InteractionToNextPaint.js.map +1 -1
- package/models/trace/insights/LargestContentfulPaint.d.ts +20 -7
- package/models/trace/insights/LargestContentfulPaint.js +57 -37
- package/models/trace/insights/LargestContentfulPaint.js.map +1 -1
- package/models/trace/insights/RenderBlocking.d.ts +3 -3
- package/models/trace/insights/RenderBlocking.js +29 -24
- package/models/trace/insights/RenderBlocking.js.map +1 -1
- package/models/trace/insights/SlowCSSSelector.d.ts +11 -0
- package/models/trace/insights/SlowCSSSelector.js +67 -0
- package/models/trace/insights/SlowCSSSelector.js.map +1 -0
- package/models/trace/insights/ThirdPartyWeb.d.ts +18 -0
- package/models/trace/insights/ThirdPartyWeb.js +174 -0
- package/models/trace/insights/ThirdPartyWeb.js.map +1 -0
- package/models/trace/insights/Viewport.d.ts +5 -2
- package/models/trace/insights/Viewport.js +14 -9
- package/models/trace/insights/Viewport.js.map +1 -1
- package/models/trace/insights/insights-tsconfig.json +9 -0
- package/models/trace/insights/insights.d.ts +1 -0
- package/models/trace/insights/insights.js +1 -0
- package/models/trace/insights/insights.js.map +1 -1
- package/models/trace/insights/types.d.ts +43 -25
- package/models/trace/insights/types.js.map +1 -1
- package/models/trace/lantern/core/NetworkAnalyzer.d.ts +6 -6
- package/models/trace/lantern/core/NetworkAnalyzer.js +12 -12
- package/models/trace/lantern/core/NetworkAnalyzer.js.map +1 -1
- package/models/trace/lantern/graph/BaseNode.d.ts +4 -4
- package/models/trace/lantern/graph/BaseNode.js +21 -21
- package/models/trace/lantern/graph/BaseNode.js.map +1 -1
- package/models/trace/lantern/graph/CPUNode.d.ts +1 -1
- package/models/trace/lantern/graph/CPUNode.js +5 -5
- package/models/trace/lantern/graph/CPUNode.js.map +1 -1
- package/models/trace/lantern/graph/PageDependencyGraph.d.ts +4 -4
- package/models/trace/lantern/graph/PageDependencyGraph.js +5 -5
- package/models/trace/lantern/graph/PageDependencyGraph.js.map +1 -1
- package/models/trace/lantern/simulation/ConnectionPool.d.ts +7 -7
- package/models/trace/lantern/simulation/ConnectionPool.js +26 -26
- package/models/trace/lantern/simulation/ConnectionPool.js.map +1 -1
- package/models/trace/lantern/simulation/DNSCache.d.ts +3 -3
- package/models/trace/lantern/simulation/DNSCache.js +11 -11
- package/models/trace/lantern/simulation/DNSCache.js.map +1 -1
- package/models/trace/lantern/simulation/SimulationTimingMap.d.ts +1 -1
- package/models/trace/lantern/simulation/SimulationTimingMap.js +15 -15
- package/models/trace/lantern/simulation/SimulationTimingMap.js.map +1 -1
- package/models/trace/lantern/simulation/Simulator.d.ts +28 -28
- package/models/trace/lantern/simulation/Simulator.js +113 -113
- package/models/trace/lantern/simulation/Simulator.js.map +1 -1
- package/models/trace/lantern/simulation/TCPConnection.d.ts +9 -9
- package/models/trace/lantern/simulation/TCPConnection.js +36 -36
- package/models/trace/lantern/simulation/TCPConnection.js.map +1 -1
- package/models/trace/root-causes/LayoutShift.d.ts +13 -13
- package/models/trace/root-causes/LayoutShift.js +7 -25
- package/models/trace/root-causes/LayoutShift.js.map +1 -1
- package/models/trace/types/Configuration.d.ts +16 -0
- package/models/trace/types/Configuration.js +1 -0
- package/models/trace/types/Configuration.js.map +1 -1
- package/models/trace/types/Extensions.d.ts +9 -12
- package/models/trace/types/Extensions.js +2 -1
- package/models/trace/types/Extensions.js.map +1 -1
- package/models/trace/types/File.d.ts +68 -25
- package/models/trace/types/File.js +15 -3
- package/models/trace/types/File.js.map +1 -1
- package/models/trace/types/TraceEvents.d.ts +819 -730
- package/models/trace/types/TraceEvents.js +270 -280
- package/models/trace/types/TraceEvents.js.map +1 -1
- package/models/trace/types/types.d.ts +1 -1
- package/models/trace/types/types.js +1 -1
- package/models/trace/types/types.js.map +1 -1
- package/package.json +4 -2
- package/test/test-trace-engine.mjs +47 -2
- package/third_party/third-party-web/third-party-web.js +1 -0
- package/core/platform/PromiseUtilities.d.ts +0 -10
- package/core/platform/PromiseUtilities.js +0 -18
- package/core/platform/PromiseUtilities.js.map +0 -1
- package/core/platform/SetUtilities.d.ts +0 -2
- package/core/platform/SetUtilities.js +0 -23
- package/core/platform/SetUtilities.js.map +0 -1
- package/models/trace/EntriesFilter.d.ts +0 -72
- package/models/trace/EntriesFilter.js +0 -296
- package/models/trace/EntriesFilter.js.map +0 -1
- package/models/trace/LegacyTracingModel.js.map +0 -1
- package/models/trace/handlers/EnhancedTracesHandler.d.ts +0 -48
- package/models/trace/handlers/EnhancedTracesHandler.js +0 -165
- package/models/trace/handlers/EnhancedTracesHandler.js.map +0 -1
- package/models/trace/lantern/BaseNode.d.ts +0 -91
- package/models/trace/lantern/BaseNode.js +0 -268
- package/models/trace/lantern/BaseNode.js.map +0 -1
- package/models/trace/lantern/CPUNode.d.ts +0 -24
- package/models/trace/lantern/CPUNode.js +0 -64
- package/models/trace/lantern/CPUNode.js.map +0 -1
- package/models/trace/lantern/LanternError.d.ts +0 -3
- package/models/trace/lantern/LanternError.js +0 -7
- package/models/trace/lantern/LanternError.js.map +0 -1
- package/models/trace/lantern/MetricsModule.d.ts +0 -11
- package/models/trace/lantern/MetricsModule.js +0 -14
- package/models/trace/lantern/MetricsModule.js.map +0 -1
- package/models/trace/lantern/NetworkNode.d.ts +0 -22
- package/models/trace/lantern/NetworkNode.js +0 -83
- package/models/trace/lantern/NetworkNode.js.map +0 -1
- package/models/trace/lantern/PageDependencyGraph.d.ts +0 -43
- package/models/trace/lantern/PageDependencyGraph.js +0 -509
- package/models/trace/lantern/PageDependencyGraph.js.map +0 -1
- package/models/trace/lantern/SimulationModule.d.ts +0 -17
- package/models/trace/lantern/SimulationModule.js +0 -13
- package/models/trace/lantern/SimulationModule.js.map +0 -1
- package/models/trace/lantern/simulation/NetworkAnalyzer.d.ts +0 -112
- package/models/trace/lantern/simulation/NetworkAnalyzer.js +0 -486
- 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
|
|
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.
|
|
4
|
+
type MatchedPairType<T extends Types.Events.PairableAsync> = Types.Events.SyntheticEventPair<T>;
|
|
5
5
|
type MatchingPairableAsyncEvents = {
|
|
6
|
-
begin: Types.
|
|
7
|
-
end: Types.
|
|
8
|
-
instant?: Types.
|
|
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.
|
|
12
|
-
export declare function addEventToProcessThread<T extends Types.
|
|
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.
|
|
31
|
-
export declare function getNavigationForTraceEvent(event: Types.
|
|
32
|
-
export declare function extractId(event: Types.
|
|
33
|
-
export declare function activeURLForFrameAtTime(frameId: string, time: Types.Timing.MicroSeconds, rendererProcessesByFrame: Map<string, Map<Types.
|
|
34
|
-
frame: Types.
|
|
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.
|
|
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
|
|
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.
|
|
57
|
-
export declare function createSortedSyntheticEvents<T extends Types.
|
|
58
|
-
begin: Types.
|
|
59
|
-
end: Types.
|
|
60
|
-
instant?: Types.
|
|
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.
|
|
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.
|
|
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.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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.
|
|
84
|
-
onEndEvent: (event: Types.
|
|
85
|
-
onInstantEvent?: (event: Types.
|
|
86
|
-
eventFilter?: (event: Types.
|
|
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.
|
|
122
|
-
export declare function eventHasCategory(event: Types.
|
|
123
|
-
export declare function nodeIdForInvalidationEvent(event: Types.
|
|
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 (
|
|
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.
|
|
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
|
|
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.
|
|
204
|
-
const isEndEvent = event.ph === "e" /* Types.
|
|
205
|
-
const isInstantEvent = event.ph === "n" /* Types.
|
|
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.
|
|
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.
|
|
302
|
-
case "EvaluateScript" /* Types.
|
|
303
|
-
case "v8.compile" /* Types.
|
|
304
|
-
case "v8.produceCache" /* Types.
|
|
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.
|
|
330
|
-
case "InvalidateLayout" /* Types.
|
|
331
|
-
case "UpdateLayoutTree" /* Types.
|
|
332
|
-
|
|
333
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
463
|
-
if (isIgnoredAsyncEvent || Types.
|
|
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
|