@paulirish/trace_engine 0.0.51 → 0.0.52
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/.tmp/tsbuildinfo/tsconfig.tsbuildinfo +1 -1
- package/core/platform/StringUtilities.js +4 -1
- package/core/platform/StringUtilities.js.map +1 -1
- package/core/platform/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/core/platform/platform-tsconfig.json +1 -1
- package/generated/protocol.d.ts +150 -31
- package/locales/en-US.json +3 -0
- package/locales/en-XL.json +3 -0
- package/models/cpu_profile/cpu_profile-tsconfig.json +1 -1
- package/models/cpu_profile/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/extras/ScriptDuplication.d.ts +5 -2
- package/models/trace/extras/ScriptDuplication.js +4 -2
- package/models/trace/extras/ScriptDuplication.js.map +1 -1
- package/models/trace/extras/StackTraceForEvent.js +80 -47
- package/models/trace/extras/StackTraceForEvent.js.map +1 -1
- package/models/trace/extras/ThirdParties.d.ts +13 -12
- package/models/trace/extras/ThirdParties.js +50 -19
- package/models/trace/extras/ThirdParties.js.map +1 -1
- package/models/trace/extras/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/extras/extras-tsconfig.json +1 -1
- package/models/trace/extras/extras.d.ts +98 -6
- package/models/trace/extras/extras.js +98 -6
- package/models/trace/handlers/AsyncJSCallsHandler.d.ts +5 -0
- package/models/trace/handlers/AsyncJSCallsHandler.js +12 -9
- package/models/trace/handlers/AsyncJSCallsHandler.js.map +1 -1
- package/models/trace/handlers/ScreenshotsHandler.js +1 -0
- package/models/trace/handlers/ScreenshotsHandler.js.map +1 -1
- package/models/trace/handlers/ScriptsHandler.js +9 -3
- package/models/trace/handlers/ScriptsHandler.js.map +1 -1
- package/models/trace/handlers/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/handlers/handlers-tsconfig.json +1 -1
- package/models/trace/handlers/helpers.js +9 -0
- package/models/trace/handlers/helpers.js.map +1 -1
- package/models/trace/helpers/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/helpers/helpers-tsconfig.json +1 -1
- package/models/trace/insights/CLSCulprits.d.ts +6 -1
- package/models/trace/insights/CLSCulprits.js +11 -2
- package/models/trace/insights/CLSCulprits.js.map +1 -1
- package/models/trace/insights/Cache.d.ts +0 -1
- package/models/trace/insights/Cache.js +1 -1
- package/models/trace/insights/Cache.js.map +1 -1
- package/models/trace/insights/Common.js +3 -0
- package/models/trace/insights/Common.js.map +1 -1
- package/models/trace/insights/DocumentLatency.js +1 -0
- package/models/trace/insights/DocumentLatency.js.map +1 -1
- package/models/trace/insights/DuplicatedJavaScript.js +9 -3
- package/models/trace/insights/DuplicatedJavaScript.js.map +1 -1
- package/models/trace/insights/ImageDelivery.d.ts +0 -1
- package/models/trace/insights/ImageDelivery.js +1 -1
- package/models/trace/insights/ImageDelivery.js.map +1 -1
- package/models/trace/insights/LegacyJavaScript.js +5 -2
- package/models/trace/insights/LegacyJavaScript.js.map +1 -1
- package/models/trace/insights/ThirdParties.d.ts +1 -1
- package/models/trace/insights/ThirdParties.js +6 -6
- package/models/trace/insights/ThirdParties.js.map +1 -1
- package/models/trace/insights/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/insights/insights-tsconfig.json +1 -1
- package/models/trace/insights/types.d.ts +9 -0
- package/models/trace/insights/types.js.map +1 -1
- package/models/trace/lantern/core/core-tsconfig.json +1 -1
- package/models/trace/lantern/core/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/lantern/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/lantern/graph/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/lantern/graph/graph-tsconfig.json +1 -1
- package/models/trace/lantern/lantern-tsconfig.json +1 -1
- package/models/trace/lantern/metrics/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/lantern/metrics/metrics-tsconfig.json +1 -1
- package/models/trace/lantern/simulation/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/lantern/simulation/simulation-tsconfig.json +1 -1
- package/models/trace/lantern/types/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/lantern/types/types-tsconfig.json +1 -1
- package/models/trace/trace-tsconfig.json +1 -1
- package/models/trace/types/TraceEvents.d.ts +2 -4
- package/models/trace/types/TraceEvents.js.map +1 -1
- package/models/trace/types/devtools_entrypoint-bundle-typescript-tsconfig.json +1 -1
- package/models/trace/types/types-tsconfig.json +1 -1
- package/package.json +1 -1
- package/test/test-trace-engine.mjs +2 -2
|
@@ -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\nimport type * as Platform from '../../../core/platform/platform.js';\nimport type * as Protocol from '../../../generated/protocol.js';\n\nimport type {Micro, Milli, Seconds, TraceWindowMicro} 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?: Micro;\n ts: Micro;\n tdur?: Micro;\n dur?: Micro;\n}\n\nexport interface Args {\n data?: ArgsData;\n sampleTraceId?: number;\n stackTrace?: CallFrame[];\n}\n\nexport interface ArgsData {\n stackTrace?: CallFrame[];\n sampleTraceId?: number;\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): 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: Micro,\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?: Micro[],\n lines?: Micro[],\n },\n };\n}\n\nexport interface PartialProfile {\n nodes?: PartialNode[];\n samples: CallFrameID[];\n /**\n * Contains trace ids assigned to samples, if any. Trace ids are\n * keyed by the sample index in the profile (the keys of the object\n * are strings containing the numeric index).\n */\n /* eslint-disable @typescript-eslint/naming-convention */\n trace_ids?: Record<string, number>;\n /* eslint-enable @typescript-eslint/naming-convention */\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: Micro;\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: Milli,\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 sampleTraceId?: number, frame: string, startLine: number, 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\n// TODO(paulirish): Migrate to the new (Sept 2024) EventTiming trace events.\n// See https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/timing/window_performance.cc;l=900-901;drc=b503c262e425eae59ced4a80d59d176ed07152c7\nexport type EventTimingBeginOrEnd = EventTimingBegin|EventTimingEnd;\n\nexport interface EventTimingBegin extends Event {\n ph: Phase.ASYNC_NESTABLE_START;\n name: Name.EVENT_TIMING;\n id: string;\n args: Args&{\n // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/timing/performance_event_timing.cc;l=297;drc=4f00803ca25c0d0480ed14844d6406933c21e80e\n data: ArgsData & {\n cancelable: boolean,\n duration: Milli,\n type: string,\n interactionId: number,\n interactionOffset: number,\n nodeId: Protocol.DOM.BackendNodeId,\n frame?: string, // From May 2022 onwards, this is where frame is located. https://chromium-review.googlesource.com/c/chromium/src/+/3632661\n processingEnd?: Milli,\n processingStart?: Milli,\n timeStamp?: Milli,\n enqueuedToMainThreadTime?: Milli,\n commitFinishTime?: Milli,\n },\n frame?: string, // Prior to May 2022, `frame` was here in args.\n };\n}\nexport interface EventTimingEnd extends Event {\n ph: Phase.ASYNC_NESTABLE_END;\n name: Name.EVENT_TIMING;\n id: string;\n args: Args;\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: Micro;\n dur: Micro;\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: Micro;\n download: Micro;\n downloadStart: Micro;\n finishTime: Micro;\n initialConnection: Micro;\n isDiskCached: boolean;\n isHttps: boolean;\n isMemoryCached: boolean;\n isPushedResource: boolean;\n networkDuration: Micro;\n processingDuration: Micro;\n proxyNegotiation: Micro;\n queueing: Micro;\n redirectionDuration: Micro;\n requestSent: Micro;\n sendStartTime: Micro;\n ssl: Micro;\n stalled: Micro;\n totalTime: Micro;\n /** Server response time (receiveHeadersEnd - sendEnd) */\n waiting: Micro;\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 },\n };\n cat: 'loading';\n name: Name.SYNTHETIC_NETWORK_REQUEST;\n ph: Phase.COMPLETE;\n dur: Micro;\n tdur: Micro;\n ts: Micro;\n tts: Micro;\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: Micro;\n ts: Micro;\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\n/**\n * In January 2025 when crrev.com/c/6197645 landed, it changed the format of screenshot events.\n * That is why we two screenshot types:\n * `LegacyScreenshot` and `LegacySyntheticScreenshot`: BEFORE the above CL.\n * `Screenshot`: AFTER the above CL.\n * Important things to note:\n * 1. Both the \"old\" and \"new\" events share the name \"Screenshot\" but their format is very different.\n * 2. The old events had both a raw event (LegacyScreenshot) and a synthetic\n * event (LegacySyntheticScreenshot). The new events only have a raw event, as\n * we do not need the additional complexity of a synthetic event.\n * 3. Because we like to support \"old\" traces, DevTools will maintain its\n * support for both screenshot events for the foreseeable future. If you are\n * consuming screenshot events from the ScreenshotHandler, you must make sure\n * to have your code deal with the two different formats.\n */\n// These are nullable because in January 2025 a CL in Chromium\nexport interface LegacyScreenshot extends Event {\n /**\n * @deprecated This value is incorrect. Use ScreenshotHandler.getPresentationTimestamp()\n */\n ts: Micro;\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 isLegacyScreenshot(event: Event): event is LegacyScreenshot {\n return event.name === Name.SCREENSHOT && 'id' in event;\n}\nexport function isLegacySyntheticScreenshot(event: Event): event is LegacySyntheticScreenshot {\n return event.name === Name.SCREENSHOT && 'dataUri' in (event.args ?? {});\n}\n\nexport function isScreenshot(event: Event): event is Screenshot {\n return event.name === Name.SCREENSHOT && 'source_id' in (event.args ?? {});\n}\n\nexport interface LegacySyntheticScreenshot extends Event, SyntheticBased {\n rawSourceEvent: LegacyScreenshot;\n /** This is the correct presentation timestamp. */\n ts: Micro;\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\nexport interface Screenshot extends Instant {\n args: Args&{\n snapshot: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n source_id: number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n frame_sequence: number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n expected_display_time: number,\n };\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 frame: string,\n data?: ArgsData&{\n /** Must be non-empty to be valid. An empty documentLoaderURL means the event can be ignored. */\n documentLoaderURL: string,\n isLoadingMainFrame: boolean,\n navigationId: string,\n /**\n * `isOutermostMainFrame` was introduced in crrev.com/c/3625434 and exists because of Fenced Frames\n * [github.com/WICG/fenced-frame/tree/master/explainer]. Fenced frames introduce a situation where\n * `isLoadingMainFrame` could be true for a navigation, but that navigation be within an embedded \"main frame\", and\n * therefore it wouldn't be on the top level main frame. In situations where we need to distinguish that, we can\n * rely on `isOutermostMainFrame`, which will only be true for navigations on the top level main frame.\n * This flag is optional as it was introduced in May 2022; so users reasonably may import traces from before that\n * date that do not have this field present.\n */\n isOutermostMainFrame?: boolean,\n /**\n * @deprecated use documentLoaderURL for navigation events URLs\n */\n url?: string,\n },\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 if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) {\n return markerTypeGuards.some(fn => fn(event));\n }\n return false;\n}\n\nconst pageLoadEventTypeGuards = [\n ...markerTypeGuards,\n isInteractiveTime,\n];\n\nexport function eventIsPageLoadEvent(event: Event): event is PageLoadEvent {\n if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) {\n return pageLoadEventTypeGuards.some(fn => fn(event));\n }\n return false;\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 DOMStats extends Instant {\n name: 'DOMStats';\n args: Args&{\n data: ArgsData & {\n frame: string,\n totalElements: number,\n maxChildren?: {\n nodeId: Protocol.DOM.BackendNodeId,\n nodeName: string,\n numChildren: number,\n },\n maxDepth?: {\n nodeId: Protocol.DOM.BackendNodeId,\n nodeName: string,\n depth: number,\n },\n },\n };\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 interface 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: Name.LAYOUT_SHIFT;\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: LegacySyntheticScreenshot|Screenshot|null, after: LegacySyntheticScreenshot|Screenshot|null};\n timeFromNavigation?: Micro;\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}\n\nexport interface SyntheticLayoutShift extends Omit<LayoutShift, 'name'>, SyntheticBased<Phase.INSTANT> {\n name: Name.SYNTHETIC_LAYOUT_SHIFT;\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: TraceWindowMicro;\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: TraceWindowMicro,\n needsImprovement?: TraceWindowMicro,\n bad?: TraceWindowMicro,\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: Micro;\n // The duration of the cluster. This should include up until the end of the last\n // layout shift in this cluster.\n dur: Micro;\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\n/** Only sent for navigations. https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_instrumentation.cc;l=1612-1647;drc=ec7daf93d0479b758610c75f4e146fd4d2d6ed2b */\nexport interface ResourceWillSendRequest extends Instant {\n name: Name.RESOURCE_WILL_SEND_REQUEST;\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\n/** See https://mdn.github.io/shared-assets/images/diagrams/api/performance/timestamp-diagram.svg */\ninterface ResourceReceiveResponseTimingData {\n connectEnd: Milli;\n connectStart: Milli;\n dnsEnd: Milli;\n dnsStart: Milli;\n proxyEnd: Milli;\n proxyStart: Milli;\n pushEnd: Milli;\n pushStart: Milli;\n receiveHeadersEnd: Milli;\n receiveHeadersStart: Milli;\n /** When the network service is about to handle a request, ie. just before going to the HTTP cache or going to the network for DNS/connection setup. */\n requestTime: Seconds;\n sendEnd: Milli;\n sendStart: Milli;\n sslEnd: Milli;\n sslStart: Milli;\n workerReady: Milli;\n workerStart: Milli;\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: Milli,\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}\n\nexport function isRenderFrameImplCreateChildFrame(event: Event): event is RenderFrameImplCreateChildFrame {\n return event.name === Name.RENDER_FRAME_IMPL_CREATE_CHILD_FRAME;\n}\n\nexport interface LayoutImageUnsized extends Event {\n name: Name.LAYOUT_IMAGE_UNSIZED;\n args: Args&{\n data: {\n nodeId: Protocol.DOM.BackendNodeId,\n frameId: string,\n },\n };\n}\n\nexport function isLayoutImageUnsized(event: Event): event is LayoutImageUnsized {\n return event.name === Name.LAYOUT_IMAGE_UNSIZED;\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 AnimationFrame extends PairableAsync {\n name: Name.ANIMATION_FRAME;\n args?: AnimationFrameArgs;\n}\nexport type AnimationFrameArgs = Args&{\n animation_frame_timing_info: {\n blocking_duration_ms: number,\n duration_ms: number,\n num_scripts: number,\n },\n id: string,\n};\n\nexport interface AnimationFrameAsyncStart extends AnimationFrame {\n ph: Phase.ASYNC_NESTABLE_START;\n}\nexport interface AnimationFrameAsyncEnd extends AnimationFrame {\n ph: Phase.ASYNC_NESTABLE_END;\n}\n\nexport function isAnimationFrameAsyncStart(data: Event): data is AnimationFrameAsyncStart {\n return data.name === Name.ANIMATION_FRAME && data.ph === Phase.ASYNC_NESTABLE_START;\n}\nexport function isAnimationFrameAsyncEnd(data: Event): data is AnimationFrameAsyncEnd {\n return data.name === Name.ANIMATION_FRAME && data.ph === Phase.ASYNC_NESTABLE_END;\n}\n\nexport interface AnimationFramePresentation extends Event {\n name: Name.ANIMATION_FRAME_PRESENTATION;\n ph: Phase.ASYNC_NESTABLE_INSTANT;\n args?: Args&{\n id: string,\n };\n}\nexport function isAnimationFramePresentation(data: Event): data is AnimationFramePresentation {\n return data.name === Name.ANIMATION_FRAME_PRESENTATION;\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 url?: string,\n };\n}\n\nexport interface RemoteFontLoaded extends UserTiming {\n name: Name.REMOTE_FONT_LOADED;\n args: Args&{\n url: string,\n name: string,\n };\n}\n\nexport type PairableUserTiming = UserTiming&PairableAsync;\n\nexport interface PerformanceMeasureBegin extends PairableUserTiming {\n args: Args&{\n detail?: string,\n callTime?: Micro,\n traceId?: number,\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 callTime?: Micro,\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 ConsoleTimeStamp extends Event {\n cat: 'devtools.timeline';\n name: Name.TIME_STAMP;\n ph: Phase.INSTANT;\n args: Args&{\n data?: ArgsData & {\n // The console.timeStamp allows to pass integers as values as well\n // as strings\n message: string,\n name?: string|number,\n start?: string|number,\n end?: string|number,\n track?: string|number,\n trackGroup?: string|number,\n color?: string|number,\n sampleTraceId?: number,\n },\n };\n}\n\nexport interface SyntheticConsoleTimeStamp extends Event, SyntheticBased {\n cat: 'disabled-by-default-v8.inspector';\n ph: Phase.COMPLETE;\n}\n\nexport interface UserTimingMeasure extends Event {\n cat: 'devtools.timeline';\n ph: Phase.COMPLETE;\n name: Name.USER_TIMING_MEASURE;\n args: Args&{\n sampleTraceId: number,\n traceId: number,\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 dropped 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\n// TODO(crbug.com/409484302): Remove once Chrome migrates from\n// ChromeTrackEvent.chrome_frame_reporter to ChromeTrackEvent.frame_reporter.\nexport interface OldChromeFrameReporterArgs {\n chrome_frame_reporter: ChromeFrameReporter;\n}\n\nexport interface NewChromeFrameReporterArgs {\n frame_reporter: ChromeFrameReporter;\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&(OldChromeFrameReporterArgs|NewChromeFrameReporterArgs);\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, T extends Event = Event> extends Event {\n ph: Ph;\n rawSourceEvent: T;\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<Phase, T> {\n rawSourceEvent: T;\n name: T['name'];\n cat: T['cat'];\n id?: string;\n id2?: {local?: string, global?: string};\n\n dur: Micro;\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>;\nexport type SyntheticAnimationFramePair = SyntheticEventPair<AnimationFrame>;\n\nexport type SyntheticUserTimingPair = SyntheticEventPair<PerformanceMeasure>;\n\nexport type SyntheticConsoleTimingPair = SyntheticEventPair<ConsoleTime>;\n\nexport type SyntheticAnimationPair = SyntheticEventPair<Animation>;\n\nexport interface SyntheticInteractionPair extends SyntheticEventPair<EventTimingBeginOrEnd> {\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: Micro;\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: Micro;\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: Micro;\n processingEnd: Micro;\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: Micro;\n // 2. mainThreadHandling: time spent processing the event handler\n mainThreadHandling: Micro;\n // 3. presentationDelay: delay between the event being processed and the frame being rendered\n presentationDelay: Micro;\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 individual 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 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 // Used to associate a stack sample with a trace event.\n traceId?: number, 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}\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\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\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\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\n fast_reject_count: number;\n\n match_attempts: number;\n selector: string;\n\n style_sheet_id: string;\n\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 selector_timings: SelectorTiming[];\n}\n\nexport interface SelectorStats extends Complete {\n name: Name.SELECTOR_STATS;\n args: Args&{\n\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 sampleTraceId?: number, 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 sampleTraceId?: number, frame: string, dirtyObjects: number, partialLayout: boolean, totalObjects: number,\n stackTrace?: CallFrame[],\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\nexport interface DebuggerAsyncTaskScheduled extends Event {\n name: Name.DEBUGGER_ASYNC_TASK_SCHEDULED;\n args: Args&{\n taskName: string,\n };\n}\n\nexport function isDebuggerAsyncTaskScheduled(event: Event): event is DebuggerAsyncTaskScheduled {\n return event.name === Name.DEBUGGER_ASYNC_TASK_SCHEDULED;\n}\n\nexport interface DebuggerAsyncTaskRun extends Event {\n name: Name.DEBUGGER_ASYNC_TASK_RUN;\n}\n\nexport function isDebuggerAsyncTaskRun(event: Event): event is DebuggerAsyncTaskRun {\n return event.name === Name.DEBUGGER_ASYNC_TASK_RUN;\n}\n\nexport type ProfileID = Platform.Brand.Brand<string, 'profileIdTag'>;\n\nexport function ProfileID(value: string): ProfileID {\n return value as ProfileID;\n}\n\nexport type CallFrameID = Platform.Brand.Brand<number, 'callFrameIdTag'>;\n\nexport function CallFrameID(value: number): CallFrameID {\n return value as CallFrameID;\n}\n\nexport type SampleIndex = Platform.Brand.Brand<number, 'sampleIndexTag'>;\n\nexport function SampleIndex(value: number): SampleIndex {\n return value as SampleIndex;\n}\n\nexport type ProcessID = Platform.Brand.Brand<number, 'processIdTag'>;\n\nexport function ProcessID(value: number): ProcessID {\n return value as ProcessID;\n}\n\nexport type ThreadID = Platform.Brand.Brand<number, 'threadIdTag'>;\n\nexport function ThreadID(value: number): ThreadID {\n return value as ThreadID;\n}\n\nexport type WorkerId = Platform.Brand.Brand<string, 'workerIdTag'>;\n\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 isDOMStats(event: Event): event is DOMStats {\n return event.name === 'DOMStats';\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 isAnimation(\n event: Event,\n ): event is Animation {\n // We've found some rare traces with an Animation 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 === Name.LAYOUT_SHIFT;\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 EventTimingBeginOrEnd {\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\n// Any event where we receive data (and get an encodedDataLength)\nexport function isReceivedDataEvent(\n event: Event,\n ): event is ResourceReceivedData|ResourceFinish|ResourceReceiveResponse {\n return event.name === 'ResourceReceivedData' || event.name === 'ResourceFinish' ||\n event.name === 'ResourceReceiveResponse';\n}\n\nexport function isSyntheticNetworkRequest(\n event: Event,\n ): event is SyntheticNetworkRequest {\n return event.name === Name.SYNTHETIC_NETWORK_REQUEST;\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\n/** A VALID navigation start (as it has a populated documentLoaderURL) */\nexport function isNavigationStart(event: Event): event is NavigationStart {\n return event.name === 'navigationStart' && (event as NavigationStart).args?.data?.documentLoaderURL !== '';\n}\n\nexport interface DidCommitSameDocumentNavigation extends Complete {\n name: 'RenderFrameHostImpl::DidCommitSameDocumentNavigation';\n args: Args&{\n url: string,\n render_frame_host: {\n frame_type: string,\n },\n };\n}\n\nexport function isDidCommitSameDocumentNavigation(event: Event): event is DidCommitSameDocumentNavigation {\n return event.name === 'RenderFrameHostImpl::DidCommitSameDocumentNavigation';\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 isRemoteFontLoaded(event: Event): event is RemoteFontLoaded {\n return event.name === Name.REMOTE_FONT_LOADED;\n}\n\nexport function isPerformanceMeasure(event: Event): event is PerformanceMeasure {\n return isUserTiming(event) && isPhaseAsync(event.ph);\n}\n\nexport function isPerformanceMeasureBegin(event: Event): event is PerformanceMeasureBegin {\n return isPerformanceMeasure(event) && event.ph === Phase.ASYNC_NESTABLE_START;\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 isConsoleTimeStamp(event: Event): event is ConsoleTimeStamp {\n return event.ph === Phase.INSTANT && event.name === Name.TIME_STAMP;\n}\n\nexport function isUserTimingMeasure(event: Event): event is UserTimingMeasure {\n return event.name === Name.USER_TIMING_MEASURE;\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 return event.name === Name.SYNTHETIC_LAYOUT_SHIFT;\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 isCSS: boolean,\n isPicture?: boolean,\n loadingAttribute?: string,\n srcsetAttribute?: string,\n url?: string, srcHeight: number, srcWidth: number,\n nodeId?: Protocol.DOM.BackendNodeId,\n frame?: string,\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\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?: Partial<CallFrame>& {\n frame?: string,\n },\n };\n}\nexport function isFunctionCall(event: Event): event is FunctionCall {\n return event.name === Name.FUNCTION_CALL;\n}\n\nexport interface SchedulePostTaskCallback extends Instant {\n name: Name.SCHEDULE_POST_TASK_CALLBACK;\n args: Args&{\n data: {\n taskId: number,\n priority: 'user-blocking'|'user-visible'|'background',\n delay: Milli,\n frame?: string,\n stackTrace?: CallFrame,\n },\n };\n}\nexport function isSchedulePostTaskCallback(event: Event): event is SchedulePostTaskCallback {\n return event.name === Name.SCHEDULE_POST_TASK_CALLBACK;\n}\n\nexport interface RunPostTaskCallback extends Complete {\n name: Name.RUN_POST_TASK_CALLBACK;\n args: Args&{\n data: {\n taskId: number,\n priority: 'user-blocking'|'user-visible'|'background',\n delay: Milli,\n frame?: string,\n },\n };\n}\nexport function isRunPostTaskCallback(event: Event): event is RunPostTaskCallback {\n return event.name === Name.RUN_POST_TASK_CALLBACK;\n}\n\nexport interface AbortPostTaskCallback extends Complete {\n name: Name.ABORT_POST_TASK_CALLBACK;\n args: Args&{\n data: {\n taskId: number,\n frame?: string,\n stackTrace?: CallFrame,\n },\n };\n}\nexport function isAbortPostTaskCallback(event: Event): event is RunPostTaskCallback {\n return event.name === Name.ABORT_POST_TASK_CALLBACK;\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. Note: these are also\n * commonly referred to as \"JS entry points\".\n */\nexport function isJSInvocationEvent(event: Event): boolean {\n switch (event.name) {\n case Name.RUN_MICROTASKS:\n case Name.FUNCTION_CALL:\n // TODO(paulirish): Define types for these Evaluate* events\n case Name.EVALUATE_SCRIPT:\n case Name.EVALUATE_MODULE:\n case Name.EVENT_DISPATCH:\n case Name.V8_EXECUTE:\n case Name.V8_CONSOLE_RUN_TASK:\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 if (isConsoleRunTask(event)) {\n return true;\n }\n return false;\n}\nexport interface ConsoleRunTask extends Event {\n args: Args&{\n data: ArgsData & {\n sampleTraceId?: number,\n },\n };\n name: Name.V8_CONSOLE_RUN_TASK;\n}\n\nexport function isConsoleRunTask(event: Event): event is ConsoleRunTask {\n return event.name === Name.V8_CONSOLE_RUN_TASK;\n}\n\nexport interface FlowEvent extends Event {\n // Contains a flow id created by perfetto for the flow this phase\n // event belongs to.\n id: number;\n ph: Phase.FLOW_START|Phase.FLOW_END|Phase.FLOW_STEP;\n}\n\nexport function isFlowPhaseEvent(event: Event): event is FlowEvent {\n return event.ph === Phase.FLOW_START || event.ph === Phase.FLOW_STEP || event.ph === Phase.FLOW_END;\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 V8_CONSOLE_RUN_TASK = 'V8Console::runTask',\n SCHEDULE_POST_TASK_CALLBACK = 'SchedulePostTaskCallback',\n RUN_POST_TASK_CALLBACK = 'RunPostTaskCallback',\n ABORT_POST_TASK_CALLBACK = 'AbortPostTaskCallback',\n DEBUGGER_ASYNC_TASK_RUN = 'v8::Debugger::AsyncTaskRun',\n DEBUGGER_ASYNC_TASK_SCHEDULED = 'v8::Debugger::AsyncTaskScheduled',\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 = 'SyntheticLayoutShift',\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 CONSOLE_TIME = 'ConsoleTime',\n USER_TIMING = 'UserTiming',\n INTERACTIVE_TIME = 'InteractiveTime',\n TIME_STAMP = 'TimeStamp',\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 LAYOUT_IMAGE_UNSIZED = 'LayoutImageUnsized',\n\n DOM_LOADING = 'domLoading',\n BEGIN_REMOTE_FONT_LOAD = 'BeginRemoteFontLoad',\n REMOTE_FONT_LOADED = 'RemoteFontLoaded',\n\n ANIMATION_FRAME = 'AnimationFrame',\n ANIMATION_FRAME_PRESENTATION = 'AnimationFrame::Presentation',\n\n SYNTHETIC_NETWORK_REQUEST = 'SyntheticNetworkRequest',\n USER_TIMING_MEASURE = 'UserTiming::Measure',\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: Micro;\n startTimeOffset: Micro;\n endTime: Micro;\n duration: Micro;\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: number[];\n serializedPicture: string;\n}\n\nexport interface TargetRundownEvent extends Event {\n cat: 'disabled-by-default-devtools.target-rundown';\n name: 'ScriptCompiled';\n args: Args&{\n data?: {\n frame: Protocol.Page.FrameId,\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 isTargetRundownEvent(event: Event): event is TargetRundownEvent {\n return event.cat === 'disabled-by-default-devtools.target-rundown' && event.name === 'ScriptCompiled';\n}\n\nexport interface V8SourceRundownEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown';\n name: 'ScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n executionContextId: Protocol.Runtime.ExecutionContextId,\n scriptId: number,\n startLine: number,\n startColumn: number,\n endLine: number,\n endColumn: number,\n hash: string,\n isModule: boolean,\n hasSourceUrl: boolean,\n url?: string,\n sourceUrl?: string,\n sourceMapUrl?: string,\n },\n };\n}\n\nexport function isV8SourceRundownEvent(event: Event): event is V8SourceRundownEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown' && event.name === 'ScriptCatchup';\n}\n\nexport interface V8SourceRundownSourcesScriptCatchupEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n name: 'ScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n scriptId: number,\n length: number,\n sourceText: string,\n },\n };\n}\n\nexport function isV8SourceRundownSourcesScriptCatchupEvent(event: Event):\n event is V8SourceRundownSourcesScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'ScriptCatchup';\n}\n\nexport interface V8SourceRundownSourcesLargeScriptCatchupEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n name: 'LargeScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n scriptId: number,\n splitIndex: number,\n splitCount: number,\n sourceText: string,\n },\n };\n}\n\nexport function isV8SourceRundownSourcesLargeScriptCatchupEvent(event: Event):\n event is V8SourceRundownSourcesLargeScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'LargeScriptCatchup';\n}\n\nexport interface V8SourceRundownSourcesStubScriptCatchupEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n name: 'StubScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n scriptId: number,\n },\n };\n}\n\nexport function isV8SourceRundownSourcesStubScriptCatchupEvent(event: Event):\n event is V8SourceRundownSourcesStubScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'StubScriptCatchup';\n}\n\nexport function isAnyScriptCatchupEvent(event: Event): event is V8SourceRundownSourcesScriptCatchupEvent|\n V8SourceRundownSourcesLargeScriptCatchupEvent|V8SourceRundownSourcesStubScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources';\n}\n"]}
|
|
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\nimport type * as Platform from '../../../core/platform/platform.js';\nimport type * as Protocol from '../../../generated/protocol.js';\n\nimport type {Micro, Milli, Seconds, TraceWindowMicro} 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?: Micro;\n ts: Micro;\n tdur?: Micro;\n dur?: Micro;\n}\n\nexport interface Args {\n data?: ArgsData;\n sampleTraceId?: number;\n stackTrace?: CallFrame[];\n}\n\nexport interface ArgsData {\n stackTrace?: CallFrame[];\n sampleTraceId?: number;\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): 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: Micro,\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?: Micro[],\n lines?: Micro[],\n },\n };\n}\n\nexport interface PartialProfile {\n nodes?: PartialNode[];\n samples: CallFrameID[];\n /**\n * Contains trace ids assigned to samples, if any. Trace ids are\n * keyed by the sample index in the profile (the keys of the object\n * are strings containing the numeric index).\n */\n /* eslint-disable @typescript-eslint/naming-convention */\n trace_ids?: Record<string, number>;\n /* eslint-enable @typescript-eslint/naming-convention */\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: Micro;\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: Milli,\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 sampleTraceId?: number, frame: string, startLine: number, 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\n// TODO(paulirish): Migrate to the new (Sept 2024) EventTiming trace events.\n// See https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/timing/window_performance.cc;l=900-901;drc=b503c262e425eae59ced4a80d59d176ed07152c7\nexport type EventTimingBeginOrEnd = EventTimingBegin|EventTimingEnd;\n\nexport interface EventTimingBegin extends Event {\n ph: Phase.ASYNC_NESTABLE_START;\n name: Name.EVENT_TIMING;\n id: string;\n args: Args&{\n // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/timing/performance_event_timing.cc;l=297;drc=4f00803ca25c0d0480ed14844d6406933c21e80e\n data: ArgsData & {\n cancelable: boolean,\n duration: Milli,\n type: string,\n interactionId: number,\n interactionOffset: number,\n nodeId: Protocol.DOM.BackendNodeId,\n frame?: string, // From May 2022 onwards, this is where frame is located. https://chromium-review.googlesource.com/c/chromium/src/+/3632661\n processingEnd?: Milli,\n processingStart?: Milli,\n timeStamp?: Milli,\n enqueuedToMainThreadTime?: Milli,\n commitFinishTime?: Milli,\n },\n frame?: string, // Prior to May 2022, `frame` was here in args.\n };\n}\nexport interface EventTimingEnd extends Event {\n ph: Phase.ASYNC_NESTABLE_END;\n name: Name.EVENT_TIMING;\n id: string;\n args: Args;\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: Micro;\n dur: Micro;\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: Micro;\n download: Micro;\n downloadStart: Micro;\n finishTime: Micro;\n initialConnection: Micro;\n isDiskCached: boolean;\n isHttps: boolean;\n isMemoryCached: boolean;\n isPushedResource: boolean;\n networkDuration: Micro;\n processingDuration: Micro;\n proxyNegotiation: Micro;\n queueing: Micro;\n redirectionDuration: Micro;\n requestSent: Micro;\n sendStartTime: Micro;\n ssl: Micro;\n stalled: Micro;\n totalTime: Micro;\n /** Server response time (receiveHeadersEnd - sendEnd) */\n waiting: Micro;\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 },\n };\n cat: 'loading';\n name: Name.SYNTHETIC_NETWORK_REQUEST;\n ph: Phase.COMPLETE;\n dur: Micro;\n tdur: Micro;\n ts: Micro;\n tts: Micro;\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: Micro;\n ts: Micro;\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\n/**\n * In January 2025 when crrev.com/c/6197645 landed, it changed the format of screenshot events.\n * That is why we two screenshot types:\n * `LegacyScreenshot` and `LegacySyntheticScreenshot`: BEFORE the above CL.\n * `Screenshot`: AFTER the above CL.\n * Important things to note:\n * 1. Both the \"old\" and \"new\" events share the name \"Screenshot\" but their format is very different.\n * 2. The old events had both a raw event (LegacyScreenshot) and a synthetic\n * event (LegacySyntheticScreenshot). The new events only have a raw event, as\n * we do not need the additional complexity of a synthetic event.\n * 3. Because we like to support \"old\" traces, DevTools will maintain its\n * support for both screenshot events for the foreseeable future. If you are\n * consuming screenshot events from the ScreenshotHandler, you must make sure\n * to have your code deal with the two different formats.\n */\n// These are nullable because in January 2025 a CL in Chromium\nexport interface LegacyScreenshot extends Event {\n /**\n * @deprecated This value is incorrect. Use ScreenshotHandler.getPresentationTimestamp()\n */\n ts: Micro;\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 isLegacyScreenshot(event: Event): event is LegacyScreenshot {\n return event.name === Name.SCREENSHOT && 'id' in event;\n}\nexport function isLegacySyntheticScreenshot(event: Event): event is LegacySyntheticScreenshot {\n return event.name === Name.SCREENSHOT && 'dataUri' in (event.args ?? {});\n}\n\nexport function isScreenshot(event: Event): event is Screenshot {\n return event.name === Name.SCREENSHOT && 'source_id' in (event.args ?? {});\n}\n\nexport interface LegacySyntheticScreenshot extends Event, SyntheticBased {\n rawSourceEvent: LegacyScreenshot;\n /** This is the correct presentation timestamp. */\n ts: Micro;\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\nexport interface Screenshot extends Instant {\n args: Args&{\n snapshot: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n source_id: number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n frame_sequence: number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n expected_display_time: number,\n };\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 frame: string,\n data?: ArgsData&{\n /** Must be non-empty to be valid. An empty documentLoaderURL means the event can be ignored. */\n documentLoaderURL: string,\n isLoadingMainFrame: boolean,\n navigationId: string,\n /**\n * `isOutermostMainFrame` was introduced in crrev.com/c/3625434 and exists because of Fenced Frames\n * [github.com/WICG/fenced-frame/tree/master/explainer]. Fenced frames introduce a situation where\n * `isLoadingMainFrame` could be true for a navigation, but that navigation be within an embedded \"main frame\", and\n * therefore it wouldn't be on the top level main frame. In situations where we need to distinguish that, we can\n * rely on `isOutermostMainFrame`, which will only be true for navigations on the top level main frame.\n * This flag is optional as it was introduced in May 2022; so users reasonably may import traces from before that\n * date that do not have this field present.\n */\n isOutermostMainFrame?: boolean,\n /**\n * @deprecated use documentLoaderURL for navigation events URLs\n */\n url?: string,\n },\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 if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) {\n return markerTypeGuards.some(fn => fn(event));\n }\n return false;\n}\n\nconst pageLoadEventTypeGuards = [\n ...markerTypeGuards,\n isInteractiveTime,\n];\n\nexport function eventIsPageLoadEvent(event: Event): event is PageLoadEvent {\n if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) {\n return pageLoadEventTypeGuards.some(fn => fn(event));\n }\n return false;\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 DOMStats extends Instant {\n name: 'DOMStats';\n args: Args&{\n data: ArgsData & {\n frame: string,\n totalElements: number,\n maxChildren?: {\n nodeId: Protocol.DOM.BackendNodeId,\n nodeName: string,\n numChildren: number,\n },\n maxDepth?: {\n nodeId: Protocol.DOM.BackendNodeId,\n nodeName: string,\n depth: number,\n },\n },\n };\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 interface 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: Name.LAYOUT_SHIFT;\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: LegacySyntheticScreenshot|Screenshot|null, after: LegacySyntheticScreenshot|Screenshot|null};\n timeFromNavigation?: Micro;\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}\n\nexport interface SyntheticLayoutShift extends Omit<LayoutShift, 'name'>, SyntheticBased<Phase.INSTANT> {\n name: Name.SYNTHETIC_LAYOUT_SHIFT;\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: TraceWindowMicro;\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: TraceWindowMicro,\n needsImprovement?: TraceWindowMicro,\n bad?: TraceWindowMicro,\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: Micro;\n // The duration of the cluster. This should include up until the end of the last\n // layout shift in this cluster.\n dur: Micro;\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\n/** Only sent for navigations. https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_instrumentation.cc;l=1612-1647;drc=ec7daf93d0479b758610c75f4e146fd4d2d6ed2b */\nexport interface ResourceWillSendRequest extends Instant {\n name: Name.RESOURCE_WILL_SEND_REQUEST;\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\n/** See https://mdn.github.io/shared-assets/images/diagrams/api/performance/timestamp-diagram.svg */\ninterface ResourceReceiveResponseTimingData {\n connectEnd: Milli;\n connectStart: Milli;\n dnsEnd: Milli;\n dnsStart: Milli;\n proxyEnd: Milli;\n proxyStart: Milli;\n pushEnd: Milli;\n pushStart: Milli;\n receiveHeadersEnd: Milli;\n receiveHeadersStart: Milli;\n /** When the network service is about to handle a request, ie. just before going to the HTTP cache or going to the network for DNS/connection setup. */\n requestTime: Seconds;\n sendEnd: Milli;\n sendStart: Milli;\n sslEnd: Milli;\n sslStart: Milli;\n workerReady: Milli;\n workerStart: Milli;\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: Milli,\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}\n\nexport function isRenderFrameImplCreateChildFrame(event: Event): event is RenderFrameImplCreateChildFrame {\n return event.name === Name.RENDER_FRAME_IMPL_CREATE_CHILD_FRAME;\n}\n\nexport interface LayoutImageUnsized extends Event {\n name: Name.LAYOUT_IMAGE_UNSIZED;\n args: Args&{\n data: {\n nodeId: Protocol.DOM.BackendNodeId,\n frameId: string,\n },\n };\n}\n\nexport function isLayoutImageUnsized(event: Event): event is LayoutImageUnsized {\n return event.name === Name.LAYOUT_IMAGE_UNSIZED;\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 AnimationFrame extends PairableAsync {\n name: Name.ANIMATION_FRAME;\n args?: AnimationFrameArgs;\n}\nexport type AnimationFrameArgs = Args&{\n animation_frame_timing_info: {\n blocking_duration_ms: number,\n duration_ms: number,\n num_scripts: number,\n },\n id: string,\n};\n\nexport interface AnimationFrameAsyncStart extends AnimationFrame {\n ph: Phase.ASYNC_NESTABLE_START;\n}\nexport interface AnimationFrameAsyncEnd extends AnimationFrame {\n ph: Phase.ASYNC_NESTABLE_END;\n}\n\nexport function isAnimationFrameAsyncStart(data: Event): data is AnimationFrameAsyncStart {\n return data.name === Name.ANIMATION_FRAME && data.ph === Phase.ASYNC_NESTABLE_START;\n}\nexport function isAnimationFrameAsyncEnd(data: Event): data is AnimationFrameAsyncEnd {\n return data.name === Name.ANIMATION_FRAME && data.ph === Phase.ASYNC_NESTABLE_END;\n}\n\nexport interface AnimationFramePresentation extends Event {\n name: Name.ANIMATION_FRAME_PRESENTATION;\n ph: Phase.ASYNC_NESTABLE_INSTANT;\n args?: Args&{\n id: string,\n };\n}\nexport function isAnimationFramePresentation(data: Event): data is AnimationFramePresentation {\n return data.name === Name.ANIMATION_FRAME_PRESENTATION;\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 url?: string,\n };\n}\n\nexport interface RemoteFontLoaded extends UserTiming {\n name: Name.REMOTE_FONT_LOADED;\n args: Args&{\n url: string,\n name: string,\n };\n}\n\nexport type PairableUserTiming = UserTiming&PairableAsync;\n\nexport interface PerformanceMeasureBegin extends PairableUserTiming {\n args: Args&{\n detail?: string,\n callTime?: Micro,\n traceId?: number,\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 callTime?: Micro,\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 ConsoleTimeStamp extends Event {\n cat: 'devtools.timeline';\n name: Name.TIME_STAMP;\n ph: Phase.INSTANT;\n args: Args&{\n data?: ArgsData & {\n // The console.timeStamp allows to pass integers as values as well\n // as strings\n message: string,\n name?: string|number,\n start?: string|number,\n end?: string|number,\n track?: string|number,\n trackGroup?: string|number,\n color?: string|number,\n sampleTraceId?: number,\n },\n };\n}\n\nexport interface SyntheticConsoleTimeStamp extends Event, SyntheticBased {\n cat: 'disabled-by-default-v8.inspector';\n ph: Phase.COMPLETE;\n}\n\nexport interface UserTimingMeasure extends Event {\n cat: 'devtools.timeline';\n ph: Phase.COMPLETE;\n name: Name.USER_TIMING_MEASURE;\n args: Args&{\n sampleTraceId: number,\n traceId: number,\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 dropped 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\n// TODO(crbug.com/409484302): Remove once Chrome migrates from\n// ChromeTrackEvent.chrome_frame_reporter to ChromeTrackEvent.frame_reporter.\nexport interface OldChromeFrameReporterArgs {\n chrome_frame_reporter: ChromeFrameReporter;\n}\n\nexport interface NewChromeFrameReporterArgs {\n frame_reporter: ChromeFrameReporter;\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&(OldChromeFrameReporterArgs|NewChromeFrameReporterArgs);\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, T extends Event = Event> extends Event {\n ph: Ph;\n rawSourceEvent: T;\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<Phase, T> {\n rawSourceEvent: T;\n name: T['name'];\n cat: T['cat'];\n id?: string;\n id2?: {local?: string, global?: string};\n\n dur: Micro;\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>;\nexport type SyntheticAnimationFramePair = SyntheticEventPair<AnimationFrame>;\n\nexport type SyntheticUserTimingPair = SyntheticEventPair<PerformanceMeasure>;\n\nexport type SyntheticConsoleTimingPair = SyntheticEventPair<ConsoleTime>;\n\nexport type SyntheticAnimationPair = SyntheticEventPair<Animation>;\n\nexport interface SyntheticInteractionPair extends SyntheticEventPair<EventTimingBeginOrEnd> {\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: Micro;\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: Micro;\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: Micro;\n processingEnd: Micro;\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: Micro;\n // 2. mainThreadHandling: time spent processing the event handler\n mainThreadHandling: Micro;\n // 3. presentationDelay: delay between the event being processed and the frame being rendered\n presentationDelay: Micro;\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 individual 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 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 // Used to associate a stack sample with a trace event.\n traceId?: number, 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}\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\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\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\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\n fast_reject_count: number;\n\n match_attempts: number;\n selector: string;\n\n style_sheet_id: string;\n\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 selector_timings: SelectorTiming[];\n}\n\nexport interface SelectorStats extends Complete {\n name: Name.SELECTOR_STATS;\n args: Args&{\n\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 sampleTraceId?: number, 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 sampleTraceId?: number, frame: string, dirtyObjects: number, partialLayout: boolean, totalObjects: number,\n stackTrace?: CallFrame[],\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\nexport interface DebuggerAsyncTaskScheduled extends Event {\n name: Name.DEBUGGER_ASYNC_TASK_SCHEDULED;\n args: Args&{\n taskName: string,\n };\n}\n\nexport function isDebuggerAsyncTaskScheduled(event: Event): event is DebuggerAsyncTaskScheduled {\n return event.name === Name.DEBUGGER_ASYNC_TASK_SCHEDULED;\n}\n\nexport interface DebuggerAsyncTaskRun extends Event {\n name: Name.DEBUGGER_ASYNC_TASK_RUN;\n}\n\nexport function isDebuggerAsyncTaskRun(event: Event): event is DebuggerAsyncTaskRun {\n return event.name === Name.DEBUGGER_ASYNC_TASK_RUN;\n}\n\nexport type ProfileID = Platform.Brand.Brand<string, 'profileIdTag'>;\n\nexport function ProfileID(value: string): ProfileID {\n return value as ProfileID;\n}\n\nexport type CallFrameID = Platform.Brand.Brand<number, 'callFrameIdTag'>;\n\nexport function CallFrameID(value: number): CallFrameID {\n return value as CallFrameID;\n}\n\nexport type SampleIndex = Platform.Brand.Brand<number, 'sampleIndexTag'>;\n\nexport function SampleIndex(value: number): SampleIndex {\n return value as SampleIndex;\n}\n\nexport type ProcessID = Platform.Brand.Brand<number, 'processIdTag'>;\n\nexport function ProcessID(value: number): ProcessID {\n return value as ProcessID;\n}\n\nexport type ThreadID = Platform.Brand.Brand<number, 'threadIdTag'>;\n\nexport function ThreadID(value: number): ThreadID {\n return value as ThreadID;\n}\n\nexport type WorkerId = Platform.Brand.Brand<string, 'workerIdTag'>;\n\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 isDOMStats(event: Event): event is DOMStats {\n return event.name === 'DOMStats';\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 isAnimation(\n event: Event,\n ): event is Animation {\n // We've found some rare traces with an Animation 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 === Name.LAYOUT_SHIFT;\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 EventTimingBeginOrEnd {\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\n// Any event where we receive data (and get an encodedDataLength)\nexport function isReceivedDataEvent(\n event: Event,\n ): event is ResourceReceivedData|ResourceFinish|ResourceReceiveResponse {\n return event.name === 'ResourceReceivedData' || event.name === 'ResourceFinish' ||\n event.name === 'ResourceReceiveResponse';\n}\n\nexport function isSyntheticNetworkRequest(\n event: Event,\n ): event is SyntheticNetworkRequest {\n return event.name === Name.SYNTHETIC_NETWORK_REQUEST;\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\n/** A VALID navigation start (as it has a populated documentLoaderURL) */\nexport function isNavigationStart(event: Event): event is NavigationStart {\n return event.name === 'navigationStart' && (event as NavigationStart).args?.data?.documentLoaderURL !== '';\n}\n\nexport interface DidCommitSameDocumentNavigation extends Complete {\n name: 'RenderFrameHostImpl::DidCommitSameDocumentNavigation';\n args: Args&{\n url: string,\n render_frame_host: {\n frame_type: string,\n },\n };\n}\n\nexport function isDidCommitSameDocumentNavigation(event: Event): event is DidCommitSameDocumentNavigation {\n return event.name === 'RenderFrameHostImpl::DidCommitSameDocumentNavigation';\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 isRemoteFontLoaded(event: Event): event is RemoteFontLoaded {\n return event.name === Name.REMOTE_FONT_LOADED;\n}\n\nexport function isPerformanceMeasure(event: Event): event is PerformanceMeasure {\n return isUserTiming(event) && isPhaseAsync(event.ph);\n}\n\nexport function isPerformanceMeasureBegin(event: Event): event is PerformanceMeasureBegin {\n return isPerformanceMeasure(event) && event.ph === Phase.ASYNC_NESTABLE_START;\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 isConsoleTimeStamp(event: Event): event is ConsoleTimeStamp {\n return event.ph === Phase.INSTANT && event.name === Name.TIME_STAMP;\n}\n\nexport function isUserTimingMeasure(event: Event): event is UserTimingMeasure {\n return event.name === Name.USER_TIMING_MEASURE;\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 return event.name === Name.SYNTHETIC_LAYOUT_SHIFT;\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 // Optional as it was added in M137: crrev.com/c/6491448\n nodeName?: string,\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 isCSS: boolean,\n isPicture?: boolean,\n loadingAttribute?: string,\n srcsetAttribute?: string,\n url?: string, srcHeight: number, srcWidth: number,\n nodeId?: Protocol.DOM.BackendNodeId,\n // Optional as it was added in M137: crrev.com/c/6491448\n nodeName?: string,\n frame?: string,\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\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?: Partial<CallFrame>& {\n frame?: string,\n },\n };\n}\nexport function isFunctionCall(event: Event): event is FunctionCall {\n return event.name === Name.FUNCTION_CALL;\n}\n\nexport interface SchedulePostTaskCallback extends Instant {\n name: Name.SCHEDULE_POST_TASK_CALLBACK;\n args: Args&{\n data: {\n taskId: number,\n priority: 'user-blocking'|'user-visible'|'background',\n delay: Milli,\n frame?: string,\n stackTrace?: CallFrame,\n },\n };\n}\nexport function isSchedulePostTaskCallback(event: Event): event is SchedulePostTaskCallback {\n return event.name === Name.SCHEDULE_POST_TASK_CALLBACK;\n}\n\nexport interface RunPostTaskCallback extends Complete {\n name: Name.RUN_POST_TASK_CALLBACK;\n args: Args&{\n data: {\n taskId: number,\n priority: 'user-blocking'|'user-visible'|'background',\n delay: Milli,\n frame?: string,\n },\n };\n}\nexport function isRunPostTaskCallback(event: Event): event is RunPostTaskCallback {\n return event.name === Name.RUN_POST_TASK_CALLBACK;\n}\n\nexport interface AbortPostTaskCallback extends Complete {\n name: Name.ABORT_POST_TASK_CALLBACK;\n args: Args&{\n data: {\n taskId: number,\n frame?: string,\n stackTrace?: CallFrame,\n },\n };\n}\nexport function isAbortPostTaskCallback(event: Event): event is RunPostTaskCallback {\n return event.name === Name.ABORT_POST_TASK_CALLBACK;\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. Note: these are also\n * commonly referred to as \"JS entry points\".\n */\nexport function isJSInvocationEvent(event: Event): boolean {\n switch (event.name) {\n case Name.RUN_MICROTASKS:\n case Name.FUNCTION_CALL:\n // TODO(paulirish): Define types for these Evaluate* events\n case Name.EVALUATE_SCRIPT:\n case Name.EVALUATE_MODULE:\n case Name.EVENT_DISPATCH:\n case Name.V8_EXECUTE:\n case Name.V8_CONSOLE_RUN_TASK:\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 if (isConsoleRunTask(event)) {\n return true;\n }\n return false;\n}\nexport interface ConsoleRunTask extends Event {\n args: Args&{\n data: ArgsData & {\n sampleTraceId?: number,\n },\n };\n name: Name.V8_CONSOLE_RUN_TASK;\n}\n\nexport function isConsoleRunTask(event: Event): event is ConsoleRunTask {\n return event.name === Name.V8_CONSOLE_RUN_TASK;\n}\n\nexport interface FlowEvent extends Event {\n // Contains a flow id created by perfetto for the flow this phase\n // event belongs to.\n id: number;\n ph: Phase.FLOW_START|Phase.FLOW_END|Phase.FLOW_STEP;\n}\n\nexport function isFlowPhaseEvent(event: Event): event is FlowEvent {\n return event.ph === Phase.FLOW_START || event.ph === Phase.FLOW_STEP || event.ph === Phase.FLOW_END;\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 V8_CONSOLE_RUN_TASK = 'V8Console::runTask',\n SCHEDULE_POST_TASK_CALLBACK = 'SchedulePostTaskCallback',\n RUN_POST_TASK_CALLBACK = 'RunPostTaskCallback',\n ABORT_POST_TASK_CALLBACK = 'AbortPostTaskCallback',\n DEBUGGER_ASYNC_TASK_RUN = 'v8::Debugger::AsyncTaskRun',\n DEBUGGER_ASYNC_TASK_SCHEDULED = 'v8::Debugger::AsyncTaskScheduled',\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 = 'SyntheticLayoutShift',\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 CONSOLE_TIME = 'ConsoleTime',\n USER_TIMING = 'UserTiming',\n INTERACTIVE_TIME = 'InteractiveTime',\n TIME_STAMP = 'TimeStamp',\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 LAYOUT_IMAGE_UNSIZED = 'LayoutImageUnsized',\n\n DOM_LOADING = 'domLoading',\n BEGIN_REMOTE_FONT_LOAD = 'BeginRemoteFontLoad',\n REMOTE_FONT_LOADED = 'RemoteFontLoaded',\n\n ANIMATION_FRAME = 'AnimationFrame',\n ANIMATION_FRAME_PRESENTATION = 'AnimationFrame::Presentation',\n\n SYNTHETIC_NETWORK_REQUEST = 'SyntheticNetworkRequest',\n USER_TIMING_MEASURE = 'UserTiming::Measure',\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: Micro;\n startTimeOffset: Micro;\n endTime: Micro;\n duration: Micro;\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: number[];\n serializedPicture: string;\n}\n\nexport interface TargetRundownEvent extends Event {\n cat: 'disabled-by-default-devtools.target-rundown';\n name: 'ScriptCompiled';\n args: Args&{\n data?: {\n frame: Protocol.Page.FrameId,\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 isTargetRundownEvent(event: Event): event is TargetRundownEvent {\n return event.cat === 'disabled-by-default-devtools.target-rundown' && event.name === 'ScriptCompiled';\n}\n\nexport interface V8SourceRundownEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown';\n name: 'ScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n executionContextId: Protocol.Runtime.ExecutionContextId,\n scriptId: number,\n hash: string,\n isModule: boolean,\n hasSourceUrl: boolean,\n url?: string,\n sourceUrl?: string,\n sourceMapUrl?: string,\n },\n };\n}\n\nexport function isV8SourceRundownEvent(event: Event): event is V8SourceRundownEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown' && event.name === 'ScriptCatchup';\n}\n\nexport interface V8SourceRundownSourcesScriptCatchupEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n name: 'ScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n scriptId: number,\n length: number,\n sourceText: string,\n },\n };\n}\n\nexport function isV8SourceRundownSourcesScriptCatchupEvent(event: Event):\n event is V8SourceRundownSourcesScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'ScriptCatchup';\n}\n\nexport interface V8SourceRundownSourcesLargeScriptCatchupEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n name: 'LargeScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n scriptId: number,\n splitIndex: number,\n splitCount: number,\n sourceText: string,\n },\n };\n}\n\nexport function isV8SourceRundownSourcesLargeScriptCatchupEvent(event: Event):\n event is V8SourceRundownSourcesLargeScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'LargeScriptCatchup';\n}\n\nexport interface V8SourceRundownSourcesStubScriptCatchupEvent extends Event {\n cat: 'disabled-by-default-devtools.v8-source-rundown-sources';\n name: 'StubScriptCatchup';\n args: Args&{\n data: {\n isolate: string,\n scriptId: number,\n },\n };\n}\n\nexport function isV8SourceRundownSourcesStubScriptCatchupEvent(event: Event):\n event is V8SourceRundownSourcesStubScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'StubScriptCatchup';\n}\n\nexport function isAnyScriptCatchupEvent(event: Event): event is V8SourceRundownSourcesScriptCatchupEvent|\n V8SourceRundownSourcesLargeScriptCatchupEvent|V8SourceRundownSourcesStubScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources';\n}\n"]}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"noFallthroughCasesInSwitch": true,
|
|
18
18
|
"noImplicitOverride": true,
|
|
19
19
|
"noImplicitReturns": true,
|
|
20
|
-
"noUnusedLocals":
|
|
20
|
+
"noUnusedLocals": true,
|
|
21
21
|
"noUnusedParameters": true,
|
|
22
22
|
"outDir": ".",
|
|
23
23
|
"rootDir": "../../../../../../../front_end/models/trace/types",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"noFallthroughCasesInSwitch": true,
|
|
18
18
|
"noImplicitOverride": true,
|
|
19
19
|
"noImplicitReturns": true,
|
|
20
|
-
"noUnusedLocals":
|
|
20
|
+
"noUnusedLocals": true,
|
|
21
21
|
"noUnusedParameters": true,
|
|
22
22
|
"outDir": ".",
|
|
23
23
|
"rootDir": "../../../../../../../front_end/models/trace/types",
|