Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
121 KiB
Text
1 line
No EOL
121 KiB
Text
{"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 {ExtensionTrackEntryPayloadDeeplink} from './Extensions.js';\nimport type {Micro, Milli, Seconds, TraceWindowMicro} from './Timing.js';\n\n// Trace Events.\nexport 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 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 *\n * Do not extend the SyntheticBased interface because this one doesn't have a raw trace event but a raw cpu profile.\n * Also we won't manage this event through SyntheticEventsManager.\n */\nexport interface SyntheticCpuProfile extends Complete {\n name: Name.CPU_PROFILE;\n id: ProfileID;\n args: Args&{\n data: ArgsData & {\n cpuProfile: Protocol.Profiler.Profile,\n },\n };\n}\n\nexport interface Profile extends Sample {\n name: 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: Name.PROFILE_CHUNK;\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 frame: string,\n startLine: number,\n url: string,\n sampleTraceId?: number,\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|undefined,\n isLinkPreload: boolean,\n /** Empty string if no response. */\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, file\n */\n protocol: string,\n redirects: SyntheticNetworkRedirect[],\n renderBlocking: RenderBlocking,\n requestId: string,\n requestingFrameUrl: string,\n /** 0 if no response. */\n statusCode: number,\n resourceType: Protocol.Network.ResourceType,\n responseHeaders: Array<{name: string, value: string}>|null,\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. Note even failed requests with no response may be \"finished\". */\n finished: boolean,\n hasResponse: boolean,\n /** If undefined, trace was either too old or had no response. */\n connectionId: number|undefined,\n /** If undefined, trace was either too old or had no response. */\n connectionReused: boolean|undefined,\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 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: 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 doneWithProcessEvent: AuctionWorkletDoneWithProcess,\n runningInProcessEvent?: AuctionWorkletRunningInProcess,\n } |\n {\n runningInProcessEvent: AuctionWorkletRunningInProcess,\n doneWithProcessEvent?: AuctionWorkletDoneWithProcess,\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 // Landed in Chromium M140: crrev.com/c/6702010\n nodeName?: 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 // Added in crbug.com/413284569\n nodeName?: string,\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 persistentIds: boolean,\n frames?: TraceFrame[],\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 page: string,\n isOutermostMainFrame?: boolean,\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 debug_name?: string;\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. The rawSourceEvent is the worst layout shift event\n * in the cluster.\n */\nexport interface SyntheticLayoutShiftCluster extends SyntheticBased<Phase.COMPLETE> {\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 /** M116. */\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 connectionId: number,\n connectionReused: boolean,\n timing?: ResourceReceiveResponseTimingData,\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 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 enum StyleRecalcInvalidationReason {\n ANIMATION = 'Animation',\n RELATED_STYLE_RULE = 'Related style rule',\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<{id: string, classes?: string[]}>,\n subtree: boolean,\n nodeName?: string,\n extraData?: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n selectors?: Array<{selector: string, style_sheet_id: 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 LinkPreconnect extends Instant {\n name: Name.LINK_PRECONNECT;\n args: Args&{\n data: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n node_id: Protocol.DOM.BackendNodeId,\n url: string,\n frame?: string,\n },\n };\n}\nexport function isLinkPreconnect(event: Event): event is LinkPreconnect {\n return event.name === Name.LINK_PRECONNECT;\n}\n\nexport interface ScheduleStyleRecalculation extends Instant {\n name: Name.SCHEDULE_STYLE_RECALCULATION;\n args: Args&{\n data: {\n frame: string,\n reason?: StyleRecalcInvalidationReason,\n subtree?: boolean,\n nodeId?: Protocol.DOM.BackendNodeId,\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}\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 devtools?: {\n link: ExtensionTrackEntryPayloadDeeplink,\n },\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/**\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 /**\n * Identifies a BeginFrameArgs (along with the source_id).\n * See comments in components/viz/common/frame_sinks/begin_frame_args.h.\n */\n frame_sequence: number;\n /**\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 */\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 /**\n * Whether the frame contained any missing content (i.e. whether there was\n * checkerboarding in the frame).\n */\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 /**\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 */\n frame_type: FrameType;\n /**\n * The breakdown stage of PipelineReporter that is most likely accountable for\n * high latency.\n */\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 /**\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 */\n STATE_PRESENTED_ALL = 'STATE_PRESENTED_ALL',\n /**\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 */\n STATE_PRESENTED_PARTIAL = 'STATE_PRESENTED_PARTIAL',\n /**\n * The frame was dropped, i.e. some updates were desired for the frame, but\n * was not presented. *\n */\n STATE_DROPPED = 'STATE_DROPPED',\n}\n\nconst enum FrameDropReason {\n REASON_UNSPECIFIED = 'REASON_UNSPECIFIED',\n /**\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 */\n REASON_DISPLAY_COMPOSITOR = 'REASON_DISPLAY_COMPOSITOR',\n /**\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 */\n REASON_MAIN_THREAD = 'REASON_MAIN_THREAD',\n /**\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 */\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 stackTrace: Protocol.Runtime.CallFrame[],\n traceId?: number,\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 enum InvalidationEventType {\n StyleInvalidatorInvalidationTracking = 'StyleInvalidatorInvalidationTracking',\n StyleRecalcInvalidationTracking = 'StyleRecalcInvalidationTracking',\n}\n\nexport interface SelectorTiming {\n 'elapsed (us)': number;\n fast_reject_count: number;\n match_attempts: number;\n selector: string;\n style_sheet_id: string;\n match_count: number;\n invalidation_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 InvalidationCount = 'invalidation_count',\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 frame: string,\n sampleTraceId?: number,\n stackTrace?: CallFrame[],\n },\n };\n}\nexport function isUpdateLayoutTree(event: Event): event is UpdateLayoutTree {\n return event.name === Name.UPDATE_LAYOUT_TREE;\n}\n\nexport interface Layout extends Complete {\n name: Name.LAYOUT;\n args: Args&{\n beginData: {\n frame: string,\n dirtyObjects: number,\n partialLayout: boolean,\n totalObjects: number,\n sampleTraceId?: 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 && Boolean(event.args && 'beginData' in event.args);\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 === Name.PROFILE;\n}\n\nexport function isSyntheticCpuProfile(event: Event): event is SyntheticCpuProfile {\n return event.name === Name.CPU_PROFILE;\n}\n\nexport function isProfileChunk(event: Event): event is ProfileChunk {\n return event.name === Name.PROFILE_CHUNK;\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 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 /** This rect is unreliable and often wrong. We'll remove it. crbug.com/41402938#comment10 */\n clip?: number[],\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 srcHeight: number,\n srcWidth: number,\n isPicture?: boolean,\n loadingAttribute?: string,\n srcsetAttribute?: string,\n url?: string,\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}\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}\n\nexport interface TimerInstall extends Instant {\n name: Name.TIMER_INSTALL;\n args: Args&{\n data: {\n frame: string,\n singleShot: boolean,\n timeout: number,\n timerId: number,\n stackTrace?: CallFrame,\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}\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 dataLength: number,\n frame?: string,\n workerId?: string,\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 dataLength: number,\n frame?: string,\n workerId?: string,\n },\n };\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 dataLength: number,\n frame?: string,\n workerId?: string,\n },\n };\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\nexport interface ParseAuthorStyleSheet extends Complete {\n name: Name.PARSE_AUTHOR_STYLE_SHEET;\n args?: Args&{\n data: {\n stylesheetUrl: string,\n },\n };\n}\n\nexport function isParseAuthorStyleSheetEvent(event: Event): event is ParseAuthorStyleSheet {\n return event.name === Name.PARSE_AUTHOR_STYLE_SHEET;\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 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 CPU_PROFILE = 'CpuProfile',\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 LINK_PRECONNECT = 'LinkPreconnect',\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 sourceMapUrlElided?: boolean,\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 isAnyScriptCatchupEvent(event: Event): event is V8SourceRundownSourcesScriptCatchupEvent|\n V8SourceRundownSourcesLargeScriptCatchupEvent|V8SourceRundownSourcesStubScriptCatchupEvent {\n return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources';\n}\n"]} |