@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TraceEvents.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/types/TraceEvents.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\n/* eslint-disable no-unused-private-class-members */\nimport type * as Protocol from '../../../generated/protocol.js';\n\nimport {type MicroSeconds, type MilliSeconds, type Seconds} from './Timing.js';\n\n// Trace Events.\nexport const enum Phase {\n // Standard\n BEGIN = 'B',\n END = 'E',\n COMPLETE = 'X',\n INSTANT = 'I',\n COUNTER = 'C',\n\n // Async\n ASYNC_NESTABLE_START = 'b',\n ASYNC_NESTABLE_INSTANT = 'n',\n ASYNC_NESTABLE_END = 'e',\n ASYNC_STEP_INTO = 'T',\n ASYNC_BEGIN = 'S',\n ASYNC_END = 'F',\n ASYNC_STEP_PAST = 'p',\n\n // Flow\n FLOW_START = 's',\n FLOW_STEP = 't',\n FLOW_END = 'f',\n\n // Sample\n SAMPLE = 'P',\n\n // Object\n OBJECT_CREATED = 'N',\n OBJECT_SNAPSHOT = 'O',\n OBJECT_DESTROYED = 'D',\n\n // Metadata\n METADATA = 'M',\n\n // Memory Dump\n MEMORY_DUMP_GLOBAL = 'V',\n MEMORY_DUMP_PROCESS = 'v',\n\n // Mark\n MARK = 'R',\n\n // Clock sync\n CLOCK_SYNC = 'c',\n}\n\nexport function isNestableAsyncPhase(phase: Phase): boolean {\n return phase === Phase.ASYNC_NESTABLE_START || phase === Phase.ASYNC_NESTABLE_END ||\n phase === Phase.ASYNC_NESTABLE_INSTANT;\n}\n\nexport function isAsyncPhase(phase: Phase): boolean {\n return isNestableAsyncPhase(phase) || phase === Phase.ASYNC_BEGIN || phase === Phase.ASYNC_STEP_INTO ||\n phase === Phase.ASYNC_END || phase === Phase.ASYNC_STEP_PAST;\n}\n\nexport function isFlowPhase(phase: Phase): boolean {\n return phase === Phase.FLOW_START || phase === Phase.FLOW_STEP || phase === Phase.FLOW_END;\n}\n\nexport const enum TraceEventScope {\n THREAD = 't',\n PROCESS = 'p',\n GLOBAL = 'g',\n}\n\nexport interface TraceEventData {\n args?: TraceEventArgs;\n cat: string;\n name: string;\n ph: Phase;\n pid: ProcessID;\n tid: ThreadID;\n tts?: MicroSeconds;\n ts: MicroSeconds;\n tdur?: MicroSeconds;\n dur?: MicroSeconds;\n}\n\nexport interface TraceEventArgs {\n data?: TraceEventArgsData;\n}\n\nexport interface TraceEventArgsData {\n stackTrace?: TraceEventCallFrame[];\n url?: string;\n navigationId?: string;\n frame?: string;\n}\n\nexport interface TraceEventCallFrame {\n codeType?: string;\n functionName: string;\n // Trace events are inconsistent here sadly :(\n scriptId: number|string;\n columnNumber: number;\n lineNumber: number;\n url: string;\n}\n\nexport function objectIsTraceEventCallFrame(object: {}): object is TraceEventCallFrame {\n return ('functionName' in object && typeof object.functionName === 'string') &&\n ('scriptId' in object && (typeof object.scriptId === 'string' || typeof object.scriptId === 'number')) &&\n ('columnNumber' in object && typeof object.columnNumber === 'number') &&\n ('lineNumber' in object && typeof object.lineNumber === 'number') &&\n ('url' in object && typeof object.url === 'string');\n}\n\nexport interface TraceFrame {\n frame: string;\n name: string;\n processId: ProcessID;\n url: string;\n parent?: string;\n // Added to Chromium in April 2024:\n // crrev.com/c/5424783\n isOutermostMainFrame?: boolean;\n // Added to Chromium in June 2024:\n // crrev.com/c/5595033\n isInPrimaryMainFrame?: boolean;\n}\n\n// Sample events.\n\nexport interface TraceEventSample extends TraceEventData {\n ph: Phase.SAMPLE;\n}\n\n/**\n * A fake trace event created to support CDP.Profiler.Profiles in the\n * trace engine.\n */\nexport interface SyntheticCpuProfile extends TraceEventInstant, SyntheticBasedEvent<Phase.INSTANT> {\n name: 'CpuProfile';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n cpuProfile: Protocol.Profiler.Profile,\n },\n };\n}\n\nexport interface TraceEventProfile extends TraceEventSample {\n name: 'Profile';\n id: ProfileID;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n startTime: MicroSeconds,\n },\n };\n}\n\nexport interface TraceEventProfileChunk extends TraceEventSample {\n name: 'ProfileChunk';\n id: ProfileID;\n args: TraceEventArgs&{\n // `data` is only missing in \"fake\" traces\n data?: TraceEventArgsData & {\n cpuProfile?: TraceEventPartialProfile,\n timeDeltas?: MicroSeconds[],\n lines?: MicroSeconds[],\n },\n };\n}\n\nexport interface TraceEventPartialProfile {\n nodes?: TraceEventPartialNode[];\n samples: CallFrameID[];\n}\n\nexport interface TraceEventPartialNode {\n callFrame: TraceEventCallFrame;\n id: CallFrameID;\n parent?: CallFrameID;\n}\n\n// Complete events.\n\nexport interface TraceEventComplete extends TraceEventData {\n ph: Phase.COMPLETE;\n dur: MicroSeconds;\n}\n\nexport interface TraceEventRunTask extends TraceEventComplete {\n name: KnownEventName.RunTask;\n}\nexport function isTraceEventRunTask(event: TraceEventData): event is TraceEventRunTask {\n return event.name === KnownEventName.RunTask;\n}\n\nexport interface TraceEventFireIdleCallback extends TraceEventComplete {\n name: KnownEventName.FireIdleCallback;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n allottedMilliseconds: MilliSeconds,\n frame: string,\n id: number,\n timedOut: boolean,\n },\n };\n}\n\nexport interface TraceEventSchedulePostMessage extends TraceEventInstant {\n name: KnownEventName.SchedulePostMessage;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n traceId: string,\n },\n };\n}\n\nexport interface TraceEventHandlePostMessage extends TraceEventComplete {\n name: KnownEventName.HandlePostMessage;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n traceId: string,\n },\n };\n}\n\nexport interface TraceEventDispatch extends TraceEventComplete {\n name: 'EventDispatch';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n type: string,\n },\n };\n}\n\nexport interface TraceEventParseHTML extends TraceEventComplete {\n name: 'ParseHTML';\n args: TraceEventArgs&{\n beginData: {\n frame: string,\n startLine: number,\n url: string,\n },\n endData?: {\n endLine: number,\n },\n };\n}\n\nexport interface TraceEventBegin extends TraceEventData {\n ph: Phase.BEGIN;\n}\n\nexport interface TraceEventEnd extends TraceEventData {\n ph: Phase.END;\n}\n\n/**\n * This denotes a complete event created from a pair of begin and end\n * events. For practicality, instead of always having to look for the\n * end event corresponding to a begin event, we create a synthetic\n * complete event that comprises the data of both from the beginning in\n * the RendererHandler.\n */\nexport type SyntheticCompleteEvent = TraceEventComplete;\n\nexport interface TraceEventEventTiming extends TraceEventData {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END;\n name: KnownEventName.EventTiming;\n id: string;\n args: TraceEventArgs&{\n frame: string,\n data?: TraceEventArgsData&{\n cancelable: boolean,\n duration: MilliSeconds,\n processingEnd: MilliSeconds,\n processingStart: MilliSeconds,\n timeStamp: MilliSeconds,\n interactionId?: number, type: string,\n },\n };\n}\n\nexport interface TraceEventEventTimingBegin extends TraceEventEventTiming {\n ph: Phase.ASYNC_NESTABLE_START;\n}\nexport interface TraceEventEventTimingEnd extends TraceEventEventTiming {\n ph: Phase.ASYNC_NESTABLE_END;\n}\n\nexport interface TraceEventGPUTask extends TraceEventComplete {\n name: 'GPUTask';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n /* eslint-disable @typescript-eslint/naming-convention */\n renderer_pid: ProcessID,\n used_bytes: number,\n /* eslint-enable @typescript-eslint/naming-convention */\n },\n };\n}\n\nexport interface SyntheticNetworkRedirect {\n url: string;\n priority: string;\n requestMethod?: string;\n ts: MicroSeconds;\n dur: MicroSeconds;\n}\n\n// TraceEventProcessedArgsData is used to store the processed data of a network\n// request. Which is used to distinguish from the date we extract from the\n// trace event directly.\ninterface SyntheticArgsData {\n dnsLookup: MicroSeconds;\n download: MicroSeconds;\n downloadStart: MicroSeconds;\n finishTime: MicroSeconds;\n initialConnection: MicroSeconds;\n isDiskCached: boolean;\n isHttps: boolean;\n isMemoryCached: boolean;\n isPushedResource: boolean;\n networkDuration: MicroSeconds;\n processingDuration: MicroSeconds;\n proxyNegotiation: MicroSeconds;\n queueing: MicroSeconds;\n redirectionDuration: MicroSeconds;\n requestSent: MicroSeconds;\n sendStartTime: MicroSeconds;\n ssl: MicroSeconds;\n stalled: MicroSeconds;\n totalTime: MicroSeconds;\n waiting: MicroSeconds;\n}\n\nexport interface SyntheticNetworkRequest extends TraceEventComplete, SyntheticBasedEvent<Phase.COMPLETE> {\n rawSourceEvent: TraceEventData;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n syntheticData: SyntheticArgsData,\n // All fields below are from TraceEventsForNetworkRequest,\n // Required fields\n decodedBodyLength: number,\n encodedDataLength: number,\n frame: string,\n fromServiceWorker: boolean,\n isLinkPreload: boolean,\n mimeType: string,\n priority: Protocol.Network.ResourcePriority,\n initialPriority: Protocol.Network.ResourcePriority,\n /**\n * This is the protocol used to resolve the request.\n *\n * Note, this is not the same as URL.protocol.\n *\n * Example values (not exhaustive): http/0.9, http/1.0, http/1.1, http, h2, h3-Q050, data, blob\n */\n protocol: string,\n redirects: SyntheticNetworkRedirect[],\n renderBlocking: RenderBlocking,\n requestId: string,\n requestingFrameUrl: string,\n statusCode: number,\n resourceType: Protocol.Network.ResourceType,\n responseHeaders: Array<{name: string, value: string}>,\n fetchPriorityHint: FetchPriorityHint,\n url: string,\n /** True only if got a 'resourceFinish' event indicating a failure. */\n failed: boolean,\n /** True only if got a 'resourceFinish' event. */\n finished: boolean,\n connectionId: number,\n connectionReused: boolean,\n // Optional fields\n initiator?: Initiator,\n requestMethod?: string,\n timing?: TraceEventResourceReceiveResponseTimingData,\n },\n };\n cat: 'loading';\n name: 'SyntheticNetworkRequest';\n ph: Phase.COMPLETE;\n dur: MicroSeconds;\n tdur: MicroSeconds;\n ts: MicroSeconds;\n tts: MicroSeconds;\n pid: ProcessID;\n tid: ThreadID;\n}\n\nexport interface SyntheticWebSocketConnectionEvent extends TraceEventComplete, SyntheticBasedEvent<Phase.COMPLETE> {\n rawSourceEvent: TraceEventData;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n identifier: number,\n priority: Protocol.Network.ResourcePriority,\n url: string,\n },\n };\n cat: string;\n name: 'SyntheticWebSocketConnectionEvent';\n ph: Phase.COMPLETE;\n dur: MicroSeconds;\n ts: MicroSeconds;\n pid: ProcessID;\n tid: ThreadID;\n s: TraceEventScope;\n}\n\nexport const enum AuctionWorkletType {\n BIDDER = 'bidder',\n SELLER = 'seller',\n // Not expected to be used, but here as a fallback in case new types get\n // added and we have yet to update the trace engine.\n UNKNOWN = 'unknown',\n}\n\nexport interface SyntheticAuctionWorkletEvent extends TraceEventInstant, SyntheticBasedEvent<Phase.INSTANT> {\n rawSourceEvent: TraceEventData;\n name: 'SyntheticAuctionWorkletEvent';\n // The PID that the AuctionWorklet is running in.\n pid: ProcessID;\n // URL\n host: string;\n // An ID used to pair up runningInProcessEvents with doneWithProcessEvents\n target: string;\n type: AuctionWorkletType;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n // There are two threads for a worklet that we care about, so we gather\n // the thread_name events so we can know the PID and TID for them (and\n // hence display the right events in the track for each thread)\n utilityThread: TraceEventThreadName,\n v8HelperThread: TraceEventThreadName,\n } &\n (\n // This type looks odd, but this is because these events could either have:\n // 1. Just the DoneWithProcess event\n // 2. Just the RunningInProcess event\n // 3. Both events\n // But crucially it cannot have both events missing, hence listing all the\n // allowed cases.\n // Clang is disabled as the combination of nested types and optional\n // properties cause it to weirdly indent some of the properties and make it\n // very unreadable.\n // clang-format off\n {\n runningInProcessEvent: TraceEventAuctionWorkletRunningInProcess,\n doneWithProcessEvent: TraceEventAuctionWorkletDoneWithProcess,\n } |\n {\n runningInProcessEvent?: TraceEventAuctionWorkletRunningInProcess,\n doneWithProcessEvent: TraceEventAuctionWorkletDoneWithProcess,\n } |\n {\n doneWithProcessEvent?: TraceEventAuctionWorkletDoneWithProcess,\n runningInProcessEvent: TraceEventAuctionWorkletRunningInProcess,\n\n }),\n // clang-format on\n };\n}\nexport interface TraceEventAuctionWorkletRunningInProcess extends TraceEventData {\n name: 'AuctionWorkletRunningInProcess';\n ph: Phase.INSTANT;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n host: string,\n pid: ProcessID,\n target: string,\n type: AuctionWorkletType,\n },\n };\n}\nexport interface TraceEventAuctionWorkletDoneWithProcess extends TraceEventData {\n name: 'AuctionWorkletDoneWithProcess';\n ph: Phase.INSTANT;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n host: string,\n pid: ProcessID,\n target: string,\n type: AuctionWorkletType,\n },\n };\n}\n\nexport function isTraceEventAuctionWorkletRunningInProcess(event: TraceEventData):\n event is TraceEventAuctionWorkletRunningInProcess {\n return event.name === 'AuctionWorkletRunningInProcess';\n}\nexport function isTraceEventAuctionWorkletDoneWithProcess(event: TraceEventData):\n event is TraceEventAuctionWorkletDoneWithProcess {\n return event.name === 'AuctionWorkletDoneWithProcess';\n}\n\n// Snapshot events.\n\nexport interface TraceEventScreenshot extends TraceEventData {\n /**\n * @deprecated This value is incorrect. Use ScreenshotHandler.getPresentationTimestamp()\n */\n ts: MicroSeconds;\n /** The id is the frame sequence number in hex */\n id: string;\n args: TraceEventArgs&{\n snapshot: string,\n };\n name: KnownEventName.Screenshot;\n cat: 'disabled-by-default-devtools.screenshot';\n ph: Phase.OBJECT_SNAPSHOT;\n}\nexport function isTraceEventScreenshot(event: TraceEventData): event is TraceEventScreenshot {\n return event.name === KnownEventName.Screenshot;\n}\n\nexport interface SyntheticScreenshot extends TraceEventData, SyntheticBasedEvent {\n rawSourceEvent: TraceEventScreenshot;\n /** This is the correct presentation timestamp. */\n ts: MicroSeconds;\n args: TraceEventArgs&{\n dataUri: string,\n };\n name: KnownEventName.Screenshot;\n cat: 'disabled-by-default-devtools.screenshot';\n ph: Phase.OBJECT_SNAPSHOT;\n}\n\n// Animation events.\n\nexport interface TraceEventAnimation extends TraceEventData {\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n nodeName?: string,\n nodeId?: number,\n displayName?: string,\n id?: string,\n name?: string,\n state?: string,\n compositeFailed?: number,\n unsupportedProperties?: string[],\n },\n };\n name: 'Animation';\n id2?: {\n local?: string,\n };\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_NESTABLE_INSTANT;\n}\n\n// Metadata events.\n\nexport interface TraceEventMetadata extends TraceEventData {\n ph: Phase.METADATA;\n args: TraceEventArgs&{\n name?: string,\n uptime?: string,\n };\n}\n\nexport interface TraceEventThreadName extends TraceEventMetadata {\n name: KnownEventName.ThreadName;\n args: TraceEventArgs&{\n name?: string,\n };\n}\n\nexport interface TraceEventProcessName extends TraceEventMetadata {\n name: 'process_name';\n}\n\n// Mark events.\n\nexport interface TraceEventMark extends TraceEventData {\n ph: Phase.MARK;\n}\n\nexport interface TraceEventNavigationStart extends TraceEventMark {\n name: 'navigationStart';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n documentLoaderURL: string,\n isLoadingMainFrame: boolean,\n // isOutermostMainFrame was introduced in crrev.com/c/3625434 and exists\n // because of Fenced Frames\n // [github.com/WICG/fenced-frame/tree/master/explainer].\n // Fenced frames introduce a situation where isLoadingMainFrame could be\n // true for a navigation, but that navigation be within an embedded \"main\n // frame\", and therefore it wouldn't be on the top level main frame.\n // In situations where we need to distinguish that, we can rely on\n // isOutermostMainFrame, which will only be true for navigations on the\n // top level main frame.\n\n // This flag is optional as it was introduced in May 2022; so users\n // reasonably may import traces from before that date that do not have\n // this field present.\n isOutermostMainFrame?: boolean, navigationId: string,\n /**\n * @deprecated use documentLoaderURL for navigation events URLs\n */\n url?: string,\n },\n frame: string,\n };\n}\n\nexport interface TraceEventFirstContentfulPaint extends TraceEventMark {\n name: KnownEventName.MarkFCP;\n args: TraceEventArgs&{\n frame: string,\n data?: TraceEventArgsData&{\n navigationId: string,\n },\n };\n}\n\nexport interface TraceEventFirstPaint extends TraceEventMark {\n name: 'firstPaint';\n args: TraceEventArgs&{\n frame: string,\n data?: TraceEventArgsData&{\n navigationId: string,\n },\n };\n}\n\nexport type PageLoadEvent = TraceEventFirstContentfulPaint|TraceEventMarkDOMContent|TraceEventInteractiveTime|\n TraceEventLargestContentfulPaintCandidate|TraceEventLayoutShift|TraceEventFirstPaint|TraceEventMarkLoad|\n TraceEventNavigationStart;\n\nconst markerTypeGuards = [\n isTraceEventMarkDOMContent,\n isTraceEventMarkLoad,\n isTraceEventFirstPaint,\n isTraceEventFirstContentfulPaint,\n isTraceEventLargestContentfulPaintCandidate,\n isTraceEventNavigationStart,\n];\n\nexport const MarkerName =\n ['MarkDOMContent', 'MarkLoad', 'firstPaint', 'firstContentfulPaint', 'largestContentfulPaint::Candidate'] as const;\n\nexport interface MarkerEvent extends TraceEventData {\n name: typeof MarkerName[number];\n}\n\nexport function isTraceEventMarkerEvent(event: TraceEventData): event is MarkerEvent {\n return markerTypeGuards.some(fn => fn(event));\n}\n\nconst pageLoadEventTypeGuards = [\n ...markerTypeGuards,\n isTraceEventInteractiveTime,\n];\n\nexport function eventIsPageLoadEvent(event: TraceEventData): event is PageLoadEvent {\n return pageLoadEventTypeGuards.some(fn => fn(event));\n}\n\nexport interface TraceEventLargestContentfulPaintCandidate extends TraceEventMark {\n name: KnownEventName.MarkLCPCandidate;\n args: TraceEventArgs&{\n frame: string,\n data?: TraceEventArgsData&{\n candidateIndex: number,\n isOutermostMainFrame: boolean,\n isMainFrame: boolean,\n navigationId: string,\n nodeId: Protocol.DOM.BackendNodeId,\n loadingAttr: string,\n type?: string,\n },\n };\n}\nexport interface TraceEventLargestImagePaintCandidate extends TraceEventMark {\n name: 'LargestImagePaint::Candidate';\n args: TraceEventArgs&{\n frame: string,\n data?: TraceEventArgsData&{\n candidateIndex: number,\n imageUrl: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DOMNodeId: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport interface TraceEventLargestTextPaintCandidate extends TraceEventMark {\n name: 'LargestTextPaint::Candidate';\n args: TraceEventArgs&{\n frame: string,\n data?: TraceEventArgsData&{\n candidateIndex: number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DOMNodeId: Protocol.DOM.BackendNodeId,\n },\n };\n}\n\nexport interface TraceEventInteractiveTime extends TraceEventMark {\n name: 'InteractiveTime';\n args: TraceEventArgs&{\n args: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n total_blocking_time_ms: number,\n },\n frame: string,\n };\n}\n\n// Instant events.\n\nexport interface TraceEventInstant extends TraceEventData {\n ph: Phase.INSTANT;\n s: TraceEventScope;\n}\n\nexport interface TraceEventUpdateCounters extends TraceEventInstant {\n name: 'UpdateCounters';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n documents: number,\n jsEventListeners: number,\n jsHeapSizeUsed: number,\n nodes: number,\n gpuMemoryLimitKB?: number,\n },\n };\n}\n\nexport type TraceEventRendererEvent = TraceEventInstant|TraceEventComplete;\n\nexport interface TraceEventTracingStartedInBrowser extends TraceEventInstant {\n name: KnownEventName.TracingStartedInBrowser;\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n frameTreeNodeId: number,\n // Frames can only missing in \"fake\" traces\n frames?: TraceFrame[], persistentIds: boolean,\n },\n };\n}\n\nexport interface TraceEventTracingSessionIdForWorker extends TraceEventInstant {\n name: 'TracingSessionIdForWorker';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n url: string,\n workerId: WorkerId,\n workerThreadId: ThreadID,\n frame: string,\n },\n };\n}\nexport function isTraceEventTracingSessionIdForWorker(event: TraceEventData):\n event is TraceEventTracingSessionIdForWorker {\n return event.name === 'TracingSessionIdForWorker';\n}\n\nexport interface TraceEventFrameCommittedInBrowser extends TraceEventInstant {\n name: 'FrameCommittedInBrowser';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & TraceFrame,\n };\n}\n\nexport interface TraceEventMainFrameViewport extends TraceEventInstant {\n name: 'PaintTimingVisualizer::Viewport';\n args: {\n data: TraceEventArgsData&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n viewport_rect: number[],\n },\n };\n}\n\nexport interface TraceEventCommitLoad extends TraceEventInstant {\n name: 'CommitLoad';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n frame: string,\n isMainFrame: boolean,\n name: string,\n nodeId: number,\n page: string,\n parent: string,\n url: string,\n },\n };\n}\n\nexport interface TraceEventMarkDOMContent extends TraceEventInstant {\n name: 'MarkDOMContent';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n frame: string,\n isMainFrame: boolean,\n isOutermostMainFrame?: boolean, page: string,\n },\n };\n}\n\nexport interface TraceEventMarkLoad extends TraceEventInstant {\n name: 'MarkLoad';\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n frame: string,\n isMainFrame: boolean,\n page: string,\n isOutermostMainFrame?: boolean,\n },\n };\n}\n\nexport interface TraceEventAsync extends TraceEventData {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_INSTANT|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_STEP_INTO|\n Phase.ASYNC_BEGIN|Phase.ASYNC_END|Phase.ASYNC_STEP_PAST;\n}\n\nexport type TraceRect = [number, number, number, number];\nexport type TraceImpactedNode = {\n // These keys come from the trace data, so we have to use underscores.\n /* eslint-disable @typescript-eslint/naming-convention */\n new_rect: TraceRect,\n node_id: Protocol.DOM.BackendNodeId,\n old_rect: TraceRect,\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n\ntype LayoutShiftData = TraceEventArgsData&{\n // These keys come from the trace data, so we have to use underscores.\n /* eslint-disable @typescript-eslint/naming-convention */\n cumulative_score: number,\n frame_max_distance: number,\n had_recent_input: boolean,\n impacted_nodes: TraceImpactedNode[] | undefined,\n is_main_frame: boolean,\n overall_max_distance: number,\n region_rects: TraceRect[],\n score: number,\n weighted_score_delta: number,\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n// These keys come from the trace data, so we have to use underscores.\nexport interface TraceEventLayoutShift extends TraceEventInstant {\n name: 'LayoutShift';\n normalized?: boolean;\n args: TraceEventArgs&{\n frame: string,\n data?: LayoutShiftData,\n };\n}\n\ninterface LayoutShiftSessionWindowData {\n // The sum of the weighted score of all the shifts\n // that belong to a session window.\n cumulativeWindowScore: number;\n // A consecutive generated in the frontend to\n // to identify a session window.\n id: number;\n}\nexport interface LayoutShiftParsedData {\n screenshotSource?: string;\n timeFromNavigation?: MicroSeconds;\n // The sum of the weighted scores of the shifts that\n // belong to a session window up until this shift\n // (inclusive).\n cumulativeWeightedScoreInWindow: number;\n sessionWindowData: LayoutShiftSessionWindowData;\n}\nexport interface SyntheticLayoutShift extends TraceEventLayoutShift, SyntheticBasedEvent<Phase.INSTANT> {\n name: 'LayoutShift';\n rawSourceEvent: TraceEventLayoutShift;\n args: TraceEventArgs&{\n frame: string,\n data?: LayoutShiftData&{\n rawEvent: TraceEventLayoutShift,\n },\n };\n parsedData: LayoutShiftParsedData;\n}\n\nexport type FetchPriorityHint = 'low'|'high'|'auto';\nexport type RenderBlocking = 'blocking'|'non_blocking'|'in_body_parser_blocking'|'potentially_blocking';\n\nexport interface Initiator {\n type: Protocol.Network.InitiatorType;\n fetchType: string;\n columnNumber?: number;\n lineNumber?: number;\n url?: string;\n}\n\nexport interface TraceEventResourceSendRequest extends TraceEventInstant {\n name: 'ResourceSendRequest';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n requestId: string,\n url: string,\n priority: Protocol.Network.ResourcePriority,\n resourceType: Protocol.Network.ResourceType,\n fetchPriorityHint: FetchPriorityHint,\n // TODO(crbug.com/1457985): change requestMethod to enum when confirm in the backend code.\n requestMethod?: string,\n renderBlocking?: RenderBlocking,\n initiator?: Initiator,\n isLinkPreload?: boolean,\n },\n };\n}\n\nexport interface TraceEventResourceChangePriority extends TraceEventInstant {\n name: 'ResourceChangePriority';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n requestId: string,\n priority: Protocol.Network.ResourcePriority,\n },\n };\n}\n\nexport interface TraceEventResourceWillSendRequest extends TraceEventInstant {\n name: 'ResourceWillSendRequest';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n requestId: string,\n },\n };\n}\n\nexport interface TraceEventResourceFinish extends TraceEventInstant {\n name: 'ResourceFinish';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n decodedBodyLength: number,\n didFail: boolean,\n encodedDataLength: number,\n finishTime: Seconds,\n requestId: string,\n },\n };\n}\n\nexport interface TraceEventResourceReceivedData extends TraceEventInstant {\n name: 'ResourceReceivedData';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n encodedDataLength: number,\n frame: string,\n requestId: string,\n },\n };\n}\n\ninterface TraceEventResourceReceiveResponseTimingData {\n connectEnd: MilliSeconds;\n connectStart: MilliSeconds;\n dnsEnd: MilliSeconds;\n dnsStart: MilliSeconds;\n proxyEnd: MilliSeconds;\n proxyStart: MilliSeconds;\n pushEnd: MilliSeconds;\n pushStart: MilliSeconds;\n receiveHeadersEnd: MilliSeconds;\n receiveHeadersStart: MilliSeconds;\n requestTime: Seconds;\n sendEnd: MilliSeconds;\n sendStart: MilliSeconds;\n sslEnd: MilliSeconds;\n sslStart: MilliSeconds;\n workerReady: MilliSeconds;\n workerStart: MilliSeconds;\n}\n\nexport interface TraceEventResourceReceiveResponse extends TraceEventInstant {\n name: 'ResourceReceiveResponse';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n /**\n * This is the protocol used to resolve the request.\n *\n * Note, this is not the same as URL.protocol.\n *\n * Example values (not exhaustive): http/0.9, http/1.0, http/1.1, http, h2, h3-Q050, data, blob\n */\n protocol: string,\n encodedDataLength: number,\n frame: string,\n fromCache: boolean,\n fromServiceWorker: boolean,\n mimeType: string,\n requestId: string,\n responseTime: MilliSeconds,\n statusCode: number,\n timing: TraceEventResourceReceiveResponseTimingData,\n connectionId: number,\n connectionReused: boolean,\n headers?: Array<{name: string, value: string}>,\n },\n };\n}\n\nexport interface TraceEventResourceMarkAsCached extends TraceEventInstant {\n name: 'ResourceMarkAsCached';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n requestId: string,\n },\n };\n}\n\nexport const enum LayoutInvalidationReason {\n SIZE_CHANGED = 'Size changed',\n ATTRIBUTE = 'Attribute',\n ADDED_TO_LAYOUT = 'Added to layout',\n SCROLLBAR_CHANGED = 'Scrollbar changed',\n REMOVED_FROM_LAYOUT = 'Removed from layout',\n STYLE_CHANGED = 'Style changed',\n FONTS_CHANGED = 'Fonts changed',\n UNKNOWN = 'Unknown',\n}\n\nexport interface TraceEventLayoutInvalidationTracking extends TraceEventInstant {\n name: KnownEventName.LayoutInvalidationTracking;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n reason: LayoutInvalidationReason,\n nodeName?: string,\n },\n };\n}\n\nexport interface TraceEventScheduleStyleInvalidationTracking extends TraceEventInstant {\n name: KnownEventName.ScheduleStyleInvalidationTracking;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n invalidationSet?: string,\n invalidatedSelectorId?: string,\n reason?: LayoutInvalidationReason,\n changedClass?: string,\n changedAttribute?: string,\n changedId?: string,\n nodeName?: string,\n stackTrace?: TraceEventCallFrame[],\n },\n };\n}\nexport function isTraceEventScheduleStyleInvalidationTracking(event: TraceEventData):\n event is TraceEventScheduleStyleInvalidationTracking {\n return event.name === KnownEventName.ScheduleStyleInvalidationTracking;\n}\n\nexport const enum StyleRecalcInvalidationReason {\n ANIMATION = 'Animation',\n}\n\nexport interface TraceEventStyleRecalcInvalidationTracking extends TraceEventInstant {\n name: KnownEventName.StyleRecalcInvalidationTracking;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n reason: StyleRecalcInvalidationReason,\n subtree: boolean,\n nodeName?: string,\n extraData?: string,\n },\n };\n}\n\nexport function isTraceEventStyleRecalcInvalidationTracking(event: TraceEventData):\n event is TraceEventStyleRecalcInvalidationTracking {\n return event.name === KnownEventName.StyleRecalcInvalidationTracking;\n}\nexport interface TraceEventStyleInvalidatorInvalidationTracking extends TraceEventInstant {\n name: KnownEventName.StyleInvalidatorInvalidationTracking;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n reason: string,\n invalidationList: Array<{classes?: string[], id: string}>,\n subtree: boolean,\n nodeName?: string,\n extraData?: string,\n },\n };\n}\nexport function isTraceEventStyleInvalidatorInvalidationTracking(event: TraceEventData):\n event is TraceEventStyleInvalidatorInvalidationTracking {\n return event.name === KnownEventName.StyleInvalidatorInvalidationTracking;\n}\n\nexport interface TraceEventBeginCommitCompositorFrame extends TraceEventInstant {\n name: KnownEventName.BeginCommitCompositorFrame;\n args: TraceEventArgs&{\n frame: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n is_mobile_optimized: boolean,\n };\n}\nexport function isTraceEventBeginCommitCompositorFrame(event: TraceEventData):\n event is TraceEventBeginCommitCompositorFrame {\n return event.name === KnownEventName.BeginCommitCompositorFrame;\n}\n\nexport interface TraceEventScheduleStyleRecalculation extends TraceEventInstant {\n name: KnownEventName.ScheduleStyleRecalculation;\n args: TraceEventArgs&{\n data: {\n frame: string,\n },\n };\n}\nexport function isTraceEventScheduleStyleRecalculation(event: TraceEventData):\n event is TraceEventScheduleStyleRecalculation {\n return event.name === KnownEventName.ScheduleStyleRecalculation;\n}\n\nexport interface TraceEventRenderFrameImplCreateChildFrame extends TraceEventData {\n name: KnownEventName.RenderFrameImplCreateChildFrame;\n /* eslint-disable @typescript-eslint/naming-convention */\n args: TraceEventArgs&{\n child_frame_token: string,\n frame_token: string,\n };\n}\nexport function isTraceEventRenderFrameImplCreateChildFrame(event: TraceEventData):\n event is TraceEventRenderFrameImplCreateChildFrame {\n return event.name === KnownEventName.RenderFrameImplCreateChildFrame;\n}\n\nexport interface TraceEventPrePaint extends TraceEventComplete {\n name: 'PrePaint';\n}\n\nexport interface TraceEventPairableAsync extends TraceEventData {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_NESTABLE_INSTANT;\n // The id2 field gives flexibility to explicitly specify if an event\n // id is global among processes or process local. However not all\n // events use it, so both kind of ids need to be marked as optional.\n id2?: {local?: string, global?: string};\n id?: string;\n}\nexport interface TraceEventPairableAsyncBegin extends TraceEventPairableAsync {\n ph: Phase.ASYNC_NESTABLE_START;\n}\n\nexport interface TraceEventPairableAsyncInstant extends TraceEventPairableAsync {\n ph: Phase.ASYNC_NESTABLE_INSTANT;\n}\n\nexport interface TraceEventPairableAsyncEnd extends TraceEventPairableAsync {\n ph: Phase.ASYNC_NESTABLE_END;\n}\n\nexport interface TraceEventUserTiming extends TraceEventData {\n id2?: {local?: string, global?: string};\n id?: string;\n cat: 'blink.user_timing';\n // Note that the timestamp for user timing trace events is set to the\n // start time passed by the user at the call site of the timing (based\n // on the UserTiming spec).\n // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/timing/performance_user_timing.cc;l=236;drc=494419358caf690316f160a1f27d9e771a14c033\n}\n\nexport type TraceEventPairableUserTiming = TraceEventUserTiming&TraceEventPairableAsync;\n\nexport interface TraceEventPerformanceMeasureBegin extends TraceEventPairableUserTiming {\n args: TraceEventArgs&{\n detail?: string,\n };\n ph: Phase.ASYNC_NESTABLE_START;\n}\n\nexport type TraceEventPerformanceMeasureEnd = TraceEventPairableUserTiming&TraceEventPairableAsyncEnd;\nexport type TraceEventPerformanceMeasure = TraceEventPerformanceMeasureBegin|TraceEventPerformanceMeasureEnd;\n\nexport interface TraceEventPerformanceMark extends TraceEventUserTiming {\n args: TraceEventArgs&{\n data?: TraceEventArgsData & {\n detail?: string,\n },\n };\n ph: Phase.INSTANT|Phase.MARK|Phase.ASYNC_NESTABLE_INSTANT;\n}\n\nexport interface TraceEventConsoleTimeBegin extends TraceEventPairableAsyncBegin {\n cat: 'blink.console';\n}\n\nexport interface TraceEventConsoleTimeEnd extends TraceEventPairableAsyncEnd {\n cat: 'blink.console';\n}\n\nexport type TraceEventConsoleTime = TraceEventConsoleTimeBegin|TraceEventConsoleTimeEnd;\n\nexport interface TraceEventTimeStamp extends TraceEventData {\n cat: 'devtools.timeline';\n name: 'TimeStamp';\n ph: Phase.INSTANT;\n id: string;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n message: string,\n },\n };\n}\n\nexport interface TraceEventTargetRundown extends TraceEventData {\n cat: 'disabled-by-default-devtools.target-rundown';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n frameType: string,\n url: string,\n isolate: string,\n v8context: string,\n origin: string,\n scriptId: number,\n isDefault?: boolean,\n contextType?: string,\n },\n };\n}\n\nexport function isTraceEventTargetRundown(traceEventData: TraceEventData): traceEventData is TraceEventTargetRundown {\n if (traceEventData.cat !== 'disabled-by-default-devtools.target-rundown') {\n return false;\n }\n const data = traceEventData.args?.data;\n if (!data) {\n return false;\n }\n return 'frame' in data && 'frameType' in data && 'url' in data && 'isolate' in data && 'v8context' in data &&\n 'scriptId' in data;\n}\n\nexport interface TraceEventScriptRundown extends TraceEventData {\n cat: 'disabled-by-default-devtools.v8-source-rundown';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n isolate: string,\n executionContextId: number,\n scriptId: number,\n startLine: number,\n startColumn: number,\n endLine: number,\n endColumn: number,\n url: string,\n hash: string,\n isModule: boolean,\n hasSourceUrl: boolean,\n sourceMapUrl?: string,\n },\n };\n}\n\nexport function isTraceEventScriptRundown(traceEventData: TraceEventData): traceEventData is TraceEventScriptRundown {\n if (traceEventData.cat !== 'disabled-by-default-devtools.v8-source-rundown') {\n return false;\n }\n const data = traceEventData.args?.data;\n if (!data) {\n return false;\n }\n return 'isolate' in data && 'executionContextId' in data && 'scriptId' in data && 'startLine' in data &&\n 'startColumn' in data && 'endLine' in data && 'endColumn' in data && 'hash' in data && 'isModule' in data &&\n 'hasSourceUrl' in data;\n}\n\nexport interface TraceEventScriptRundownSource extends TraceEventData {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n isolate: string,\n scriptId: number,\n length?: number,\n sourceText?: string,\n },\n };\n}\n\nexport function isTraceEventScriptRundownSource(traceEventData: TraceEventData):\n traceEventData is TraceEventScriptRundownSource {\n if (traceEventData.cat !== 'disabled-by-default-devtools.v8-source-rundown-sources') {\n return false;\n }\n const data = traceEventData.args?.data;\n if (!data) {\n return false;\n }\n return 'isolate' in data && 'scriptId' in data && 'sourceText' in data;\n}\n\n/** ChromeFrameReporter args for PipelineReporter event.\n Matching proto: https://source.chromium.org/chromium/chromium/src/+/main:third_party/perfetto/protos/perfetto/trace/track_event/chrome_frame_reporter.proto\n */\n/* eslint-disable @typescript-eslint/naming-convention */\ninterface ChromeFrameReporter {\n state: State;\n enum: FrameDropReason;\n /** The reason is set only if |state| is not |STATE_UPDATED_ALL|. */\n reason: FrameDropReason;\n frame_source: number;\n /** Identifies a BeginFrameArgs (along with the source_id).\n See comments in components/viz/common/frame_sinks/begin_frame_args.h. */\n frame_sequence: number;\n /** If this is a droped frame (i.e. if |state| is set to |STATE_DROPPED| or\n |STATE_PRESENTED_PARTIAL|), then indicates whether this frame impacts smoothness. */\n affects_smoothness: boolean;\n /** The type of active scroll. */\n scroll_state: ScrollState;\n /** If any main thread animation is active during this frame. */\n has_main_animation: boolean;\n /** If any compositor thread animation is active during this frame. */\n has_compositor_animation: boolean;\n /** If any touch-driven UX (not scroll) is active during this frame. */\n has_smooth_input_main: boolean;\n /** Whether the frame contained any missing content (i.e. whether there was\n checkerboarding in the frame). */\n has_missing_content: boolean;\n /** The id of layer_tree_host that the frame has been produced for. */\n layer_tree_host_id: number;\n /** If total latency of PipelineReporter exceeds a certain limit. */\n has_high_latency: boolean;\n /** Indicate if the frame is \"FORKED\" (i.e. a PipelineReporter event starts at\n the same frame sequence as another PipelineReporter) or \"BACKFILL\"\n (i.e. dropped frames when there are no partial compositor updates). */\n frame_type: FrameType;\n /** The breakdown stage of PipelineReporter that is most likely accountable for\n high latency. */\n high_latency_contribution_stage: string[];\n}\nconst enum State {\n /** The frame did not have any updates to present. **/\n STATE_NO_UPDATE_DESIRED = 'STATE_NO_UPDATE_DESIRED',\n /** The frame presented all the desired updates (i.e. any updates requested\n from both the compositor thread and main-threads were handled). **/\n STATE_PRESENTED_ALL = 'STATE_PRESENTED_ALL',\n /** The frame was presented with some updates, but also missed some updates\n (e.g. missed updates from the main-thread, but included updates from the\n compositor thread). **/\n STATE_PRESENTED_PARTIAL = 'STATE_PRESENTED_PARTIAL',\n /** The frame was dropped, i.e. some updates were desired for the frame, but\n was not presented. **/\n STATE_DROPPED = 'STATE_DROPPED',\n}\n\nconst enum FrameDropReason {\n REASON_UNSPECIFIED = 'REASON_UNSPECIFIED',\n /** Frame was dropped by the display-compositor.\n The display-compositor may drop a frame some times (e.g. the frame missed\n the deadline, or was blocked on surface-sync, etc.) **/\n REASON_DISPLAY_COMPOSITOR = 'REASON_DISPLAY_COMPOSITOR',\n /** Frame was dropped because of the main-thread.\n The main-thread may cause a frame to be dropped, e.g. if the main-thread\n is running expensive javascript, or doing a lot of layout updates, etc. **/\n REASON_MAIN_THREAD = 'REASON_MAIN_THREAD',\n /** Frame was dropped by the client compositor.\n The client compositor can drop some frames too (e.g. attempting to\n recover latency, missing the deadline, etc.). **/\n REASON_CLIENT_COMPOSITOR = 'REASON_CLIENT_COMPOSITOR',\n}\n\nconst enum ScrollState {\n SCROLL_NONE = 'SCROLL_NONE',\n SCROLL_MAIN_THREAD = 'SCROLL_MAIN_THREAD',\n SCROLL_COMPOSITOR_THREAD = 'SCROLL_COMPOSITOR_THREAD',\n\n /** Used when it can't be determined whether a scroll is in progress or not. */\n SCROLL_UNKNOWN = 'SCROLL_UNKNOWN',\n}\nconst enum FrameType {\n FORKED = 'FORKED',\n BACKFILL = 'BACKFILL',\n}\n\nexport interface TraceEventPipelineReporter extends TraceEventData {\n id2?: {\n local?: string,\n };\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END;\n args: TraceEventArgs&{\n chrome_frame_reporter: ChromeFrameReporter,\n };\n}\n\nexport function isTraceEventPipelineReporter(event: TraceEventData): event is TraceEventPipelineReporter {\n return event.name === KnownEventName.PipelineReporter;\n}\n\n// A type used for synthetic events created based on a raw trace event.\nexport interface SyntheticBasedEvent<Ph extends Phase = Phase> extends SyntheticEntry {\n ph: Ph;\n rawSourceEvent: TraceEventData;\n}\n\n// A branded type is used to ensure not all events can be typed as\n// SyntheticEntry and prevent places different to the\n// SyntheticEventsManager from creating synthetic events. This is\n// because synthetic events need to be registered in order to resolve\n// serialized event keys into event objects, so we ensure events are\n// registered at the time they are created by the SyntheticEventsManager.\nexport type SyntheticEntry = TraceEventData&{_tag: 'SyntheticEntryTag'};\n\nexport function isSyntheticBasedEvent(event: TraceEventData): event is SyntheticBasedEvent {\n return 'rawSourceEvent' in event;\n}\n\n// Nestable async events with a duration are made up of two distinct\n// events: the begin, and the end. We need both of them to be able to\n// display the right information, so we create these synthetic events.\nexport interface SyntheticEventPair<T extends TraceEventPairableAsync = TraceEventPairableAsync> extends\n SyntheticBasedEvent {\n rawSourceEvent: TraceEventData;\n name: T['name'];\n cat: T['cat'];\n id?: string;\n id2?: {local?: string, global?: string};\n\n dur: MicroSeconds;\n args: TraceEventArgs&{\n data: {\n beginEvent: T & TraceEventPairableAsyncBegin,\n endEvent: T&TraceEventPairableAsyncEnd,\n instantEvents?: Array<T&TraceEventPairableAsyncInstant>,\n },\n };\n}\n\nexport type SyntheticPipelineReporterPair = SyntheticEventPair<TraceEventPipelineReporter>;\n\nexport type SyntheticUserTimingPair = SyntheticEventPair<TraceEventPerformanceMeasure>;\n\nexport type SyntheticConsoleTimingPair = SyntheticEventPair<TraceEventConsoleTime>;\n\nexport type SyntheticAnimationPair = SyntheticEventPair<TraceEventAnimation>;\n\nexport interface SyntheticInteractionPair extends SyntheticEventPair<TraceEventEventTiming> {\n // InteractionID and type are available within the beginEvent's data, but we\n // put them on the top level for ease of access.\n interactionId: number;\n type: string;\n // This is equivalent to startEvent.ts;\n ts: MicroSeconds;\n // This duration can be calculated via endEvent.ts - startEvent.ts, but we do\n // that and put it here to make it easier. This also makes these events\n // consistent with real events that have a dur field.\n dur: MicroSeconds;\n // These values are provided in the startEvent's args.data field as\n // millisecond values, but during the handler phase we parse these into\n // microseconds and put them on the top level for easy access.\n processingStart: MicroSeconds;\n processingEnd: MicroSeconds;\n // These 3 values represent the breakdown of the parts of an interaction:\n // 1. inputDelay: time from the user clicking to the input being handled\n inputDelay: MicroSeconds;\n // 2. mainThreadHandling: time spent processing the event handler\n mainThreadHandling: MicroSeconds;\n // 3. presentationDelay: delay between the event being processed and the frame being rendered\n presentationDelay: MicroSeconds;\n}\n\n/**\n * An event created synthetically in the frontend that has a self time\n * (the time spent running the task itself).\n */\nexport interface SyntheticTraceEntry extends TraceEventData {\n selfTime?: MicroSeconds;\n}\n\n/**\n * A profile call created in the frontend from samples disguised as a\n * trace event.\n *\n * We store the sampleIndex, profileId and nodeId so that we can easily link\n * back a Synthetic Trace Entry to an indivdual Sample trace event within a\n * Profile.\n *\n * Because a sample contains a set of call frames representing the stack at the\n * point in time that the sample was created, we also have to store the ID of\n * the Node that points to the function call that this profile call represents.\n */\nexport interface SyntheticProfileCall extends SyntheticTraceEntry {\n callFrame: Protocol.Runtime.CallFrame;\n nodeId: Protocol.integer;\n sampleIndex: number;\n profileId: ProfileID;\n selfTime: MicroSeconds;\n}\n\n/**\n * A JS Sample reflects a single sample from the V8 CPU Profile\n */\nexport interface SyntheticJSSample extends SyntheticTraceEntry {\n name: KnownEventName.JSSample;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n stackTrace: Protocol.Runtime.CallFrame[],\n },\n };\n ph: Phase.INSTANT;\n}\n\n/**\n * A trace event augmented synthetically in the frontend to contain\n * its self time.\n */\nexport type SyntheticRendererEvent = TraceEventRendererEvent&SyntheticTraceEntry;\n\nexport function isSyntheticInteractionEvent(event: TraceEventData): event is SyntheticInteractionPair {\n return Boolean(\n 'interactionId' in event && event.args?.data && 'beginEvent' in event.args.data && 'endEvent' in event.args.data);\n}\n\nexport function isSyntheticTraceEntry(event: TraceEventData): event is SyntheticTraceEntry {\n return isTraceEventRendererEvent(event) || isProfileCall(event);\n}\n\n// Events relating to frames.\n\nexport interface TraceEventDrawFrame extends TraceEventInstant {\n name: KnownEventName.DrawFrame;\n args: TraceEventArgs&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\n\nexport function isTraceEventDrawFrame(event: TraceEventData): event is TraceEventDrawFrame {\n // The extra check for INSTANT here is because in the past DrawFrame events had an ASYNC_NESTABLE_START and ASYNC_NESTABLE_END pair. We don't want to support those old events, so we have to check we are dealing with an instant event.\n return event.name === KnownEventName.DrawFrame && event.ph === Phase.INSTANT;\n}\nexport interface TraceEventLegacyDrawFrameBegin extends TraceEventAsync {\n name: KnownEventName.DrawFrame;\n ph: Phase.ASYNC_NESTABLE_START;\n args: TraceEventArgs&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\nexport function isLegacyTraceEventDrawFrameBegin(event: TraceEventData): event is TraceEventLegacyDrawFrameBegin {\n return event.name === KnownEventName.DrawFrame && event.ph === Phase.ASYNC_NESTABLE_START;\n}\n\nexport interface TraceEventBeginFrame extends TraceEventInstant {\n name: KnownEventName.BeginFrame;\n args: TraceEventArgs&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\nexport function isTraceEventBeginFrame(event: TraceEventData): event is TraceEventBeginFrame {\n // Old traces did not have frameSeqId; but we do not want to support these.\n return Boolean(event.name === KnownEventName.BeginFrame && event.args && 'frameSeqId' in event.args);\n}\n\nexport interface TraceEventDroppedFrame extends TraceEventInstant {\n name: KnownEventName.DroppedFrame;\n args: TraceEventArgs&{\n layerTreeId: number,\n frameSeqId: number,\n hasPartialUpdate?: boolean,\n };\n}\nexport function isTraceEventDroppedFrame(event: TraceEventData): event is TraceEventDroppedFrame {\n // Old traces did not have frameSeqId; but we do not want to support these.\n return Boolean(event.name === KnownEventName.DroppedFrame && event.args && 'frameSeqId' in event.args);\n}\n\nexport interface TraceEventRequestMainThreadFrame extends TraceEventInstant {\n name: KnownEventName.RequestMainThreadFrame;\n args: TraceEventArgs&{\n layerTreeId: number,\n };\n}\nexport function isTraceEventRequestMainThreadFrame(event: TraceEventData): event is TraceEventRequestMainThreadFrame {\n return event.name === KnownEventName.RequestMainThreadFrame;\n}\n\nexport interface TraceEventBeginMainThreadFrame extends TraceEventInstant {\n name: KnownEventName.BeginMainThreadFrame;\n args: TraceEventArgs&{\n layerTreeId: number,\n data: TraceEventArgsData&{\n frameId?: number,\n },\n };\n}\nexport function isTraceEventBeginMainThreadFrame(event: TraceEventData): event is TraceEventBeginMainThreadFrame {\n return event.name === KnownEventName.BeginMainThreadFrame;\n}\n\nexport interface TraceEventNeedsBeginFrameChanged extends TraceEventInstant {\n name: KnownEventName.NeedsBeginFrameChanged;\n args: TraceEventArgs&{\n layerTreeId: number,\n data: TraceEventArgsData&{\n needsBeginFrame: number,\n },\n };\n}\nexport function isTraceEventNeedsBeginFrameChanged(event: TraceEventData): event is TraceEventNeedsBeginFrameChanged {\n return event.name === KnownEventName.NeedsBeginFrameChanged;\n}\n\nexport interface TraceEventCommit extends TraceEventInstant {\n name: KnownEventName.Commit;\n args: TraceEventArgs&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\nexport function isTraceEventCommit(event: TraceEventData): event is TraceEventCommit {\n // Old traces did not have frameSeqId; but we do not want to support these.\n return Boolean(event.name === KnownEventName.Commit && event.args && 'frameSeqId' in event.args);\n}\n\nexport interface TraceEventRasterTask extends TraceEventComplete {\n name: KnownEventName.RasterTask;\n args: TraceEventArgs&{\n tileData?: {\n layerId: number,\n sourceFrameNumber: number,\n tileId: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n id_ref: string,\n },\n tileResolution: string,\n },\n };\n}\nexport function isTraceEventRasterTask(event: TraceEventData): event is TraceEventRasterTask {\n return event.name === KnownEventName.RasterTask;\n}\n\n// CompositeLayers has been replaced by \"Commit\", but we support both to not break old traces being imported.\nexport interface TraceEventCompositeLayers extends TraceEventInstant {\n name: KnownEventName.CompositeLayers;\n args: TraceEventArgs&{\n layerTreeId: number,\n };\n}\nexport function isTraceEventCompositeLayers(event: TraceEventData): event is TraceEventCompositeLayers {\n return event.name === KnownEventName.CompositeLayers;\n}\n\nexport interface TraceEventActivateLayerTree extends TraceEventInstant {\n name: KnownEventName.ActivateLayerTree;\n args: TraceEventArgs&{\n layerTreeId: number,\n frameId: number,\n };\n}\nexport function isTraceEventActivateLayerTree(event: TraceEventData): event is TraceEventActivateLayerTree {\n return event.name === KnownEventName.ActivateLayerTree;\n}\n\nexport type InvalidationTrackingEvent =\n TraceEventScheduleStyleInvalidationTracking|TraceEventStyleRecalcInvalidationTracking|\n TraceEventStyleInvalidatorInvalidationTracking|TraceEventLayoutInvalidationTracking;\n\nexport function isTraceEventInvalidationTracking(event: TraceEventData): event is InvalidationTrackingEvent {\n return isTraceEventScheduleStyleInvalidationTracking(event) || isTraceEventStyleRecalcInvalidationTracking(event) ||\n isTraceEventStyleInvalidatorInvalidationTracking(event) || isTraceEventLayoutInvalidationTracking(event);\n}\n\nexport interface TraceEventDrawLazyPixelRef extends TraceEventInstant {\n name: KnownEventName.DrawLazyPixelRef;\n args?: TraceEventArgs&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LazyPixelRef: number,\n };\n}\nexport function isTraceEventDrawLazyPixelRef(event: TraceEventData): event is TraceEventDrawLazyPixelRef {\n return event.name === KnownEventName.DrawLazyPixelRef;\n}\n\nexport interface TraceEventDecodeLazyPixelRef extends TraceEventInstant {\n name: KnownEventName.DecodeLazyPixelRef;\n args?: TraceEventArgs&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LazyPixelRef: number,\n };\n}\nexport function isTraceEventDecodeLazyPixelRef(event: TraceEventData): event is TraceEventDecodeLazyPixelRef {\n return event.name === KnownEventName.DecodeLazyPixelRef;\n}\n\nexport interface TraceEventDecodeImage extends TraceEventComplete {\n name: KnownEventName.DecodeImage;\n args: TraceEventArgs&{\n imageType: string,\n };\n}\nexport function isTraceEventDecodeImage(event: TraceEventData): event is TraceEventDecodeImage {\n return event.name === KnownEventName.DecodeImage;\n}\n\nexport interface SelectorTiming {\n 'elapsed (us)': number;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fast_reject_count': number;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'match_attempts': number;\n 'selector': string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'style_sheet_id': string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'match_count': number;\n}\n\nexport interface SelectorStats {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n selector_timings: SelectorTiming[];\n}\n\nexport interface TraceEventSelectorStats extends TraceEventComplete {\n name: KnownEventName.SelectorStats;\n args: TraceEventArgs&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n selector_stats?: SelectorStats,\n };\n}\n\nexport function isTraceEventSelectorStats(event: TraceEventData): event is TraceEventSelectorStats {\n return event.name === KnownEventName.SelectorStats;\n}\n\nexport interface TraceEventUpdateLayoutTree extends TraceEventComplete {\n name: KnownEventName.UpdateLayoutTree;\n args: TraceEventArgs&{\n elementCount: number,\n beginData?: {\n frame: string,\n stackTrace?: TraceEventCallFrame[],\n },\n };\n}\nexport function isTraceEventUpdateLayoutTree(event: TraceEventData): event is TraceEventUpdateLayoutTree {\n return event.name === KnownEventName.UpdateLayoutTree;\n}\n\nexport interface TraceEventLayout extends TraceEventComplete {\n name: KnownEventName.Layout;\n args: TraceEventArgs&{\n beginData: {\n frame: string,\n dirtyObjects: number,\n partialLayout: boolean,\n totalObjects: number,\n },\n // endData is not reliably populated.\n // Why? TBD. https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/local_frame_view.cc;l=847-851;drc=8b6aaad8027390ce6b32d82d57328e93f34bb8e5\n endData?: {\n layoutRoots: Array<{\n depth: number,\n nodeId: Protocol.DOM.BackendNodeId,\n quads: number[][],\n }>,\n },\n };\n}\nexport function isTraceEventLayout(event: TraceEventData): event is TraceEventLayout {\n return event.name === KnownEventName.Layout;\n}\nexport interface TraceEventInvalidateLayout extends TraceEventInstant {\n name: KnownEventName.InvalidateLayout;\n args: TraceEventArgs&{\n data: {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport function isTraceEventInvalidateLayout(event: TraceEventData): event is TraceEventInvalidateLayout {\n return event.name === KnownEventName.InvalidateLayout;\n}\n\nclass ProfileIdTag {\n readonly #profileIdTag: (symbol|undefined);\n}\nexport type ProfileID = string&ProfileIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function ProfileID(value: string): ProfileID {\n return value as ProfileID;\n}\n\nclass CallFrameIdTag {\n readonly #callFrameIdTag: (symbol|undefined);\n}\nexport type CallFrameID = number&CallFrameIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function CallFrameID(value: number): CallFrameID {\n return value as CallFrameID;\n}\n\nclass SampleIndexTag {\n readonly #sampleIndexTag: (symbol|undefined);\n}\nexport type SampleIndex = number&SampleIndexTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SampleIndex(value: number): SampleIndex {\n return value as SampleIndex;\n}\n\nclass ProcessIdTag {\n readonly #processIdTag: (symbol|undefined);\n}\nexport type ProcessID = number&ProcessIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function ProcessID(value: number): ProcessID {\n return value as ProcessID;\n}\n\nclass ThreadIdTag {\n readonly #threadIdTag: (symbol|undefined);\n}\nexport type ThreadID = number&ThreadIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function ThreadID(value: number): ThreadID {\n return value as ThreadID;\n}\n\nclass WorkerIdTag {\n readonly #workerIdTag: (symbol|undefined);\n}\nexport type WorkerId = string&WorkerIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function WorkerId(value: string): WorkerId {\n return value as WorkerId;\n}\n\nexport function isTraceEventComplete(event: TraceEventData): event is TraceEventComplete {\n return event.ph === Phase.COMPLETE;\n}\n\nexport function isTraceEventBegin(event: TraceEventData): event is TraceEventBegin {\n return event.ph === Phase.BEGIN;\n}\n\nexport function isTraceEventEnd(event: TraceEventData): event is TraceEventEnd {\n return event.ph === Phase.END;\n}\n\nexport function isTraceEventDispatch(event: TraceEventData): event is TraceEventDispatch {\n return event.name === 'EventDispatch';\n}\n\nexport function isTraceEventInstant(event: TraceEventData): event is TraceEventInstant {\n return event.ph === Phase.INSTANT;\n}\n\nexport function isTraceEventRendererEvent(event: TraceEventData): event is TraceEventRendererEvent {\n return isTraceEventInstant(event) || isTraceEventComplete(event);\n}\n\nexport function isTraceEventFireIdleCallback(event: TraceEventData): event is TraceEventFireIdleCallback {\n return event.name === 'FireIdleCallback';\n}\n\nexport function isTraceEventSchedulePostMessage(event: TraceEventData): event is TraceEventSchedulePostMessage {\n return event.name === KnownEventName.SchedulePostMessage;\n}\n\nexport function isTraceEventHandlePostMessage(event: TraceEventData): event is TraceEventHandlePostMessage {\n return event.name === KnownEventName.HandlePostMessage;\n}\n\nexport function isTraceEventUpdateCounters(event: TraceEventData): event is TraceEventUpdateCounters {\n return event.name === 'UpdateCounters';\n}\n\nexport function isThreadName(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventThreadName {\n return traceEventData.name === KnownEventName.ThreadName;\n}\n\nexport function isProcessName(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventProcessName {\n return traceEventData.name === 'process_name';\n}\n\nexport function isTraceEventTracingStartedInBrowser(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventTracingStartedInBrowser {\n return traceEventData.name === KnownEventName.TracingStartedInBrowser;\n}\n\nexport function isTraceEventFrameCommittedInBrowser(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventFrameCommittedInBrowser {\n return traceEventData.name === 'FrameCommittedInBrowser';\n}\n\nexport function isTraceEventCommitLoad(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventCommitLoad {\n return traceEventData.name === 'CommitLoad';\n}\n\nexport function isTraceEventNavigationStart(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventNavigationStart {\n return traceEventData.name === 'navigationStart';\n}\n\nexport function isTraceEventAnimation(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventAnimation {\n // We've found some rare traces with an Animtation trace event from a different category: https://crbug.com/1472375#comment7\n return traceEventData.name === 'Animation' && traceEventData.cat.includes('devtools.timeline');\n}\n\nexport function isTraceEventLayoutShift(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventLayoutShift {\n return traceEventData.name === 'LayoutShift';\n}\n\nexport function isTraceEventLayoutInvalidationTracking(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventLayoutInvalidationTracking {\n return traceEventData.name === KnownEventName.LayoutInvalidationTracking;\n}\n\nexport function isTraceEventFirstContentfulPaint(traceEventData: TraceEventData):\n traceEventData is TraceEventFirstContentfulPaint {\n return traceEventData.name === 'firstContentfulPaint';\n}\n\nexport function isTraceEventLargestContentfulPaintCandidate(traceEventData: TraceEventData):\n traceEventData is TraceEventLargestContentfulPaintCandidate {\n return traceEventData.name === KnownEventName.MarkLCPCandidate;\n}\nexport function isTraceEventLargestImagePaintCandidate(traceEventData: TraceEventData):\n traceEventData is TraceEventLargestImagePaintCandidate {\n return traceEventData.name === 'LargestImagePaint::Candidate';\n}\nexport function isTraceEventLargestTextPaintCandidate(traceEventData: TraceEventData):\n traceEventData is TraceEventLargestTextPaintCandidate {\n return traceEventData.name === 'LargestTextPaint::Candidate';\n}\n\nexport function isTraceEventMarkLoad(traceEventData: TraceEventData): traceEventData is TraceEventMarkLoad {\n return traceEventData.name === 'MarkLoad';\n}\n\nexport function isTraceEventFirstPaint(traceEventData: TraceEventData): traceEventData is TraceEventFirstPaint {\n return traceEventData.name === 'firstPaint';\n}\n\nexport function isTraceEventMarkDOMContent(traceEventData: TraceEventData): traceEventData is TraceEventMarkDOMContent {\n return traceEventData.name === 'MarkDOMContent';\n}\n\nexport function isTraceEventInteractiveTime(traceEventData: TraceEventData):\n traceEventData is TraceEventInteractiveTime {\n return traceEventData.name === 'InteractiveTime';\n}\n\nexport function isTraceEventEventTiming(traceEventData: TraceEventData): traceEventData is TraceEventEventTiming {\n return traceEventData.name === KnownEventName.EventTiming;\n}\n\nexport function isTraceEventEventTimingEnd(traceEventData: TraceEventData): traceEventData is TraceEventEventTimingEnd {\n return isTraceEventEventTiming(traceEventData) && traceEventData.ph === Phase.ASYNC_NESTABLE_END;\n}\nexport function isTraceEventEventTimingStart(traceEventData: TraceEventData):\n traceEventData is TraceEventEventTimingBegin {\n return isTraceEventEventTiming(traceEventData) && traceEventData.ph === Phase.ASYNC_NESTABLE_START;\n}\n\nexport function isTraceEventGPUTask(traceEventData: TraceEventData): traceEventData is TraceEventGPUTask {\n return traceEventData.name === 'GPUTask';\n}\n\nexport function isTraceEventProfile(traceEventData: TraceEventData): traceEventData is TraceEventProfile {\n return traceEventData.name === 'Profile';\n}\n\nexport function isSyntheticCpuProfile(traceEventData: TraceEventData): traceEventData is SyntheticCpuProfile {\n return traceEventData.name === 'CpuProfile';\n}\n\nexport function isTraceEventProfileChunk(traceEventData: TraceEventData): traceEventData is TraceEventProfileChunk {\n return traceEventData.name === 'ProfileChunk';\n}\n\nexport function isTraceEventResourceChangePriority(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceChangePriority {\n return traceEventData.name === 'ResourceChangePriority';\n}\n\nexport function isTraceEventResourceSendRequest(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceSendRequest {\n return traceEventData.name === 'ResourceSendRequest';\n}\n\nexport function isTraceEventResourceReceiveResponse(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceReceiveResponse {\n return traceEventData.name === 'ResourceReceiveResponse';\n}\n\nexport function isTraceEventResourceMarkAsCached(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceMarkAsCached {\n return traceEventData.name === 'ResourceMarkAsCached';\n}\n\nexport function isTraceEventResourceFinish(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceFinish {\n return traceEventData.name === 'ResourceFinish';\n}\n\nexport function isTraceEventResourceWillSendRequest(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceWillSendRequest {\n return traceEventData.name === 'ResourceWillSendRequest';\n}\n\nexport function isTraceEventResourceReceivedData(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventResourceReceivedData {\n return traceEventData.name === 'ResourceReceivedData';\n}\n\nexport function isSyntheticNetworkRequestEvent(\n traceEventData: TraceEventData,\n ): traceEventData is SyntheticNetworkRequest {\n return traceEventData.name === 'SyntheticNetworkRequest';\n}\n\nexport function isSyntheticWebSocketConnectionEvent(\n traceEventData: TraceEventData,\n ): traceEventData is SyntheticWebSocketConnectionEvent {\n return traceEventData.name === 'SyntheticWebSocketConnectionEvent';\n}\n\nexport function isNetworkTrackEntry(traceEventData: TraceEventData):\n traceEventData is SyntheticWebSocketConnectionEvent|SyntheticNetworkRequest {\n return isSyntheticNetworkRequestEvent(traceEventData) || isSyntheticWebSocketConnectionEvent(traceEventData) ||\n isWebSocketTraceEvent(traceEventData);\n}\n\nexport function isTraceEventPrePaint(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventPrePaint {\n return traceEventData.name === 'PrePaint';\n}\n\nexport function isTraceEventNavigationStartWithURL(event: TraceEventData): event is TraceEventNavigationStart {\n return Boolean(isTraceEventNavigationStart(event) && event.args.data && event.args.data.documentLoaderURL !== '');\n}\n\nexport function isTraceEventMainFrameViewport(\n traceEventData: TraceEventData,\n ): traceEventData is TraceEventMainFrameViewport {\n return traceEventData.name === 'PaintTimingVisualizer::Viewport';\n}\n\nexport function isSyntheticUserTiming(traceEventData: TraceEventData): traceEventData is SyntheticUserTimingPair {\n if (traceEventData.cat !== 'blink.user_timing') {\n return false;\n }\n const data = traceEventData.args?.data;\n if (!data) {\n return false;\n }\n return 'beginEvent' in data && 'endEvent' in data;\n}\n\nexport function isSyntheticConsoleTiming(traceEventData: TraceEventData): traceEventData is SyntheticConsoleTimingPair {\n if (traceEventData.cat !== 'blink.console') {\n return false;\n }\n const data = traceEventData.args?.data;\n if (!data) {\n return false;\n }\n return 'beginEvent' in data && 'endEvent' in data;\n}\n\nexport function isTraceEventPerformanceMeasure(traceEventData: TraceEventData):\n traceEventData is TraceEventPerformanceMeasure {\n return traceEventData.cat === 'blink.user_timing' && isTraceEventAsyncPhase(traceEventData);\n}\n\nexport function isTraceEventPerformanceMark(traceEventData: TraceEventData):\n traceEventData is TraceEventPerformanceMark {\n return traceEventData.cat === 'blink.user_timing' &&\n (traceEventData.ph === Phase.MARK || traceEventData.ph === Phase.INSTANT);\n}\n\nexport function isTraceEventConsoleTime(traceEventData: TraceEventData): traceEventData is TraceEventConsoleTime {\n return traceEventData.cat === 'blink.console' && isTraceEventAsyncPhase(traceEventData);\n}\n\nexport function isTraceEventTimeStamp(traceEventData: TraceEventData): traceEventData is TraceEventTimeStamp {\n return traceEventData.ph === Phase.INSTANT && traceEventData.name === 'TimeStamp';\n}\n\nexport function isTraceEventParseHTML(traceEventData: TraceEventData): traceEventData is TraceEventParseHTML {\n return traceEventData.name === 'ParseHTML';\n}\n\nexport interface TraceEventAsync extends TraceEventData {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_INSTANT|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_STEP_INTO|\n Phase.ASYNC_BEGIN|Phase.ASYNC_END|Phase.ASYNC_STEP_PAST;\n}\n\nconst asyncPhases = new Set([\n Phase.ASYNC_NESTABLE_START,\n Phase.ASYNC_NESTABLE_INSTANT,\n Phase.ASYNC_NESTABLE_END,\n Phase.ASYNC_STEP_INTO,\n Phase.ASYNC_BEGIN,\n Phase.ASYNC_END,\n Phase.ASYNC_STEP_PAST,\n]);\n\nexport function isTraceEventAsyncPhase(traceEventData: TraceEventData): boolean {\n return asyncPhases.has(traceEventData.ph);\n}\n\nexport function isSyntheticLayoutShift(traceEventData: TraceEventData): traceEventData is SyntheticLayoutShift {\n if (!isTraceEventLayoutShift(traceEventData) || !traceEventData.args.data) {\n return false;\n }\n return 'rawEvent' in traceEventData.args.data;\n}\n\nexport function isProfileCall(event: TraceEventData): event is SyntheticProfileCall {\n return 'callFrame' in event;\n}\n\nexport interface TraceEventPaint extends TraceEventComplete {\n name: KnownEventName.Paint;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n clip: number[],\n frame: string,\n layerId: number,\n // With CompositeAfterPaint enabled, paint events are no longer\n // associated with a Node, and nodeId will not be present.\n nodeId?: Protocol.DOM.BackendNodeId,\n },\n };\n}\n\nexport function isTraceEventPaint(event: TraceEventData): event is TraceEventPaint {\n return event.name === KnownEventName.Paint;\n}\n\nexport interface TraceEventPaintImage extends TraceEventComplete {\n name: KnownEventName.PaintImage;\n args: TraceEventArgs&{\n data: TraceEventData & {\n height: number,\n width: number,\n x: number,\n y: number,\n url?: string, srcHeight: number, srcWidth: number,\n nodeId?: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport function isTraceEventPaintImage(event: TraceEventData): event is TraceEventPaintImage {\n return event.name === KnownEventName.PaintImage;\n}\n\nexport interface TraceEventScrollLayer extends TraceEventComplete {\n name: KnownEventName.ScrollLayer;\n args: TraceEventArgs&{\n data: TraceEventData & {\n frame: string,\n nodeId?: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport function isTraceEventScrollLayer(event: TraceEventData): event is TraceEventScrollLayer {\n return event.name === KnownEventName.ScrollLayer;\n}\n\nexport interface TraceEventSetLayerTreeId extends TraceEventInstant {\n name: KnownEventName.SetLayerTreeId;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n frame: string,\n layerTreeId: number,\n },\n };\n}\nexport function isTraceEventSetLayerId(event: TraceEventData): event is TraceEventSetLayerTreeId {\n return event.name === KnownEventName.SetLayerTreeId;\n}\nexport interface TraceEventUpdateLayer extends TraceEventComplete {\n name: KnownEventName.UpdateLayer;\n args: TraceEventArgs&{\n layerId: number,\n layerTreeId: number,\n };\n}\nexport function isTraceEventUpdateLayer(event: TraceEventData): event is TraceEventUpdateLayer {\n return event.name === KnownEventName.UpdateLayer;\n}\n\nexport interface TraceEventDisplayItemListSnapshot extends TraceEventData {\n name: KnownEventName.DisplayItemListSnapshot;\n ph: Phase.OBJECT_SNAPSHOT;\n id2: {\n local?: string,\n };\n args: TraceEventArgs&{\n snapshot: {\n skp64: string,\n params?: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n layer_rect: [number, number, number, number],\n },\n },\n };\n}\nexport function isTraceEventDisplayListItemListSnapshot(event: TraceEventData):\n event is TraceEventDisplayItemListSnapshot {\n return event.name === KnownEventName.DisplayItemListSnapshot;\n}\n\nexport interface TraceEventLayerTreeHostImplSnapshot extends TraceEventData {\n name: KnownEventName.LayerTreeHostImplSnapshot;\n ph: Phase.OBJECT_SNAPSHOT;\n id: string;\n args: TraceEventArgs&{\n snapshot: {\n /* eslint-disable @typescript-eslint/naming-convention */\n active_tiles: Array<{\n id: string,\n layer_id: string,\n gpu_memory_usage: number,\n content_rect: number[],\n }>,\n device_viewport_size: {\n width: number,\n height: number,\n },\n active_tree: {\n root_layer: TraceLayer,\n layers: TraceLayer[],\n },\n /* eslint-enable @typescript-eslint/naming-convention */\n },\n };\n}\n\nexport function isTraceEventLayerTreeHostImplSnapshot(event: TraceEventData):\n event is TraceEventLayerTreeHostImplSnapshot {\n return event.name === KnownEventName.LayerTreeHostImplSnapshot;\n}\n/* eslint-disable @typescript-eslint/naming-convention */\nexport interface TraceLayer {\n bounds: {height: number, width: number};\n children: TraceLayer[];\n layer_id: number;\n position: number[];\n scroll_offset: number[];\n layer_quad: number[];\n draws_content: number;\n gpu_memory_usage: number;\n transform: number[];\n owner_node: Protocol.DOM.BackendNodeId;\n compositing_reasons: string[];\n compositing_reason_ids: string[];\n non_fast_scrollable_region: number[];\n touch_event_handler_region: number[];\n wheel_event_handler_region: number[];\n scroll_event_handler_region: number[];\n}\n\nexport interface TracingLayerTile {\n id: string;\n layer_id: string;\n gpu_memory_usage: number;\n content_rect: number[];\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport interface TraceEventFireAnimationFrame extends TraceEventComplete {\n name: KnownEventName.FireAnimationFrame;\n args: TraceEventArgs&{\n data: {\n frame: string,\n id: number,\n },\n };\n}\nexport function isTraceEventFireAnimationFrame(event: TraceEventData): event is TraceEventFireAnimationFrame {\n return event.name === KnownEventName.FireAnimationFrame;\n}\n\nexport interface TraceEventRequestAnimationFrame extends TraceEventInstant {\n name: KnownEventName.RequestAnimationFrame;\n args: TraceEventArgs&{\n data: {\n frame: string,\n id: number,\n stackTrace?: TraceEventCallFrame,\n },\n };\n}\nexport function isTraceEventRequestAnimationFrame(event: TraceEventData): event is TraceEventRequestAnimationFrame {\n return event.name === KnownEventName.RequestAnimationFrame;\n}\n\nexport interface TraceEventTimerInstall extends TraceEventInstant {\n name: KnownEventName.TimerInstall;\n args: TraceEventArgs&{\n data: {\n frame: string,\n singleShot: boolean,\n stackTrace?: TraceEventCallFrame, timeout: number, timerId: number,\n },\n };\n}\nexport function isTraceEventTimerInstall(event: TraceEventData): event is TraceEventTimerInstall {\n return event.name === KnownEventName.TimerInstall;\n}\n\nexport interface TraceEventTimerFire extends TraceEventComplete {\n name: KnownEventName.TimerFire;\n args: TraceEventArgs&{\n data: {\n frame: string,\n timerId: number,\n },\n };\n}\nexport function isTraceEventTimerFire(event: TraceEventData): event is TraceEventTimerFire {\n return event.name === KnownEventName.TimerFire;\n}\n\nexport interface TraceEventRequestIdleCallback extends TraceEventInstant {\n name: KnownEventName.RequestIdleCallback;\n args: TraceEventArgs&{\n data: {\n frame: string,\n id: number,\n timeout: number,\n stackTrace?: TraceEventCallFrame,\n },\n\n };\n}\nexport function isTraceEventRequestIdleCallback(event: TraceEventData): event is TraceEventRequestIdleCallback {\n return event.name === KnownEventName.RequestIdleCallback;\n}\n\nexport interface TraceEventWebSocketCreate extends TraceEventInstant {\n name: KnownEventName.WebSocketCreate;\n args: TraceEventArgs&{\n data: {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string,\n websocketProtocol?: string,\n stackTrace?: TraceEventCallFrame,\n },\n };\n}\nexport function isTraceEventWebSocketCreate(event: TraceEventData): event is TraceEventWebSocketCreate {\n return event.name === KnownEventName.WebSocketCreate;\n}\n\nexport interface TraceEventWebSocketInfo extends TraceEventInstant {\n name: KnownEventName.WebSocketDestroy|KnownEventName.WebSocketReceiveHandshake|\n KnownEventName.WebSocketReceiveHandshakeResponse;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string,\n },\n };\n}\nexport interface TraceEventWebSocketTransfer extends TraceEventInstant {\n name: KnownEventName.WebSocketSend|KnownEventName.WebSocketReceive;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string, dataLength: number,\n },\n };\n}\nexport function isTraceEventWebSocketInfo(traceEventData: TraceEventData): traceEventData is TraceEventWebSocketInfo {\n return traceEventData.name === KnownEventName.WebSocketSendHandshakeRequest ||\n traceEventData.name === KnownEventName.WebSocketReceiveHandshakeResponse ||\n traceEventData.name === KnownEventName.WebSocketDestroy;\n}\n\nexport function isTraceEventWebSocketTransfer(traceEventData: TraceEventData):\n traceEventData is TraceEventWebSocketTransfer {\n return traceEventData.name === KnownEventName.WebSocketSend ||\n traceEventData.name === KnownEventName.WebSocketReceive;\n}\n\nexport interface TraceEventWebSocketSend extends TraceEventInstant {\n name: KnownEventName.WebSocketSend;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string, dataLength: number,\n },\n };\n}\n\nexport function isTraceEventWebSocketSend(event: TraceEventData): event is TraceEventWebSocketSend {\n return event.name === KnownEventName.WebSocketSend;\n}\n\nexport interface TraceEventWebSocketReceive extends TraceEventInstant {\n name: KnownEventName.WebSocketReceive;\n args: TraceEventArgs&{\n data: TraceEventArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string, dataLength: number,\n },\n };\n}\nexport function isTraceEventWebSocketReceive(event: TraceEventData): event is TraceEventWebSocketReceive {\n return event.name === KnownEventName.WebSocketReceive;\n}\n\nexport interface TraceEventWebSocketSendHandshakeRequest extends TraceEventInstant {\n name: KnownEventName.WebSocketSendHandshakeRequest;\n args: TraceEventArgs&{\n data: {\n frame: string,\n identifier: number,\n },\n };\n}\nexport function isTraceEventWebSocketSendHandshakeRequest(event: TraceEventData):\n event is TraceEventWebSocketSendHandshakeRequest {\n return event.name === KnownEventName.WebSocketSendHandshakeRequest;\n}\n\nexport interface TraceEventWebSocketReceiveHandshakeResponse extends TraceEventInstant {\n name: KnownEventName.WebSocketReceiveHandshakeResponse;\n args: TraceEventArgs&{\n data: {\n frame: string,\n identifier: number,\n },\n };\n}\nexport function isTraceEventWebSocketReceiveHandshakeResponse(event: TraceEventData):\n event is TraceEventWebSocketReceiveHandshakeResponse {\n return event.name === KnownEventName.WebSocketReceiveHandshakeResponse;\n}\n\nexport interface TraceEventWebSocketDestroy extends TraceEventInstant {\n name: KnownEventName.WebSocketDestroy;\n args: TraceEventArgs&{\n data: {\n frame: string,\n identifier: number,\n },\n };\n}\nexport function isTraceEventWebSocketDestroy(event: TraceEventData): event is TraceEventWebSocketDestroy {\n return event.name === KnownEventName.WebSocketDestroy;\n}\n\nexport type WebSocketTraceEvent = TraceEventWebSocketCreate|TraceEventWebSocketInfo|TraceEventWebSocketTransfer;\nexport function isWebSocketTraceEvent(event: TraceEventData): event is WebSocketTraceEvent {\n return isTraceEventWebSocketCreate(event) || isTraceEventWebSocketInfo(event) || isTraceEventWebSocketTransfer(event);\n}\n\nexport type WebSocketEvent = WebSocketTraceEvent|SyntheticWebSocketConnectionEvent;\nexport function isWebSocketEvent(event: TraceEventData): event is WebSocketTraceEvent|\n SyntheticWebSocketConnectionEvent {\n return isWebSocketTraceEvent(event) || isSyntheticWebSocketConnectionEvent(event);\n}\n\nexport interface TraceEventV8Compile extends TraceEventComplete {\n name: KnownEventName.Compile;\n args: TraceEventArgs&{\n data?: {\n url?: string,\n columnNumber?: number,\n consumedCacheSize?: number,\n cacheRejected?: boolean,\n cacheKind?: 'full'|'normal',\n lineNumber?: number,\n notStreamedReason?: string,\n streamed?: boolean,\n eager?: boolean,\n },\n fileName?: string,\n };\n}\nexport function isTraceEventV8Compile(event: TraceEventData): event is TraceEventV8Compile {\n return event.name === KnownEventName.Compile;\n}\n\nexport interface TraceEventFunctionCall extends TraceEventComplete {\n name: KnownEventName.FunctionCall;\n args: TraceEventArgs&{\n data?: {\n frame?: string,\n columnNumber?: number,\n lineNumber?: number,\n functionName?: string,\n scriptId?: number,\n url?: string,\n },\n };\n}\nexport function isTraceEventFunctionCall(event: TraceEventData): event is TraceEventFunctionCall {\n return event.name === KnownEventName.FunctionCall;\n}\n\n/**\n * Generally, before JS is executed, a trace event is dispatched that\n * parents the JS calls. These we call \"invocation\" events. This\n * function determines if an event is one of such.\n */\nexport function isJSInvocationEvent(event: TraceEventData): boolean {\n switch (event.name) {\n case KnownEventName.RunMicrotasks:\n case KnownEventName.FunctionCall:\n case KnownEventName.EvaluateScript:\n case KnownEventName.EvaluateModule:\n case KnownEventName.EventDispatch:\n case KnownEventName.V8Execute:\n return true;\n }\n // Also consider any new v8 trace events. (eg 'V8.RunMicrotasks' and 'v8.run')\n if (event.name.startsWith('v8') || event.name.startsWith('V8')) {\n return true;\n }\n return false;\n}\n\n/**\n * This is an exhaustive list of events we track in the Performance\n * panel. Note not all of them are necessarliry shown in the flame\n * chart, some of them we only use for parsing.\n * TODO(crbug.com/1428024): Complete this enum.\n */\nexport const enum KnownEventName {\n /* Metadata */\n ThreadName = 'thread_name',\n\n /* Task */\n Program = 'Program',\n RunTask = 'RunTask',\n AsyncTask = 'AsyncTask',\n RunMicrotasks = 'RunMicrotasks',\n\n /* Load */\n XHRLoad = 'XHRLoad',\n XHRReadyStateChange = 'XHRReadyStateChange',\n /* Parse */\n ParseHTML = 'ParseHTML',\n ParseCSS = 'ParseAuthorStyleSheet',\n /* V8 */\n CompileCode = 'V8.CompileCode',\n CompileModule = 'V8.CompileModule',\n // Although V8 emits the V8.CompileScript event, the event that actually\n // contains the useful information about the script (URL, etc), is contained\n // in the v8.compile event.\n // Yes, it is all lowercase compared to all the rest of the V8... events,\n // that is not a typo :)\n Compile = 'v8.compile',\n CompileScript = 'V8.CompileScript',\n Optimize = 'V8.OptimizeCode',\n WasmStreamFromResponseCallback = 'v8.wasm.streamFromResponseCallback',\n WasmCompiledModule = 'v8.wasm.compiledModule',\n WasmCachedModule = 'v8.wasm.cachedModule',\n WasmModuleCacheHit = 'v8.wasm.moduleCacheHit',\n WasmModuleCacheInvalid = 'v8.wasm.moduleCacheInvalid',\n /* Js */\n ProfileCall = 'ProfileCall',\n EvaluateScript = 'EvaluateScript',\n FunctionCall = 'FunctionCall',\n EventDispatch = 'EventDispatch',\n EvaluateModule = 'v8.evaluateModule',\n RequestMainThreadFrame = 'RequestMainThreadFrame',\n RequestAnimationFrame = 'RequestAnimationFrame',\n CancelAnimationFrame = 'CancelAnimationFrame',\n FireAnimationFrame = 'FireAnimationFrame',\n RequestIdleCallback = 'RequestIdleCallback',\n CancelIdleCallback = 'CancelIdleCallback',\n FireIdleCallback = 'FireIdleCallback',\n TimerInstall = 'TimerInstall',\n TimerRemove = 'TimerRemove',\n TimerFire = 'TimerFire',\n WebSocketCreate = 'WebSocketCreate',\n WebSocketSendHandshake = 'WebSocketSendHandshakeRequest',\n WebSocketReceiveHandshake = 'WebSocketReceiveHandshakeResponse',\n WebSocketDestroy = 'WebSocketDestroy',\n WebSocketSend = 'WebSocketSend',\n WebSocketReceive = 'WebSocketReceive',\n CryptoDoEncrypt = 'DoEncrypt',\n CryptoDoEncryptReply = 'DoEncryptReply',\n CryptoDoDecrypt = 'DoDecrypt',\n CryptoDoDecryptReply = 'DoDecryptReply',\n CryptoDoDigest = 'DoDigest',\n CryptoDoDigestReply = 'DoDigestReply',\n CryptoDoSign = 'DoSign',\n CryptoDoSignReply = 'DoSignReply',\n CryptoDoVerify = 'DoVerify',\n CryptoDoVerifyReply = 'DoVerifyReply',\n V8Execute = 'V8.Execute',\n\n /* Gc */\n GC = 'GCEvent',\n DOMGC = 'BlinkGC.AtomicPhase',\n MajorGC = 'MajorGC',\n MinorGC = 'MinorGC',\n GCCollectGarbage = 'BlinkGC.AtomicPhase',\n CPPGCSweep = 'CppGC.IncrementalSweep',\n\n /* Layout */\n ScheduleStyleRecalculation = 'ScheduleStyleRecalculation',\n Layout = 'Layout',\n UpdateLayoutTree = 'UpdateLayoutTree',\n InvalidateLayout = 'InvalidateLayout',\n LayoutInvalidationTracking = 'LayoutInvalidationTracking',\n ComputeIntersections = 'ComputeIntersections',\n HitTest = 'HitTest',\n PrePaint = 'PrePaint',\n Layerize = 'Layerize',\n LayoutShift = 'LayoutShift',\n UpdateLayerTree = 'UpdateLayerTree',\n ScheduleStyleInvalidationTracking = 'ScheduleStyleInvalidationTracking',\n StyleRecalcInvalidationTracking = 'StyleRecalcInvalidationTracking',\n StyleInvalidatorInvalidationTracking = 'StyleInvalidatorInvalidationTracking',\n SelectorStats = 'SelectorStats',\n BeginCommitCompositorFrame = 'BeginCommitCompositorFrame',\n\n /* Paint */\n ScrollLayer = 'ScrollLayer',\n UpdateLayer = 'UpdateLayer',\n PaintSetup = 'PaintSetup',\n Paint = 'Paint',\n PaintImage = 'PaintImage',\n Commit = 'Commit',\n CompositeLayers = 'CompositeLayers',\n RasterTask = 'RasterTask',\n ImageDecodeTask = 'ImageDecodeTask',\n ImageUploadTask = 'ImageUploadTask',\n DecodeImage = 'Decode Image',\n DrawLazyPixelRef = 'Draw LazyPixelRef',\n DecodeLazyPixelRef = 'Decode LazyPixelRef',\n GPUTask = 'GPUTask',\n Rasterize = 'Rasterize',\n EventTiming = 'EventTiming',\n\n /* Compile */\n OptimizeCode = 'V8.OptimizeCode',\n CacheScript = 'v8.produceCache',\n CacheModule = 'v8.produceModuleCache',\n // V8Sample events are coming from tracing and contain raw stacks with function addresses.\n // After being processed with help of JitCodeAdded and JitCodeMoved events they\n // get translated into function infos and stored as stacks in JSSample events.\n V8Sample = 'V8Sample',\n JitCodeAdded = 'JitCodeAdded',\n JitCodeMoved = 'JitCodeMoved',\n StreamingCompileScript = 'v8.parseOnBackground',\n StreamingCompileScriptWaiting = 'v8.parseOnBackgroundWaiting',\n StreamingCompileScriptParsing = 'v8.parseOnBackgroundParsing',\n BackgroundDeserialize = 'v8.deserializeOnBackground',\n FinalizeDeserialization = 'V8.FinalizeDeserialization',\n\n /* Markers */\n CommitLoad = 'CommitLoad',\n MarkLoad = 'MarkLoad',\n MarkDOMContent = 'MarkDOMContent',\n MarkFirstPaint = 'firstPaint',\n MarkFCP = 'firstContentfulPaint',\n MarkLCPCandidate = 'largestContentfulPaint::Candidate',\n MarkLCPInvalidate = 'largestContentfulPaint::Invalidate',\n NavigationStart = 'navigationStart',\n TimeStamp = 'TimeStamp',\n ConsoleTime = 'ConsoleTime',\n UserTiming = 'UserTiming',\n InteractiveTime = 'InteractiveTime',\n\n /* Frames */\n BeginFrame = 'BeginFrame',\n NeedsBeginFrameChanged = 'NeedsBeginFrameChanged',\n BeginMainThreadFrame = 'BeginMainThreadFrame',\n ActivateLayerTree = 'ActivateLayerTree',\n DrawFrame = 'DrawFrame',\n DroppedFrame = 'DroppedFrame',\n FrameStartedLoading = 'FrameStartedLoading',\n PipelineReporter = 'PipelineReporter',\n Screenshot = 'Screenshot',\n\n /* Network request events */\n ResourceWillSendRequest = 'ResourceWillSendRequest',\n ResourceSendRequest = 'ResourceSendRequest',\n ResourceReceiveResponse = 'ResourceReceiveResponse',\n ResourceReceivedData = 'ResourceReceivedData',\n ResourceFinish = 'ResourceFinish',\n ResourceMarkAsCached = 'ResourceMarkAsCached',\n\n /* Web sockets */\n WebSocketSendHandshakeRequest = 'WebSocketSendHandshakeRequest',\n WebSocketReceiveHandshakeResponse = 'WebSocketReceiveHandshakeResponse',\n\n /* CPU Profiling */\n Profile = 'Profile',\n StartProfiling = 'CpuProfiler::StartProfiling',\n ProfileChunk = 'ProfileChunk',\n UpdateCounters = 'UpdateCounters',\n\n JSSample = 'JSSample',\n\n /* Other */\n Animation = 'Animation',\n ParseAuthorStyleSheet = 'ParseAuthorStyleSheet',\n EmbedderCallback = 'EmbedderCallback',\n SetLayerTreeId = 'SetLayerTreeId',\n TracingStartedInPage = 'TracingStartedInPage',\n TracingStartedInBrowser = 'TracingStartedInBrowser',\n TracingSessionIdForWorker = 'TracingSessionIdForWorker',\n LazyPixelRef = 'LazyPixelRef',\n LayerTreeHostImplSnapshot = 'cc::LayerTreeHostImpl',\n PictureSnapshot = 'cc::Picture',\n DisplayItemListSnapshot = 'cc::DisplayItemList',\n InputLatencyMouseMove = 'InputLatency::MouseMove',\n InputLatencyMouseWheel = 'InputLatency::MouseWheel',\n ImplSideFling = 'InputHandlerProxy::HandleGestureFling::started',\n\n SchedulePostMessage = 'SchedulePostMessage',\n HandlePostMessage = 'HandlePostMessage',\n\n RenderFrameImplCreateChildFrame = 'RenderFrameImpl::createChildFrame',\n}\n\n// NOT AN EXHAUSTIVE LIST: just some categories we use and refer\n// to in multiple places.\nexport const Categories = {\n Console: 'blink.console',\n UserTiming: 'blink.user_timing',\n Loading: 'loading',\n} as const;\n"]}
|
|
1
|
+
{"version":3,"file":"TraceEvents.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/types/TraceEvents.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAoD7B,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,KAAK,yCAA+B,IAAI,KAAK,uCAA6B;QAC7E,KAAK,2CAAiC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,KAAK,gCAAsB,IAAI,KAAK,oCAA0B;QAChG,KAAK,8BAAoB,IAAI,KAAK,oCAA0B,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,+BAAqB,IAAI,KAAK,8BAAoB,IAAI,KAAK,6BAAmB,CAAC;AAC7F,CAAC;AA2CD,MAAM,UAAU,iBAAiB,CAAC,MAAU;IAC1C,OAAO,CAAC,cAAc,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC;QACxE,CAAC,UAAU,IAAI,MAAM,IAAI,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACtG,CAAC,cAAc,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC;QACrE,CAAC,YAAY,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC;QACjE,CAAC,KAAK,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,CAAC;AA+ED,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,OAAO,KAAK,CAAC,IAAI,kCAAkB,CAAC;AACtC,CAAC;AA8SD,MAAM,UAAU,gCAAgC,CAAC,KAAY;IAC3D,OAAO,KAAK,CAAC,IAAI,KAAK,gCAAgC,CAAC;AACzD,CAAC;AACD,MAAM,UAAU,+BAA+B,CAAC,KAAY;IAC1D,OAAO,KAAK,CAAC,IAAI,KAAK,+BAA+B,CAAC;AACxD,CAAC;AAkBD,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,IAAI,uCAAoB,CAAC;AACxC,CAAC;AAmHD,MAAM,gBAAgB,GAAG;IACvB,gBAAgB;IAChB,UAAU;IACV,YAAY;IACZ,sBAAsB;IACtB,iCAAiC;IACjC,iBAAiB;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GACnB,CAAC,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,mCAAmC,CAAU,CAAC;AAMvH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAuB,GAAG;IAC9B,GAAG,gBAAgB;IACnB,iBAAiB;CAClB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AAgGD,MAAM,UAAU,2BAA2B,CAAC,KAAY;IACtD,OAAO,KAAK,CAAC,IAAI,KAAK,2BAA2B,CAAC;AACpD,CAAC;AAkID,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAoN7C,MAAM,UAAU,mCAAmC,CAAC,KAAY;IAC9D,OAAO,KAAK,CAAC,IAAI,wFAA8C,CAAC;AAClE,CAAC;AAoBD,MAAM,UAAU,iCAAiC,CAAC,KAAY;IAC5D,OAAO,KAAK,CAAC,IAAI,oFAA4C,CAAC;AAChE,CAAC;AAeD,MAAM,UAAU,sCAAsC,CAAC,KAAY;IACjE,OAAO,KAAK,CAAC,IAAI,8FAAiD,CAAC;AACrE,CAAC;AAUD,MAAM,UAAU,4BAA4B,CAAC,KAAY;IACvD,OAAO,KAAK,CAAC,IAAI,0EAAuC,CAAC;AAC3D,CAAC;AAaD,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAO,KAAK,CAAC,IAAI,uDAA6B,CAAC;AACjD,CAAC;AAUD,MAAM,UAAU,4BAA4B,CAAC,KAAY;IACvD,OAAO,KAAK,CAAC,IAAI,yEAAsC,CAAC;AAC1D,CAAC;AAUD,MAAM,UAAU,iCAAiC,CAAC,KAAY;IAC5D,OAAO,KAAK,CAAC,IAAI,wFAA8C,CAAC;AAClE,CAAC;AA8LD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,oDAA2B,CAAC;AAC/C,CAAC;AAeD,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,gBAAgB,IAAI,KAAK,CAAC;AACnC,CAAC;AA0GD,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,OAAO,OAAO,CACV,eAAe,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxH,CAAC;AAYD,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,yOAAyO;IACzO,OAAO,KAAK,CAAC,IAAI,sCAAoB,IAAI,KAAK,CAAC,EAAE,4BAAkB,CAAC;AACtE,CAAC;AASD,MAAM,UAAU,gCAAgC,CAAC,KAAY;IAC3D,OAAO,KAAK,CAAC,IAAI,sCAAoB,IAAI,KAAK,CAAC,EAAE,yCAA+B,CAAC;AACnF,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,2EAA2E;IAC3E,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,wCAAqB,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAUD,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,2EAA2E;IAC3E,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,4CAAuB,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAChG,CAAC;AAQD,MAAM,UAAU,wBAAwB,CAAC,KAAY;IACnD,OAAO,KAAK,CAAC,IAAI,kEAAmC,CAAC;AACvD,CAAC;AAWD,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,OAAO,KAAK,CAAC,IAAI,8DAAiC,CAAC;AACrD,CAAC;AAWD,MAAM,UAAU,wBAAwB,CAAC,KAAY;IACnD,OAAO,KAAK,CAAC,IAAI,kEAAmC,CAAC;AACvD,CAAC;AASD,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,2EAA2E;IAC3E,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,+BAAgB,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AACzF,CAAC;AAgBD,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,IAAI,wCAAqB,CAAC;AACzC,CAAC;AASD,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,KAAK,CAAC,IAAI,kDAA0B,CAAC;AAC9C,CAAC;AASD,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAO,KAAK,CAAC,IAAI,uDAA6B,CAAC;AACjD,CAAC;AAKD,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,OAAO,mCAAmC,CAAC,KAAK,CAAC,IAAI,iCAAiC,CAAC,KAAK,CAAC;QACzF,sCAAsC,CAAC,KAAK,CAAC,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC;AASD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,uDAA6B,CAAC;AACjD,CAAC;AASD,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,KAAK,CAAC,IAAI,2DAA+B,CAAC;AACnD,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,2CAAsB,CAAC;AAC1C,CAAC;AAeD,MAAM,CAAN,IAAY,kBAQX;AARD,WAAY,kBAAkB;IAC5B,8CAAwB,CAAA;IACxB,4DAAsC,CAAA;IACtC,2DAAqC,CAAA;IACrC,sDAAgC,CAAA;IAChC,gDAA0B,CAAA;IAC1B,2CAAqB,CAAA;IACrB,qDAA+B,CAAA;AACjC,CAAC,EARW,kBAAkB,KAAlB,kBAAkB,QAQ7B;AAeD,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,KAAK,CAAC,IAAI,8CAAwB,CAAC;AAC5C,CAAC;AAYD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,qDAA4B,CAAC;AAChD,CAAC;AAsBD,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,KAAK,CAAC,IAAI,+BAAgB,CAAC;AACpC,CAAC;AAUD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,oDAA2B,CAAC;AAC/C,CAAC;AAED,MAAM,YAAY;IACP,aAAa,CAAqB;CAC5C;AAED,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,cAAc;IACT,eAAe,CAAqB;CAC9C;AAED,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,cAAc;IACT,eAAe,CAAqB;CAC9C;AAED,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,YAAY;IACP,aAAa,CAAqB;CAC5C;AAED,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,WAAW;IACN,YAAY,CAAqB;CAC3C;AAED,gEAAgE;AAChE,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,WAAW;IACN,YAAY,CAAqB;CAC3C;AAED,gEAAgE;AAChE,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY;IACrC,OAAO,KAAK,CAAC,EAAE,6BAAmB,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAY;IAClC,OAAO,KAAK,CAAC,EAAE,0BAAgB,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAY;IAChC,OAAO,KAAK,CAAC,EAAE,wBAAc,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY;IACrC,OAAO,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,OAAO,KAAK,CAAC,EAAE,4BAAkB,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,OAAO,KAAK,CAAC,IAAI,2DAA+B,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAO,KAAK,CAAC,IAAI,uDAA6B,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CACxB,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,yCAAqB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,oEAAoC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,yBAAyB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,YAAY,CACxB,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,WAAW,CACvB,KAAY;IAEd,4HAA4H;IAC5H,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,yEAAsC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,OAAO,KAAK,CAAC,IAAI,KAAK,sBAAsB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,KAAY;IAC5D,OAAO,KAAK,CAAC,IAAI,sEAA4B,CAAC;AAChD,CAAC;AACD,MAAM,UAAU,4BAA4B,CAAC,KAAY;IACvD,OAAO,KAAK,CAAC,IAAI,KAAK,8BAA8B,CAAC;AACvD,CAAC;AACD,MAAM,UAAU,2BAA2B,CAAC,KAAY;IACtD,OAAO,KAAK,CAAC,IAAI,KAAK,6BAA6B,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY;IACrC,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,0CAAsB,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,uCAA6B,CAAC;AACvE,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,yCAA+B,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACpC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,yBAAyB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,sBAAsB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,yBAAyB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,sBAAsB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,yBAAyB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC1C,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,8BAA8B,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAO,yBAAyB,CAAC,KAAK,CAAC,IAAI,8BAA8B,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,UAAU,CACtB,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAY;IACnD,OAAO,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,KAAY;IAEd,OAAO,KAAK,CAAC,IAAI,KAAK,iCAAiC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAY;IACnD,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,GAAG,KAAK,mBAAmB,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,IAAI,wCAAqB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,OAAO,KAAK,CAAC,IAAI,4DAAgC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,yBAAe,IAAI,KAAK,CAAC,EAAE,4BAAkB,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,GAAG,KAAK,eAAe,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC,EAAE,4BAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AACpC,CAAC;AAOD,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAY;IACxD,OAAO,KAAK,CAAC,IAAI,4EAAwC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,WAAW,IAAI,KAAK,CAAC;AAC9B,CAAC;AAgBD,MAAM,UAAU,OAAO,CAAC,KAAY;IAClC,OAAO,KAAK,CAAC,IAAI,6BAAe,CAAC;AACnC,CAAC;AAeD,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,IAAI,wCAAqB,CAAC;AACzC,CAAC;AAWD,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,0CAAsB,CAAC;AAC1C,CAAC;AAWD,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,IAAI,kDAA2B,CAAC;AAC/C,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,0CAAsB,CAAC;AAC1C,CAAC;AAkBD,MAAM,UAAU,6BAA6B,CAAC,KAAY;IACxD,OAAO,KAAK,CAAC,IAAI,gEAAoC,CAAC;AACxD,CAAC;AA4BD,MAAM,UAAU,2BAA2B,CAAC,KAAY;IACtD,OAAO,KAAK,CAAC,IAAI,qEAAuC,CAAC;AAC3D,CAAC;AAsCD,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,KAAK,CAAC,IAAI,yDAA8B,CAAC;AAClD,CAAC;AAYD,MAAM,UAAU,uBAAuB,CAAC,KAAY;IAClD,OAAO,KAAK,CAAC,IAAI,+DAAiC,CAAC;AACrD,CAAC;AAYD,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO,KAAK,CAAC,IAAI,4CAAuB,CAAC;AAC3C,CAAC;AAWD,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC,IAAI,sCAAoB,CAAC;AACxC,CAAC;AAcD,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,OAAO,KAAK,CAAC,IAAI,2DAA+B,CAAC;AACnD,CAAC;AAeD,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,KAAK,CAAC,IAAI,mDAA2B,CAAC;AAC/C,CAAC;AAwBD,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,KAAK,CAAC,IAAI,iFAA2C;QACxD,KAAK,CAAC,IAAI,wFAA8C,IAAI,KAAK,CAAC,IAAI,qDAA4B,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAO,KAAK,CAAC,IAAI,+CAAyB,IAAI,KAAK,CAAC,IAAI,qDAA4B,CAAC;AACvF,CAAC;AAcD,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,KAAK,CAAC,IAAI,+CAAyB,CAAC;AAC7C,CAAC;AAaD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,qDAA4B,CAAC;AAChD,CAAC;AAWD,MAAM,UAAU,+BAA+B,CAAC,KAAY;IAC1D,OAAO,KAAK,CAAC,IAAI,iFAA2C,CAAC;AAC/D,CAAC;AAWD,MAAM,UAAU,mCAAmC,CAAC,KAAY;IAC9D,OAAO,KAAK,CAAC,IAAI,wFAA8C,CAAC;AAClE,CAAC;AAWD,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,KAAK,CAAC,IAAI,qDAA4B,CAAC;AAChD,CAAC;AAGD,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,8BAA8B,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC;AAmBD,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC,IAAI,oCAAiB,CAAC;AACrC,CAAC;AAeD,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO,KAAK,CAAC,IAAI,4CAAuB,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAY;IAClD,OAAO,KAAK,CAAC,GAAG,KAAK,wBAAwB,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,+CAAyB;QACzB,6CAAwB;QACxB,iDAA0B;QAC1B,oDAA0B;QAC1B,+CAAyB;QACzB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,8EAA8E;IAC9E,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AA8MD,gEAAgE;AAChE,yBAAyB;AACzB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,mBAAmB;IAC/B,OAAO,EAAE,SAAS;CACV,CAAC;AA+BX,MAAM,UAAU,qBAAqB,CAAC,IAAW;IAC/C,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AAC1D,CAAC","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\n/* eslint-disable no-unused-private-class-members */\nimport type * as Protocol from '../../../generated/protocol.js';\n\nimport type {MicroSeconds, MilliSeconds, Seconds, TraceWindowMicroSeconds} from './Timing.js';\n\n// Trace Events.\nexport const enum Phase {\n // Standard\n BEGIN = 'B',\n END = 'E',\n COMPLETE = 'X',\n INSTANT = 'I',\n COUNTER = 'C',\n\n // Async\n ASYNC_NESTABLE_START = 'b',\n ASYNC_NESTABLE_INSTANT = 'n',\n ASYNC_NESTABLE_END = 'e',\n ASYNC_STEP_INTO = 'T',\n ASYNC_BEGIN = 'S',\n ASYNC_END = 'F',\n ASYNC_STEP_PAST = 'p',\n\n // Flow\n FLOW_START = 's',\n FLOW_STEP = 't',\n FLOW_END = 'f',\n\n // Sample\n SAMPLE = 'P',\n\n // Object\n OBJECT_CREATED = 'N',\n OBJECT_SNAPSHOT = 'O',\n OBJECT_DESTROYED = 'D',\n\n // Metadata\n METADATA = 'M',\n\n // Memory Dump\n MEMORY_DUMP_GLOBAL = 'V',\n MEMORY_DUMP_PROCESS = 'v',\n\n // Mark\n MARK = 'R',\n\n // Clock sync\n CLOCK_SYNC = 'c',\n}\n\nexport function isNestableAsyncPhase(phase: Phase): boolean {\n return phase === Phase.ASYNC_NESTABLE_START || phase === Phase.ASYNC_NESTABLE_END ||\n phase === Phase.ASYNC_NESTABLE_INSTANT;\n}\n\nexport function isPhaseAsync(phase: Phase): boolean {\n return isNestableAsyncPhase(phase) || phase === Phase.ASYNC_BEGIN || phase === Phase.ASYNC_STEP_INTO ||\n phase === Phase.ASYNC_END || phase === Phase.ASYNC_STEP_PAST;\n}\n\nexport function isFlowPhase(phase: Phase): boolean {\n return phase === Phase.FLOW_START || phase === Phase.FLOW_STEP || phase === Phase.FLOW_END;\n}\n\nexport const enum Scope {\n THREAD = 't',\n PROCESS = 'p',\n GLOBAL = 'g',\n}\n\nexport interface Event {\n args?: Args;\n cat: string;\n name: string;\n ph: Phase;\n pid: ProcessID;\n tid: ThreadID;\n tts?: MicroSeconds;\n ts: MicroSeconds;\n tdur?: MicroSeconds;\n dur?: MicroSeconds;\n}\n\nexport interface Args {\n data?: ArgsData;\n stackTrace?: CallFrame[];\n}\n\nexport interface ArgsData {\n stackTrace?: CallFrame[];\n url?: string;\n navigationId?: string;\n frame?: string;\n}\n\nexport interface CallFrame {\n codeType?: string;\n functionName: string;\n // Trace events are inconsistent here sadly :(\n scriptId: number|string;\n columnNumber: number;\n lineNumber: number;\n url: string;\n}\n\nexport function objectIsCallFrame(object: {}): object is CallFrame {\n return ('functionName' in object && typeof object.functionName === 'string') &&\n ('scriptId' in object && (typeof object.scriptId === 'string' || typeof object.scriptId === 'number')) &&\n ('columnNumber' in object && typeof object.columnNumber === 'number') &&\n ('lineNumber' in object && typeof object.lineNumber === 'number') &&\n ('url' in object && typeof object.url === 'string');\n}\n\nexport interface TraceFrame {\n frame: string;\n name: string;\n processId: ProcessID;\n url: string;\n parent?: string;\n // Added to Chromium in April 2024:\n // crrev.com/c/5424783\n isOutermostMainFrame?: boolean;\n // Added to Chromium in June 2024:\n // crrev.com/c/5595033\n isInPrimaryMainFrame?: boolean;\n}\n\n// Sample events.\n\nexport interface Sample extends Event {\n ph: Phase.SAMPLE;\n}\n\n/**\n * A fake trace event created to support CDP.Profiler.Profiles in the\n * trace engine.\n */\nexport interface SyntheticCpuProfile extends Instant, SyntheticBased<Phase.INSTANT> {\n name: 'CpuProfile';\n args: Args&{\n data: ArgsData & {\n cpuProfile: Protocol.Profiler.Profile,\n },\n };\n}\n\nexport interface Profile extends Sample {\n name: 'Profile';\n id: ProfileID;\n args: Args&{\n data: ArgsData & {\n startTime: MicroSeconds,\n },\n };\n}\n\nexport interface ProfileChunk extends Sample {\n name: 'ProfileChunk';\n id: ProfileID;\n args: Args&{\n // `data` is only missing in \"fake\" traces\n data?: ArgsData & {\n cpuProfile?: PartialProfile,\n timeDeltas?: MicroSeconds[],\n lines?: MicroSeconds[],\n },\n };\n}\n\nexport interface PartialProfile {\n nodes?: PartialNode[];\n samples: CallFrameID[];\n}\n\nexport interface PartialNode {\n callFrame: CallFrame;\n id: CallFrameID;\n parent?: CallFrameID;\n}\n\n// Complete events.\n\nexport interface Complete extends Event {\n ph: Phase.COMPLETE;\n dur: MicroSeconds;\n}\n\nexport interface RunTask extends Complete {\n name: Name.RUN_TASK;\n}\nexport function isRunTask(event: Event): event is RunTask {\n return event.name === Name.RUN_TASK;\n}\n\nexport interface FireIdleCallback extends Complete {\n name: Name.FIRE_IDLE_CALLBACK;\n args: Args&{\n data: ArgsData & {\n allottedMilliseconds: MilliSeconds,\n frame: string,\n id: number,\n timedOut: boolean,\n },\n };\n}\n\nexport interface SchedulePostMessage extends Instant {\n name: Name.SCHEDULE_POST_MESSAGE;\n args: Args&{\n data: ArgsData & {\n traceId: string,\n },\n };\n}\n\nexport interface HandlePostMessage extends Complete {\n name: Name.HANDLE_POST_MESSAGE;\n args: Args&{\n data: ArgsData & {\n traceId: string,\n },\n };\n}\n\nexport interface Dispatch extends Complete {\n name: 'EventDispatch';\n args: Args&{\n data: ArgsData & {\n type: string,\n },\n };\n}\n\nexport interface ParseHTML extends Complete {\n name: 'ParseHTML';\n args: Args&{\n beginData: {\n frame: string,\n startLine: number,\n url: string,\n },\n endData?: {\n endLine: number,\n },\n };\n}\n\nexport interface Begin extends Event {\n ph: Phase.BEGIN;\n}\n\nexport interface End extends Event {\n ph: Phase.END;\n}\n\n/**\n * This denotes a complete event created from a pair of begin and end\n * events. For practicality, instead of always having to look for the\n * end event corresponding to a begin event, we create a synthetic\n * complete event that comprises the data of both from the beginning in\n * the RendererHandler.\n */\nexport type SyntheticComplete = Complete;\n\nexport interface EventTiming extends Event {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END;\n name: Name.EVENT_TIMING;\n id: string;\n args: Args&{\n frame: string,\n data?: ArgsData&{\n cancelable: boolean,\n duration: MilliSeconds,\n processingEnd: MilliSeconds,\n processingStart: MilliSeconds,\n timeStamp: MilliSeconds,\n interactionId?: number, type: string,\n },\n };\n}\n\nexport interface EventTimingBegin extends EventTiming {\n ph: Phase.ASYNC_NESTABLE_START;\n}\nexport interface EventTimingEnd extends EventTiming {\n ph: Phase.ASYNC_NESTABLE_END;\n}\n\nexport interface GPUTask extends Complete {\n name: 'GPUTask';\n args: Args&{\n data?: ArgsData & {\n /* eslint-disable @typescript-eslint/naming-convention */\n renderer_pid: ProcessID,\n used_bytes: number,\n /* eslint-enable @typescript-eslint/naming-convention */\n },\n };\n}\n\nexport interface SyntheticNetworkRedirect {\n url: string;\n priority: string;\n requestMethod?: string;\n ts: MicroSeconds;\n dur: MicroSeconds;\n}\n\n// ProcessedArgsData is used to store the processed data of a network\n// request. Which is used to distinguish from the date we extract from the\n// trace event directly.\ninterface SyntheticArgsData {\n dnsLookup: MicroSeconds;\n download: MicroSeconds;\n downloadStart: MicroSeconds;\n finishTime: MicroSeconds;\n initialConnection: MicroSeconds;\n isDiskCached: boolean;\n isHttps: boolean;\n isMemoryCached: boolean;\n isPushedResource: boolean;\n networkDuration: MicroSeconds;\n processingDuration: MicroSeconds;\n proxyNegotiation: MicroSeconds;\n queueing: MicroSeconds;\n redirectionDuration: MicroSeconds;\n requestSent: MicroSeconds;\n sendStartTime: MicroSeconds;\n ssl: MicroSeconds;\n stalled: MicroSeconds;\n totalTime: MicroSeconds;\n /** Server response time (receiveHeadersEnd - sendEnd) */\n waiting: MicroSeconds;\n}\n\nexport interface SyntheticNetworkRequest extends Complete, SyntheticBased<Phase.COMPLETE> {\n rawSourceEvent: ResourceSendRequest;\n args: Args&{\n data: ArgsData & {\n syntheticData: SyntheticArgsData,\n // All fields below are from TraceEventsForNetworkRequest,\n // Required fields\n /** Size of the resource after decompression (if applicable). */\n decodedBodyLength: number,\n /**\n * Size of the resource over the network. Includes size of headers and\n * anything else in the HTTP response packet.\n */\n encodedDataLength: number,\n frame: string,\n fromServiceWorker: boolean,\n isLinkPreload: boolean,\n mimeType: string,\n priority: Protocol.Network.ResourcePriority,\n initialPriority: Protocol.Network.ResourcePriority,\n /**\n * This is the protocol used to resolve the request.\n *\n * Note, this is not the same as URL.protocol.\n *\n * Example values (not exhaustive): http/0.9, http/1.0, http/1.1, http, h2, h3-Q050, data, blob\n */\n protocol: string,\n redirects: SyntheticNetworkRedirect[],\n renderBlocking: RenderBlocking,\n requestId: string,\n requestingFrameUrl: string,\n statusCode: number,\n resourceType: Protocol.Network.ResourceType,\n responseHeaders: Array<{name: string, value: string}>,\n fetchPriorityHint: FetchPriorityHint,\n url: string,\n /** True only if got a 'resourceFinish' event indicating a failure. */\n failed: boolean,\n /** True only if got a 'resourceFinish' event. */\n finished: boolean,\n connectionId: number,\n connectionReused: boolean,\n // Optional fields\n initiator?: Initiator,\n requestMethod?: string,\n timing?: ResourceReceiveResponseTimingData,\n syntheticServerTimings?: SyntheticServerTiming[],\n },\n };\n cat: 'loading';\n name: 'SyntheticNetworkRequest';\n ph: Phase.COMPLETE;\n dur: MicroSeconds;\n tdur: MicroSeconds;\n ts: MicroSeconds;\n tts: MicroSeconds;\n pid: ProcessID;\n tid: ThreadID;\n}\n\nexport interface SyntheticWebSocketConnection extends Complete, SyntheticBased<Phase.COMPLETE> {\n rawSourceEvent: Event;\n args: Args&{\n data: ArgsData & {\n identifier: number,\n priority: Protocol.Network.ResourcePriority,\n url: string,\n },\n };\n cat: string;\n name: 'SyntheticWebSocketConnection';\n ph: Phase.COMPLETE;\n dur: MicroSeconds;\n ts: MicroSeconds;\n pid: ProcessID;\n tid: ThreadID;\n s: Scope;\n}\n\nexport const enum AuctionWorkletType {\n BIDDER = 'bidder',\n SELLER = 'seller',\n // Not expected to be used, but here as a fallback in case new types get\n // added and we have yet to update the trace engine.\n UNKNOWN = 'unknown',\n}\n\nexport interface SyntheticAuctionWorklet extends Instant, SyntheticBased<Phase.INSTANT> {\n rawSourceEvent: Event;\n name: 'SyntheticAuctionWorklet';\n // The PID that the AuctionWorklet is running in.\n pid: ProcessID;\n // URL\n host: string;\n // An ID used to pair up runningInProcessEvents with doneWithProcessEvents\n target: string;\n type: AuctionWorkletType;\n args: Args&{\n data:\n ArgsData & {\n // There are two threads for a worklet that we care about, so we gather\n // the thread_name events so we can know the PID and TID for them (and\n // hence display the right events in the track for each thread)\n utilityThread: ThreadName,\n v8HelperThread: ThreadName,\n } &\n (\n // This type looks odd, but this is because these events could either have:\n // 1. Just the DoneWithProcess event\n // 2. Just the RunningInProcess event\n // 3. Both events\n // But crucially it cannot have both events missing, hence listing all the\n // allowed cases.\n // Clang is disabled as the combination of nested types and optional\n // properties cause it to weirdly indent some of the properties and make it\n // very unreadable.\n // clang-format off\n {\n runningInProcessEvent: AuctionWorkletRunningInProcess,\n doneWithProcessEvent: AuctionWorkletDoneWithProcess,\n } |\n {\n runningInProcessEvent?: AuctionWorkletRunningInProcess,\n doneWithProcessEvent: AuctionWorkletDoneWithProcess,\n } |\n {\n doneWithProcessEvent?: AuctionWorkletDoneWithProcess,\n runningInProcessEvent: AuctionWorkletRunningInProcess,\n\n }),\n // clang-format on\n };\n}\nexport interface AuctionWorkletRunningInProcess extends Event {\n name: 'AuctionWorkletRunningInProcess';\n ph: Phase.INSTANT;\n args: Args&{\n data: ArgsData & {\n host: string,\n pid: ProcessID,\n target: string,\n type: AuctionWorkletType,\n },\n };\n}\nexport interface AuctionWorkletDoneWithProcess extends Event {\n name: 'AuctionWorkletDoneWithProcess';\n ph: Phase.INSTANT;\n args: Args&{\n data: ArgsData & {\n host: string,\n pid: ProcessID,\n target: string,\n type: AuctionWorkletType,\n },\n };\n}\n\nexport function isAuctionWorkletRunningInProcess(event: Event): event is AuctionWorkletRunningInProcess {\n return event.name === 'AuctionWorkletRunningInProcess';\n}\nexport function isAuctionWorkletDoneWithProcess(event: Event): event is AuctionWorkletDoneWithProcess {\n return event.name === 'AuctionWorkletDoneWithProcess';\n}\n\n// Snapshot events.\n\nexport interface Screenshot extends Event {\n /**\n * @deprecated This value is incorrect. Use ScreenshotHandler.getPresentationTimestamp()\n */\n ts: MicroSeconds;\n /** The id is the frame sequence number in hex */\n id: string;\n args: Args&{\n snapshot: string,\n };\n name: Name.SCREENSHOT;\n cat: 'disabled-by-default-devtools.screenshot';\n ph: Phase.OBJECT_SNAPSHOT;\n}\nexport function isScreenshot(event: Event): event is Screenshot {\n return event.name === Name.SCREENSHOT;\n}\n\nexport interface SyntheticScreenshot extends Event, SyntheticBased {\n rawSourceEvent: Screenshot;\n /** This is the correct presentation timestamp. */\n ts: MicroSeconds;\n args: Args&{\n dataUri: string,\n };\n name: Name.SCREENSHOT;\n cat: 'disabled-by-default-devtools.screenshot';\n ph: Phase.OBJECT_SNAPSHOT;\n}\n\n// Animation events.\n\nexport interface Animation extends Event {\n args: Args&{\n data: ArgsData & {\n nodeName?: string,\n nodeId?: Protocol.DOM.BackendNodeId,\n displayName?: string,\n id?: string,\n name?: string,\n state?: string,\n compositeFailed?: number,\n unsupportedProperties?: string[],\n },\n };\n name: 'Animation';\n id2?: {\n local?: string,\n };\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_NESTABLE_INSTANT;\n}\n\n// Metadata events.\n\nexport interface Metadata extends Event {\n ph: Phase.METADATA;\n args: Args&{\n name?: string,\n uptime?: string,\n };\n}\n\nexport interface ThreadName extends Metadata {\n name: Name.THREAD_NAME;\n args: Args&{\n name?: string,\n };\n}\n\nexport interface ProcessName extends Metadata {\n name: 'process_name';\n}\n\n// Mark events.\n\nexport interface Mark extends Event {\n ph: Phase.MARK;\n}\n\nexport interface NavigationStart extends Mark {\n name: 'navigationStart';\n args: Args&{\n data?: ArgsData & {\n documentLoaderURL: string,\n isLoadingMainFrame: boolean,\n // isOutermostMainFrame was introduced in crrev.com/c/3625434 and exists\n // because of Fenced Frames\n // [github.com/WICG/fenced-frame/tree/master/explainer].\n // Fenced frames introduce a situation where isLoadingMainFrame could be\n // true for a navigation, but that navigation be within an embedded \"main\n // frame\", and therefore it wouldn't be on the top level main frame.\n // In situations where we need to distinguish that, we can rely on\n // isOutermostMainFrame, which will only be true for navigations on the\n // top level main frame.\n\n // This flag is optional as it was introduced in May 2022; so users\n // reasonably may import traces from before that date that do not have\n // this field present.\n isOutermostMainFrame?: boolean, navigationId: string,\n /**\n * @deprecated use documentLoaderURL for navigation events URLs\n */\n url?: string,\n },\n frame: string,\n };\n}\n\nexport interface FirstContentfulPaint extends Mark {\n name: Name.MARK_FCP;\n args: Args&{\n frame: string,\n data?: ArgsData&{\n navigationId: string,\n },\n };\n}\n\nexport interface FirstPaint extends Mark {\n name: 'firstPaint';\n args: Args&{\n frame: string,\n data?: ArgsData&{\n navigationId: string,\n },\n };\n}\n\nexport type PageLoadEvent = FirstContentfulPaint|MarkDOMContent|InteractiveTime|LargestContentfulPaintCandidate|\n LayoutShift|FirstPaint|MarkLoad|NavigationStart;\n\nconst markerTypeGuards = [\n isMarkDOMContent,\n isMarkLoad,\n isFirstPaint,\n isFirstContentfulPaint,\n isLargestContentfulPaintCandidate,\n isNavigationStart,\n];\n\nexport const MarkerName =\n ['MarkDOMContent', 'MarkLoad', 'firstPaint', 'firstContentfulPaint', 'largestContentfulPaint::Candidate'] as const;\n\nexport interface MarkerEvent extends Event {\n name: typeof MarkerName[number];\n}\n\nexport function isMarkerEvent(event: Event): event is MarkerEvent {\n return markerTypeGuards.some(fn => fn(event));\n}\n\nconst pageLoadEventTypeGuards = [\n ...markerTypeGuards,\n isInteractiveTime,\n];\n\nexport function eventIsPageLoadEvent(event: Event): event is PageLoadEvent {\n return pageLoadEventTypeGuards.some(fn => fn(event));\n}\n\nexport interface LargestContentfulPaintCandidate extends Mark {\n name: Name.MARK_LCP_CANDIDATE;\n args: Args&{\n frame: string,\n data?: ArgsData&{\n candidateIndex: number,\n isOutermostMainFrame: boolean,\n isMainFrame: boolean,\n navigationId: string,\n nodeId: Protocol.DOM.BackendNodeId,\n loadingAttr: string,\n type?: string,\n },\n };\n}\nexport interface LargestImagePaintCandidate extends Mark {\n name: 'LargestImagePaint::Candidate';\n args: Args&{\n frame: string,\n data?: ArgsData&{\n candidateIndex: number,\n imageUrl: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DOMNodeId: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport interface LargestTextPaintCandidate extends Mark {\n name: 'LargestTextPaint::Candidate';\n args: Args&{\n frame: string,\n data?: ArgsData&{\n candidateIndex: number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DOMNodeId: Protocol.DOM.BackendNodeId,\n },\n };\n}\n\nexport interface InteractiveTime extends Mark {\n name: 'InteractiveTime';\n args: Args&{\n args: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n total_blocking_time_ms: number,\n },\n frame: string,\n };\n}\n\n// Instant events.\n\nexport interface Instant extends Event {\n ph: Phase.INSTANT;\n s: Scope;\n}\n\nexport interface UpdateCounters extends Instant {\n name: 'UpdateCounters';\n args: Args&{\n data: ArgsData & {\n documents: number,\n jsEventListeners: number,\n jsHeapSizeUsed: number,\n nodes: number,\n gpuMemoryLimitKB?: number,\n },\n };\n}\n\nexport type RendererEvent = Instant|Complete;\n\nexport interface TracingStartedInBrowser extends Instant {\n name: Name.TRACING_STARTED_IN_BROWSER;\n args: Args&{\n data?: ArgsData & {\n frameTreeNodeId: number,\n // Frames can only missing in \"fake\" traces\n frames?: TraceFrame[], persistentIds: boolean,\n },\n };\n}\n\nexport interface TracingSessionIdForWorker extends Instant {\n name: 'TracingSessionIdForWorker';\n args: Args&{\n data?: ArgsData & {\n url: string,\n workerId: WorkerId,\n workerThreadId: ThreadID,\n frame: string,\n },\n };\n}\nexport function isTracingSessionIdForWorker(event: Event): event is TracingSessionIdForWorker {\n return event.name === 'TracingSessionIdForWorker';\n}\n\nexport interface FrameCommittedInBrowser extends Instant {\n name: 'FrameCommittedInBrowser';\n args: Args&{\n data?: ArgsData & TraceFrame,\n };\n}\n\nexport interface MainFrameViewport extends Instant {\n name: 'PaintTimingVisualizer::Viewport';\n args: {\n data: ArgsData&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n viewport_rect: number[],\n /** Device Pixel Ratio. Added in m128 */\n dpr: number,\n },\n };\n}\n\nexport interface CommitLoad extends Instant {\n name: 'CommitLoad';\n args: Args&{\n data?: ArgsData & {\n frame: string,\n isMainFrame: boolean,\n name: string,\n nodeId: number,\n page: string,\n parent: string,\n url: string,\n },\n };\n}\n\nexport interface MarkDOMContent extends Instant {\n name: 'MarkDOMContent';\n args: Args&{\n data?: ArgsData & {\n frame: string,\n isMainFrame: boolean,\n isOutermostMainFrame?: boolean, page: string,\n },\n };\n}\n\nexport interface MarkLoad extends Instant {\n name: 'MarkLoad';\n args: Args&{\n data?: ArgsData & {\n frame: string,\n isMainFrame: boolean,\n page: string,\n isOutermostMainFrame?: boolean,\n },\n };\n}\n\nexport interface Async extends Event {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_INSTANT|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_STEP_INTO|\n Phase.ASYNC_BEGIN|Phase.ASYNC_END|Phase.ASYNC_STEP_PAST;\n}\n\nexport type TraceRect = [number, number, number, number];\nexport type TraceImpactedNode = {\n // These keys come from the trace data, so we have to use underscores.\n /* eslint-disable @typescript-eslint/naming-convention */\n new_rect: TraceRect,\n node_id: Protocol.DOM.BackendNodeId,\n old_rect: TraceRect,\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n\ntype LayoutShiftData = ArgsData&{\n // These keys come from the trace data, so we have to use underscores.\n /* eslint-disable @typescript-eslint/naming-convention */\n cumulative_score: number,\n frame_max_distance: number,\n had_recent_input: boolean,\n impacted_nodes: TraceImpactedNode[] | undefined,\n is_main_frame: boolean,\n overall_max_distance: number,\n region_rects: TraceRect[],\n /** @deprecated This value will incorrectly overreport for shifts within an iframe. */\n score: number,\n /** This is the preferred \"score\", used for CLS. If `is_main_frame` is true, `score` and `weighted_score_delta` will be equal. But if the shift is from an iframe, `weighted_score_delta` will be appropriately reduced to account for the viewport size of that iframe. https://wicg.github.io/layout-instability/#subframe-weighting-factor and b/275509162 */\n weighted_score_delta: number,\n navigationId?: string,\n /* eslint-enable @typescript-eslint/naming-convention */\n};\nexport interface LayoutShift extends Instant {\n name: 'LayoutShift';\n normalized?: boolean;\n args: Args&{\n frame: string,\n data?: LayoutShiftData,\n };\n}\n\ninterface LayoutShiftSessionWindowData {\n // The sum of the weighted score of all the shifts\n // that belong to a session window.\n cumulativeWindowScore: number;\n // A consecutive generated in the frontend to\n // to identify a session window.\n id: number;\n}\nexport interface LayoutShiftParsedData {\n /** screenshot taken before and after this shift. Before *should* always exist, but after might not at the end of a trace. */\n screenshots: {before: SyntheticScreenshot|null, after: SyntheticScreenshot|null};\n timeFromNavigation?: MicroSeconds;\n // The sum of the weighted scores of the shifts that\n // belong to a session window up until this shift\n // (inclusive).\n cumulativeWeightedScoreInWindow: number;\n sessionWindowData: LayoutShiftSessionWindowData;\n}\nexport interface SyntheticLayoutShift extends LayoutShift, SyntheticBased<Phase.INSTANT> {\n name: 'LayoutShift';\n rawSourceEvent: LayoutShift;\n args: Args&{\n frame: string,\n data?: LayoutShiftData&{\n rawEvent: LayoutShift,\n },\n };\n parsedData: LayoutShiftParsedData;\n}\n\nexport const NO_NAVIGATION = 'NO_NAVIGATION';\n\n/**\n * This maybe be a navigation id string from Chromium, or `NO_NAVIGATION`, which represents the\n * portion of the trace for which we don't have any navigation event for (as it happeneded prior\n * to the trace start).\n */\nexport type NavigationId = string|typeof NO_NAVIGATION;\n\n/**\n * This is a synthetic Layout shift cluster. Not based on a raw event as there's no concept\n * of this as a trace event.\n */\nexport interface SyntheticLayoutShiftCluster {\n name: 'SyntheticLayoutShiftCluster';\n clusterWindow: TraceWindowMicroSeconds;\n clusterCumulativeScore: number;\n events: SyntheticLayoutShift[];\n // For convenience we split apart the cluster into good, NI, and bad windows.\n // Since a cluster may remain in the good window, we mark NI and bad as being\n // possibly null.\n scoreWindows: {\n good: TraceWindowMicroSeconds,\n needsImprovement?: TraceWindowMicroSeconds,\n bad?: TraceWindowMicroSeconds,\n };\n // The last navigation that happened before this cluster.\n navigationId?: NavigationId;\n worstShiftEvent?: Event;\n // This is the start of the cluster: the start of the first layout shift of the cluster.\n ts: MicroSeconds;\n // The duration of the cluster. This should include up until the end of the last\n // layout shift in this cluster.\n dur: MicroSeconds;\n cat: '';\n ph: Phase.COMPLETE;\n pid: ProcessID;\n tid: ThreadID;\n}\n\nexport type FetchPriorityHint = 'low'|'high'|'auto';\nexport type RenderBlocking =\n 'blocking'|'non_blocking'|'in_body_parser_blocking'|'potentially_blocking'|'dynamically_injected_non_blocking';\n\nexport interface Initiator {\n type: Protocol.Network.InitiatorType;\n fetchType: string;\n columnNumber?: number;\n lineNumber?: number;\n url?: string;\n}\n\nexport interface ResourceSendRequest extends Instant {\n name: 'ResourceSendRequest';\n args: Args&{\n data: ArgsData & {\n frame: string,\n requestId: string,\n url: string,\n priority: Protocol.Network.ResourcePriority,\n /** Added Feb 2024. https://crrev.com/c/5277583 */\n resourceType?: Protocol.Network.ResourceType,\n /** Added Feb 2024. https://crrev.com/c/5297615 */\n fetchPriorityHint?: FetchPriorityHint,\n // TODO(crbug.com/1457985): change requestMethod to enum when confirm in the backend code.\n requestMethod?: string,\n renderBlocking?: RenderBlocking,\n initiator?: Initiator,\n isLinkPreload?: boolean,\n },\n };\n}\n\nexport interface ResourceChangePriority extends Instant {\n name: 'ResourceChangePriority';\n args: Args&{\n data: ArgsData & {\n requestId: string,\n priority: Protocol.Network.ResourcePriority,\n },\n };\n}\n\nexport interface ResourceWillSendRequest extends Instant {\n name: 'ResourceWillSendRequest';\n args: Args&{\n data: ArgsData & {\n requestId: string,\n },\n };\n}\n\nexport interface ResourceFinish extends Instant {\n name: 'ResourceFinish';\n args: Args&{\n data: ArgsData & {\n decodedBodyLength: number,\n didFail: boolean,\n encodedDataLength: number,\n finishTime: Seconds,\n requestId: string,\n },\n };\n}\n\nexport interface ResourceReceivedData extends Instant {\n name: 'ResourceReceivedData';\n args: Args&{\n data: ArgsData & {\n encodedDataLength: number,\n frame: string,\n requestId: string,\n },\n };\n}\n\ninterface ResourceReceiveResponseTimingData {\n connectEnd: MilliSeconds;\n connectStart: MilliSeconds;\n dnsEnd: MilliSeconds;\n dnsStart: MilliSeconds;\n proxyEnd: MilliSeconds;\n proxyStart: MilliSeconds;\n pushEnd: MilliSeconds;\n pushStart: MilliSeconds;\n receiveHeadersEnd: MilliSeconds;\n receiveHeadersStart: MilliSeconds;\n requestTime: Seconds;\n sendEnd: MilliSeconds;\n sendStart: MilliSeconds;\n sslEnd: MilliSeconds;\n sslStart: MilliSeconds;\n workerReady: MilliSeconds;\n workerStart: MilliSeconds;\n}\n\nexport interface ResourceReceiveResponse extends Instant {\n name: 'ResourceReceiveResponse';\n args: Args&{\n data: ArgsData & {\n /**\n * This is the protocol used to resolve the request.\n *\n * Note, this is not the same as URL.protocol.\n *\n * Example values (not exhaustive): http/0.9, http/1.0, http/1.1, http, h2, h3-Q050, data, blob\n */\n protocol: string,\n encodedDataLength: number,\n frame: string,\n fromCache: boolean,\n fromServiceWorker: boolean,\n mimeType: string,\n requestId: string,\n responseTime: MilliSeconds,\n statusCode: number,\n // Some cached events don't have this field\n timing?: ResourceReceiveResponseTimingData, connectionId: number, connectionReused: boolean,\n headers?: Array<{name: string, value: string}>,\n },\n };\n}\n\nexport interface ResourceMarkAsCached extends Instant {\n name: 'ResourceMarkAsCached';\n args: Args&{\n data: ArgsData & {\n requestId: string,\n },\n };\n}\n\nexport const enum LayoutInvalidationReason {\n SIZE_CHANGED = 'Size changed',\n ATTRIBUTE = 'Attribute',\n ADDED_TO_LAYOUT = 'Added to layout',\n SCROLLBAR_CHANGED = 'Scrollbar changed',\n REMOVED_FROM_LAYOUT = 'Removed from layout',\n STYLE_CHANGED = 'Style changed',\n FONTS_CHANGED = 'Fonts changed',\n UNKNOWN = 'Unknown',\n}\n\nexport interface LayoutInvalidationTracking extends Instant {\n name: Name.LAYOUT_INVALIDATION_TRACKING;\n args: Args&{\n data: ArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n reason: LayoutInvalidationReason,\n nodeName?: string,\n },\n };\n}\n\nexport interface ScheduleStyleInvalidationTracking extends Instant {\n name: Name.SCHEDULE_STYLE_INVALIDATION_TRACKING;\n args: Args&{\n data: ArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n invalidationSet?: string,\n invalidatedSelectorId?: string,\n reason?: LayoutInvalidationReason,\n changedClass?: string,\n changedAttribute?: string,\n changedId?: string,\n nodeName?: string,\n stackTrace?: CallFrame[],\n },\n };\n}\nexport function isScheduleStyleInvalidationTracking(event: Event): event is ScheduleStyleInvalidationTracking {\n return event.name === Name.SCHEDULE_STYLE_INVALIDATION_TRACKING;\n}\n\nexport const enum StyleRecalcInvalidationReason {\n ANIMATION = 'Animation',\n}\n\nexport interface StyleRecalcInvalidationTracking extends Instant {\n name: Name.STYLE_RECALC_INVALIDATION_TRACKING;\n args: Args&{\n data: ArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n reason: StyleRecalcInvalidationReason,\n subtree: boolean,\n nodeName?: string,\n extraData?: string,\n },\n };\n}\n\nexport function isStyleRecalcInvalidationTracking(event: Event): event is StyleRecalcInvalidationTracking {\n return event.name === Name.STYLE_RECALC_INVALIDATION_TRACKING;\n}\nexport interface StyleInvalidatorInvalidationTracking extends Instant {\n name: Name.STYLE_INVALIDATOR_INVALIDATION_TRACKING;\n args: Args&{\n data: ArgsData & {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n reason: string,\n invalidationList: Array<{classes?: string[], id: string}>,\n subtree: boolean,\n nodeName?: string,\n extraData?: string,\n },\n };\n}\nexport function isStyleInvalidatorInvalidationTracking(event: Event): event is StyleInvalidatorInvalidationTracking {\n return event.name === Name.STYLE_INVALIDATOR_INVALIDATION_TRACKING;\n}\n\nexport interface BeginCommitCompositorFrame extends Instant {\n name: Name.BEGIN_COMMIT_COMPOSITOR_FRAME;\n args: Args&{\n frame: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n is_mobile_optimized: boolean,\n };\n}\nexport function isBeginCommitCompositorFrame(event: Event): event is BeginCommitCompositorFrame {\n return event.name === Name.BEGIN_COMMIT_COMPOSITOR_FRAME;\n}\n\nexport interface ParseMetaViewport extends Instant {\n name: Name.PARSE_META_VIEWPORT;\n args: Args&{\n data: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n node_id: Protocol.DOM.BackendNodeId,\n content: string,\n frame?: string,\n },\n };\n}\nexport function isParseMetaViewport(event: Event): event is ParseMetaViewport {\n return event.name === Name.PARSE_META_VIEWPORT;\n}\n\nexport interface ScheduleStyleRecalculation extends Instant {\n name: Name.SCHEDULE_STYLE_RECALCULATION;\n args: Args&{\n data: {\n frame: string,\n },\n };\n}\nexport function isScheduleStyleRecalculation(event: Event): event is ScheduleStyleRecalculation {\n return event.name === Name.SCHEDULE_STYLE_RECALCULATION;\n}\n\nexport interface RenderFrameImplCreateChildFrame extends Event {\n name: Name.RENDER_FRAME_IMPL_CREATE_CHILD_FRAME;\n /* eslint-disable @typescript-eslint/naming-convention */\n args: Args&{\n child_frame_token: string,\n frame_token: string,\n };\n}\nexport function isRenderFrameImplCreateChildFrame(event: Event): event is RenderFrameImplCreateChildFrame {\n return event.name === Name.RENDER_FRAME_IMPL_CREATE_CHILD_FRAME;\n}\n\nexport interface PrePaint extends Complete {\n name: 'PrePaint';\n}\n\nexport interface PairableAsync extends Event {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_NESTABLE_INSTANT;\n // The id2 field gives flexibility to explicitly specify if an event\n // id is global among processes or process local. However not all\n // events use it, so both kind of ids need to be marked as optional.\n id2?: {local?: string, global?: string};\n id?: string;\n}\nexport interface PairableAsyncBegin extends PairableAsync {\n ph: Phase.ASYNC_NESTABLE_START;\n}\n\nexport interface PairableAsyncInstant extends PairableAsync {\n ph: Phase.ASYNC_NESTABLE_INSTANT;\n}\n\nexport interface PairableAsyncEnd extends PairableAsync {\n ph: Phase.ASYNC_NESTABLE_END;\n}\n\nexport interface UserTiming extends Event {\n id2?: {local?: string, global?: string};\n id?: string;\n cat: 'blink.user_timing';\n // Note that the timestamp for user timing trace events is set to the\n // start time passed by the user at the call site of the timing (based\n // on the UserTiming spec).\n // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/timing/performance_user_timing.cc;l=236;drc=494419358caf690316f160a1f27d9e771a14c033\n}\n\nexport interface DomLoading extends UserTiming {\n name: Name.DOM_LOADING;\n args: Args&{\n frame?: string,\n };\n}\n\nexport interface BeginRemoteFontLoad extends UserTiming {\n name: Name.BEGIN_REMOTE_FONT_LOAD;\n args: Args&{\n display: string,\n id: number,\n };\n}\n\nexport type PairableUserTiming = UserTiming&PairableAsync;\n\nexport interface PerformanceMeasureBegin extends PairableUserTiming {\n args: Args&{\n detail?: string,\n stackTrace?: CallFrame[],\n };\n ph: Phase.ASYNC_NESTABLE_START;\n}\n\nexport type PerformanceMeasureEnd = PairableUserTiming&PairableAsyncEnd;\nexport type PerformanceMeasure = PerformanceMeasureBegin|PerformanceMeasureEnd;\n\nexport interface PerformanceMark extends UserTiming {\n args: Args&{\n data?: ArgsData & {\n detail?: string,\n stackTrace?: CallFrame[],\n },\n };\n ph: Phase.INSTANT|Phase.MARK|Phase.ASYNC_NESTABLE_INSTANT;\n}\n\nexport interface ConsoleTimeBegin extends PairableAsyncBegin {\n cat: 'blink.console';\n}\n\nexport interface ConsoleTimeEnd extends PairableAsyncEnd {\n cat: 'blink.console';\n}\n\nexport type ConsoleTime = ConsoleTimeBegin|ConsoleTimeEnd;\n\nexport interface TimeStamp extends Event {\n cat: 'devtools.timeline';\n name: 'TimeStamp';\n ph: Phase.INSTANT;\n id: string;\n args: Args&{\n data: ArgsData & {\n frame: string,\n message: string,\n },\n };\n}\n\n/** ChromeFrameReporter args for PipelineReporter event.\n Matching proto: https://source.chromium.org/chromium/chromium/src/+/main:third_party/perfetto/protos/perfetto/trace/track_event/chrome_frame_reporter.proto\n */\n/* eslint-disable @typescript-eslint/naming-convention */\ninterface ChromeFrameReporter {\n state: State;\n enum: FrameDropReason;\n /** The reason is set only if |state| is not |STATE_UPDATED_ALL|. */\n reason: FrameDropReason;\n frame_source: number;\n /** Identifies a BeginFrameArgs (along with the source_id).\n See comments in components/viz/common/frame_sinks/begin_frame_args.h. */\n frame_sequence: number;\n /** If this is a droped frame (i.e. if |state| is set to |STATE_DROPPED| or\n |STATE_PRESENTED_PARTIAL|), then indicates whether this frame impacts smoothness. */\n affects_smoothness: boolean;\n /** The type of active scroll. */\n scroll_state: ScrollState;\n /** If any main thread animation is active during this frame. */\n has_main_animation: boolean;\n /** If any compositor thread animation is active during this frame. */\n has_compositor_animation: boolean;\n /** If any touch-driven UX (not scroll) is active during this frame. */\n has_smooth_input_main: boolean;\n /** Whether the frame contained any missing content (i.e. whether there was\n checkerboarding in the frame). */\n has_missing_content: boolean;\n /** The id of layer_tree_host that the frame has been produced for. */\n layer_tree_host_id: number;\n /** If total latency of PipelineReporter exceeds a certain limit. */\n has_high_latency: boolean;\n /** Indicate if the frame is \"FORKED\" (i.e. a PipelineReporter event starts at\n the same frame sequence as another PipelineReporter) or \"BACKFILL\"\n (i.e. dropped frames when there are no partial compositor updates). */\n frame_type: FrameType;\n /** The breakdown stage of PipelineReporter that is most likely accountable for\n high latency. */\n high_latency_contribution_stage: string[];\n}\nconst enum State {\n /** The frame did not have any updates to present. **/\n STATE_NO_UPDATE_DESIRED = 'STATE_NO_UPDATE_DESIRED',\n /** The frame presented all the desired updates (i.e. any updates requested\n from both the compositor thread and main-threads were handled). **/\n STATE_PRESENTED_ALL = 'STATE_PRESENTED_ALL',\n /** The frame was presented with some updates, but also missed some updates\n (e.g. missed updates from the main-thread, but included updates from the\n compositor thread). **/\n STATE_PRESENTED_PARTIAL = 'STATE_PRESENTED_PARTIAL',\n /** The frame was dropped, i.e. some updates were desired for the frame, but\n was not presented. **/\n STATE_DROPPED = 'STATE_DROPPED',\n}\n\nconst enum FrameDropReason {\n REASON_UNSPECIFIED = 'REASON_UNSPECIFIED',\n /** Frame was dropped by the display-compositor.\n The display-compositor may drop a frame some times (e.g. the frame missed\n the deadline, or was blocked on surface-sync, etc.) **/\n REASON_DISPLAY_COMPOSITOR = 'REASON_DISPLAY_COMPOSITOR',\n /** Frame was dropped because of the main-thread.\n The main-thread may cause a frame to be dropped, e.g. if the main-thread\n is running expensive javascript, or doing a lot of layout updates, etc. **/\n REASON_MAIN_THREAD = 'REASON_MAIN_THREAD',\n /** Frame was dropped by the client compositor.\n The client compositor can drop some frames too (e.g. attempting to\n recover latency, missing the deadline, etc.). **/\n REASON_CLIENT_COMPOSITOR = 'REASON_CLIENT_COMPOSITOR',\n}\n\nconst enum ScrollState {\n SCROLL_NONE = 'SCROLL_NONE',\n SCROLL_MAIN_THREAD = 'SCROLL_MAIN_THREAD',\n SCROLL_COMPOSITOR_THREAD = 'SCROLL_COMPOSITOR_THREAD',\n\n /** Used when it can't be determined whether a scroll is in progress or not. */\n SCROLL_UNKNOWN = 'SCROLL_UNKNOWN',\n}\nconst enum FrameType {\n FORKED = 'FORKED',\n BACKFILL = 'BACKFILL',\n}\n\nexport interface PipelineReporter extends Event {\n id2?: {\n local?: string,\n };\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_END;\n args: Args&{\n chrome_frame_reporter: ChromeFrameReporter,\n };\n}\n\nexport function isPipelineReporter(event: Event): event is PipelineReporter {\n return event.name === Name.PIPELINE_REPORTER;\n}\n\n// A type used for synthetic events created based on a raw trace event.\n// A branded type is used to ensure not all events can be typed as\n// SyntheticBased and prevent places different to the\n// SyntheticEventsManager from creating synthetic events. This is\n// because synthetic events need to be registered in order to resolve\n// serialized event keys into event objects, so we ensure events are\n// registered at the time they are created by the SyntheticEventsManager.\nexport interface SyntheticBased<Ph extends Phase = Phase> extends Event {\n ph: Ph;\n rawSourceEvent: Event;\n _tag: 'SyntheticEntryTag';\n}\n\nexport function isSyntheticBased(event: Event): event is SyntheticBased {\n return 'rawSourceEvent' in event;\n}\n\n// Nestable async events with a duration are made up of two distinct\n// events: the begin, and the end. We need both of them to be able to\n// display the right information, so we create these synthetic events.\nexport interface SyntheticEventPair<T extends PairableAsync = PairableAsync> extends SyntheticBased {\n rawSourceEvent: Event;\n name: T['name'];\n cat: T['cat'];\n id?: string;\n id2?: {local?: string, global?: string};\n\n dur: MicroSeconds;\n args: Args&{\n data: {\n beginEvent: T & PairableAsyncBegin,\n endEvent: T&PairableAsyncEnd,\n instantEvents?: Array<T&PairableAsyncInstant>,\n },\n };\n}\n\nexport type SyntheticPipelineReporterPair = SyntheticEventPair<PipelineReporter>;\n\nexport type SyntheticUserTimingPair = SyntheticEventPair<PerformanceMeasure>;\n\nexport type SyntheticConsoleTimingPair = SyntheticEventPair<ConsoleTime>;\n\nexport type SyntheticAnimationPair = SyntheticEventPair<Animation>;\n\nexport interface SyntheticInteractionPair extends SyntheticEventPair<EventTiming> {\n // InteractionID and type are available within the beginEvent's data, but we\n // put them on the top level for ease of access.\n interactionId: number;\n type: string;\n // This is equivalent to startEvent.ts;\n ts: MicroSeconds;\n // This duration can be calculated via endEvent.ts - startEvent.ts, but we do\n // that and put it here to make it easier. This also makes these events\n // consistent with real events that have a dur field.\n dur: MicroSeconds;\n // These values are provided in the startEvent's args.data field as\n // millisecond values, but during the handler phase we parse these into\n // microseconds and put them on the top level for easy access.\n processingStart: MicroSeconds;\n processingEnd: MicroSeconds;\n // These 3 values represent the breakdown of the parts of an interaction:\n // 1. inputDelay: time from the user clicking to the input being handled\n inputDelay: MicroSeconds;\n // 2. mainThreadHandling: time spent processing the event handler\n mainThreadHandling: MicroSeconds;\n // 3. presentationDelay: delay between the event being processed and the frame being rendered\n presentationDelay: MicroSeconds;\n}\n\n/**\n * A profile call created in the frontend from samples disguised as a\n * trace event.\n *\n * We store the sampleIndex, profileId and nodeId so that we can easily link\n * back a Synthetic Trace Entry to an indivdual Sample trace event within a\n * Profile.\n *\n * Because a sample contains a set of call frames representing the stack at the\n * point in time that the sample was created, we also have to store the ID of\n * the Node that points to the function call that this profile call represents.\n */\nexport interface SyntheticProfileCall extends Event {\n callFrame: Protocol.Runtime.CallFrame;\n nodeId: Protocol.integer;\n sampleIndex: number;\n profileId: ProfileID;\n}\n\n/**\n * A synthetic event created from the Server-Timing header of network\n * request. In order to create these synthetic events, the corresponding\n * metric (timing) in the header must contain a \"start\" param, which\n * corresponds to the timestamp of the metric in the server. The\n * ServerTimingsHandler implements a heuristic to estimate the offset\n * between the client clock and the server clock so that the server\n * timestamp can be translated to the tracing clock.\n */\nexport interface SyntheticServerTiming<T extends Phase = Phase.COMPLETE> extends SyntheticBased<T> {\n rawSourceEvent: ResourceSendRequest;\n cat: 'devtools.server-timing';\n args: Args&{\n data: ArgsData & {\n desc?: string, origin: string,\n },\n };\n}\n\n/**\n * A JS Sample reflects a single sample from the V8 CPU Profile\n */\nexport interface SyntheticJSSample extends Event {\n name: Name.JS_SAMPLE;\n args: Args&{\n data: ArgsData & {\n stackTrace: Protocol.Runtime.CallFrame[],\n },\n };\n ph: Phase.INSTANT;\n}\n\nexport function isSyntheticInteraction(event: Event): event is SyntheticInteractionPair {\n return Boolean(\n 'interactionId' in event && event.args?.data && 'beginEvent' in event.args.data && 'endEvent' in event.args.data);\n}\n\n// Events relating to frames.\n\nexport interface DrawFrame extends Instant {\n name: Name.DRAW_FRAME;\n args: Args&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\n\nexport function isDrawFrame(event: Event): event is DrawFrame {\n // The extra check for INSTANT here is because in the past DrawFrame events had an ASYNC_NESTABLE_START and ASYNC_NESTABLE_END pair. We don't want to support those old events, so we have to check we are dealing with an instant event.\n return event.name === Name.DRAW_FRAME && event.ph === Phase.INSTANT;\n}\nexport interface LegacyDrawFrameBegin extends Async {\n name: Name.DRAW_FRAME;\n ph: Phase.ASYNC_NESTABLE_START;\n args: Args&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\nexport function isLegacyTraceEventDrawFrameBegin(event: Event): event is LegacyDrawFrameBegin {\n return event.name === Name.DRAW_FRAME && event.ph === Phase.ASYNC_NESTABLE_START;\n}\n\nexport interface BeginFrame extends Instant {\n name: Name.BEGIN_FRAME;\n args: Args&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\nexport function isBeginFrame(event: Event): event is BeginFrame {\n // Old traces did not have frameSeqId; but we do not want to support these.\n return Boolean(event.name === Name.BEGIN_FRAME && event.args && 'frameSeqId' in event.args);\n}\n\nexport interface DroppedFrame extends Instant {\n name: Name.DROPPED_FRAME;\n args: Args&{\n layerTreeId: number,\n frameSeqId: number,\n hasPartialUpdate?: boolean,\n };\n}\nexport function isDroppedFrame(event: Event): event is DroppedFrame {\n // Old traces did not have frameSeqId; but we do not want to support these.\n return Boolean(event.name === Name.DROPPED_FRAME && event.args && 'frameSeqId' in event.args);\n}\n\nexport interface RequestMainThreadFrame extends Instant {\n name: Name.REQUEST_MAIN_THREAD_FRAME;\n args: Args&{\n layerTreeId: number,\n };\n}\nexport function isRequestMainThreadFrame(event: Event): event is RequestMainThreadFrame {\n return event.name === Name.REQUEST_MAIN_THREAD_FRAME;\n}\n\nexport interface BeginMainThreadFrame extends Instant {\n name: Name.BEGIN_MAIN_THREAD_FRAME;\n args: Args&{\n layerTreeId: number,\n data: ArgsData&{\n frameId?: number,\n },\n };\n}\nexport function isBeginMainThreadFrame(event: Event): event is BeginMainThreadFrame {\n return event.name === Name.BEGIN_MAIN_THREAD_FRAME;\n}\n\nexport interface NeedsBeginFrameChanged extends Instant {\n name: Name.NEEDS_BEGIN_FRAME_CHANGED;\n args: Args&{\n layerTreeId: number,\n data: ArgsData&{\n needsBeginFrame: number,\n },\n };\n}\nexport function isNeedsBeginFrameChanged(event: Event): event is NeedsBeginFrameChanged {\n return event.name === Name.NEEDS_BEGIN_FRAME_CHANGED;\n}\n\nexport interface Commit extends Instant {\n name: Name.COMMIT;\n args: Args&{\n layerTreeId: number,\n frameSeqId: number,\n };\n}\nexport function isCommit(event: Event): event is Commit {\n // Old traces did not have frameSeqId; but we do not want to support these.\n return Boolean(event.name === Name.COMMIT && event.args && 'frameSeqId' in event.args);\n}\n\nexport interface RasterTask extends Complete {\n name: Name.RASTER_TASK;\n args: Args&{\n tileData?: {\n layerId: number,\n sourceFrameNumber: number,\n tileId: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n id_ref: string,\n },\n tileResolution: string,\n },\n };\n}\nexport function isRasterTask(event: Event): event is RasterTask {\n return event.name === Name.RASTER_TASK;\n}\n\n// CompositeLayers has been replaced by \"Commit\", but we support both to not break old traces being imported.\nexport interface CompositeLayers extends Instant {\n name: Name.COMPOSITE_LAYERS;\n args: Args&{\n layerTreeId: number,\n };\n}\nexport function isCompositeLayers(event: Event): event is CompositeLayers {\n return event.name === Name.COMPOSITE_LAYERS;\n}\n\nexport interface ActivateLayerTree extends Instant {\n name: Name.ACTIVATE_LAYER_TREE;\n args: Args&{\n layerTreeId: number,\n frameId: number,\n };\n}\nexport function isActivateLayerTree(event: Event): event is ActivateLayerTree {\n return event.name === Name.ACTIVATE_LAYER_TREE;\n}\n\nexport type InvalidationTrackingEvent = ScheduleStyleInvalidationTracking|StyleRecalcInvalidationTracking|\n StyleInvalidatorInvalidationTracking|LayoutInvalidationTracking;\n\nexport function isInvalidationTracking(event: Event): event is InvalidationTrackingEvent {\n return isScheduleStyleInvalidationTracking(event) || isStyleRecalcInvalidationTracking(event) ||\n isStyleInvalidatorInvalidationTracking(event) || isLayoutInvalidationTracking(event);\n}\n\nexport interface DrawLazyPixelRef extends Instant {\n name: Name.DRAW_LAZY_PIXEL_REF;\n args?: Args&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LazyPixelRef: number,\n };\n}\nexport function isDrawLazyPixelRef(event: Event): event is DrawLazyPixelRef {\n return event.name === Name.DRAW_LAZY_PIXEL_REF;\n}\n\nexport interface DecodeLazyPixelRef extends Instant {\n name: Name.DECODE_LAZY_PIXEL_REF;\n args?: Args&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LazyPixelRef: number,\n };\n}\nexport function isDecodeLazyPixelRef(event: Event): event is DecodeLazyPixelRef {\n return event.name === Name.DECODE_LAZY_PIXEL_REF;\n}\n\nexport interface DecodeImage extends Complete {\n name: Name.DECODE_IMAGE;\n args: Args&{\n imageType: string,\n };\n}\nexport function isDecodeImage(event: Event): event is DecodeImage {\n return event.name === Name.DECODE_IMAGE;\n}\n\nexport interface SelectorTiming {\n 'elapsed (us)': number;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fast_reject_count': number;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'match_attempts': number;\n 'selector': string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'style_sheet_id': string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'match_count': number;\n}\n\nexport enum SelectorTimingsKey {\n Elapsed = 'elapsed (us)',\n RejectPercentage = 'reject_percentage',\n FastRejectCount = 'fast_reject_count',\n MatchAttempts = 'match_attempts',\n MatchCount = 'match_count',\n Selector = 'selector',\n StyleSheetId = 'style_sheet_id',\n}\n\nexport interface SelectorStats {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n selector_timings: SelectorTiming[];\n}\n\nexport interface SelectorStats extends Complete {\n name: Name.SELECTOR_STATS;\n args: Args&{\n // eslint-disable-next-line @typescript-eslint/naming-convention\n selector_stats?: SelectorStats,\n };\n}\n\nexport function isSelectorStats(event: Event): event is SelectorStats {\n return event.name === Name.SELECTOR_STATS;\n}\n\nexport interface UpdateLayoutTree extends Complete {\n name: Name.UPDATE_LAYOUT_TREE;\n args: Args&{\n elementCount: number,\n beginData?: {\n frame: string,\n stackTrace?: CallFrame[],\n },\n };\n}\nexport function isUpdateLayoutTree(event: Event): event is UpdateLayoutTree {\n return event.name === Name.UPDATE_LAYOUT_TREE;\n}\n\nexport interface Layout extends Complete {\n name: Name.LAYOUT;\n args: Args&{\n beginData: {\n frame: string,\n dirtyObjects: number,\n partialLayout: boolean,\n totalObjects: number,\n },\n // endData is not reliably populated.\n // Why? TBD. https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/local_frame_view.cc;l=847-851;drc=8b6aaad8027390ce6b32d82d57328e93f34bb8e5\n endData?: {\n layoutRoots: Array<{\n depth: number,\n nodeId: Protocol.DOM.BackendNodeId,\n quads: number[][],\n }>,\n },\n };\n}\nexport function isLayout(event: Event): event is Layout {\n return event.name === Name.LAYOUT;\n}\nexport interface InvalidateLayout extends Instant {\n name: Name.INVALIDATE_LAYOUT;\n args: Args&{\n data: {\n frame: string,\n nodeId: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport function isInvalidateLayout(event: Event): event is InvalidateLayout {\n return event.name === Name.INVALIDATE_LAYOUT;\n}\n\nclass ProfileIdTag {\n readonly #profileIdTag: (symbol|undefined);\n}\nexport type ProfileID = string&ProfileIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function ProfileID(value: string): ProfileID {\n return value as ProfileID;\n}\n\nclass CallFrameIdTag {\n readonly #callFrameIdTag: (symbol|undefined);\n}\nexport type CallFrameID = number&CallFrameIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function CallFrameID(value: number): CallFrameID {\n return value as CallFrameID;\n}\n\nclass SampleIndexTag {\n readonly #sampleIndexTag: (symbol|undefined);\n}\nexport type SampleIndex = number&SampleIndexTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SampleIndex(value: number): SampleIndex {\n return value as SampleIndex;\n}\n\nclass ProcessIdTag {\n readonly #processIdTag: (symbol|undefined);\n}\nexport type ProcessID = number&ProcessIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function ProcessID(value: number): ProcessID {\n return value as ProcessID;\n}\n\nclass ThreadIdTag {\n readonly #threadIdTag: (symbol|undefined);\n}\nexport type ThreadID = number&ThreadIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function ThreadID(value: number): ThreadID {\n return value as ThreadID;\n}\n\nclass WorkerIdTag {\n readonly #workerIdTag: (symbol|undefined);\n}\nexport type WorkerId = string&WorkerIdTag;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function WorkerId(value: string): WorkerId {\n return value as WorkerId;\n}\n\nexport function isComplete(event: Event): event is Complete {\n return event.ph === Phase.COMPLETE;\n}\n\nexport function isBegin(event: Event): event is Begin {\n return event.ph === Phase.BEGIN;\n}\n\nexport function isEnd(event: Event): event is End {\n return event.ph === Phase.END;\n}\n\nexport function isDispatch(event: Event): event is Dispatch {\n return event.name === 'EventDispatch';\n}\n\nexport function isInstant(event: Event): event is Instant {\n return event.ph === Phase.INSTANT;\n}\n\nexport function isRendererEvent(event: Event): event is RendererEvent {\n return isInstant(event) || isComplete(event);\n}\n\nexport function isFireIdleCallback(event: Event): event is FireIdleCallback {\n return event.name === 'FireIdleCallback';\n}\n\nexport function isSchedulePostMessage(event: Event): event is SchedulePostMessage {\n return event.name === Name.SCHEDULE_POST_MESSAGE;\n}\n\nexport function isHandlePostMessage(event: Event): event is HandlePostMessage {\n return event.name === Name.HANDLE_POST_MESSAGE;\n}\n\nexport function isUpdateCounters(event: Event): event is UpdateCounters {\n return event.name === 'UpdateCounters';\n}\n\nexport function isThreadName(\n event: Event,\n ): event is ThreadName {\n return event.name === Name.THREAD_NAME;\n}\n\nexport function isProcessName(\n event: Event,\n ): event is ProcessName {\n return event.name === 'process_name';\n}\n\nexport function isTracingStartedInBrowser(\n event: Event,\n ): event is TracingStartedInBrowser {\n return event.name === Name.TRACING_STARTED_IN_BROWSER;\n}\n\nexport function isFrameCommittedInBrowser(\n event: Event,\n ): event is FrameCommittedInBrowser {\n return event.name === 'FrameCommittedInBrowser';\n}\n\nexport function isCommitLoad(\n event: Event,\n ): event is CommitLoad {\n return event.name === 'CommitLoad';\n}\n\nexport function isNavigationStart(\n event: Event,\n ): event is NavigationStart {\n return event.name === 'navigationStart';\n}\n\nexport function isAnimation(\n event: Event,\n ): event is Animation {\n // We've found some rare traces with an Animtation trace event from a different category: https://crbug.com/1472375#comment7\n return event.name === 'Animation' && event.cat.includes('devtools.timeline');\n}\n\nexport function isSyntheticAnimation(event: Event): event is SyntheticAnimationPair {\n if (event.name !== 'Animation' || !event.cat.includes('devtools.timeline')) {\n return false;\n }\n const data = event.args?.data;\n if (!data) {\n return false;\n }\n return 'beginEvent' in data && 'endEvent' in data;\n}\n\nexport function isLayoutShift(\n event: Event,\n ): event is LayoutShift {\n return event.name === 'LayoutShift';\n}\n\nexport function isLayoutInvalidationTracking(\n event: Event,\n ): event is LayoutInvalidationTracking {\n return event.name === Name.LAYOUT_INVALIDATION_TRACKING;\n}\n\nexport function isFirstContentfulPaint(event: Event): event is FirstContentfulPaint {\n return event.name === 'firstContentfulPaint';\n}\n\nexport function isLargestContentfulPaintCandidate(event: Event): event is LargestContentfulPaintCandidate {\n return event.name === Name.MARK_LCP_CANDIDATE;\n}\nexport function isLargestImagePaintCandidate(event: Event): event is LargestImagePaintCandidate {\n return event.name === 'LargestImagePaint::Candidate';\n}\nexport function isLargestTextPaintCandidate(event: Event): event is LargestTextPaintCandidate {\n return event.name === 'LargestTextPaint::Candidate';\n}\n\nexport function isMarkLoad(event: Event): event is MarkLoad {\n return event.name === 'MarkLoad';\n}\n\nexport function isFirstPaint(event: Event): event is FirstPaint {\n return event.name === 'firstPaint';\n}\n\nexport function isMarkDOMContent(event: Event): event is MarkDOMContent {\n return event.name === 'MarkDOMContent';\n}\n\nexport function isInteractiveTime(event: Event): event is InteractiveTime {\n return event.name === 'InteractiveTime';\n}\n\nexport function isEventTiming(event: Event): event is EventTiming {\n return event.name === Name.EVENT_TIMING;\n}\n\nexport function isEventTimingEnd(event: Event): event is EventTimingEnd {\n return isEventTiming(event) && event.ph === Phase.ASYNC_NESTABLE_END;\n}\nexport function isEventTimingStart(event: Event): event is EventTimingBegin {\n return isEventTiming(event) && event.ph === Phase.ASYNC_NESTABLE_START;\n}\n\nexport function isGPUTask(event: Event): event is GPUTask {\n return event.name === 'GPUTask';\n}\n\nexport function isProfile(event: Event): event is Profile {\n return event.name === 'Profile';\n}\n\nexport function isSyntheticCpuProfile(event: Event): event is SyntheticCpuProfile {\n return event.name === 'CpuProfile';\n}\n\nexport function isProfileChunk(event: Event): event is ProfileChunk {\n return event.name === 'ProfileChunk';\n}\n\nexport function isResourceChangePriority(\n event: Event,\n ): event is ResourceChangePriority {\n return event.name === 'ResourceChangePriority';\n}\n\nexport function isResourceSendRequest(\n event: Event,\n ): event is ResourceSendRequest {\n return event.name === 'ResourceSendRequest';\n}\n\nexport function isResourceReceiveResponse(\n event: Event,\n ): event is ResourceReceiveResponse {\n return event.name === 'ResourceReceiveResponse';\n}\n\nexport function isResourceMarkAsCached(\n event: Event,\n ): event is ResourceMarkAsCached {\n return event.name === 'ResourceMarkAsCached';\n}\n\nexport function isResourceFinish(\n event: Event,\n ): event is ResourceFinish {\n return event.name === 'ResourceFinish';\n}\n\nexport function isResourceWillSendRequest(\n event: Event,\n ): event is ResourceWillSendRequest {\n return event.name === 'ResourceWillSendRequest';\n}\n\nexport function isResourceReceivedData(\n event: Event,\n ): event is ResourceReceivedData {\n return event.name === 'ResourceReceivedData';\n}\n\nexport function isSyntheticNetworkRequest(\n event: Event,\n ): event is SyntheticNetworkRequest {\n return event.name === 'SyntheticNetworkRequest';\n}\n\nexport function isSyntheticWebSocketConnection(\n event: Event,\n ): event is SyntheticWebSocketConnection {\n return event.name === 'SyntheticWebSocketConnection';\n}\n\nexport function isNetworkTrackEntry(event: Event): event is SyntheticWebSocketConnection|SyntheticNetworkRequest {\n return isSyntheticNetworkRequest(event) || isSyntheticWebSocketConnection(event) || isWebSocketTraceEvent(event);\n}\n\nexport function isPrePaint(\n event: Event,\n ): event is PrePaint {\n return event.name === 'PrePaint';\n}\n\nexport function isNavigationStartWithURL(event: Event): event is NavigationStart {\n return Boolean(isNavigationStart(event) && event.args.data && event.args.data.documentLoaderURL !== '');\n}\n\nexport function isMainFrameViewport(\n event: Event,\n ): event is MainFrameViewport {\n return event.name === 'PaintTimingVisualizer::Viewport';\n}\n\nexport function isSyntheticUserTiming(event: Event): event is SyntheticUserTimingPair {\n if (event.cat !== 'blink.user_timing') {\n return false;\n }\n const data = event.args?.data;\n if (!data) {\n return false;\n }\n return 'beginEvent' in data && 'endEvent' in data;\n}\n\nexport function isSyntheticConsoleTiming(event: Event): event is SyntheticConsoleTimingPair {\n if (event.cat !== 'blink.console') {\n return false;\n }\n const data = event.args?.data;\n if (!data) {\n return false;\n }\n return 'beginEvent' in data && 'endEvent' in data;\n}\n\nexport function isUserTiming(event: Event): event is UserTiming {\n return event.cat === 'blink.user_timing';\n}\n\nexport function isDomLoading(event: Event): event is DomLoading {\n return event.name === Name.DOM_LOADING;\n}\n\nexport function isBeginRemoteFontLoad(event: Event): event is BeginRemoteFontLoad {\n return event.name === Name.BEGIN_REMOTE_FONT_LOAD;\n}\n\nexport function isPerformanceMeasure(event: Event): event is PerformanceMeasure {\n return isUserTiming(event) && isPhaseAsync(event.ph);\n}\n\nexport function isPerformanceMark(event: Event): event is PerformanceMark {\n return isUserTiming(event) && (event.ph === Phase.MARK || event.ph === Phase.INSTANT);\n}\n\nexport function isConsoleTime(event: Event): event is ConsoleTime {\n return event.cat === 'blink.console' && isPhaseAsync(event.ph);\n}\n\nexport function isTimeStamp(event: Event): event is TimeStamp {\n return event.ph === Phase.INSTANT && event.name === 'TimeStamp';\n}\n\nexport function isParseHTML(event: Event): event is ParseHTML {\n return event.name === 'ParseHTML';\n}\n\nexport interface Async extends Event {\n ph: Phase.ASYNC_NESTABLE_START|Phase.ASYNC_NESTABLE_INSTANT|Phase.ASYNC_NESTABLE_END|Phase.ASYNC_STEP_INTO|\n Phase.ASYNC_BEGIN|Phase.ASYNC_END|Phase.ASYNC_STEP_PAST;\n}\n\nexport function isSyntheticLayoutShift(event: Event): event is SyntheticLayoutShift {\n if (!isLayoutShift(event) || !event.args.data) {\n return false;\n }\n return 'rawEvent' in event.args.data;\n}\n\nexport function isSyntheticLayoutShiftCluster(event: Event): event is SyntheticLayoutShiftCluster {\n return event.name === Name.SYNTHETIC_LAYOUT_SHIFT_CLUSTER;\n}\n\nexport function isProfileCall(event: Event): event is SyntheticProfileCall {\n return 'callFrame' in event;\n}\n\nexport interface Paint extends Complete {\n name: Name.PAINT;\n args: Args&{\n data: ArgsData & {\n clip: number[],\n frame: string,\n layerId: number,\n // With CompositeAfterPaint enabled, paint events are no longer\n // associated with a Node, and nodeId will not be present.\n nodeId?: Protocol.DOM.BackendNodeId,\n },\n };\n}\n\nexport function isPaint(event: Event): event is Paint {\n return event.name === Name.PAINT;\n}\n\nexport interface PaintImage extends Complete {\n name: Name.PAINT_IMAGE;\n args: Args&{\n data: Event & {\n height: number,\n width: number,\n x: number,\n y: number,\n url?: string, srcHeight: number, srcWidth: number,\n nodeId?: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport function isPaintImage(event: Event): event is PaintImage {\n return event.name === Name.PAINT_IMAGE;\n}\n\nexport interface ScrollLayer extends Complete {\n name: Name.SCROLL_LAYER;\n args: Args&{\n data: Event & {\n frame: string,\n nodeId?: Protocol.DOM.BackendNodeId,\n },\n };\n}\nexport function isScrollLayer(event: Event): event is ScrollLayer {\n return event.name === Name.SCROLL_LAYER;\n}\n\nexport interface SetLayerTreeId extends Instant {\n name: Name.SET_LAYER_TREE_ID;\n args: Args&{\n data: ArgsData & {\n frame: string,\n layerTreeId: number,\n },\n };\n}\nexport function isSetLayerId(event: Event): event is SetLayerTreeId {\n return event.name === Name.SET_LAYER_TREE_ID;\n}\nexport interface UpdateLayer extends Complete {\n name: Name.UPDATE_LAYER;\n args: Args&{\n layerId: number,\n layerTreeId: number,\n };\n}\nexport function isUpdateLayer(event: Event): event is UpdateLayer {\n return event.name === Name.UPDATE_LAYER;\n}\n\nexport interface DisplayItemListSnapshot extends Event {\n name: Name.DISPLAY_ITEM_LIST_SNAPSHOT;\n ph: Phase.OBJECT_SNAPSHOT;\n id2: {\n local?: string,\n };\n args: Args&{\n snapshot: {\n skp64: string,\n params?: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n layer_rect: [number, number, number, number],\n },\n },\n };\n}\nexport function isDisplayListItemListSnapshot(event: Event): event is DisplayItemListSnapshot {\n return event.name === Name.DISPLAY_ITEM_LIST_SNAPSHOT;\n}\n\nexport interface LayerTreeHostImplSnapshot extends Event {\n name: Name.LAYER_TREE_HOST_IMPL_SNAPSHOT;\n ph: Phase.OBJECT_SNAPSHOT;\n id: string;\n args: Args&{\n snapshot: {\n /* eslint-disable @typescript-eslint/naming-convention */\n active_tiles: Array<{\n id: string,\n layer_id: string,\n gpu_memory_usage: number,\n content_rect: number[],\n }>,\n device_viewport_size: {\n width: number,\n height: number,\n },\n active_tree: {\n root_layer: TraceLayer,\n layers: TraceLayer[],\n },\n /* eslint-enable @typescript-eslint/naming-convention */\n },\n };\n}\n\nexport function isLayerTreeHostImplSnapshot(event: Event): event is LayerTreeHostImplSnapshot {\n return event.name === Name.LAYER_TREE_HOST_IMPL_SNAPSHOT;\n}\n/* eslint-disable @typescript-eslint/naming-convention */\nexport interface TraceLayer {\n bounds: {height: number, width: number};\n children: TraceLayer[];\n layer_id: number;\n position: number[];\n scroll_offset: number[];\n layer_quad: number[];\n draws_content: number;\n gpu_memory_usage: number;\n transform: number[];\n owner_node: Protocol.DOM.BackendNodeId;\n compositing_reasons: string[];\n compositing_reason_ids: string[];\n non_fast_scrollable_region: number[];\n touch_event_handler_region: number[];\n wheel_event_handler_region: number[];\n scroll_event_handler_region: number[];\n}\n\nexport interface TracingLayerTile {\n id: string;\n layer_id: string;\n gpu_memory_usage: number;\n content_rect: number[];\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport interface FireAnimationFrame extends Complete {\n name: Name.FIRE_ANIMATION_FRAME;\n args: Args&{\n data: {\n frame: string,\n id: number,\n },\n };\n}\nexport function isFireAnimationFrame(event: Event): event is FireAnimationFrame {\n return event.name === Name.FIRE_ANIMATION_FRAME;\n}\n\nexport interface RequestAnimationFrame extends Instant {\n name: Name.REQUEST_ANIMATION_FRAME;\n args: Args&{\n data: {\n frame: string,\n id: number,\n stackTrace?: CallFrame,\n },\n };\n}\nexport function isRequestAnimationFrame(event: Event): event is RequestAnimationFrame {\n return event.name === Name.REQUEST_ANIMATION_FRAME;\n}\n\nexport interface TimerInstall extends Instant {\n name: Name.TIMER_INSTALL;\n args: Args&{\n data: {\n frame: string,\n singleShot: boolean,\n stackTrace?: CallFrame, timeout: number, timerId: number,\n },\n };\n}\nexport function isTimerInstall(event: Event): event is TimerInstall {\n return event.name === Name.TIMER_INSTALL;\n}\n\nexport interface TimerFire extends Complete {\n name: Name.TIMER_FIRE;\n args: Args&{\n data: {\n frame: string,\n timerId: number,\n },\n };\n}\nexport function isTimerFire(event: Event): event is TimerFire {\n return event.name === Name.TIMER_FIRE;\n}\n\nexport interface RequestIdleCallback extends Instant {\n name: Name.REQUEST_IDLE_CALLBACK;\n args: Args&{\n data: {\n frame: string,\n id: number,\n timeout: number,\n stackTrace?: CallFrame,\n },\n\n };\n}\nexport function isRequestIdleCallback(event: Event): event is RequestIdleCallback {\n return event.name === Name.REQUEST_IDLE_CALLBACK;\n}\n\nexport interface WebSocketCreate extends Instant {\n name: Name.WEB_SOCKET_CREATE;\n args: Args&{\n data: {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string,\n websocketProtocol?: string,\n stackTrace?: CallFrame,\n },\n };\n}\nexport function isWebSocketCreate(event: Event): event is WebSocketCreate {\n return event.name === Name.WEB_SOCKET_CREATE;\n}\n\nexport interface WebSocketInfo extends Instant {\n name: Name.WEB_SOCKET_DESTROY|Name.WEB_SOCKET_RECEIVE_HANDSHAKE|Name.WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST;\n args: Args&{\n data: ArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string,\n },\n };\n}\nexport interface WebSocketTransfer extends Instant {\n name: Name.WEB_SOCKET_SEND|Name.WEB_SOCKET_RECEIVE;\n args: Args&{\n data: ArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string, dataLength: number,\n },\n };\n}\nexport function isWebSocketInfo(event: Event): event is WebSocketInfo {\n return event.name === Name.WEB_SOCKET_SEND_HANDSHAKE_REQUEST ||\n event.name === Name.WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST || event.name === Name.WEB_SOCKET_DESTROY;\n}\n\nexport function isWebSocketTransfer(event: Event): event is WebSocketTransfer {\n return event.name === Name.WEB_SOCKET_SEND || event.name === Name.WEB_SOCKET_RECEIVE;\n}\n\nexport interface WebSocketSend extends Instant {\n name: Name.WEB_SOCKET_SEND;\n args: Args&{\n data: ArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string, dataLength: number,\n },\n };\n}\n\nexport function isWebSocketSend(event: Event): event is WebSocketSend {\n return event.name === Name.WEB_SOCKET_SEND;\n}\n\nexport interface WebSocketReceive extends Instant {\n name: Name.WEB_SOCKET_RECEIVE;\n args: Args&{\n data: ArgsData & {\n identifier: number,\n url: string,\n frame?: string,\n workerId?: string, dataLength: number,\n },\n };\n}\nexport function isWebSocketReceive(event: Event): event is WebSocketReceive {\n return event.name === Name.WEB_SOCKET_RECEIVE;\n}\n\nexport interface WebSocketSendHandshakeRequest extends Instant {\n name: Name.WEB_SOCKET_SEND_HANDSHAKE_REQUEST;\n args: Args&{\n data: {\n frame: string,\n identifier: number,\n },\n };\n}\nexport function isWebSocketSendHandshakeRequest(event: Event): event is WebSocketSendHandshakeRequest {\n return event.name === Name.WEB_SOCKET_SEND_HANDSHAKE_REQUEST;\n}\n\nexport interface WebSocketReceiveHandshakeResponse extends Instant {\n name: Name.WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST;\n args: Args&{\n data: {\n frame: string,\n identifier: number,\n },\n };\n}\nexport function isWebSocketReceiveHandshakeResponse(event: Event): event is WebSocketReceiveHandshakeResponse {\n return event.name === Name.WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST;\n}\n\nexport interface WebSocketDestroy extends Instant {\n name: Name.WEB_SOCKET_DESTROY;\n args: Args&{\n data: {\n frame: string,\n identifier: number,\n },\n };\n}\nexport function isWebSocketDestroy(event: Event): event is WebSocketDestroy {\n return event.name === Name.WEB_SOCKET_DESTROY;\n}\n\nexport type WebSocketTraceEvent = WebSocketCreate|WebSocketInfo|WebSocketTransfer;\nexport function isWebSocketTraceEvent(event: Event): event is WebSocketTraceEvent {\n return isWebSocketCreate(event) || isWebSocketInfo(event) || isWebSocketTransfer(event);\n}\n\nexport type WebSocketEvent = WebSocketTraceEvent|SyntheticWebSocketConnection;\nexport function isWebSocketEvent(event: Event): event is WebSocketTraceEvent|SyntheticWebSocketConnection {\n return isWebSocketTraceEvent(event) || isSyntheticWebSocketConnection(event);\n}\n\nexport interface V8Compile extends Complete {\n name: Name.COMPILE;\n args: Args&{\n data?: {\n url?: string,\n columnNumber?: number,\n consumedCacheSize?: number,\n cacheRejected?: boolean,\n cacheKind?: 'full'|'normal',\n lineNumber?: number,\n notStreamedReason?: string,\n streamed?: boolean,\n eager?: boolean,\n },\n fileName?: string,\n };\n}\nexport function isV8Compile(event: Event): event is V8Compile {\n return event.name === Name.COMPILE;\n}\n\nexport interface FunctionCall extends Complete {\n name: Name.FUNCTION_CALL;\n args: Args&{\n data?: {\n frame?: string,\n columnNumber?: number,\n lineNumber?: number,\n functionName?: string,\n scriptId?: number,\n url?: string,\n },\n };\n}\nexport function isFunctionCall(event: Event): event is FunctionCall {\n return event.name === Name.FUNCTION_CALL;\n}\n\nexport function isSyntheticServerTiming(event: Event): event is SyntheticServerTiming {\n return event.cat === 'devtools.server-timing';\n}\n\n/**\n * Generally, before JS is executed, a trace event is dispatched that\n * parents the JS calls. These we call \"invocation\" events. This\n * function determines if an event is one of such.\n */\nexport function isJSInvocationEvent(event: Event): boolean {\n switch (event.name) {\n case Name.RUN_MICROTASKS:\n case Name.FUNCTION_CALL:\n case Name.EVALUATE_SCRIPT:\n case Name.EVALUATE_MODULE:\n case Name.EVENT_DISPATCH:\n case Name.V8_EXECUTE:\n return true;\n }\n // Also consider any new v8 trace events. (eg 'V8.RunMicrotasks' and 'v8.run')\n if (event.name.startsWith('v8') || event.name.startsWith('V8')) {\n return true;\n }\n return false;\n}\n\n/**\n * This is an exhaustive list of events we track in the Performance\n * panel. Note not all of them are necessarliry shown in the flame\n * chart, some of them we only use for parsing.\n * TODO(crbug.com/1428024): Complete this enum.\n */\nexport const enum Name {\n /* Metadata */\n THREAD_NAME = 'thread_name',\n\n /* Task */\n PROGRAM = 'Program',\n RUN_TASK = 'RunTask',\n ASYNC_TASK = 'AsyncTask',\n RUN_MICROTASKS = 'RunMicrotasks',\n\n /* Load */\n XHR_LOAD = 'XHRLoad',\n XHR_READY_STATE_CHANGED = 'XHRReadyStateChange',\n /* Parse */\n PARSE_HTML = 'ParseHTML',\n PARSE_CSS = 'ParseAuthorStyleSheet',\n /* V8 */\n COMPILE_CODE = 'V8.CompileCode',\n COMPILE_MODULE = 'V8.CompileModule',\n // Although V8 emits the V8.CompileScript event, the event that actually\n // contains the useful information about the script (URL, etc), is contained\n // in the v8.compile event.\n // Yes, it is all lowercase compared to all the rest of the V8... events,\n // that is not a typo :)\n COMPILE = 'v8.compile',\n COMPILE_SCRIPT = 'V8.CompileScript',\n OPTIMIZE = 'V8.OptimizeCode',\n WASM_STREAM_FROM_RESPONSE_CALLBACK = 'v8.wasm.streamFromResponseCallback',\n WASM_COMPILED_MODULE = 'v8.wasm.compiledModule',\n WASM_CACHED_MODULE = 'v8.wasm.cachedModule',\n WASM_MODULE_CACHE_HIT = 'v8.wasm.moduleCacheHit',\n WASM_MODULE_CACHE_INVALID = 'v8.wasm.moduleCacheInvalid',\n /* Js */\n PROFILE_CALL = 'ProfileCall',\n EVALUATE_SCRIPT = 'EvaluateScript',\n FUNCTION_CALL = 'FunctionCall',\n EVENT_DISPATCH = 'EventDispatch',\n EVALUATE_MODULE = 'v8.evaluateModule',\n REQUEST_MAIN_THREAD_FRAME = 'RequestMainThreadFrame',\n REQUEST_ANIMATION_FRAME = 'RequestAnimationFrame',\n CANCEL_ANIMATION_FRAME = 'CancelAnimationFrame',\n FIRE_ANIMATION_FRAME = 'FireAnimationFrame',\n REQUEST_IDLE_CALLBACK = 'RequestIdleCallback',\n CANCEL_IDLE_CALLBACK = 'CancelIdleCallback',\n FIRE_IDLE_CALLBACK = 'FireIdleCallback',\n TIMER_INSTALL = 'TimerInstall',\n TIMER_REMOVE = 'TimerRemove',\n TIMER_FIRE = 'TimerFire',\n WEB_SOCKET_CREATE = 'WebSocketCreate',\n WEB_SOCKET_SEND_HANDSHAKE = 'WebSocketSendHandshakeRequest',\n WEB_SOCKET_RECEIVE_HANDSHAKE = 'WebSocketReceiveHandshakeResponse',\n WEB_SOCKET_DESTROY = 'WebSocketDestroy',\n WEB_SOCKET_SEND = 'WebSocketSend',\n WEB_SOCKET_RECEIVE = 'WebSocketReceive',\n CRYPTO_DO_ENCRYPT = 'DoEncrypt',\n CRYPTO_DO_ENCRYPT_REPLY = 'DoEncryptReply',\n CRYPTO_DO_DECRYPT = 'DoDecrypt',\n CRYPTO_DO_DECRYPT_REPLY = 'DoDecryptReply',\n CRYPTO_DO_DIGEST = 'DoDigest',\n CRYPTO_DO_DIGEST_REPLY = 'DoDigestReply',\n CRYPTO_DO_SIGN = 'DoSign',\n CRYPTO_DO_SIGN_REPLY = 'DoSignReply',\n CRYPTO_DO_VERIFY = 'DoVerify',\n CRYPTO_DO_VERIFY_REPLY = 'DoVerifyReply',\n V8_EXECUTE = 'V8.Execute',\n\n /* Gc */\n GC = 'GCEvent',\n DOMGC = 'BlinkGC.AtomicPhase',\n MAJOR_GC = 'MajorGC',\n MINOR_GC = 'MinorGC',\n GC_COLLECT_GARBARGE = 'BlinkGC.AtomicPhase',\n CPPGC_SWEEP = 'CppGC.IncrementalSweep',\n\n /* Layout */\n SCHEDULE_STYLE_RECALCULATION = 'ScheduleStyleRecalculation',\n LAYOUT = 'Layout',\n UPDATE_LAYOUT_TREE = 'UpdateLayoutTree',\n INVALIDATE_LAYOUT = 'InvalidateLayout',\n LAYOUT_INVALIDATION_TRACKING = 'LayoutInvalidationTracking',\n COMPUTE_INTERSECTION = 'ComputeIntersections',\n HIT_TEST = 'HitTest',\n PRE_PAINT = 'PrePaint',\n LAYERIZE = 'Layerize',\n LAYOUT_SHIFT = 'LayoutShift',\n SYNTHETIC_LAYOUT_SHIFT_CLUSTER = 'SyntheticLayoutShiftCluster',\n UPDATE_LAYER_TREE = 'UpdateLayerTree',\n SCHEDULE_STYLE_INVALIDATION_TRACKING = 'ScheduleStyleInvalidationTracking',\n STYLE_RECALC_INVALIDATION_TRACKING = 'StyleRecalcInvalidationTracking',\n STYLE_INVALIDATOR_INVALIDATION_TRACKING = 'StyleInvalidatorInvalidationTracking',\n SELECTOR_STATS = 'SelectorStats',\n BEGIN_COMMIT_COMPOSITOR_FRAME = 'BeginCommitCompositorFrame',\n PARSE_META_VIEWPORT = 'ParseMetaViewport',\n\n /* Paint */\n SCROLL_LAYER = 'ScrollLayer',\n UPDATE_LAYER = 'UpdateLayer',\n PAINT_SETUP = 'PaintSetup',\n PAINT = 'Paint',\n PAINT_IMAGE = 'PaintImage',\n COMMIT = 'Commit',\n COMPOSITE_LAYERS = 'CompositeLayers',\n RASTER_TASK = 'RasterTask',\n IMAGE_DECODE_TASK = 'ImageDecodeTask',\n IMAGE_UPLOAD_TASK = 'ImageUploadTask',\n DECODE_IMAGE = 'Decode Image',\n DRAW_LAZY_PIXEL_REF = 'Draw LazyPixelRef',\n DECODE_LAZY_PIXEL_REF = 'Decode LazyPixelRef',\n GPU_TASK = 'GPUTask',\n RASTERIZE = 'Rasterize',\n EVENT_TIMING = 'EventTiming',\n\n /* Compile */\n OPTIMIZE_CODE = 'V8.OptimizeCode',\n CACHE_SCRIPT = 'v8.produceCache',\n CACHE_MODULE = 'v8.produceModuleCache',\n // V8Sample events are coming from tracing and contain raw stacks with function addresses.\n // After being processed with help of JitCodeAdded and JitCodeMoved events they\n // get translated into function infos and stored as stacks in JSSample events.\n V8_SAMPLE = 'V8Sample',\n JIT_CODE_ADDED = 'JitCodeAdded',\n JIT_CODE_MOVED = 'JitCodeMoved',\n STREAMING_COMPILE_SCRIPT = 'v8.parseOnBackground',\n STREAMING_COMPILE_SCRIPT_WAITING = 'v8.parseOnBackgroundWaiting',\n STREAMING_COMPILE_SCRIPT_PARSING = 'v8.parseOnBackgroundParsing',\n BACKGROUND_DESERIALIZE = 'v8.deserializeOnBackground',\n FINALIZE_DESERIALIZATION = 'V8.FinalizeDeserialization',\n\n /* Markers */\n COMMIT_LOAD = 'CommitLoad',\n MARK_LOAD = 'MarkLoad',\n MARK_DOM_CONTENT = 'MarkDOMContent',\n MARK_FIRST_PAINT = 'firstPaint',\n MARK_FCP = 'firstContentfulPaint',\n MARK_LCP_CANDIDATE = 'largestContentfulPaint::Candidate',\n MARK_LCP_INVALIDATE = 'largestContentfulPaint::Invalidate',\n NAVIGATION_START = 'navigationStart',\n TIME_STAMP = 'TimeStamp',\n CONSOLE_TIME = 'ConsoleTime',\n USER_TIMING = 'UserTiming',\n INTERACTIVE_TIME = 'InteractiveTime',\n\n /* Frames */\n BEGIN_FRAME = 'BeginFrame',\n NEEDS_BEGIN_FRAME_CHANGED = 'NeedsBeginFrameChanged',\n BEGIN_MAIN_THREAD_FRAME = 'BeginMainThreadFrame',\n ACTIVATE_LAYER_TREE = 'ActivateLayerTree',\n DRAW_FRAME = 'DrawFrame',\n DROPPED_FRAME = 'DroppedFrame',\n FRAME_STARTED_LOADING = 'FrameStartedLoading',\n PIPELINE_REPORTER = 'PipelineReporter',\n SCREENSHOT = 'Screenshot',\n\n /* Network request events */\n RESOURCE_WILL_SEND_REQUEST = 'ResourceWillSendRequest',\n RESOURCE_SEND_REQUEST = 'ResourceSendRequest',\n RESOURCE_RECEIVE_RESPONSE = 'ResourceReceiveResponse',\n RESOURCE_RECEIVE_DATA = 'ResourceReceivedData',\n RESOURCE_FINISH = 'ResourceFinish',\n RESOURCE_MARK_AS_CACHED = 'ResourceMarkAsCached',\n\n /* Web sockets */\n WEB_SOCKET_SEND_HANDSHAKE_REQUEST = 'WebSocketSendHandshakeRequest',\n WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST = 'WebSocketReceiveHandshakeResponse',\n\n /* CPU Profiling */\n PROFILE = 'Profile',\n START_PROFILING = 'CpuProfiler::StartProfiling',\n PROFILE_CHUNK = 'ProfileChunk',\n UPDATE_COUNTERS = 'UpdateCounters',\n\n JS_SAMPLE = 'JSSample',\n\n /* Other */\n ANIMATION = 'Animation',\n PARSE_AUTHOR_STYLE_SHEET = 'ParseAuthorStyleSheet',\n EMBEDDER_CALLBACK = 'EmbedderCallback',\n SET_LAYER_TREE_ID = 'SetLayerTreeId',\n TRACING_STARTED_IN_PAGE = 'TracingStartedInPage',\n TRACING_STARTED_IN_BROWSER = 'TracingStartedInBrowser',\n TRACING_SESSION_ID_FOR_WORKER = 'TracingSessionIdForWorker',\n LAZY_PIXEL_REF = 'LazyPixelRef',\n LAYER_TREE_HOST_IMPL_SNAPSHOT = 'cc::LayerTreeHostImpl',\n PICTURE_SNAPSHOT = 'cc::Picture',\n DISPLAY_ITEM_LIST_SNAPSHOT = 'cc::DisplayItemList',\n INPUT_LATENCY_MOUSE_MOVE = 'InputLatency::MouseMove',\n INPUT_LATENCY_MOUSE_WHEEL = 'InputLatency::MouseWheel',\n IMPL_SIDE_FLING = 'InputHandlerProxy::HandleGestureFling::started',\n\n SCHEDULE_POST_MESSAGE = 'SchedulePostMessage',\n HANDLE_POST_MESSAGE = 'HandlePostMessage',\n\n RENDER_FRAME_IMPL_CREATE_CHILD_FRAME = 'RenderFrameImpl::createChildFrame',\n\n DOM_LOADING = 'domLoading',\n BEGIN_REMOTE_FONT_LOAD = 'BeginRemoteFontLoad',\n}\n\n// NOT AN EXHAUSTIVE LIST: just some categories we use and refer\n// to in multiple places.\nexport const Categories = {\n Console: 'blink.console',\n UserTiming: 'blink.user_timing',\n Loading: 'loading',\n} as const;\n\n/**\n * The frames implementation in handlers/FramesHandler is considered \"legacy\"\n * in that it is based on the old TimelineModel implementation rather than\n * following the pattern of the other handlers. This will change in time as we\n * migrate the frames track to use AnimationFrame events, but for now we\n * maintain it because the effort required to migrate was large.\n * Consequently, the types we use through the codebase to refer to these frames\n * usually use ModelHandlers.FramesHandler.TimelineFrame, but in\n * trace/types/*.ts we cannot refer to types defined in the Handlers. To avoid a\n * circular dependency, we define these interfaces here which are implemented by\n * the classes in FramesHandler.ts, but they can also be used to refer to\n * instances of frames in trace/types/*.ts which is unable to import from\n * handlers.\n */\nexport interface LegacyTimelineFrame extends Event {\n startTime: MicroSeconds;\n startTimeOffset: MicroSeconds;\n endTime: MicroSeconds;\n duration: MicroSeconds;\n idle: boolean;\n dropped: boolean;\n isPartial: boolean;\n layerTree: LegacyFrameLayerTreeData|null;\n paints: LegacyLayerPaintEvent[];\n mainFrameId?: number;\n readonly seqId: number;\n index: number;\n}\n\nexport function isLegacyTimelineFrame(data: Event): data is LegacyTimelineFrame {\n return 'idle' in data && typeof data.idle === 'boolean';\n}\n\nexport interface LegacyFrameLayerTreeData {\n entry: LayerTreeHostImplSnapshot;\n paints: LegacyLayerPaintEvent[];\n}\n\nexport interface LegacyLayerPaintEvent {\n layerId(): number;\n event(): Paint;\n picture(): LegacyLayerPaintEventPicture|null;\n}\n\nexport interface LegacyLayerPaintEventPicture {\n rect: Array<number>;\n serializedPicture: string;\n}\n"]}
|
|
@@ -2,4 +2,4 @@ export * as Configuration from './Configuration.js';
|
|
|
2
2
|
export * as Extensions from './Extensions.js';
|
|
3
3
|
export * as File from './File.js';
|
|
4
4
|
export * as Timing from './Timing.js';
|
|
5
|
-
export * as
|
|
5
|
+
export * as Events from './TraceEvents.js';
|
|
@@ -5,5 +5,5 @@ export * as Configuration from './Configuration.js';
|
|
|
5
5
|
export * as Extensions from './Extensions.js';
|
|
6
6
|
export * as File from './File.js';
|
|
7
7
|
export * as Timing from './Timing.js';
|
|
8
|
-
export * as
|
|
8
|
+
export * as Events from './TraceEvents.js';
|
|
9
9
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/types/types.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAE7B,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/types/types.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAE7B,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC","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\nexport * as Configuration from './Configuration.js';\nexport * as Extensions from './Extensions.js';\nexport * as File from './File.js';\nexport * as Timing from './Timing.js';\nexport * as Events from './TraceEvents.js';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paulirish/trace_engine",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.33",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "models/trace/trace.js",
|
|
6
6
|
"scripts": {
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
"keywords": [],
|
|
12
12
|
"author": "",
|
|
13
13
|
"license": "BSD-3-Clause",
|
|
14
|
-
"dependencies": {
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"third-party-web": "latest"
|
|
16
|
+
},
|
|
15
17
|
"devDependencies": {}
|
|
16
18
|
}
|