// Copyright 2022 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Trace Events. export var Phase; (function (Phase) { // Standard Phase["BEGIN"] = "B"; Phase["END"] = "E"; Phase["COMPLETE"] = "X"; Phase["INSTANT"] = "I"; Phase["COUNTER"] = "C"; // Async Phase["ASYNC_NESTABLE_START"] = "b"; Phase["ASYNC_NESTABLE_INSTANT"] = "n"; Phase["ASYNC_NESTABLE_END"] = "e"; Phase["ASYNC_STEP_INTO"] = "T"; Phase["ASYNC_BEGIN"] = "S"; Phase["ASYNC_END"] = "F"; Phase["ASYNC_STEP_PAST"] = "p"; // Flow Phase["FLOW_START"] = "s"; Phase["FLOW_STEP"] = "t"; Phase["FLOW_END"] = "f"; // Sample Phase["SAMPLE"] = "P"; // Object Phase["OBJECT_CREATED"] = "N"; Phase["OBJECT_SNAPSHOT"] = "O"; Phase["OBJECT_DESTROYED"] = "D"; // Metadata Phase["METADATA"] = "M"; // Memory Dump Phase["MEMORY_DUMP_GLOBAL"] = "V"; Phase["MEMORY_DUMP_PROCESS"] = "v"; // Mark Phase["MARK"] = "R"; // Clock sync Phase["CLOCK_SYNC"] = "c"; })(Phase || (Phase = {})); export function isNestableAsyncPhase(phase) { return phase === Phase.ASYNC_NESTABLE_START || phase === Phase.ASYNC_NESTABLE_END || phase === Phase.ASYNC_NESTABLE_INSTANT; } export function isPhaseAsync(phase) { return isNestableAsyncPhase(phase) || phase === Phase.ASYNC_BEGIN || phase === Phase.ASYNC_STEP_INTO || phase === Phase.ASYNC_END || phase === Phase.ASYNC_STEP_PAST; } export function isFlowPhase(phase) { return phase === Phase.FLOW_START || phase === Phase.FLOW_STEP || phase === Phase.FLOW_END; } export var Scope; (function (Scope) { Scope["THREAD"] = "t"; Scope["PROCESS"] = "p"; Scope["GLOBAL"] = "g"; })(Scope || (Scope = {})); export function objectIsCallFrame(object) { return ('functionName' in object && typeof object.functionName === 'string') && ('scriptId' in object && (typeof object.scriptId === 'string' || typeof object.scriptId === 'number')) && ('columnNumber' in object && typeof object.columnNumber === 'number') && ('lineNumber' in object && typeof object.lineNumber === 'number') && ('url' in object && typeof object.url === 'string'); } export function isRunTask(event) { return event.name === Name.RUN_TASK; } export var AuctionWorkletType; (function (AuctionWorkletType) { AuctionWorkletType["BIDDER"] = "bidder"; AuctionWorkletType["SELLER"] = "seller"; // Not expected to be used, but here as a fallback in case new types get // added and we have yet to update the trace engine. AuctionWorkletType["UNKNOWN"] = "unknown"; })(AuctionWorkletType || (AuctionWorkletType = {})); export function isAuctionWorkletRunningInProcess(event) { return event.name === 'AuctionWorkletRunningInProcess'; } export function isAuctionWorkletDoneWithProcess(event) { return event.name === 'AuctionWorkletDoneWithProcess'; } export function isLegacyScreenshot(event) { return event.name === Name.SCREENSHOT && 'id' in event; } export function isLegacySyntheticScreenshot(event) { return event.name === Name.SCREENSHOT && 'dataUri' in (event.args ?? {}); } export function isScreenshot(event) { return event.name === Name.SCREENSHOT && 'source_id' in (event.args ?? {}); } const markerTypeGuards = [ isMarkDOMContent, isMarkLoad, isFirstPaint, isFirstContentfulPaint, isLargestContentfulPaintCandidate, isNavigationStart, ]; export const MarkerName = ['MarkDOMContent', 'MarkLoad', 'firstPaint', 'firstContentfulPaint', 'largestContentfulPaint::Candidate']; export function isMarkerEvent(event) { if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) { return markerTypeGuards.some(fn => fn(event)); } return false; } const pageLoadEventTypeGuards = [ ...markerTypeGuards, isInteractiveTime, ]; export function eventIsPageLoadEvent(event) { if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) { return pageLoadEventTypeGuards.some(fn => fn(event)); } return false; } export function isTracingSessionIdForWorker(event) { return event.name === 'TracingSessionIdForWorker'; } export const NO_NAVIGATION = 'NO_NAVIGATION'; export var LayoutInvalidationReason; (function (LayoutInvalidationReason) { LayoutInvalidationReason["SIZE_CHANGED"] = "Size changed"; LayoutInvalidationReason["ATTRIBUTE"] = "Attribute"; LayoutInvalidationReason["ADDED_TO_LAYOUT"] = "Added to layout"; LayoutInvalidationReason["SCROLLBAR_CHANGED"] = "Scrollbar changed"; LayoutInvalidationReason["REMOVED_FROM_LAYOUT"] = "Removed from layout"; LayoutInvalidationReason["STYLE_CHANGED"] = "Style changed"; LayoutInvalidationReason["FONTS_CHANGED"] = "Fonts changed"; LayoutInvalidationReason["UNKNOWN"] = "Unknown"; })(LayoutInvalidationReason || (LayoutInvalidationReason = {})); export function isScheduleStyleInvalidationTracking(event) { return event.name === Name.SCHEDULE_STYLE_INVALIDATION_TRACKING; } export var StyleRecalcInvalidationReason; (function (StyleRecalcInvalidationReason) { StyleRecalcInvalidationReason["ANIMATION"] = "Animation"; StyleRecalcInvalidationReason["RELATED_STYLE_RULE"] = "Related style rule"; })(StyleRecalcInvalidationReason || (StyleRecalcInvalidationReason = {})); export function isStyleRecalcInvalidationTracking(event) { return event.name === Name.STYLE_RECALC_INVALIDATION_TRACKING; } export function isStyleInvalidatorInvalidationTracking(event) { return event.name === Name.STYLE_INVALIDATOR_INVALIDATION_TRACKING; } export function isBeginCommitCompositorFrame(event) { return event.name === Name.BEGIN_COMMIT_COMPOSITOR_FRAME; } export function isParseMetaViewport(event) { return event.name === Name.PARSE_META_VIEWPORT; } export function isLinkPreconnect(event) { return event.name === Name.LINK_PRECONNECT; } export function isScheduleStyleRecalculation(event) { return event.name === Name.SCHEDULE_STYLE_RECALCULATION; } export function isRenderFrameImplCreateChildFrame(event) { return event.name === Name.RENDER_FRAME_IMPL_CREATE_CHILD_FRAME; } export function isLayoutImageUnsized(event) { return event.name === Name.LAYOUT_IMAGE_UNSIZED; } export function isAnimationFrameAsyncStart(data) { return data.name === Name.ANIMATION_FRAME && data.ph === Phase.ASYNC_NESTABLE_START; } export function isAnimationFrameAsyncEnd(data) { return data.name === Name.ANIMATION_FRAME && data.ph === Phase.ASYNC_NESTABLE_END; } export function isAnimationFramePresentation(data) { return data.name === Name.ANIMATION_FRAME_PRESENTATION; } export function isPipelineReporter(event) { return event.name === Name.PIPELINE_REPORTER; } export function isSyntheticBased(event) { return 'rawSourceEvent' in event; } export function isSyntheticInteraction(event) { return Boolean('interactionId' in event && event.args?.data && 'beginEvent' in event.args.data && 'endEvent' in event.args.data); } export function isDrawFrame(event) { // 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. return event.name === Name.DRAW_FRAME && event.ph === Phase.INSTANT; } export function isBeginFrame(event) { // Old traces did not have frameSeqId; but we do not want to support these. return Boolean(event.name === Name.BEGIN_FRAME && event.args && 'frameSeqId' in event.args); } export function isDroppedFrame(event) { // Old traces did not have frameSeqId; but we do not want to support these. return Boolean(event.name === Name.DROPPED_FRAME && event.args && 'frameSeqId' in event.args); } export function isRequestMainThreadFrame(event) { return event.name === Name.REQUEST_MAIN_THREAD_FRAME; } export function isBeginMainThreadFrame(event) { return event.name === Name.BEGIN_MAIN_THREAD_FRAME; } export function isNeedsBeginFrameChanged(event) { return event.name === Name.NEEDS_BEGIN_FRAME_CHANGED; } export function isCommit(event) { // Old traces did not have frameSeqId; but we do not want to support these. return Boolean(event.name === Name.COMMIT && event.args && 'frameSeqId' in event.args); } export function isRasterTask(event) { return event.name === Name.RASTER_TASK; } export function isCompositeLayers(event) { return event.name === Name.COMPOSITE_LAYERS; } export function isActivateLayerTree(event) { return event.name === Name.ACTIVATE_LAYER_TREE; } export function isInvalidationTracking(event) { return isScheduleStyleInvalidationTracking(event) || isStyleRecalcInvalidationTracking(event) || isStyleInvalidatorInvalidationTracking(event) || isLayoutInvalidationTracking(event); } export function isDrawLazyPixelRef(event) { return event.name === Name.DRAW_LAZY_PIXEL_REF; } export function isDecodeLazyPixelRef(event) { return event.name === Name.DECODE_LAZY_PIXEL_REF; } export function isDecodeImage(event) { return event.name === Name.DECODE_IMAGE; } export var InvalidationEventType; (function (InvalidationEventType) { InvalidationEventType["StyleInvalidatorInvalidationTracking"] = "StyleInvalidatorInvalidationTracking"; InvalidationEventType["StyleRecalcInvalidationTracking"] = "StyleRecalcInvalidationTracking"; })(InvalidationEventType || (InvalidationEventType = {})); export var SelectorTimingsKey; (function (SelectorTimingsKey) { SelectorTimingsKey["Elapsed"] = "elapsed (us)"; SelectorTimingsKey["RejectPercentage"] = "reject_percentage"; SelectorTimingsKey["FastRejectCount"] = "fast_reject_count"; SelectorTimingsKey["MatchAttempts"] = "match_attempts"; SelectorTimingsKey["MatchCount"] = "match_count"; SelectorTimingsKey["Selector"] = "selector"; SelectorTimingsKey["StyleSheetId"] = "style_sheet_id"; SelectorTimingsKey["InvalidationCount"] = "invalidation_count"; })(SelectorTimingsKey || (SelectorTimingsKey = {})); export function isSelectorStats(event) { return event.name === Name.SELECTOR_STATS; } export function isUpdateLayoutTree(event) { return event.name === Name.UPDATE_LAYOUT_TREE; } export function isLayout(event) { return event.name === Name.LAYOUT && Boolean(event.args && 'beginData' in event.args); } export function isInvalidateLayout(event) { return event.name === Name.INVALIDATE_LAYOUT; } export function isDebuggerAsyncTaskScheduled(event) { return event.name === Name.DEBUGGER_ASYNC_TASK_SCHEDULED; } export function isDebuggerAsyncTaskRun(event) { return event.name === Name.DEBUGGER_ASYNC_TASK_RUN; } export function ProfileID(value) { return value; } export function CallFrameID(value) { return value; } export function SampleIndex(value) { return value; } export function ProcessID(value) { return value; } export function ThreadID(value) { return value; } export function WorkerId(value) { return value; } export function isComplete(event) { return event.ph === Phase.COMPLETE; } export function isBegin(event) { return event.ph === Phase.BEGIN; } export function isEnd(event) { return event.ph === Phase.END; } export function isDispatch(event) { return event.name === 'EventDispatch'; } export function isInstant(event) { return event.ph === Phase.INSTANT; } export function isRendererEvent(event) { return isInstant(event) || isComplete(event); } export function isFireIdleCallback(event) { return event.name === 'FireIdleCallback'; } export function isSchedulePostMessage(event) { return event.name === Name.SCHEDULE_POST_MESSAGE; } export function isHandlePostMessage(event) { return event.name === Name.HANDLE_POST_MESSAGE; } export function isUpdateCounters(event) { return event.name === 'UpdateCounters'; } export function isDOMStats(event) { return event.name === 'DOMStats'; } export function isThreadName(event) { return event.name === Name.THREAD_NAME; } export function isProcessName(event) { return event.name === 'process_name'; } export function isTracingStartedInBrowser(event) { return event.name === Name.TRACING_STARTED_IN_BROWSER; } export function isFrameCommittedInBrowser(event) { return event.name === 'FrameCommittedInBrowser'; } export function isCommitLoad(event) { return event.name === 'CommitLoad'; } export function isAnimation(event) { // We've found some rare traces with an Animation trace event from a different category: https://crbug.com/1472375#comment7 return event.name === 'Animation' && event.cat.includes('devtools.timeline'); } export function isSyntheticAnimation(event) { if (event.name !== 'Animation' || !event.cat.includes('devtools.timeline')) { return false; } const data = event.args?.data; if (!data) { return false; } return 'beginEvent' in data && 'endEvent' in data; } export function isLayoutShift(event) { return event.name === Name.LAYOUT_SHIFT; } export function isLayoutInvalidationTracking(event) { return event.name === Name.LAYOUT_INVALIDATION_TRACKING; } export function isFirstContentfulPaint(event) { return event.name === 'firstContentfulPaint'; } export function isLargestContentfulPaintCandidate(event) { return event.name === Name.MARK_LCP_CANDIDATE; } export function isLargestImagePaintCandidate(event) { return event.name === 'LargestImagePaint::Candidate'; } export function isLargestTextPaintCandidate(event) { return event.name === 'LargestTextPaint::Candidate'; } export function isMarkLoad(event) { return event.name === 'MarkLoad'; } export function isFirstPaint(event) { return event.name === 'firstPaint'; } export function isMarkDOMContent(event) { return event.name === 'MarkDOMContent'; } export function isInteractiveTime(event) { return event.name === 'InteractiveTime'; } export function isEventTiming(event) { return event.name === Name.EVENT_TIMING; } export function isEventTimingEnd(event) { return isEventTiming(event) && event.ph === Phase.ASYNC_NESTABLE_END; } export function isEventTimingStart(event) { return isEventTiming(event) && event.ph === Phase.ASYNC_NESTABLE_START; } export function isGPUTask(event) { return event.name === 'GPUTask'; } export function isProfile(event) { return event.name === Name.PROFILE; } export function isSyntheticCpuProfile(event) { return event.name === Name.CPU_PROFILE; } export function isProfileChunk(event) { return event.name === Name.PROFILE_CHUNK; } export function isResourceChangePriority(event) { return event.name === 'ResourceChangePriority'; } export function isResourceSendRequest(event) { return event.name === 'ResourceSendRequest'; } export function isResourceReceiveResponse(event) { return event.name === 'ResourceReceiveResponse'; } export function isResourceMarkAsCached(event) { return event.name === 'ResourceMarkAsCached'; } export function isResourceFinish(event) { return event.name === 'ResourceFinish'; } export function isResourceWillSendRequest(event) { return event.name === 'ResourceWillSendRequest'; } export function isResourceReceivedData(event) { return event.name === 'ResourceReceivedData'; } // Any event where we receive data (and get an encodedDataLength) export function isReceivedDataEvent(event) { return event.name === 'ResourceReceivedData' || event.name === 'ResourceFinish' || event.name === 'ResourceReceiveResponse'; } export function isSyntheticNetworkRequest(event) { return event.name === Name.SYNTHETIC_NETWORK_REQUEST; } export function isSyntheticWebSocketConnection(event) { return event.name === 'SyntheticWebSocketConnection'; } export function isNetworkTrackEntry(event) { return isSyntheticNetworkRequest(event) || isSyntheticWebSocketConnection(event) || isWebSocketTraceEvent(event); } export function isPrePaint(event) { return event.name === 'PrePaint'; } /** A VALID navigation start (as it has a populated documentLoaderURL) */ export function isNavigationStart(event) { return event.name === 'navigationStart' && event.args?.data?.documentLoaderURL !== ''; } export function isDidCommitSameDocumentNavigation(event) { return event.name === 'RenderFrameHostImpl::DidCommitSameDocumentNavigation'; } export function isMainFrameViewport(event) { return event.name === 'PaintTimingVisualizer::Viewport'; } export function isSyntheticUserTiming(event) { if (event.cat !== 'blink.user_timing') { return false; } const data = event.args?.data; if (!data) { return false; } return 'beginEvent' in data && 'endEvent' in data; } export function isSyntheticConsoleTiming(event) { if (event.cat !== 'blink.console') { return false; } const data = event.args?.data; if (!data) { return false; } return 'beginEvent' in data && 'endEvent' in data; } export function isUserTiming(event) { return event.cat === 'blink.user_timing'; } export function isDomLoading(event) { return event.name === Name.DOM_LOADING; } export function isBeginRemoteFontLoad(event) { return event.name === Name.BEGIN_REMOTE_FONT_LOAD; } export function isRemoteFontLoaded(event) { return event.name === Name.REMOTE_FONT_LOADED; } export function isPerformanceMeasure(event) { return isUserTiming(event) && isPhaseAsync(event.ph); } export function isPerformanceMeasureBegin(event) { return isPerformanceMeasure(event) && event.ph === Phase.ASYNC_NESTABLE_START; } export function isPerformanceMark(event) { return isUserTiming(event) && (event.ph === Phase.MARK || event.ph === Phase.INSTANT); } export function isConsoleTime(event) { return event.cat === 'blink.console' && isPhaseAsync(event.ph); } export function isConsoleTimeStamp(event) { return event.ph === Phase.INSTANT && event.name === Name.TIME_STAMP; } export function isUserTimingMeasure(event) { return event.name === Name.USER_TIMING_MEASURE; } export function isParseHTML(event) { return event.name === 'ParseHTML'; } export function isSyntheticLayoutShift(event) { return event.name === Name.SYNTHETIC_LAYOUT_SHIFT; } export function isSyntheticLayoutShiftCluster(event) { return event.name === Name.SYNTHETIC_LAYOUT_SHIFT_CLUSTER; } export function isProfileCall(event) { return 'callFrame' in event; } export function isPaint(event) { return event.name === Name.PAINT; } export function isPaintImage(event) { return event.name === Name.PAINT_IMAGE; } export function isScrollLayer(event) { return event.name === Name.SCROLL_LAYER; } export function isSetLayerId(event) { return event.name === Name.SET_LAYER_TREE_ID; } export function isUpdateLayer(event) { return event.name === Name.UPDATE_LAYER; } export function isDisplayListItemListSnapshot(event) { return event.name === Name.DISPLAY_ITEM_LIST_SNAPSHOT; } export function isLayerTreeHostImplSnapshot(event) { return event.name === Name.LAYER_TREE_HOST_IMPL_SNAPSHOT; } export function isFireAnimationFrame(event) { return event.name === Name.FIRE_ANIMATION_FRAME; } export function isTimerInstall(event) { return event.name === Name.TIMER_INSTALL; } export function isTimerFire(event) { return event.name === Name.TIMER_FIRE; } export function isRequestIdleCallback(event) { return event.name === Name.REQUEST_IDLE_CALLBACK; } export function isWebSocketCreate(event) { return event.name === Name.WEB_SOCKET_CREATE; } export function isWebSocketInfo(event) { return event.name === Name.WEB_SOCKET_SEND_HANDSHAKE_REQUEST || event.name === Name.WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST || event.name === Name.WEB_SOCKET_DESTROY; } export function isWebSocketTransfer(event) { return event.name === Name.WEB_SOCKET_SEND || event.name === Name.WEB_SOCKET_RECEIVE; } export function isWebSocketSendHandshakeRequest(event) { return event.name === Name.WEB_SOCKET_SEND_HANDSHAKE_REQUEST; } export function isWebSocketReceiveHandshakeResponse(event) { return event.name === Name.WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST; } export function isWebSocketDestroy(event) { return event.name === Name.WEB_SOCKET_DESTROY; } export function isWebSocketTraceEvent(event) { return isWebSocketCreate(event) || isWebSocketInfo(event) || isWebSocketTransfer(event); } export function isWebSocketEvent(event) { return isWebSocketTraceEvent(event) || isSyntheticWebSocketConnection(event); } export function isV8Compile(event) { return event.name === Name.COMPILE; } export function isFunctionCall(event) { return event.name === Name.FUNCTION_CALL; } export function isSchedulePostTaskCallback(event) { return event.name === Name.SCHEDULE_POST_TASK_CALLBACK; } export function isRunPostTaskCallback(event) { return event.name === Name.RUN_POST_TASK_CALLBACK; } export function isAbortPostTaskCallback(event) { return event.name === Name.ABORT_POST_TASK_CALLBACK; } /** * Generally, before JS is executed, a trace event is dispatched that * parents the JS calls. These we call "invocation" events. This * function determines if an event is one of such. Note: these are also * commonly referred to as "JS entry points". */ export function isJSInvocationEvent(event) { switch (event.name) { case Name.RUN_MICROTASKS: case Name.FUNCTION_CALL: // TODO(paulirish): Define types for these Evaluate* events case Name.EVALUATE_SCRIPT: case Name.EVALUATE_MODULE: case Name.EVENT_DISPATCH: case Name.V8_EXECUTE: case Name.V8_CONSOLE_RUN_TASK: return true; } // Also consider any new v8 trace events. (eg 'V8.RunMicrotasks' and 'v8.run') if (event.name.startsWith('v8') || event.name.startsWith('V8')) { return true; } if (isConsoleRunTask(event)) { return true; } return false; } export function isConsoleRunTask(event) { return event.name === Name.V8_CONSOLE_RUN_TASK; } export function isFlowPhaseEvent(event) { return event.ph === Phase.FLOW_START || event.ph === Phase.FLOW_STEP || event.ph === Phase.FLOW_END; } export function isParseAuthorStyleSheetEvent(event) { return event.name === Name.PARSE_AUTHOR_STYLE_SHEET; } /** * This is an exhaustive list of events we track in the Performance * panel. Note not all of them are necessarliry shown in the flame * chart, some of them we only use for parsing. * TODO(crbug.com/1428024): Complete this enum. */ export var Name; (function (Name) { /* Metadata */ Name["THREAD_NAME"] = "thread_name"; /* Task */ Name["PROGRAM"] = "Program"; Name["RUN_TASK"] = "RunTask"; Name["ASYNC_TASK"] = "AsyncTask"; Name["RUN_MICROTASKS"] = "RunMicrotasks"; /* Load */ Name["XHR_LOAD"] = "XHRLoad"; Name["XHR_READY_STATE_CHANGED"] = "XHRReadyStateChange"; /* Parse */ Name["PARSE_HTML"] = "ParseHTML"; Name["PARSE_CSS"] = "ParseAuthorStyleSheet"; /* V8 */ Name["COMPILE_CODE"] = "V8.CompileCode"; Name["COMPILE_MODULE"] = "V8.CompileModule"; // Although V8 emits the V8.CompileScript event, the event that actually // contains the useful information about the script (URL, etc), is contained // in the v8.compile event. // Yes, it is all lowercase compared to all the rest of the V8... events, // that is not a typo :) Name["COMPILE"] = "v8.compile"; Name["COMPILE_SCRIPT"] = "V8.CompileScript"; Name["OPTIMIZE"] = "V8.OptimizeCode"; Name["WASM_STREAM_FROM_RESPONSE_CALLBACK"] = "v8.wasm.streamFromResponseCallback"; Name["WASM_COMPILED_MODULE"] = "v8.wasm.compiledModule"; Name["WASM_CACHED_MODULE"] = "v8.wasm.cachedModule"; Name["WASM_MODULE_CACHE_HIT"] = "v8.wasm.moduleCacheHit"; Name["WASM_MODULE_CACHE_INVALID"] = "v8.wasm.moduleCacheInvalid"; /* Js */ Name["PROFILE_CALL"] = "ProfileCall"; Name["EVALUATE_SCRIPT"] = "EvaluateScript"; Name["FUNCTION_CALL"] = "FunctionCall"; Name["EVENT_DISPATCH"] = "EventDispatch"; Name["EVALUATE_MODULE"] = "v8.evaluateModule"; Name["REQUEST_MAIN_THREAD_FRAME"] = "RequestMainThreadFrame"; Name["REQUEST_ANIMATION_FRAME"] = "RequestAnimationFrame"; Name["CANCEL_ANIMATION_FRAME"] = "CancelAnimationFrame"; Name["FIRE_ANIMATION_FRAME"] = "FireAnimationFrame"; Name["REQUEST_IDLE_CALLBACK"] = "RequestIdleCallback"; Name["CANCEL_IDLE_CALLBACK"] = "CancelIdleCallback"; Name["FIRE_IDLE_CALLBACK"] = "FireIdleCallback"; Name["TIMER_INSTALL"] = "TimerInstall"; Name["TIMER_REMOVE"] = "TimerRemove"; Name["TIMER_FIRE"] = "TimerFire"; Name["WEB_SOCKET_CREATE"] = "WebSocketCreate"; Name["WEB_SOCKET_SEND_HANDSHAKE"] = "WebSocketSendHandshakeRequest"; Name["WEB_SOCKET_RECEIVE_HANDSHAKE"] = "WebSocketReceiveHandshakeResponse"; Name["WEB_SOCKET_DESTROY"] = "WebSocketDestroy"; Name["WEB_SOCKET_SEND"] = "WebSocketSend"; Name["WEB_SOCKET_RECEIVE"] = "WebSocketReceive"; Name["CRYPTO_DO_ENCRYPT"] = "DoEncrypt"; Name["CRYPTO_DO_ENCRYPT_REPLY"] = "DoEncryptReply"; Name["CRYPTO_DO_DECRYPT"] = "DoDecrypt"; Name["CRYPTO_DO_DECRYPT_REPLY"] = "DoDecryptReply"; Name["CRYPTO_DO_DIGEST"] = "DoDigest"; Name["CRYPTO_DO_DIGEST_REPLY"] = "DoDigestReply"; Name["CRYPTO_DO_SIGN"] = "DoSign"; Name["CRYPTO_DO_SIGN_REPLY"] = "DoSignReply"; Name["CRYPTO_DO_VERIFY"] = "DoVerify"; Name["CRYPTO_DO_VERIFY_REPLY"] = "DoVerifyReply"; Name["V8_EXECUTE"] = "V8.Execute"; Name["V8_CONSOLE_RUN_TASK"] = "V8Console::runTask"; Name["SCHEDULE_POST_TASK_CALLBACK"] = "SchedulePostTaskCallback"; Name["RUN_POST_TASK_CALLBACK"] = "RunPostTaskCallback"; Name["ABORT_POST_TASK_CALLBACK"] = "AbortPostTaskCallback"; Name["DEBUGGER_ASYNC_TASK_RUN"] = "v8::Debugger::AsyncTaskRun"; Name["DEBUGGER_ASYNC_TASK_SCHEDULED"] = "v8::Debugger::AsyncTaskScheduled"; /* Gc */ Name["GC"] = "GCEvent"; Name["DOMGC"] = "BlinkGC.AtomicPhase"; Name["MAJOR_GC"] = "MajorGC"; Name["MINOR_GC"] = "MinorGC"; Name["GC_COLLECT_GARBARGE"] = "BlinkGC.AtomicPhase"; Name["CPPGC_SWEEP"] = "CppGC.IncrementalSweep"; /* Layout */ Name["SCHEDULE_STYLE_RECALCULATION"] = "ScheduleStyleRecalculation"; Name["LAYOUT"] = "Layout"; Name["UPDATE_LAYOUT_TREE"] = "UpdateLayoutTree"; Name["INVALIDATE_LAYOUT"] = "InvalidateLayout"; Name["LAYOUT_INVALIDATION_TRACKING"] = "LayoutInvalidationTracking"; Name["COMPUTE_INTERSECTION"] = "ComputeIntersections"; Name["HIT_TEST"] = "HitTest"; Name["PRE_PAINT"] = "PrePaint"; Name["LAYERIZE"] = "Layerize"; Name["LAYOUT_SHIFT"] = "LayoutShift"; Name["SYNTHETIC_LAYOUT_SHIFT"] = "SyntheticLayoutShift"; Name["SYNTHETIC_LAYOUT_SHIFT_CLUSTER"] = "SyntheticLayoutShiftCluster"; Name["UPDATE_LAYER_TREE"] = "UpdateLayerTree"; Name["SCHEDULE_STYLE_INVALIDATION_TRACKING"] = "ScheduleStyleInvalidationTracking"; Name["STYLE_RECALC_INVALIDATION_TRACKING"] = "StyleRecalcInvalidationTracking"; Name["STYLE_INVALIDATOR_INVALIDATION_TRACKING"] = "StyleInvalidatorInvalidationTracking"; Name["SELECTOR_STATS"] = "SelectorStats"; Name["BEGIN_COMMIT_COMPOSITOR_FRAME"] = "BeginCommitCompositorFrame"; Name["PARSE_META_VIEWPORT"] = "ParseMetaViewport"; /* Paint */ Name["SCROLL_LAYER"] = "ScrollLayer"; Name["UPDATE_LAYER"] = "UpdateLayer"; Name["PAINT_SETUP"] = "PaintSetup"; Name["PAINT"] = "Paint"; Name["PAINT_IMAGE"] = "PaintImage"; Name["COMMIT"] = "Commit"; Name["COMPOSITE_LAYERS"] = "CompositeLayers"; Name["RASTER_TASK"] = "RasterTask"; Name["IMAGE_DECODE_TASK"] = "ImageDecodeTask"; Name["IMAGE_UPLOAD_TASK"] = "ImageUploadTask"; Name["DECODE_IMAGE"] = "Decode Image"; Name["DRAW_LAZY_PIXEL_REF"] = "Draw LazyPixelRef"; Name["DECODE_LAZY_PIXEL_REF"] = "Decode LazyPixelRef"; Name["GPU_TASK"] = "GPUTask"; Name["RASTERIZE"] = "Rasterize"; Name["EVENT_TIMING"] = "EventTiming"; /* Compile */ Name["OPTIMIZE_CODE"] = "V8.OptimizeCode"; Name["CACHE_SCRIPT"] = "v8.produceCache"; Name["CACHE_MODULE"] = "v8.produceModuleCache"; // V8Sample events are coming from tracing and contain raw stacks with function addresses. // After being processed with help of JitCodeAdded and JitCodeMoved events they // get translated into function infos and stored as stacks in JSSample events. Name["V8_SAMPLE"] = "V8Sample"; Name["JIT_CODE_ADDED"] = "JitCodeAdded"; Name["JIT_CODE_MOVED"] = "JitCodeMoved"; Name["STREAMING_COMPILE_SCRIPT"] = "v8.parseOnBackground"; Name["STREAMING_COMPILE_SCRIPT_WAITING"] = "v8.parseOnBackgroundWaiting"; Name["STREAMING_COMPILE_SCRIPT_PARSING"] = "v8.parseOnBackgroundParsing"; Name["BACKGROUND_DESERIALIZE"] = "v8.deserializeOnBackground"; Name["FINALIZE_DESERIALIZATION"] = "V8.FinalizeDeserialization"; /* Markers */ Name["COMMIT_LOAD"] = "CommitLoad"; Name["MARK_LOAD"] = "MarkLoad"; Name["MARK_DOM_CONTENT"] = "MarkDOMContent"; Name["MARK_FIRST_PAINT"] = "firstPaint"; Name["MARK_FCP"] = "firstContentfulPaint"; Name["MARK_LCP_CANDIDATE"] = "largestContentfulPaint::Candidate"; Name["MARK_LCP_INVALIDATE"] = "largestContentfulPaint::Invalidate"; Name["NAVIGATION_START"] = "navigationStart"; Name["CONSOLE_TIME"] = "ConsoleTime"; Name["USER_TIMING"] = "UserTiming"; Name["INTERACTIVE_TIME"] = "InteractiveTime"; Name["TIME_STAMP"] = "TimeStamp"; /* Frames */ Name["BEGIN_FRAME"] = "BeginFrame"; Name["NEEDS_BEGIN_FRAME_CHANGED"] = "NeedsBeginFrameChanged"; Name["BEGIN_MAIN_THREAD_FRAME"] = "BeginMainThreadFrame"; Name["ACTIVATE_LAYER_TREE"] = "ActivateLayerTree"; Name["DRAW_FRAME"] = "DrawFrame"; Name["DROPPED_FRAME"] = "DroppedFrame"; Name["FRAME_STARTED_LOADING"] = "FrameStartedLoading"; Name["PIPELINE_REPORTER"] = "PipelineReporter"; Name["SCREENSHOT"] = "Screenshot"; /* Network request events */ Name["RESOURCE_WILL_SEND_REQUEST"] = "ResourceWillSendRequest"; Name["RESOURCE_SEND_REQUEST"] = "ResourceSendRequest"; Name["RESOURCE_RECEIVE_RESPONSE"] = "ResourceReceiveResponse"; Name["RESOURCE_RECEIVE_DATA"] = "ResourceReceivedData"; Name["RESOURCE_FINISH"] = "ResourceFinish"; Name["RESOURCE_MARK_AS_CACHED"] = "ResourceMarkAsCached"; /* Web sockets */ Name["WEB_SOCKET_SEND_HANDSHAKE_REQUEST"] = "WebSocketSendHandshakeRequest"; Name["WEB_SOCKET_RECEIVE_HANDSHAKE_REQUEST"] = "WebSocketReceiveHandshakeResponse"; /* CPU Profiling */ Name["CPU_PROFILE"] = "CpuProfile"; Name["PROFILE"] = "Profile"; Name["START_PROFILING"] = "CpuProfiler::StartProfiling"; Name["PROFILE_CHUNK"] = "ProfileChunk"; Name["UPDATE_COUNTERS"] = "UpdateCounters"; Name["JS_SAMPLE"] = "JSSample"; /* Other */ Name["ANIMATION"] = "Animation"; Name["PARSE_AUTHOR_STYLE_SHEET"] = "ParseAuthorStyleSheet"; Name["EMBEDDER_CALLBACK"] = "EmbedderCallback"; Name["SET_LAYER_TREE_ID"] = "SetLayerTreeId"; Name["TRACING_STARTED_IN_PAGE"] = "TracingStartedInPage"; Name["TRACING_STARTED_IN_BROWSER"] = "TracingStartedInBrowser"; Name["TRACING_SESSION_ID_FOR_WORKER"] = "TracingSessionIdForWorker"; Name["LAZY_PIXEL_REF"] = "LazyPixelRef"; Name["LAYER_TREE_HOST_IMPL_SNAPSHOT"] = "cc::LayerTreeHostImpl"; Name["PICTURE_SNAPSHOT"] = "cc::Picture"; Name["DISPLAY_ITEM_LIST_SNAPSHOT"] = "cc::DisplayItemList"; Name["INPUT_LATENCY_MOUSE_MOVE"] = "InputLatency::MouseMove"; Name["INPUT_LATENCY_MOUSE_WHEEL"] = "InputLatency::MouseWheel"; Name["IMPL_SIDE_FLING"] = "InputHandlerProxy::HandleGestureFling::started"; Name["SCHEDULE_POST_MESSAGE"] = "SchedulePostMessage"; Name["HANDLE_POST_MESSAGE"] = "HandlePostMessage"; Name["RENDER_FRAME_IMPL_CREATE_CHILD_FRAME"] = "RenderFrameImpl::createChildFrame"; Name["LAYOUT_IMAGE_UNSIZED"] = "LayoutImageUnsized"; Name["DOM_LOADING"] = "domLoading"; Name["BEGIN_REMOTE_FONT_LOAD"] = "BeginRemoteFontLoad"; Name["REMOTE_FONT_LOADED"] = "RemoteFontLoaded"; Name["ANIMATION_FRAME"] = "AnimationFrame"; Name["ANIMATION_FRAME_PRESENTATION"] = "AnimationFrame::Presentation"; Name["SYNTHETIC_NETWORK_REQUEST"] = "SyntheticNetworkRequest"; Name["USER_TIMING_MEASURE"] = "UserTiming::Measure"; Name["LINK_PRECONNECT"] = "LinkPreconnect"; })(Name || (Name = {})); // NOT AN EXHAUSTIVE LIST: just some categories we use and refer // to in multiple places. export const Categories = { Console: 'blink.console', UserTiming: 'blink.user_timing', Loading: 'loading', }; export function isLegacyTimelineFrame(data) { return 'idle' in data && typeof data.idle === 'boolean'; } export function isTargetRundownEvent(event) { return event.cat === 'disabled-by-default-devtools.target-rundown' && event.name === 'ScriptCompiled'; } export function isV8SourceRundownEvent(event) { return event.cat === 'disabled-by-default-devtools.v8-source-rundown' && event.name === 'ScriptCatchup'; } export function isV8SourceRundownSourcesScriptCatchupEvent(event) { return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'ScriptCatchup'; } export function isV8SourceRundownSourcesLargeScriptCatchupEvent(event) { return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources' && event.name === 'LargeScriptCatchup'; } export function isAnyScriptCatchupEvent(event) { return event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources'; } //# sourceMappingURL=TraceEvents.js.map