blob: e36f36a1903a616b0e304aa4d5173efda9a34935 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
import public "protos/perfetto/trace/track_event/track_event.proto";
import public "protos/perfetto/trace/track_event/debug_annotation.proto";
import public "protos/perfetto/trace/track_event/source_location.proto";
package perfetto.protos;
enum ChromeAppState {
APP_STATE_FOREGROUND = 1;
APP_STATE_BACKGROUND = 2;
}
enum MemoryPressureLevel {
MEMORY_PRESSURE_LEVEL_NONE = 0;
MEMORY_PRESSURE_LEVEL_MODERATE = 1;
MEMORY_PRESSURE_LEVEL_CRITICAL = 2;
}
message ChromeMemoryPressureNotification {
optional MemoryPressureLevel level = 1;
// ID of interned source location where MemoryPressureListener was created
optional uint64 creation_location_iid = 2;
}
message BlinkTaskScope {
enum TaskScopeType {
TASK_SCOPE_UNKNOWN = 0;
TASK_SCOPE_CALLBACK = 1;
TASK_SCOPE_SCHEDULED_ACTION = 2;
TASK_SCOPE_SCRIPT_EXECUTION = 3;
TASK_SCOPE_POST_MESSAGE = 4;
TASK_SCOPE_POP_STATE = 5;
TASK_SCOPE_SCHEDULER_POST_TASK = 6;
TASK_SCOPE_REQUEST_IDLE_CALLBACK = 7;
TASK_SCOPE_XML_HTTP_REQUEST = 8;
TASK_SCOPE_SOFT_NAVIGATION = 9;
TASK_SCOPE_MISC_EVENT = 10;
}
optional TaskScopeType type = 1;
optional int64 scope_task_id = 2;
optional int64 running_task_id_to_be_restored = 3;
reserved 4, 5;
reserved "continuation_task_id_to_be_restored", "parent_task_id";
}
message ChromeTaskAnnotator {
enum DelayPolicy {
FLEXIBLE_NO_SOONER = 0;
FLEXIBLE_PREFER_EARLY = 1;
PRECISE = 2;
}
optional uint32 ipc_hash = 1;
// The delay in microseconds that was specified, if any, when this task was
// posted. This is only valid for delayed tasks.
optional uint64 task_delay_us = 2;
optional DelayPolicy delay_policy = 3;
}
message ChromeBrowserContext {
reserved 1;
optional string id = 2;
}
message ChromeProfileDestroyer {
optional fixed64 profile_ptr = 1;
optional bool is_off_the_record = 2;
optional string otr_profile_id = 3;
optional uint32 host_count_at_creation = 4;
optional uint32 host_count_at_destruction = 5;
optional fixed64 render_process_host_ptr = 6;
}
message ChromeTaskPostedToDisabledQueue {
optional string task_queue_name = 1;
optional uint64 time_since_disabled_ms = 2;
optional uint32 ipc_hash = 3;
optional uint64 source_location_iid = 4;
}
message ChromeRasterTask {
optional int64 source_frame_number = 1;
}
message ChromeMessagePumpForUI {
// The MSG defined in winuser.h.
optional uint32 message_id = 1;
// The result of the Win32 API call WaitForMultipleObjectsEx().
optional uint32 wait_for_object_result = 2;
}
// An enumeration specifying the reason of the RenderFrame deletion.
// This is copied from content/common/frame.mojom.
enum FrameDeleteIntention {
// The frame being deleted isn't a (speculative) main frame.
FRAME_DELETE_INTENTION_NOT_MAIN_FRAME = 0;
// The frame being deleted is a speculative main frame, and it is being
// deleted as part of the shutdown for that WebContents. The entire RenderView
// etc will be destroyed by a separate IPC sent later.
FRAME_DELETE_INTENTION_SPECULATIVE_MAIN_FRAME_FOR_SHUTDOWN = 1;
// The frame being deleted is a speculative main frame, and it is being
// deleted because the speculative navigation was cancelled. This is not part
// of shutdown.
FRAME_DELETE_INTENTION_SPECULATIVE_MAIN_FRAME_FOR_NAVIGATION_CANCELLED = 2;
}
message RenderFrameImplDeletion {
// The intent for the deletion.
optional FrameDeleteIntention intent = 1;
// Whether the frame that is about to be deleted has a pending navigation
// commit.
optional bool has_pending_commit = 2;
// Whether the frame that is about to be deleted has a pending cross-document
// navigation commit.
optional bool has_pending_cross_document_commit = 3;
// The FrameTreeNode ID of the frame that is about to be deleted.
optional uint64 frame_tree_node_id = 4;
}
// Corresponds to `content::ShouldSwapBrowsingInstance`.
// Note that the enum values here are not equivalent to the content enum and
// must be converted explicitly. See `ShouldSwapBrowsingInstanceToProto`.
enum ShouldSwapBrowsingInstance {
// Was used for all "no BrowsingInstance swap" scenarios, now broken down in
// separate reasons.
SHOULD_SWAP_BROWSING_INSTANCE_NO = 0;
// Forced BrowsingInstance swap.
SHOULD_SWAP_BROWSING_INSTANCE_YES_FORCE_SWAP = 1;
// Proactive BrowsingInstance swap for cross-site navigation.
SHOULD_SWAP_BROWSING_INSTANCE_YES_CROSS_SITE_PROACTIVE_SWAP = 2;
// Proactive BrowsingInstance swap for same-site navigation.
SHOULD_SWAP_BROWSING_INSTANCE_YES_SAME_SITE_PROACTIVE_SWAP = 3;
SHOULD_SWAP_BROWSING_INSTANCE_NO_PROACTIVE_SWAP_DISABLED = 4;
SHOULD_SWAP_BROWSING_INSTANCE_NO_NOT_MAIN_FRAME = 5;
SHOULD_SWAP_BROWSING_INSTANCE_NO_HAS_RELATED_ACTIVE_CONTENTS = 6;
SHOULD_SWAP_BROWSING_INSTANCE_NO_DOES_NOT_HAVE_SITE = 7;
SHOULD_SWAP_BROWSING_INSTANCE_NO_SOURCE_URL_SCHEME_NOT_HTTP_OR_HTTPS = 8;
SHOULD_SWAP_BROWSING_INSTANCE_NO_DESTINATION_URL_SCHEME_NOT_HTTP_OR_HTTPS = 9;
SHOULD_SWAP_BROWSING_INSTANCE_NO_SAME_SITE_NAVIGATION = 10;
SHOULD_SWAP_BROWSING_INSTANCE_NO_RELOADING_ERROR_PAGE = 11;
SHOULD_SWAP_BROWSING_INSTANCE_NO_ALREADY_HAS_MATCHING_BROWSING_INSTANCE = 12;
SHOULD_SWAP_BROWSING_INSTANCE_NO_RENDERER_DEBUG_URL = 13;
SHOULD_SWAP_BROWSING_INSTANCE_NO_NOT_NEEDED_FOR_BACK_FORWARD_CACHE = 14;
SHOULD_SWAP_BROWSING_INSTANCE_NO_SAME_DOCUMENT_NAVIGATION = 15;
SHOULD_SWAP_BROWSING_INSTANCE_NO_SAME_URL_NAVIGATION = 16;
SHOULD_SWAP_BROWSING_INSTANCE_NO_WILL_REPLACE_ENTRY = 17;
SHOULD_SWAP_BROWSING_INSTANCE_NO_RELOAD = 18;
SHOULD_SWAP_BROWSING_INSTANCE_NO_GUEST = 19;
SHOULD_SWAP_BROWSING_INSTANCE_NO_HAS_NOT_COMMITTED_ANY_NAVIGATION = 20;
// The following reason was deprecated from https://crrev.com/c/3858766
SHOULD_SWAP_BROWSING_INSTANCE_NO_UNLOAD_HANDLER_EXISTS_ON_SAME_SITE_NAVIGATION =
21;
SHOULD_SWAP_BROWSING_INSTANCE_NO_NOT_PRIMARY_MAIN_FRAME = 22;
SHOULD_SWAP_BROWSING_INSTANCE_NO_INITIATOR_REQUESTED_NO_PROACTIVE_SWAP = 23;
}
message ShouldSwapBrowsingInstancesResult {
// The FrameTreeNode ID.
optional uint64 frame_tree_node_id = 1;
// Whether a navigation will do a BrowsingInstance swap or not.
optional ShouldSwapBrowsingInstance result = 2;
}
message FrameTreeNodeInfo {
// The FrameTreeNode ID.
optional uint64 frame_tree_node_id = 1;
// Whether the frame is a main frame or not.
optional bool is_main_frame = 2;
// Whether there's a speculative RenderFrameHost or not.
optional bool has_speculative_render_frame_host = 3;
optional RenderFrameHost current_frame_host = 4;
optional RenderFrameHost speculative_frame_host = 5;
// NOTE: this proto must be kept consistent with
// content::FrameType.
enum FrameType {
UNSPECIFIED_FRAME_TYPE = 0;
SUBFRAME = 1;
PRIMARY_MAIN_FRAME = 2;
PRERENDER_MAIN_FRAME = 3;
FENCED_FRAME_ROOT = 4;
}
optional FrameType frame_type = 6;
// Additional untyped debug information associated with this
// FrameTreeNode, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message ChromeHashedPerformanceMark {
optional uint32 site_hash = 1;
optional string site = 2;
optional uint32 mark_hash = 3;
optional string mark = 4;
// A randomly generated unique identifier for a given ExecutionContext
// (document, worker, etc). Used to be able to correlate events in a process
// where there are multiple execution contexts from the same site.
optional uint32 execution_context_id = 5;
// Indicates the sequence number of this particular mark being emitted from
// a particular site in the scope of a single ExecutionContext. Typical
// sites emit batches of events that are correlated in time (a thing started,
// a thing reached a given milestone, a thing completed). When these events
// are intermixed it is useful to know which ones are semantically related.
// The value is generated by the content itself, but shifted by a fixed
// random offset at runtime so as to limit usage as a side channel.
optional uint32 sequence_number = 6;
}
// Sent on SQL errors where we need string diagnostics. Corresponds to
// `Database::DatabaseDiagnostics` in the Chrome SQL code. Does not contain any
// PII, because the bound values are not included in the SQL statement.
message ChromeSqlDiagnostics {
optional int32 reported_sqlite_error_code = 1;
optional int32 error_code = 2;
optional int32 last_errno = 3;
optional string sql_statement = 4;
optional int32 version = 5;
// Most rows in 'sql_schema' have a non-NULL 'sql' column. Those rows' 'sql'
// contents are logged here, one element per row.
repeated string schema_sql_rows = 6;
// Some rows of 'sql_schema' have a NULL 'sql' column. They are typically
// autogenerated indices, like "sqlite_autoindex_downloads_slices_1". These
// are also logged here by their 'name' column, one element per row.
repeated string schema_other_row_names = 7;
optional bool has_valid_header = 8;
optional bool has_valid_schema = 9;
optional string error_message = 10;
}
message ChromeWebAppBadNavigate {
optional bool is_kiosk = 1;
optional bool has_hosted_app_controller = 2;
optional string app_name = 3;
optional uint32 system_app_type = 4;
optional bool web_app_provider_registry_ready = 5;
optional bool system_web_app_manager_synchronized = 6;
}
// These IDs are generated at compile time and differ for each chrome version.
// IDs are stable on for a given chrome version but are changing when resources
// are added or removed to chrome.
message ResourceBundle {
optional uint32 resource_id = 1;
}
// Information about RenderProcessHost.
message RenderProcessHost {
// Unique Id to identify the RenderProcessHost. This is the browser-side,
// persistent id for this RenderProcessHost that stays constant even across OS
// layer processes managed by this RenderProcessHost.
optional uint32 id = 1;
// See ProcessLock::ToString().
optional string process_lock = 2;
// The PID of the child process.
optional int32 child_process_id = 3;
// Details about the associated browser context.
optional ChromeBrowserContext browser_context = 4;
// Additional untyped debug information associated with this
// RenderProcessHost, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message RenderProcessHostListener {
// Routing ID of the listener to the RenderProcessHost, recorded when a new ID
// is added or when an ID is removed.
optional uint32 routing_id = 1;
}
message RenderProcessHostCleanup {
// Number of IPC listeners registered to the host when Cleanup() was called.
optional uint32 listener_count = 1;
// Number of "keep alive" references active in the RenderProcessHost, recorded
// when Cleanup() was called.
optional uint32 keep_alive_ref_count = 2;
// Number of "shutdown delay" references active in the RenderProcessHost,
// recorded when Cleanup() was called.
optional uint32 shutdown_delay_ref_count = 3;
// Number of "worker delay" references active in the RenderProcessHost,
// recorded when Cleanup() was called.
optional uint32 worker_ref_count = 4;
// Number of "pending reuse" references active in the RenderProcessHost,
// recorded when Cleanup() was called.
optional uint32 pending_reuse_ref_count = 5;
// Number of NavigationStateKeepAlive references active in the
// RenderProcessHost, recorded when Cleanup() was called.
optional uint32 navigation_state_keepalive_count = 6;
}
message ChildProcessLauncherPriority {
// True if the new priority set to background.
optional bool is_backgrounded = 1;
// True if the renderer proecss has pending views.
optional bool has_pending_views = 2;
// Importance of the child process in Android.
enum Importance {
IMPORTANCE_NORMAL = 1;
IMPORTANCE_MODERATE = 2;
IMPORTANCE_IMPORTANT = 3;
IMPORTANCE_PERCEPTIBLE = 4;
}
optional Importance importance = 3;
}
// Information that identifies a Chrome Extension.
message ChromeExtensionId {
// Unique id that identifies a Chrome Extension.
optional string extension_id = 1;
// Pseudonymized `extension_id` field (see also
// content::PseudonymizationUtil::PseudonymizeString method).
optional uint32 pseudonymized_extension_id = 2;
}
message SiteInstance {
// The ID of the SiteInstance.
optional int32 site_instance_id = 1;
// The ID of the BrowsingInstance that the SiteInstance belongs to.
optional int32 browsing_instance_id = 2;
// Whether the SiteInstance is the "default SiteInstance" or not. Non-isolated
// sites on Android are not assigned to their own specific per-site process,
// and shares SiteInstances with each other (the default SiteInstance).
optional bool is_default = 3;
// Whether this SiteInstance has a running process associated with it.
optional bool has_process = 4;
// Returns the total active WebContents count for this SiteInstance and all
// related SiteInstances in the same BrowsingInstance.
optional int32 related_active_contents_count = 5;
// The number of active RenderFrameHosts this SiteInstance's SiteInstanceGroup
// has.
optional int32 active_rfh_count = 6;
// The SiteInstanceGroup this SiteInstance belongs to.
optional SiteInstanceGroup site_instance_group = 7;
// Additional untyped debug information associated with this
// SiteInstance, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message SiteInstanceGroup {
// The ID of the SiteInstanceGroup.
optional int32 site_instance_group_id = 1;
// The number of active frames in this SiteInstanceGroup.
optional int32 active_frame_count = 2;
// The process ID of the SiteInstanceGroup.
optional RenderProcessHost process = 3;
// Additional untyped debug information associated with this
// SiteInstanceGroup, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
// Describes the CrossOriginIsolated state of a page. See the definition of
// WebExposedIsolationInfo for more information.
message WebExposedIsolationInfo {
optional bool is_isolated = 1;
optional string origin = 2;
optional bool is_isolated_application = 3;
}
// Contains the URL and some additional information necessary to pick a
// SiteInstance and process during a navigation. See the definition of UrlInfo
// for more information about individual fields.
message UrlInfo {
optional string url = 1;
optional string origin = 2;
optional bool is_sandboxed = 3;
optional bool is_pdf = 4;
optional bool is_coop_isolation_requested = 5;
optional int32 origin_isolation_request = 6;
optional bool is_prefetch_with_cross_site_contamination = 7;
optional WebExposedIsolationInfo web_exposed_isolation_info = 8;
optional string storage_partition_config = 9;
}
// Next ID: 7
message RenderViewHost {
// The RenderViewHostMapId for the RenderViewHost.
optional int32 rvh_map_id = 1;
// The routing ID for the RenderViewHost.
optional int32 routing_id = 2;
// The process ID of the RenderViewHost. Deprecated in favour of |process|.
optional int32 process_id = 3;
// Process this RenderViewHost is associated with.
optional RenderProcessHost process = 6;
// Whether the RenderViewHost is in back/forward cache or not.
optional bool is_in_back_forward_cache = 4;
// Whether the renderer-side RenderView is created.
optional bool renderer_view_created = 5;
// Additional untyped debug information associated with this
// RenderViewHost, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message RenderFrameProxyHost {
// The routing ID for the RenderFrameProxyHost.
optional int32 routing_id = 1;
// The process ID of the RenderFrameProxyHost.
optional int32 process_id = 2;
// The RenderViewHostMapId of the RenderViewHost associated with the
// RenderFrameProxyHost.
optional int32 rvh_map_id = 3;
// The SiteInstanceId of the SiteInstance associated with the
// RenderFrameProxyHost.
optional int32 site_instance_id = 4;
// Whether the renderer-side RenderFrameProxy is live or not.
optional bool is_render_frame_proxy_live = 5;
// The SiteInstanceGroupId of the SiteInstanceGroup associated with the
// RenderFrameProxyHost.
optional int32 site_instance_group_id = 6;
// Additional untyped debug information associated with this
// RenderFrameProxyHost, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message AndroidView {
optional int32 id = 1;
optional int32 parent_id = 2;
optional bool is_shown = 3;
optional bool is_dirty = 4;
optional string class_name = 5;
optional string resource_name = 6;
}
message AndroidActivity {
optional string name = 1;
repeated AndroidView view = 2;
}
message AndroidViewDump {
repeated AndroidActivity activity = 1;
}
message ParkableStringCompressInBackground {
// The size of the string that is being compressed, in bytes.
optional int32 size_bytes = 1;
}
message ParkableStringUnpark {
// The size of the string that is being unparked, in bytes.
optional int32 size_bytes = 1;
// The elapsed time since the string was written to disk (in seconds), or -1
// if it hadn't yet been written to disk.
optional int32 time_since_last_disk_write_sec = 2;
}
message ChromeSamplingProfilerSampleCollected {
optional int32 frame_count = 1;
enum WriteStatus {
WRITE_STATUS_NONE = 0;
WRITE_STATUS_BUFFERING_SAMPLE = 1;
WRITE_STATUS_WRITING_BUFFERED = 2;
WRITE_STATUS_WRITING_TO_TRACE = 3;
}
optional WriteStatus write_status = 2;
optional int32 sampled_thread_id = 3;
}
// Reports the latency caused by each breakdown in the
// SendBeginMainFrameToCommit stage of the PipelineReporter.
message SendBeginMainFrameToCommitBreakdown {
// Handle input events breakdown
optional uint64 handle_input_events_us = 1;
// Animate breakdown
optional uint64 animate_us = 2;
// Style update breakdown
optional uint64 style_update_us = 3;
// Layout update breakdown
optional uint64 layout_update_us = 4;
// Accessibility update breakdown
optional uint64 accessibility_update_us = 12;
// Prepaint breakdown
optional uint64 prepaint_us = 5;
// Compositing inputs breakdown
optional uint64 compositing_inputs_us = 6;
// Compositing assignments breakdown
optional uint64 compositing_assignments_us = 7;
// Paint breakdown
optional uint64 paint_us = 8;
// Composite commit breakdown
optional uint64 composite_commit_us = 9;
// Update layers breakdown
optional uint64 update_layers_us = 10;
// Beginmainsenttostarted breakdown
optional uint64 begin_main_sent_to_started_us = 11;
}
message GlobalRenderFrameHostId {
optional int32 routing_id = 1;
optional int32 process_id = 2;
}
message BrowsingContextState {
// The ID of the BrowsingInstance that the BrowsingContextState belongs to.
optional int32 browsing_instance_id = 1;
// The ID of the CoopRelatedGroup that the BrowsingContextState belongs to.
optional int32 coop_related_group_id = 2 [deprecated = true];
// The token of the CoopRelatedGroup that the BrowsingContextState belongs to.
optional string coop_related_group_token = 3;
// Additional untyped debug information associated with this
// FrameTreeNode, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message RenderFrameHost {
optional RenderProcessHost process = 1;
optional GlobalRenderFrameHostId render_frame_host_id = 2;
// NOTE: this proto must be kept consistent with
// RenderFrameHostImpl::LifecycleStateImpl.
enum LifecycleState {
UNSPECIFIED = 0;
SPECULATIVE = 1;
PENDING_COMMIT = 2;
PRERENDERING = 3;
ACTIVE = 4;
IN_BACK_FORWARD_CACHE = 5;
RUNNING_UNLOAD_HANDLERS = 6;
READY_TO_BE_DELETED = 7;
}
optional LifecycleState lifecycle_state = 3;
optional string origin = 4;
optional string url = 5;
optional uint64 frame_tree_node_id = 6;
optional SiteInstance site_instance = 7;
optional RenderFrameHost parent = 8;
optional RenderFrameHost outer_document = 9;
optional RenderFrameHost embedder = 10;
optional BrowsingContextState browsing_context_state = 11;
optional FrameTreeNodeInfo.FrameType frame_type = 12;
// Additional untyped debug information associated with this
// RenderViewHost, populated via TracedProto::AddDebugAnnotations API.
repeated DebugAnnotation debug_annotations = 99;
}
message ChromeThreadPoolTask {
enum Priority {
PRIORITY_UNSPECIFIED = 0;
PRIORITY_BEST_EFFORT = 1;
PRIORITY_USER_VISIBLE = 2;
PRIORITY_USER_BLOCKING = 3;
}
enum ExecutionMode {
EXECTUION_MODE_UNSPECIFIED = 0;
EXECUTION_MODE_PARALLEL = 1;
EXECUTION_MODE_SEQUENCED = 2;
EXECUTION_MODE_SINGLE_THREAD = 3;
EXECUTION_MODE_JOB = 4;
}
enum ShutdownBehavior {
SHUTDOWN_BEHAVIOR_UNSPECIFIED = 0;
SHUTDOWN_BEHAVIOR_CONTINUE_ON_SHUTDOWN = 1;
SHUTDOWN_BEHAVIOR_SKIP_ON_SHUTDOWN = 2;
SHUTDOWN_BEHAVIOR_BLOCK_SHUTDOWN = 3;
}
optional Priority task_priority = 1;
optional ExecutionMode execution_mode = 2;
optional int64 sequence_token = 3;
optional ShutdownBehavior shutdown_behavior = 4;
}
// TODO(crbug.com/40797026): Add more information.
message BackForwardCacheCanStoreDocumentResult {
enum BackForwardCacheNotRestoredReason {
NOT_MAIN_FRAME = 1;
// BackForwardCache is disabled due to low memory device, base::Feature or
// command line. Note that the more specific NotRestoredReasons
// BACK_FORWARD_CACHE_DISABLED_BY_LOW_MEMORY and
// BACK_FORWARD_CACHE_DISABLED_BY_COMMAND_LINE will also be set as other
// reasons along with this when appropriate.
BACK_FORWARD_CACHE_DISABLED = 2;
RELATED_ACTIVE_CONTENTS_EXIST = 3;
HTTP_STATUS_NOT_OK = 4;
SCHEME_NOT_HTTP_OR_HTTPS = 5;
LOADING = 6;
WAS_GRANTED_MEDIA_ACCESS = 7;
BLOCKLISTED_FEATURES = 8;
DISABLE_FOR_RENDER_FRAME_HOST_CALLED = 9;
DOMAIN_NOT_ALLOWED = 10;
HTTP_METHOD_NOT_GET = 11;
SUBFRAME_IS_NAVIGATING = 12;
TIMEOUT = 13;
CACHE_LIMIT = 14;
JAVASCRIPT_EXECUTION = 15;
RENDERER_PROCESS_KILLED = 16;
RENDERER_PROCESS_CRASHED = 17;
GRANTED_MEDIA_STREAM_ACCESS = 19;
SCHEDULER_TRACKED_FEATURE_USED = 20;
CONFLICTING_BROWSING_INSTANCE = 21;
CACHE_FLUSHED = 22;
SERVICE_WORKER_VERSION_ACTIVATION = 23;
SESSION_RESTORED = 24;
UNKNOWN = 25;
SERVICE_WORKER_POST_MESSAGE = 26;
ENTERED_BACK_FORWARD_CACHE_BEFORE_SERVICE_WORKER_HOST_ADDED = 27;
NOT_MOST_RECENT_NAVIGATION_ENTRY = 28;
SERVICE_WORKER_CLAIM = 29;
IGNORE_EVENT_AND_EVICT = 30;
HAVE_INNER_CONTENTS = 31;
TIMEOUT_PUTTING_IN_CACHE = 32;
// BackForwardCache is disabled due to low memory device.
BACK_FORWARD_CACHE_DISABLED_BY_LOW_MEMORY = 33;
// BackForwardCache is disabled due to command-line switch (may include
// cases where the embedder disabled it due to, e.g., enterprise policy).
BACK_FORWARD_CACHE_DISABLED_BY_COMMAND_LINE = 34;
NETWORK_REQUEST_REDIRECTED = 35;
NETWORK_REQUEST_TIMEOUT = 36;
NETWORK_EXCEEDS_BUFFER_LIMIT = 37;
NAVIGATION_CANCELLED_WHILE_RESTORING = 38;
BACK_FORWARD_CACHE_DISABLED_FOR_PRERENDER = 39;
USER_AGENT_OVERRIDE_DIFFERS = 40;
NETWORK_REQUEST_DATAPIPE_DRAINED_AS_BYTES_CONSUMER = 41;
FOREGROUND_CACHE_LIMIT = 42;
BROWSING_INSTANCE_NOT_SWAPPED = 43;
BACK_FORWARD_CACHE_DISABLED_FOR_DELEGATE = 44;
OPT_IN_UNLOAD_HEADER_NOT_PRESENT = 45;
UNLOAD_HANDLER_EXISTS_IN_MAIN_FRAME = 46;
UNLOAD_HANDLER_EXISTS_IN_SUBFRAME = 47;
SERVICE_WORKER_UNREGISTRATION = 48;
CACHE_CONTROL_NO_STORE = 49;
CACHE_CONTROL_NO_STORE_COOKIE_MODIFIED = 50;
CACHE_CONTROL_NO_STORE_HTTP_ONLY_COOKIE_MODIFIED = 51;
NO_RESPONSE_HEAD = 52;
ACTIVATION_NAVIGATION_DISALLOWED_FOR_BUG_1234857 = 53;
ERROR_DOCUMENT = 54;
FENCED_FRAMES_EMBEDDER = 55;
COOKIE_DISABLED = 56;
HTTP_AUTH_REQUIRED = 57;
COOKIE_FLUSHED = 58;
BROADCAST_CHANNEL_ON_MESSAGE = 59;
WEBVIEW_SETTINGS_CHANGED = 60;
WEBVIEW_JAVASCRIPT_OBJECT_CHANGED = 61;
WEBVIEW_MESSAGE_LISTENER_INJECTED = 62;
WEBVIEW_SAFE_BROWSING_ALLOWLIST_CHANGED = 63;
WEBVIEW_DOCUMENT_START_JAVASCRIPT_CHANGED = 64;
CACHE_CONTROL_NO_STORE_DEVICE_BOUND_SESSION_TERMINATED = 65;
CACHE_LIMIT_PRUNED_ON_MODERATE_MEMORY_PRESSURE = 66;
CACHE_LIMIT_PRUNED_ON_CRITICAL_MEMORY_PRESSURE = 67;
SHARED_WORKER_MESSAGE = 68;
SHARED_WORKER_WITH_NO_ACTIVE_CLIENT = 69;
}
optional BackForwardCacheNotRestoredReason
back_forward_cache_not_restored_reason = 1;
}
message RendererMainThreadTaskExecution {
enum TaskType {
TASK_TYPE_UNKNOWN = 0;
TASK_TYPE_DOM_MANIPULATION = 1;
TASK_TYPE_USER_INTERACTION = 2;
TASK_TYPE_NETWORKING = 3;
TASK_TYPE_NETWORKING_CONTROL = 4;
TASK_TYPE_HISTORY_TRAVERSAL = 5;
TASK_TYPE_EMBED = 6;
TASK_TYPE_MEDIA_ELEMENT_EVENT = 7;
TASK_TYPE_CANVAS_BLOB_SERIALIZATION = 8;
TASK_TYPE_MICROTASK = 9;
TASK_TYPE_JAVASCRIPT_TIMER_DELAYED_HIGH_NESTING = 10;
TASK_TYPE_REMOTE_EVENT = 11;
TASK_TYPE_WEB_SOCKET = 12;
TASK_TYPE_POSTED_MESSAGE = 13;
TASK_TYPE_UNSHIPPED_PORT_MESSAGE = 14;
TASK_TYPE_FILE_READING = 15;
TASK_TYPE_DATABASE_ACCESS = 16;
TASK_TYPE_PRESENTATION = 17;
TASK_TYPE_SENSOR = 18;
TASK_TYPE_PERFORMANCE_TIMELINE = 19;
TASK_TYPE_WEB_GL = 20;
TASK_TYPE_IDLE_TASK = 21;
TASK_TYPE_MISC_PLATFORM_API = 22;
TASK_TYPE_INTERNAL_DEFAULT = 23;
TASK_TYPE_INTERNAL_LOADING = 24;
TASK_TYPE_INTERNAL_TEST = 26;
TASK_TYPE_INTERNAL_WEB_CRYPTO = 27;
TASK_TYPE_INTERNAL_MEDIA = 29;
TASK_TYPE_INTERNAL_MEDIA_REALTIME = 30;
TASK_TYPE_INTERNAL_USER_INTERACTION = 32;
TASK_TYPE_INTERNAL_INSPECTOR = 33;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_V8 = 37;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_COMPOSITOR = 38;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_DEFAULT = 39;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_INPUT = 40;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_IDLE = 41;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_CONTROL = 43;
TASK_TYPE_INTERNAL_INTERSECTION_OBSERVER = 44;
TASK_TYPE_COMPOSITOR_THREAD_TASK_QUEUE_DEFAULT = 45;
TASK_TYPE_WORKER_THREAD_TASK_QUEUE_DEFAULT = 46;
TASK_TYPE_WORKER_THREAD_TASK_QUEUE_V8 = 47;
TASK_TYPE_WORKER_THREAD_TASK_QUEUE_COMPOSITOR = 48;
TASK_TYPE_COMPOSITOR_THREAD_TASK_QUEUE_INPUT = 49;
// TODO(crbug.com/40583778): Obsolete. Remove.
TASK_TYPE_NETWORKING_WITH_URL_LOADER_ANNOTATION = 50;
TASK_TYPE_WORKER_ANIMATION = 51;
TASK_TYPE_INTERNAL_TRANSLATION = 55;
TASK_TYPE_FONT_LOADING = 56;
TASK_TYPE_APPLICATION_LIFECYCLE = 57;
TASK_TYPE_BACKGROUND_FETCH = 58;
TASK_TYPE_PERMISSION = 59;
TASK_TYPE_SERVICE_WORKER_CLIENT_MESSAGE = 60;
TASK_TYPE_INTERNAL_CONTENT_CAPTURE = 61;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_MEMORY_PURGE = 62;
TASK_TYPE_INTERNAL_NAVIGATION_ASSOCIATED = 63;
TASK_TYPE_INTERNAL_NAVIGATION_ASSOCIATED_UNFREEZABLE = 64;
TASK_TYPE_INTERNAL_CONTINUE_SCRIPT_LOADING = 65;
TASK_TYPE_WEB_LOCKS = 66;
TASK_TYPE_WEB_SCHEDULING_POSTED_TASK = 67;
TASK_TYPE_INTERNAL_FRAME_LIFE_CYCLE_CONTROL = 68;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_NON_WAKING = 69;
TASK_TYPE_INTERNAL_FIND_IN_PAGE = 70;
TASK_TYPE_INTERNAL_HIGH_PRIORITY_LOCAL_FRAME = 71;
TASK_TYPE_JAVASCRIPT_TIMER_IMMEDIATE = 72;
TASK_TYPE_JAVASCRIPT_TIMER_DELAYED_LOW_NESTING = 73;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_IPC_TRACKING = 74;
TASK_TYPE_NETWORKING_UNFREEZABLE = 75;
TASK_TYPE_WAKE_LOCK = 76;
TASK_TYPE_INTERNAL_INPUT_BLOCKING = 77;
TASK_TYPE_WEB_GPU = 78;
TASK_TYPE_INTERNAL_POST_MESSAGE_FORWARDING = 79;
TASK_TYPE_INTERNAL_NAVIGATION_CANCELLATION = 80;
TASK_TYPE_LOW_PRIORITY_SCRIPT_EXECUTION = 81;
TASK_TYPE_STORAGE = 82;
TASK_TYPE_NETWORKING_UNFREEZABLE_RENDER_BLOCKING_LOADING = 83;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_V8_USER_VISIBLE = 84;
TASK_TYPE_CLIPBOARD = 85;
TASK_TYPE_MACHINE_LEARNING = 86;
TASK_TYPE_MAIN_THREAD_TASK_QUEUE_V8_BEST_EFFORT = 87;
TASK_TYPE_INTERNAL_AUTOFILL = 88;
TASK_TYPE_BACK_FORWARD_CACHE_POSTED_MESSAGE = 89;
}
enum FrameType {
FRAME_TYPE_UNSPECIFIED = 0;
FRAME_TYPE_MAIN_FRAME = 1;
FRAME_TYPE_SAME_ORIGIN_SUBFRAME = 2;
FRAME_TYPE_CROSS_ORIGIN_SUBFRAME = 3;
}
optional TaskType task_type = 1;
// FrameScheduler related data
optional bool frame_visible = 2;
optional bool page_visible = 3;
optional FrameType frame_type = 4;
optional bool is_ad_frame = 5;
}
message EventLatency {
enum EventType {
EVENT_TYPE_UNSPECIFIED = 0;
MOUSE_PRESSED = 1;
MOUSE_RELEASED = 2;
MOUSE_WHEEL = 3;
KEY_PRESSED = 4;
KEY_RELEASED = 5;
TOUCH_PRESSED = 6;
TOUCH_RELEASED = 7;
TOUCH_MOVED = 8;
GESTURE_SCROLL_BEGIN = 9;
GESTURE_SCROLL_UPDATE = 10;
GESTURE_SCROLL_END = 11;
GESTURE_DOUBLE_TAP = 12;
GESTURE_LONG_PRESS = 13;
GESTURE_LONG_TAP = 14;
GESTURE_SHOW_PRESS = 15;
GESTURE_TAP = 16;
GESTURE_TAP_CANCEL = 17;
GESTURE_TAP_DOWN = 18;
GESTURE_TAP_UNCONFIRMED = 19;
GESTURE_TWO_FINGER_TAP = 20;
FIRST_GESTURE_SCROLL_UPDATE = 21;
MOUSE_DRAGGED = 22;
GESTURE_PINCH_BEGIN = 23;
GESTURE_PINCH_END = 24;
GESTURE_PINCH_UPDATE = 25;
INERTIAL_GESTURE_SCROLL_UPDATE = 26;
MOUSE_MOVED_EVENT = 27;
INERTIAL_GESTURE_SCROLL_END = 28;
}
optional EventType event_type = 1;
optional bool has_high_latency = 2;
repeated string high_latency_stage = 3;
// This is same as LatencyInfo's trace_id, using the name event_latency_id to
// move away from the generic trace_id name used at other places as well.
optional int64 event_latency_id = 4;
// This is set only for scroll updates and is based on the
// Event.ScrollJank.DelayedFramesPercentage.FixedWindow metric.
optional bool is_janky_scrolled_frame = 5;
// The interval that this frame was produced for according to the
// BeginFrameArgs.
optional double vsync_interval_ms = 6;
// viz::BeginFrameArgs.trace_id of the frame (before surface aggregation) in
// which the input was first presented. See also
// ChromeGraphicsPipeline.surface_frame_trace_id.
optional int64 surface_frame_trace_id = 7;
// gfx::PresentationFeedback.display_trace_id of the frame (after surface
// aggregation) in which the input was first presented. See also
// ChromeGraphicsPipeline.display_trace_id.
optional int64 display_trace_id = 8;
// Deprecated in favor of `scroll_jank_v4.is_janky`. Not filled
// anymore in newer versions of Chrome.
optional bool is_janky_scrolled_frame_v3 = 9 [deprecated = true];
// Result of the Scroll Jank V4 Metric for a scroll update. This is set only
// for scroll updates. See
// cc::ScrollUpdateEventMetrics::ScrollJankV4MetricResults,
// https://docs.google.com/document/d/1AaBvTIf8i-c-WTKkjaL4vyhQMkSdynxo3XEiwpofdeA
// and the Event.ScrollJank.DelayedFramesPercentage4.FixedWindow histogram's
// documentation for more information.
message ScrollJankV4Result {
// This field is a new version of `EventLatency.is_janky_scrolled_frame`
// based on the Event.ScrollJank.DelayedFramesPercentage4.FixedWindow
// metric. This field aims to address the old field's shortcomings and
// eventually replace it.
optional bool is_janky = 1;
// Reason why Chrome's scroll jank v4 metric marked a scroll update as
// janky. A single scroll update can be janky for more than one reason.
// LINT.IfChange(JankReason)
enum JankReason {
JANK_REASON_UNSPECIFIED = 0;
// Chrome's input→frame delivery slowed down to the point that it missed
// one or more VSyncs.
MISSED_VSYNC_DUE_TO_DECELERATING_INPUT_FRAME_DELIVERY = 1;
// Chrome missed one or more VSyncs in the middle of a fast regular
// scroll.
MISSED_VSYNC_DURING_FAST_SCROLL = 2;
// Chrome missed one or more VSyncs during the transition from a fast
// regular scroll to a fling.
MISSED_VSYNC_AT_START_OF_FLING = 3;
// Chrome missed one or more VSyncs in the middle of a fling.
MISSED_VSYNC_DURING_FLING = 4;
}
// LINT.ThenChange(//cc/metrics/event_metrics.h:JankReason,//tools/metrics/histograms/metadata/event/histograms.xml:ScrollJankReasonV4)
// Number of VSyncs that that Chrome missed before presenting the scroll
// update for each reason. Essentially a map<JankReason, int32>.
message MissedVsyncsForJankReason {
optional JankReason jank_reason = 1;
optional int32 missed_vsyncs = 2;
}
repeated MissedVsyncsForJankReason missed_vsyncs_per_jank_reason = 2;
// The absolute total raw (unpredicted) delta of all scroll updates included
// in the frame in which the scroll update was presented (in pixels).
optional float abs_total_raw_delta_pixels = 3;
// The maximum absolute raw (unpredicted) delta out of all inertial (fling)
// scroll updates included in the frame in which the scroll update was
// presented (in pixels). Zero if there were no inertial scroll updates in
// the frame.
optional float max_abs_inertial_raw_delta_pixels = 4;
// How many VSync were between (A) the frame in which the scroll update was
// presented and (B) the previous frame. If this value is greater than one,
// then Chrome potentially missed one or more VSyncs (i.e. might have been
// able to present this scroll update earlier). Empty if this scroll update
// was presented in the first scroll update of a scroll.
optional int32 vsyncs_since_previous_frame = 5;
// The running delivery cut-off based on frames preceding the frame in which
// the scroll update was presented. Empty if this scroll update was
// presented in the first scroll update of a scroll.
optional int64 running_delivery_cutoff_us = 6;
// The running delivery cut-off adjusted for the frame that the scroll
// update was presented in. Empty if this scroll update was presented in the
// first scroll update of a scroll or if `vsyncs_since_previous_frame` is
// one.
optional int64 adjusted_delivery_cutoff_us = 7;
// The delivery cut-off of the frame that the scroll update was presented
// in.
optional int64 current_delivery_cutoff_us = 8;
}
optional ScrollJankV4Result scroll_jank_v4 = 10;
}
message ProcessSingleton {
enum RemoteProcessInteractionResult {
INTERACTION_RESULT_UNSPECIFIED = 0;
TERMINATE_FAILED = 1;
REMOTE_PROCESS_NOT_FOUND = 2;
TERMINATE_WAIT_TIMEOUT = 3;
RUNNING_PROCESS_NOTIFY_ERROR = 4;
TERMINATE_NOT_ENOUGH_PERMISSIONS = 5;
REMOTE_PROCESS_SHUTTING_DOWN = 6;
PROFILE_UNLOCKED = 7;
PROFILE_UNLOCKED_BEFORE_KILL = 8;
SAME_BROWSER_INSTANCE = 9;
SAME_BROWSER_INSTANCE_BEFORE_KILL = 10;
FAILED_TO_EXTRACT_PID = 11;
INVALID_LOCK_FILE = 12;
ORPHANED_LOCK_FILE = 13;
USER_REFUSED_TERMINATION = 14;
TERMINATE_SUCCEEDED = 100;
}
enum RemoteHungProcessTerminateReason {
TERMINATE_REASON_UNSPECIFIED = 0;
USER_ACCEPTED_TERMINATION = 1;
NO_VISIBLE_WINDOW_FOUND = 2;
NOTIFY_ATTEMPTS_EXCEEDED = 3;
SOCKET_WRITE_FAILED = 4;
SOCKET_READ_FAILED = 5;
}
optional RemoteProcessInteractionResult remote_process_interaction_result = 1;
optional RemoteHungProcessTerminateReason remote_process_terminate_reason = 2;
}
message NavigationHandle {
optional int64 navigation_id = 1;
optional bool has_committed = 2;
optional bool is_error_page = 3;
optional FrameTreeNodeInfo frame_tree_node = 4;
optional RenderFrameHost render_frame_host = 5;
// Additional untyped debug information associated with this
// NavigationHandle/Request, populated via TracedProto::AddDebugAnnotations
// API.
repeated DebugAnnotation debug_annotations = 99;
}
enum DeviceThermalState {
DEVICE_THERMAL_STATE_UNKNOWN = 0;
DEVICE_THERMAL_STATE_NOMINAL = 1;
DEVICE_THERMAL_STATE_FAIR = 2;
DEVICE_THERMAL_STATE_SERIOUS = 3;
DEVICE_THERMAL_STATE_CRITICAL = 4;
}
// Used to log which Android IPC was called and how long it took.
message AndroidIPC {
optional string name = 1;
optional int64 dur_ms = 2;
}
message SequenceManagerTask {
enum Priority {
UNKNOWN = 0;
CONTROL_PRIORITY = 1;
HIGHEST_PRIORITY = 2;
VERY_HIGH_PRIORITY = 3;
HIGH_PRIORITY = 4;
NORMAL_PRIORITY = 5;
LOW_PRIORITY = 6;
BEST_EFFORT_PRIORITY = 7;
// Renderer-specific priorities.
HIGH_PRIORITY_CONTINUATION = 8;
NORMAL_PRIORITY_CONTINUATION = 9;
LOW_PRIORITY_CONTINUATION = 10;
EXTREMELY_HIGH_PRIORITY = 11;
}
enum QueueName {
UNKNOWN_TQ = 0;
DEFAULT_TQ = 1;
TASK_ENVIRONMENT_DEFAULT_TQ = 2;
TEST2_TQ = 3;
TEST_TQ = 4;
CONTROL_TQ = 5;
SUBTHREAD_CONTROL_TQ = 6;
SUBTHREAD_DEFAULT_TQ = 7;
SUBTHREAD_INPUT_TQ = 8;
UI_BEST_EFFORT_TQ = 9;
UI_BOOTSTRAP_TQ = 10;
UI_CONTROL_TQ = 11;
UI_DEFAULT_TQ = 12;
UI_NAVIGATION_NETWORK_RESPONSE_TQ = 13;
UI_RUN_ALL_PENDING_TQ = 14;
UI_SERVICE_WORKER_STORAGE_CONTROL_RESPONSE_TQ = 15;
UI_THREAD_TQ = 16;
UI_USER_BLOCKING_TQ = 17;
UI_USER_INPUT_TQ = 18;
UI_USER_VISIBLE_TQ = 19;
IO_BEST_EFFORT_TQ = 20;
IO_BOOTSTRAP_TQ = 21;
IO_CONTROL_TQ = 22;
IO_DEFAULT_TQ = 23;
IO_NAVIGATION_NETWORK_RESPONSE_TQ = 24;
IO_RUN_ALL_PENDING_TQ = 25;
IO_SERVICE_WORKER_STORAGE_CONTROL_RESPONSE_TQ = 26;
IO_THREAD_TQ = 27;
IO_USER_BLOCKING_TQ = 28;
IO_USER_INPUT_TQ = 29;
IO_USER_VISIBLE_TQ = 30;
COMPOSITOR_TQ = 31;
DETACHED_TQ = 32;
FRAME_DEFERRABLE_TQ = 33;
FRAME_LOADING_CONTROL_TQ = 34;
FRAME_LOADING_TQ = 35;
FRAME_PAUSABLE_TQ = 36;
FRAME_THROTTLEABLE_TQ = 37;
FRAME_UNPAUSABLE_TQ = 38;
IDLE_TQ = 39;
INPUT_TQ = 40;
IPC_TRACKING_FOR_CACHED_PAGES_TQ = 41;
NON_WAKING_TQ = 42;
OTHER_TQ = 43;
V8_TQ = 44;
WEB_SCHEDULING_TQ = 45;
WORKER_IDLE_TQ = 46;
WORKER_PAUSABLE_TQ = 47;
WORKER_THREAD_INTERNAL_TQ = 48;
WORKER_THROTTLEABLE_TQ = 49;
WORKER_UNPAUSABLE_TQ = 50;
WORKER_WEB_SCHEDULING_TQ = 51;
UI_USER_BLOCKING_DEFERRABLE_TQ = 52 [deprecated = true];
IO_USER_BLOCKING_DEFERRABLE_TQ = 53 [deprecated = true];
UI_BEFORE_UNLOAD_BROWSER_RESPONSE_TQ = 54;
IO_BEFORE_UNLOAD_BROWSER_RESPONSE_TQ = 55;
V8_USER_VISIBLE_TQ = 56;
V8_BEST_EFFORT_TQ = 57;
NETWORK_SERVICE_THREAD_HIGH_TQ = 58;
NETWORK_SERVICE_THREAD_DEFAULT_TQ = 59;
UI_STARTUP_TQ = 60;
IO_STARTUP_TQ = 61;
}
optional Priority priority = 1;
optional QueueName queue_name = 2;
}
message AndroidToolbar {
enum BlockCaptureReason {
BLOCKED_UNKNOWN = 0;
BLOCKED_TOOLBAR_OR_RESULT_NULL = 1;
BLOCKED_VIEW_NOT_DIRTY = 2;
BLOCKED_SNAPSHOT_SAME = 3;
BLOCKED_URL_BAR_HAS_FOCUS = 4;
BLOCKED_URL_BAR_FOCUS_IN_PROGRESS = 5;
BLOCKED_OPTIONAL_BUTTON_ANIMATION_IN_PROGRESS = 6;
BLOCKED_STATUS_ICON_ANIMATION_IN_PROGRESS = 7;
BLOCKED_SCROLL_ABLATION = 8;
BLOCKED_BROWSER_CONTROLS_LOCKED = 9;
BLOCKED_TAB_SWITCHER_MODE = 10;
BLOCKED_COMPOSITOR_IN_MOTION = 11;
BLOCKED_NTP_Y_TRANSLATION = 12;
BLOCKED_FULLSCREEN = 13;
BLOCKED_TABLET_BUTTON_ANIMATION_IN_PROGRESS = 14;
BLOCKED_LAYOUT_REQUESTED = 15;
}
enum AllowCaptureReason {
ALLOWED_UNKNOWN = 0;
ALLOWED_FORCE_CAPTURE = 1;
ALLOWED_SNAPSHOT_DIFFERENCE = 2;
}
enum SnapshotDifference {
DIFF_NONE = 0;
DIFF_NULL = 1;
DIFF_TINT = 2;
DIFF_TAB_COUNT = 3;
DIFF_OPTIONAL_BUTTON = 4;
DIFF_VISUAL_STATE = 5;
DIFF_SECURITY_ICON = 6;
DIFF_SHOWING_UPDATE_BADGE = 7;
DIFF_PAINT_PREVIEW = 8;
DIFF_PROGRESS = 9;
DIFF_LOCATION_BAR_WIDTH = 10;
DIFF_URL_TEXT = 11;
DIFF_HOME_BUTTON = 12;
DIFF_TITLE_TEXT = 13;
DIFF_CCT_ANIMATION = 14;
DIFF_BOOKMARK_BUTTON = 15;
DIFF_BACK_BUTTON = 16;
DIFF_FORWARD_BUTTON = 17;
DIFF_RELOAD_BUTTON = 18;
}
optional BlockCaptureReason block_capture_reason = 1;
optional AllowCaptureReason allow_capture_reason = 2;
optional SnapshotDifference snapshot_difference = 3;
}
message ActiveProcesses {
repeated int32 pid = 1;
}
message UkmPageLoadTimingUpdate {
// This can be used to uniquely identify a navigation from the point of view
// of UKM.
optional int64 ukm_source_id = 1;
// The URL of a page can change throughout its lifetime. This is the current
// url when this timing update was dispatched.
optional string latest_url = 2;
// Latest fully aggregated value of Cumulative Layout Shift.
optional float latest_cumulative_layout_shift = 3;
// Latest fully aggregated value of Largest Contentful Paint.
optional double latest_largest_contentful_paint_ms = 4;
optional double first_contentful_paint_ms = 5;
}
// A serialisation of v8StackFrame class.
message V8StackFrame {
// Code location (path to the script and line/column number)
message ScriptLocation {
optional string source_url = 1;
optional int64 line_number = 2;
optional int64 column_number = 3;
}
// The name of the function that was called
optional string function_name = 1;
// If the function was defined in a script, contains the location within the
// script.
optional ScriptLocation script_location = 2;
}
// Serializes the blink::ExecutionContext object.
message BlinkExecutionContext {
// Definition of different context types.
enum ContextType {
UNKNOWN_CONTEXT = 0;
WINDOW = 1;
WORKLET = 2;
DEDICATED_WORKER = 3;
SHARED_WORKER = 4;
SERVICE_WORKER = 5;
}
// Definition of world type.
enum WorldType {
WORLD_UNKNOWN = 0;
WORLD_MAIN = 1;
WORLD_ISOLATED = 2;
WORLD_INSPECTOR_ISOLATED = 3;
WORLD_REG_EXP = 4;
WORLD_FOR_V8_CONTEXT_SNAPSHOT_NON_MAIN = 5;
WORLD_WORKER = 6;
WORLD_SHADOW_REALM = 7;
}
optional ContextType type = 1;
// Contains url of frame or worker.
optional string url = 2;
// The origin of the execution context.
optional string origin = 3;
// The world type of the execution context.
optional WorldType world_type = 4;
}
// Serializes the blink::SourceLocation object.
message BlinkSourceLocation {
optional string function_name = 1;
optional int32 script_id = 2;
optional string url = 3;
optional int32 line_number = 4;
optional int32 column_number = 5;
optional string stack_trace = 6;
repeated V8StackFrame stack_frames = 7;
}
// Contains the meta information for high entropy events (like api calls)
// that are to be traced for debugging in the context of identifiability study.
message BlinkHighEntropyAPI {
// Serialization of a parameter passed to a javascript function.
// Contains the stringified type of the object and some string representation
// of its value.
message JSFunctionArgument {
// Definition of different types of function parameters.
enum ArgumentType {
UNKNOWN_TYPE = 0;
NULL_TYPE = 1;
UNDEFINED = 2;
BIGINT = 3;
BOOLEAN = 4;
FUNCTION = 5;
NUMBER = 6;
STRING = 7;
SYMBOL = 8;
OBJECT = 9;
}
optional ArgumentType type = 1;
optional string value = 2;
}
// Describes a Javascript API call.
message CalledJsApi {
// Contains class and function name of api called
// similar to "Navigator.languages.get".
optional string identifier = 1;
repeated JSFunctionArgument func_arguments = 2;
// Deprecated in favour of outer source_location. Not filled anymore in
// newer versions of chrome.
optional BlinkSourceLocation source_location = 3 [deprecated = true];
}
optional BlinkExecutionContext execution_context = 1;
optional CalledJsApi called_api = 2;
optional BlinkSourceLocation source_location = 3;
// Describes lookup of a font.
message FontLookup {
enum FontLookupType {
FONT_LOOKUP_UNKNOWN_TYPE = 0;
FONT_LOOKUP_UNIQUE_OR_FAMILY_NAME = 1;
FONT_LOOKUP_UNIQUE_NAME_ONLY = 2;
}
optional FontLookupType type = 1;
optional string name = 2;
optional uint64 weight = 3;
optional uint64 width = 4;
optional uint64 slope = 5;
}
optional FontLookup font_lookup = 4;
}
// Contains information about a tab switch measurement.
message TabSwitchMeasurement {
// Possible outcomes of a tab switch. Maps to
// blink::ContentToVisibleTimeReporter::TabSwitchResult.
enum Result {
RESULT_UNSPECIFIED = 0;
// A frame was successfully presented after a tab switch.
RESULT_SUCCESS = 1;
// Tab was hidden before a frame was presented after a tab switch.
RESULT_INCOMPLETE = 2;
// TabWasShown called twice for a frame without TabWasHidden between. Treat
// the first TabWasShown as an incomplete tab switch.
RESULT_MISSED_TAB_HIDE = 3;
}
// State of the target tab. Corresponds to the suffixes of the
// Browser.TabSwitchResult2.* histograms.
enum TabState {
STATE_UNSPECIFIED = 0;
// The tab has frames in the frame cache, which can be composited in the
// browser process.
STATE_WITH_SAVED_FRAMES = 1;
// The tab has no frames in the frame cache so must be rendered and
// composited in a renderer process.
STATE_LOADED_NO_SAVED_FRAMES = 2;
// The tab has no frames in the frame cache and is not fully loaded, so it
// must be reloaded before it can be rendered and composited in a renderer
// process.
STATE_NOT_LOADED_NO_SAVED_FRAMES = 3;
}
optional Result result = 1;
optional TabState tab_state = 2;
}
// Data about scroll deltas and offsets.
// All values are in physical screen pixels.
message ScrollDeltas {
// The trace_id of the current input.
optional int64 trace_id = 1;
// The original delta for current input. That is, this is the delta that
// the Browser receives from Android, but already scaled to the device's
// screen.
optional float original_delta_x = 2;
optional float original_delta_y = 3;
// The trace_id of the input that the current input is coalesced with.
// If input is not coalesced, this field is null.
optional int64 coalesced_to_trace_id = 4;
// The delta which arrived to compositor.
// This is the sum of all the inputs coalesced together
// with the resampler applied to them.
// This delta is used to calculate a |visual_offset|.
optional float provided_to_compositor_delta_x = 5;
optional float provided_to_compositor_delta_y = 6;
// The offset which compositor set.
optional int64 visual_offset_x = 7;
optional int64 visual_offset_y = 8;
// Data which GPU returns.
// Number of inputs which were shown together in one GPU frame.
optional int32 event_count_in_gpu_frame = 9;
// The trace_ids of inputs which were shown together in one GPU frame.
repeated int64 trace_ids_in_gpu_frame = 10;
// The sum of original deltas of inputs which were shown together in one GPU
// frame.
optional float original_delta_in_gpu_frame_y = 11;
// The sum of predicted deltas of inputs which were shown together in one GPU
// frame.
optional float predicted_delta_in_gpu_frame_y = 12;
// The array of original deltas of inputs which were shown together in one GPU
// frame.
repeated float segregated_original_deltas_in_gpu_frame_y = 13;
// The array of predicted deltas of inputs which were shown together in one
// GPU frame.
repeated float segregated_predicted_deltas_in_gpu_frame_y = 14;
// Data for overscrolls.
// Whether any of the scroll delta was unused.
optional bool did_overscroll_root = 15;
// The amount of the scroll delta that was not used for scrolling.
optional float unused_delta_x = 16;
optional float unused_delta_y = 17;
}
// Debug information for system layer of audio rendering on Windows.
message WinRenderAudioFromSource {
// Buffer size used by the platform.
optional uint32 iaudioclient_buffer_size_frames = 1;
// Number of available frames in the platform buffer.
optional uint32 iaudioclient_buffer_unfilled_frames = 2;
// Number of frames requested from the audio stream client.
optional uint32 packet_size_frames = 3;
// Total number of frames requested from the client and written to the
// platform buffer during the stream lifetime.
optional uint64 num_written_frames = 4;
// Total number of frames played by the platform during the stream lifetime.
optional uint64 num_played_out_frames = 5;
// Device frequency reported by the platform; used to convert the stream
// position to frames.
optional uint64 iaudioclock_device_frequency = 6;
// Stream position reported by the platform.
optional uint64 iaudioclock_stream_position = 7;
// Performance counter position reported by the platform.
optional uint64 iaudioclock_qpc_position = 8;
// Stream position increase since the last call, converted to milliseconds.
optional int64 iaudioclock_stream_position_increase_ms = 9;
// Performance counter position since the last call, converted to
// milliseconds.
optional int64 iaudioclock_qpc_position_increase_ms = 10;
// Estimated playout delay, milliseconds.
optional int64 playout_delay_ms = 11;
};
// Debug information for system layer of audio rendering on Mac.
message MacAUHALStream {
// The number of frames that the stream requests from the audio source.
optional int32 input_buffer_size = 1;
// The number of frames that the OS requests for playout.
optional uint32 output_buffer_size = 2;
// Sample rate of the stream.
optional int32 sample_rate = 3;
// The time that the audio requested by the OS is expected to play out.
optional int64 os_request_playout_timeticks_us = 4;
// Total number of frames requested from the audio source.
optional int32 source_request_frames = 5;
// The delay between the request for audio from the source and when the audio
// is expected to be played out.
optional int64 source_request_playout_delay_us = 6;
// The time when the audio that is requested from the source is expected to
// play out.
optional int64 source_request_playout_timeticks_us = 7;
// The time when audio audio is requested from the source.
optional int64 source_request_current_timeticks_us = 8;
// The audio playout latency that comes from hardware, in milliseconds.
optional int64 hardware_latency_us = 9;
// Whether the kAudioTimeStampHostTimeValid is set on the output
// AudioTimeStamp.
optional bool audiotimestamp_host_time_valid = 10;
// The playout time based on the machine time from AudioTimeStamp.
optional int64 audiotimestamp_mach_timeticks_us = 11;
// The time that the audio requested by the os is expected to be consumed by
// the hardware. Measured in frames since the start of playout.
optional double audiotimestamp_sample_time_frames = 12;
// The time that the previous audio requested by the os was expected to be
// consumed by the hardware. Measured in frames since the start of playout.
optional double audiotimestamp_last_sample_time_frames = 13;
// The duration of audio that was estimated to be lost in the case of a
// glitch.
optional int64 lost_audio_duration_us = 14;
};
// Debug information for system layer of audio rendering using ALSA on Linux.
message LinuxAlsaOutput {
// The delay between the request for audio from the source and when the audio
// is expected to be played out.
optional int64 source_request_playout_delay_us = 1;
// The number of bytes that are already present in the buffer on a call to
// BufferPacket.
optional int32 forward_bytes = 2;
// Sample rate of the stream.
optional int32 sample_rate = 3;
// Delay obtained by the OS in frames.
optional int32 getcurrentdelay_pcm_delay_frames = 4;
// The number of frames in ALSA's buffer.
optional int32 getcurrentdelay_alsa_buffer_frames = 5;
// The number of frames that can be written to in ALSA's buffer.
optional int32 getcurrentdelay_available_frames = 6;
// The final delay that GetCurrentDelay arrives on, in frames.
optional int32 getcurrentdelay_final_delay_frames = 7;
};
// Debug information for system layer of audio rendering using Pulse on Linux.
message LinuxPulseOutput {
// The delay between the request for audio from the source and when the audio
// is expected to be played out.
optional int64 source_request_playout_delay_us = 1;
// Sample rate of the stream.
optional int32 sample_rate = 2;
// The number of frames that the stream requests from the audio source.
optional int32 input_buffer_size_frames = 3;
// The number of bytes that the OS requests.
optional uint32 stream_request_bytes = 4;
// The number of bytes in a single frame.
optional uint32 frame_size_bytes = 5;
};
// Debug information for system layer of audio rendering on ChromeOS.
message CrasUnified {
// The total duration of silence due to missing samples during the stream.
optional int64 underrun_duration_us = 1;
// Previous underrun duration, used for calculating the length of silence
// since the last callback.
optional int64 last_underrun_duration_us = 2;
// Difference in total underrun duration since the last callback. Logged only
// when positive, which is when a glitch occurs.
optional int64 underrun_glitch_duration_us = 3;
// OS playout latency reported by cras.
optional int64 latency_us = 4;
// The number of frames that the stream requests from the audio source.
optional int32 requested_frames = 5;
// The number of frames that the source provided.
optional uint32 filled_frames = 6;
// Sample rate of the stream.
optional int32 sample_rate = 7;
};
message ChromeUnguessableToken {
optional uint64 low_token = 1;
optional uint64 high_token = 2;
}
message FrameSinkId {
optional uint32 frame_sink_client_id = 1;
optional uint32 frame_sink_id = 2;
}
message LocalSurfaceId {
optional uint32 parent_sequence_number = 1;
optional uint32 child_sequence_number = 2;
optional ChromeUnguessableToken unguessable_token = 3;
}
message ChromeGraphicsPipeline {
// Next id: 26
enum StepName {
STEP_UNKNOWN = 0;
STEP_DID_NOT_PRODUCE_FRAME = 1;
STEP_DID_NOT_PRODUCE_COMPOSITOR_FRAME = 22;
STEP_GENERATE_COMPOSITOR_FRAME = 2;
STEP_GENERATE_RENDER_PASS = 3;
STEP_ISSUE_BEGIN_FRAME = 4;
STEP_RECEIVE_COMPOSITOR_FRAME = 5;
STEP_RECEIVE_BEGIN_FRAME = 6;
STEP_RECEIVE_BEGIN_FRAME_DISCARD = 7;
STEP_SEND_BEGIN_MAIN_FRAME = 8 [deprecated = true];
STEP_SUBMIT_COMPOSITOR_FRAME = 9;
STEP_DRAW_AND_SWAP = 21;
STEP_SURFACE_AGGREGATION = 10;
STEP_SEND_BUFFER_SWAP = 11;
STEP_BUFFER_SWAP_POST_SUBMIT = 12;
STEP_FINISH_BUFFER_SWAP = 13;
STEP_SWAP_BUFFERS_ACK = 14;
// While the above steps are part of the cc/viz/gpu pipeline, the STEP_EXO*
// and STEP_BACKEND* are somehow special.
//
// STEP_BACKEND* is platform independent and it can be used to trace any of
// the backends. For example, it perfectly fits in ozone/drm, ozone/wayland
// or x11 and can be set before and after buffer swap or overlay submission
// that helps to understand the flow better.
//
// The STEP_EXO* is used only by EXO (see below). It relies on a trace id
// from a Wayland client, which can use the "augmented_surface" protocol's
// "augmented_surface.set_frame_trace_id" to pass that value. As a result,
// any of the Wayland clients that use EXO will be able to have a nice trace
// connection and see their buffer submissions' flows.
// Frame submission stages when Exo (Wayland server implementation in Ash
// browser process) is involved. Wayland clients (such as ARC++) submit
// visual contents via Wayland surface commits, with which Exo constructs
// compositor frames and forwards to Ash Viz.
STEP_EXO_CONSTRUCT_COMPOSITOR_FRAME = 15;
STEP_EXO_SUBMIT_COMPOSITOR_FRAME = 16;
STEP_EXO_DISCARD_COMPOSITOR_FRAME = 17;
// Frame submission stages in backends that viz uses to submit frames to
// the gpu or to the system compositor. See the explanation above how these
// stages can be used.
STEP_BACKEND_SEND_BUFFER_SWAP = 18;
STEP_BACKEND_SEND_BUFFER_POST_SUBMIT = 19;
STEP_BACKEND_FINISH_BUFFER_SWAP = 20;
// Send viz.mojom.CompositorFrameSinkClient::OnBeginFrame Mojo message from
// Viz to a renderer's compositor.
STEP_SEND_ON_BEGIN_FRAME_MOJO_MESSAGE = 23;
// Send viz.mojom.BeginFrameObserver::OnStandaloneBeginFrame Mojo message
// from Viz to the browser main thread (for flings).
STEP_SEND_ON_STANDALONE_BEGIN_FRAME_MOJO_MESSAGE = 24;
// Send viz.mojom.CompositorFrameSink::SubmitCompositorFrame Mojo message
// from a renderer's compositor to Viz.
STEP_SEND_SUBMIT_COMPOSITOR_FRAME_MOJO_MESSAGE = 25;
}
enum FrameSkippedReason {
SKIPPED_REASON_UNKNOWN = 0;
SKIPPED_REASON_RECOVER_LATENCY = 1;
SKIPPED_REASON_NO_DAMAGE = 2;
SKIPPED_REASON_WAITING_ON_MAIN = 3;
SKIPPED_REASON_DRAW_THROTTLED = 4;
}
optional StepName step = 1;
optional FrameSinkId frame_sink_id = 2;
// Id used to link `ChromeGraphicsPipeline`s corresponding to work done by a
// Viz client to produce a frame. This corresponds to
// `viz::BeginFrameAck.trace_id`. Covers steps:
// * STEP_ISSUE_BEGIN_FRAME
// * STEP_RECEIVE_BEGIN_FRAME
// * STEP_GENERATE_RENDER_PASS
// * STEP_GENERATE_COMPOSITOR_FRAME
// * STEP_SUBMIT_COMPOSITOR_FRAME
// * STEP_RECEIVE_COMPOSITOR_FRAME
// * STEP_RECEIVE_BEGIN_FRAME_DISCARD
// * STEP_DID_NOT_PRODUCE_FRAME
// * STEP_DID_NOT_PRODUCE_COMPOSITOR_FRAME
optional int64 surface_frame_trace_id = 10;
// Id used to link `ChromeGraphicsPipeline`s corresponding to work done
// on creating and presenting one frame *after* surface aggregation. Covers
// steps:
// * STEP_DRAW_AND_SWAP
// * STEP_SURFACE_AGGREGATION
// * STEP_SEND_BUFFER_SWAP
// * STEP_BUFFER_SWAP_POST_SUBMIT
// * STEP_FINISH_BUFFER_SWAP
// * STEP_SWAP_BUFFERS_ACK
optional int64 display_trace_id = 3;
// `viz::BeginFrameAck.trace_id`s for frames aggregated at this step.
// Used with `STEP_SURFACE_AGGREGATION` only. This can be "joined" with
// `surface_frame_trace_id`.
repeated int64 aggregated_surface_frame_trace_ids = 8;
optional LocalSurfaceId local_surface_id = 4;
optional int64 frame_sequence = 5;
optional FrameSkippedReason frame_skipped_reason = 6;
// Optional variable that can be set together with STEP_BACKEND*.
optional int64 backend_frame_id = 7;
// List of LatencyInfo.trace_ids associated with this frame, which
// should allow us to match input to frame production.
repeated int64 latency_ids = 9;
// Optional frame data containing of possible latch and present
// frame deadlines. Only set on Android devices.
optional AndroidChoreographerFrameCallbackData possible_deadlines = 11;
};
message LibunwindstackUnwinder {
// The enum is a copy of ErrorCode enum inside third_party/libunwindstack,
// ideally this should be in sync with that.
enum ErrorCode {
ERROR_NONE = 0; // No error.
ERROR_MEMORY_INVALID = 1; // Memory read failed.
ERROR_UNWIND_INFO = 2; // Unable to use unwind information to unwind.
ERROR_UNSUPPORTED = 3; // Encountered unsupported feature.
ERROR_INVALID_MAP = 4; // Unwind in an invalid map.
ERROR_MAX_FRAMES_EXCEEDED = 5; // The number of frames exceed the total
// allowed.
ERROR_REPEATED_FRAME = 6; // The last frame has the same pc/sp as the next.
ERROR_INVALID_ELF = 7; // Unwind in an invalid elf.
ERROR_THREAD_DOES_NOT_EXIST = 8; // Attempt to unwind a local thread that
// does not exist.
ERROR_THREAD_TIMEOUT = 9; // Timeout trying to unwind a local thread.
ERROR_SYSTEM_CALL = 10; // System call failed while unwinding.
ERROR_BAD_ARCH = 11; // Arch invalid (none, or mismatched).
ERROR_MAPS_PARSE = 12; // Failed to parse maps data.
ERROR_INVALID_PARAMETER_LIBUNWINDSTACK =
13; // Invalid parameter passed to function.
ERROR_PTRACE_CALL = 14; // Ptrace call failed while unwinding.
}
optional ErrorCode error_code = 1;
optional int32 num_frames = 2;
};
message ScrollPredictorMetrics {
message EventFrameValue {
optional int64 event_trace_id = 1;
// The fractional pixels (can be fractional after the predictor adjusts in
// resampling of input) that the page was scrolled by this frame.
optional float delta_value_pixels = 2;
};
// Data from the previous, current, and next frame used to determine the
// values below as according to the metric doc:
// http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY.
optional EventFrameValue prev_event_frame_value = 1;
optional EventFrameValue cur_event_frame_value = 2;
optional EventFrameValue next_event_frame_value = 3;
// This is the amount of delta processed in this frame that was above the
// janky threshold (as defined by
// http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY)
optional float janky_value_pixels = 4;
// True if we are also missing frames (so multiple frames are being presented
// at once).
optional bool has_missed_vsyncs = 5;
// True if we're moving less than the slow scroll threshold as defined by the
// doc above.
optional bool is_slow_scroll = 6;
};
//
// Critical User Interaction metrics
//
message PageLoad {
optional int64 navigation_id = 1;
optional string url = 2;
}
message StartUp {
// This enum must be kept up to date with LaunchCauseMetrics.LaunchCause.
enum LaunchCauseType {
UNINITIALIZED = -1;
OTHER = 0;
CUSTOM_TAB = 1;
TWA = 2;
RECENTS = 3;
RECENTS_OR_BACK = 4;
FOREGROUND_WHEN_LOCKED = 5;
MAIN_LAUNCHER_ICON = 6;
MAIN_LAUNCHER_ICON_SHORTCUT = 7;
HOME_SCREEN_WIDGET = 8;
OPEN_IN_BROWSER_FROM_MENU = 9;
EXTERNAL_SEARCH_ACTION_INTENT = 10;
NOTIFICATION = 11;
EXTERNAL_VIEW_INTENT = 12;
OTHER_CHROME = 13;
WEBAPK_CHROME_DISTRIBUTOR = 14;
WEBAPK_OTHER_DISTRIBUTOR = 15;
HOME_SCREEN_SHORTCUT = 16;
SHARE_INTENT = 17;
NFC = 18;
AUTH_TAB = 19;
}
optional int64 activity_id = 1;
// deprecated field 2.
optional LaunchCauseType launch_cause = 3;
}
message WebContentInteraction {
enum Type {
INTERACTION_UNSPECIFIED = 0;
INTERACTION_KEYBOARD = 1;
INTERACTION_CLICK_TAP = 2;
INTERACTION_DRAG = 3 [deprecated = true];
}
optional Type type = 1;
optional int64 total_duration_ms = 2;
}
message ScrollMetrics {
optional int64 frame_count = 1;
optional int64 vsync_count = 2;
optional int64 missed_vsync_max = 3;
optional int64 missed_vsync_sum = 4;
optional int64 delayed_frame_count = 5;
optional int64 predictor_janky_frame_count = 6;
}
// The EventForwarder is a subsystem in android that forwards events from Java
// code to Chromium's native implementation. In this case we register how many
// events there was, what time this event occurred and the current x & y on the
// device screen (pixels).
//
// All data comes from MotionEvent getters so read these for more context:
// https://developer.android.com/reference/android/view/MotionEvent
// Next id: 11
message EventForwarder {
// The events getHistorySize().
optional int32 history_size = 1;
// The time of the oldest event (getHistoricalEventTimeNanos(0)).
optional int64 oldest_time_ns = 2;
// The time of the newest event (getEventTimeNanos(0)).
optional int64 latest_time_ns = 5;
// The down time of event gotten from `MotionEvent.GetDownTime` or
// `AMotionEvent_getDownTime`.
optional int64 down_time_ns = 8;
// The X coordinate of the event as reported by MotionEvent.getX().
optional float x_pixel = 3;
// The Y coordinate of the event as reported by MotionEvent.getY().
optional float y_pixel = 4;
// Determine if the previous forwarded event changed x coordinate.
optional bool has_x_movement = 6;
// Determine if the previous forwarded event changed y coordinate.
optional bool has_y_movement = 7;
// The enum comes from Android NDK header: `android/input.h`.
enum AMotionEventAction {
AMOTION_EVENT_ACTION_DOWN = 0;
AMOTION_EVENT_ACTION_UP = 1;
AMOTION_EVENT_ACTION_MOVE = 2;
AMOTION_EVENT_ACTION_CANCEL = 3;
AMOTION_EVENT_ACTION_OUTSIDE = 4;
AMOTION_EVENT_ACTION_POINTER_DOWN = 5;
AMOTION_EVENT_ACTION_POINTER_UP = 6;
AMOTION_EVENT_ACTION_HOVER_MOVE = 7;
AMOTION_EVENT_ACTION_SCROLL = 8;
AMOTION_EVENT_ACTION_HOVER_ENTER = 9;
AMOTION_EVENT_ACTION_HOVER_EXIT = 10;
AMOTION_EVENT_ACTION_BUTTON_PRESS = 11;
AMOTION_EVENT_ACTION_BUTTON_RELEASE = 12;
}
optional AMotionEventAction action = 9;
// Whether the event came from the system.
optional bool verified_event = 10;
}
// TouchDispositionGestureFilter is a class on android that detects and forwards
// along gesture events based on touch acks and other information.
message TouchDispositionGestureFilter {
// The number of gesture's inside of a GestureEventDataPacket.
optional int32 gesture_count = 1;
}
message ViewClassName {
// The name associated with a View class in browser UI. The class name is set
// by the view class itself through metadata macros and contains no data that
// can be modified by a user.
optional string name = 1;
}
// Describes Chrome's Compositor scheduler's current state and associated
// variables.
//
// These protos and enums were adapted from the corresponding original JSON
// trace event for the scheduler state. In contrast to the JSON, we use strongly
// typed enum values instead of strings for many fields, and
// microsecond-granularity timestamps.
//
// The original format was generated in JSON by the code at
// https://cs.chromium.org/chromium/src/cc/scheduler/scheduler.cc?l=870&rcl=5e15eabc9c0eec8daf94fdf78e93f13b6e3b63dd
//
// And is now generated as protozero:
// https://cs.chromium.org/chromium/src/cc/scheduler/scheduler.cc?q=Scheduler::AsPro
//
// All non-delta-timestamps are absolute CLOCK_MONOTONIC timestamps.
// Next id: 16
enum ChromeCompositorSchedulerActionV2 {
CC_SCHEDULER_ACTION_V2_UNSPECIFIED = 0;
CC_SCHEDULER_ACTION_V2_NONE = 1;
CC_SCHEDULER_ACTION_V2_SEND_BEGIN_MAIN_FRAME = 2;
CC_SCHEDULER_ACTION_V2_COMMIT = 3;
CC_SCHEDULER_ACTION_V2_POST_COMMIT = 14;
CC_SCHEDULER_ACTION_V2_ACTIVATE_SYNC_TREE = 4;
CC_SCHEDULER_ACTION_V2_DRAW_IF_POSSIBLE = 5;
CC_SCHEDULER_ACTION_V2_DRAW_FORCED = 6;
CC_SCHEDULER_ACTION_V2_DRAW_ABORT = 7;
CC_SCHEDULER_ACTION_V2_UPDATE_DISPLAY_TREE = 15;
CC_SCHEDULER_ACTION_V2_BEGIN_LAYER_TREE_FRAME_SINK_CREATION = 8;
CC_SCHEDULER_ACTION_V2_PREPARE_TILES = 9;
CC_SCHEDULER_ACTION_V2_INVALIDATE_LAYER_TREE_FRAME_SINK = 10;
CC_SCHEDULER_ACTION_V2_PERFORM_IMPL_SIDE_INVALIDATION = 11;
CC_SCHEDULER_ACTION_V2_NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL = 12;
CC_SCHEDULER_ACTION_V2_NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON = 13;
}
// Next id: 18
message ChromeCompositorSchedulerStateV2 {
enum BeginImplFrameDeadlineMode {
DEADLINE_MODE_UNSPECIFIED = 0;
DEADLINE_MODE_NONE = 1;
DEADLINE_MODE_IMMEDIATE = 2;
DEADLINE_MODE_REGULAR = 3;
DEADLINE_MODE_LATE = 4;
DEADLINE_MODE_BLOCKED = 5;
DEADLINE_MODE_WAIT_FOR_SCROLL = 6;
}
optional ChromeCompositorStateMachineV2 state_machine = 1;
optional bool observing_begin_frame_source = 2;
optional bool begin_impl_frame_deadline_task = 3;
optional bool pending_begin_frame_task = 4;
optional bool skipped_last_frame_missed_exceeded_deadline = 5;
optional ChromeCompositorSchedulerActionV2 inside_action = 7;
optional BeginImplFrameDeadlineMode deadline_mode = 8;
optional int64 deadline_us = 9;
optional int64 deadline_scheduled_at_us = 10;
optional int64 now_us = 11;
optional int64 now_to_deadline_delta_us = 12;
optional int64 now_to_deadline_scheduled_at_delta_us = 13;
optional BeginImplFrameArgsV2 begin_impl_frame_args = 14;
optional BeginFrameObserverStateV2 begin_frame_observer_state = 15;
optional BeginFrameSourceStateV2 begin_frame_source_state = 16;
optional CompositorTimingHistoryV2 compositor_timing_history = 17;
reserved 6;
}
// Describes the current values stored in the Chrome Compositor state machine.
// Next id: 3
message ChromeCompositorStateMachineV2 {
// Next id: 6
message MajorStateV2 {
enum BeginImplFrameState {
BEGIN_IMPL_FRAME_UNSPECIFIED = 0;
BEGIN_IMPL_FRAME_IDLE = 1;
BEGIN_IMPL_FRAME_INSIDE_BEGIN_FRAME = 2;
BEGIN_IMPL_FRAME_INSIDE_DEADLINE = 3;
}
enum BeginMainFrameState {
BEGIN_MAIN_FRAME_UNSPECIFIED = 0;
BEGIN_MAIN_FRAME_IDLE = 1;
BEGIN_MAIN_FRAME_SENT = 2;
BEGIN_MAIN_FRAME_READY_TO_COMMIT = 3;
}
enum LayerTreeFrameSinkState {
LAYER_TREE_FRAME_UNSPECIFIED = 0;
LAYER_TREE_FRAME_NONE = 1;
LAYER_TREE_FRAME_ACTIVE = 2;
LAYER_TREE_FRAME_CREATING = 3;
LAYER_TREE_FRAME_WAITING_FOR_FIRST_COMMIT = 4;
LAYER_TREE_FRAME_WAITING_FOR_FIRST_ACTIVATION = 5;
}
enum ForcedRedrawOnTimeoutState {
FORCED_REDRAW_UNSPECIFIED = 0;
FORCED_REDRAW_IDLE = 1;
FORCED_REDRAW_WAITING_FOR_COMMIT = 2;
FORCED_REDRAW_WAITING_FOR_ACTIVATION = 3;
FORCED_REDRAW_WAITING_FOR_DRAW = 4;
}
optional ChromeCompositorSchedulerActionV2 next_action = 1;
optional BeginImplFrameState begin_impl_frame_state = 2;
optional BeginMainFrameState begin_main_frame_state = 3;
optional LayerTreeFrameSinkState layer_tree_frame_sink_state = 4;
optional ForcedRedrawOnTimeoutState forced_redraw_state = 5;
}
optional MajorStateV2 major_state = 1;
// Next id: 48
message MinorStateV2 {
enum TreePriority {
TREE_PRIORITY_UNSPECIFIED = 0;
TREE_PRIORITY_SAME_PRIORITY_FOR_BOTH_TREES = 1;
TREE_PRIORITY_SMOOTHNESS_TAKES_PRIORITY = 2;
TREE_PRIORITY_NEW_CONTENT_TAKES_PRIORITY = 3;
}
enum ScrollHandlerState {
SCROLL_HANDLER_UNSPECIFIED = 0;
SCROLL_AFFECTS_SCROLL_HANDLER = 1;
SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER = 2;
}
optional int32 commit_count = 1;
optional int32 current_frame_number = 2;
optional int32 last_frame_number_submit_performed = 3;
optional int32 last_frame_number_draw_performed = 4;
optional int32 last_frame_number_begin_main_frame_sent = 5;
optional bool did_draw = 6;
optional bool did_send_begin_main_frame_for_current_frame = 7;
optional bool did_notify_begin_main_frame_not_expected_until = 8;
optional bool did_notify_begin_main_frame_not_expected_soon = 9;
optional bool wants_begin_main_frame_not_expected = 10;
optional bool did_commit_during_frame = 11;
optional bool did_invalidate_layer_tree_frame_sink = 12;
optional bool did_perform_impl_side_invalidaion = 13;
optional bool did_prepare_tiles = 14;
optional int32 consecutive_checkerboard_animations = 15;
optional int32 pending_submit_frames = 16;
optional int32 submit_frames_with_current_layer_tree_frame_sink = 17;
optional bool needs_redraw = 18;
optional bool needs_prepare_tiles = 19;
optional bool needs_begin_main_frame = 20;
optional bool needs_one_begin_impl_frame = 21;
optional bool visible = 22;
optional bool begin_frame_source_paused = 23;
optional bool can_draw = 24;
optional bool resourceless_draw = 25;
optional bool has_pending_tree = 26;
optional bool pending_tree_is_ready_for_activation = 27;
optional bool active_tree_needs_first_draw = 28;
optional bool active_tree_is_ready_to_draw = 29;
optional bool did_create_and_initialize_first_layer_tree_frame_sink = 30;
optional TreePriority tree_priority = 31;
optional ScrollHandlerState scroll_handler_state = 32;
optional bool critical_begin_main_frame_to_activate_is_fast = 33;
optional bool main_thread_missed_last_deadline = 34;
optional bool video_needs_begin_frames = 36;
optional bool defer_begin_main_frame = 37;
optional bool last_commit_had_no_updates = 38;
optional bool did_draw_in_last_frame = 39;
optional bool did_submit_in_last_frame = 40;
optional bool needs_impl_side_invalidation = 41;
optional bool current_pending_tree_is_impl_side = 42;
optional bool previous_pending_tree_was_impl_side = 43;
optional bool processing_animation_worklets_for_active_tree = 44;
optional bool processing_animation_worklets_for_pending_tree = 45;
optional bool processing_paint_worklets_for_pending_tree = 46;
optional bool should_warm_up = 47;
reserved 35;
}
optional MinorStateV2 minor_state = 2;
}
// Next id: 12
message BeginFrameArgsV2 {
// JSON format has a "type" field that was always just "BeginFrameArgs" we
// drop this in the proto representation, and instead make the JSON format
// "subtype" field become the type field.
enum BeginFrameArgsType {
BEGIN_FRAME_ARGS_TYPE_UNSPECIFIED = 0;
BEGIN_FRAME_ARGS_TYPE_INVALID = 1;
BEGIN_FRAME_ARGS_TYPE_NORMAL = 2;
BEGIN_FRAME_ARGS_TYPE_MISSED = 3;
}
optional BeginFrameArgsType type = 1;
optional uint64 source_id = 2;
optional uint64 sequence_number = 3;
optional int64 frame_time_us = 4;
optional int64 deadline_us = 5;
optional int64 interval_delta_us = 6;
optional bool on_critical_path = 7;
optional bool animate_only = 8;
oneof created_from {
// The interned SourceLocation.
uint64 source_location_iid = 9;
// The SourceLocation that this args was created from.
// TODO(nuskos): Eventually we will support interning inside of
// TypedArgument TraceEvents and then we shouldn't need this SourceLocation
// since we can emit it as part of the InternedData message. When we can
// remove this |source_location|.
SourceLocation source_location = 10;
}
optional int64 frames_throttled_since_last = 11;
}
// Next id: 7
message BeginImplFrameArgsV2 {
optional int64 updated_at_us = 1;
optional int64 finished_at_us = 2;
enum State {
BEGIN_FRAME_FINISHED = 0;
BEGIN_FRAME_USING = 1;
}
optional State state = 3;
oneof args {
// Only set if |state| is BEGIN_FRAME_FINISHED.
BeginFrameArgsV2 current_args = 4;
// Only set if |state| is BEGIN_FRAME_USING.
BeginFrameArgsV2 last_args = 5;
}
message TimestampsInUs {
optional int64 interval_delta = 1;
optional int64 now_to_deadline_delta = 2;
optional int64 frame_time_to_now_delta = 3;
optional int64 frame_time_to_deadline_delta = 4;
optional int64 now = 5;
optional int64 frame_time = 6;
optional int64 deadline = 7;
}
optional TimestampsInUs timestamps_in_us = 6;
}
message BeginFrameObserverStateV2 {
optional int64 dropped_begin_frame_args = 1;
optional BeginFrameArgsV2 last_begin_frame_args = 2;
}
message BeginFrameSourceStateV2 {
optional uint32 source_id = 1;
optional bool paused = 2;
optional uint32 num_observers = 3;
optional BeginFrameArgsV2 last_begin_frame_args = 4;
}
message CompositorTimingHistoryV2 {
optional int64 begin_main_frame_queue_critical_estimate_delta_us = 1;
optional int64 begin_main_frame_queue_not_critical_estimate_delta_us = 2;
optional int64 begin_main_frame_start_to_ready_to_commit_estimate_delta_us =
3;
optional int64 commit_to_ready_to_activate_estimate_delta_us = 4;
optional int64 prepare_tiles_estimate_delta_us = 5;
optional int64 activate_estimate_delta_us = 6;
optional int64 draw_estimate_delta_us = 7;
}
message WebViewStartup {
optional bool from_ui_thread = 1 [deprecated = true];
// This enum must be kept in sync with WebViewChromiumAwInit.CallSite
// LINT.IfChange(WebViewStartup)
enum CallSite {
GET_AW_TRACING_CONTROLLER = 0;
GET_AW_PROXY_CONTROLLER = 1;
// This entry should no longer be used. This was a catch all for all methods
// in the WebView instance but we now have different callsites for each
// method.
WEBVIEW_INSTANCE = 2;
// This entry should no longer be used. This was a catch all for all static
// methods but we now have different callsites for each method.
GET_STATICS = 3;
GET_DEFAULT_GEOLOCATION_PERMISSIONS = 4;
GET_DEFAULT_SERVICE_WORKER_CONTROLLER = 5;
GET_WEB_ICON_DATABASE = 6;
GET_DEFAULT_WEB_STORAGE = 7;
GET_DEFAULT_WEBVIEW_DATABASE = 8;
GET_TRACING_CONTROLLER = 9;
ASYNC_WEBVIEW_STARTUP = 10;
WEBVIEW_INSTANCE_OVERLAY_HORIZONTAL_SCROLLBAR = 11;
WEBVIEW_INSTANCE_OVERLAY_VERTICAL_SCROLLBAR = 12;
WEBVIEW_INSTANCE_GET_CERTIFICATE = 13;
WEBVIEW_INSTANCE_GET_HTTP_AUTH_USERNAME_PASSWORD = 14;
WEBVIEW_INSTANCE_SAVE_STATE = 15;
WEBVIEW_INSTANCE_RESTORE_STATE = 16;
WEBVIEW_INSTANCE_LOAD_URL = 17;
WEBVIEW_INSTANCE_POST_URL = 18;
WEBVIEW_INSTANCE_LOAD_DATA = 19;
WEBVIEW_INSTANCE_LOAD_DATA_WITH_BASE_URL = 20;
WEBVIEW_INSTANCE_EVALUATE_JAVASCRIPT = 21;
WEBVIEW_INSTANCE_CAN_GO_BACK = 22;
WEBVIEW_INSTANCE_CAN_GO_FORWARD = 23;
WEBVIEW_INSTANCE_CAN_GO_BACK_OR_FORWARD = 24;
WEBVIEW_INSTANCE_IS_PAUSED = 25;
WEBVIEW_INSTANCE_COPY_BACK_FORWARD_LIST = 26;
WEBVIEW_INSTANCE_SHOW_FIND_DIALOG = 27;
WEBVIEW_INSTANCE_SET_WEBVIEW_CLIENT = 28;
WEBVIEW_INSTANCE_SET_WEBCHROME_CLIENT = 29;
WEBVIEW_INSTANCE_CREATE_WEBMESSAGE_CHANNEL = 30;
WEBVIEW_INSTANCE_GET_ZOOM_CONTROLS = 31;
WEBVIEW_INSTANCE_ZOOM_IN = 32;
WEBVIEW_INSTANCE_ZOOM_OUT = 33;
WEBVIEW_INSTANCE_ZOOM_BY = 34;
WEBVIEW_INSTANCE_SET_RENDERER_PRIORITY_POLICY = 35;
WEBVIEW_INSTANCE_GET_RENDERER_REQUESTED_PRIORITY = 36;
WEBVIEW_INSTANCE_GET_RENDERER_PRIORITY_WAIVED_WHEN_NOT_VISIBLE = 37;
WEBVIEW_INSTANCE_SET_TEXT_CLASSIFIER = 38;
WEBVIEW_INSTANCE_GET_TEXT_CLASSIFIER = 39;
WEBVIEW_INSTANCE_AUTOFILL = 40;
WEBVIEW_INSTANCE_ON_PROVIDE_AUTOFILL_VIRTUAL_STRUCTURE = 41;
WEBVIEW_INSTANCE_ON_PROVIDE_CONTENT_CAPTURE_STRUCTURE = 42;
WEBVIEW_INSTANCE_SHOULD_DELAY_CHILD_PRESSED_STATE = 43;
WEBVIEW_INSTANCE_GET_ACCESSIBILITY_NODE_PROVIDER = 44;
WEBVIEW_INSTANCE_ON_PROVIDE_VIRTUAL_STRUCTURE = 45;
WEBVIEW_INSTANCE_PERFORM_ACCESSIBILITY_ACTION = 46;
WEBVIEW_INSTANCE_ON_DRAW = 47;
WEBVIEW_INSTANCE_SET_LAYOUT_PARAMS = 48;
WEBVIEW_INSTANCE_ON_DRAG_EVENT = 49;
WEBVIEW_INSTANCE_ON_CREATE_INPUT_CONNECTION = 50;
WEBVIEW_INSTANCE_ON_KEY_MULTIPLE = 51;
WEBVIEW_INSTANCE_ON_KEY_DOWN = 52;
WEBVIEW_INSTANCE_ON_KEY_UP = 53;
WEBVIEW_INSTANCE_ON_ATTACHED_TO_WINDOW = 54;
WEBVIEW_INSTANCE_DISPATCH_KEY_EVENT = 55;
WEBVIEW_INSTANCE_ON_TOUCH_EVENT = 56;
WEBVIEW_INSTANCE_ON_HOVER_EVENT = 57;
WEBVIEW_INSTANCE_ON_GENERIC_MOTION_EVENT = 58;
WEBVIEW_INSTANCE_REQUEST_FOCUS = 59;
WEBVIEW_INSTANCE_ON_MEASURE = 60;
WEBVIEW_INSTANCE_REQUEST_CHILD_RECTANGLE_ON_SCREEN = 61;
WEBVIEW_INSTANCE_SET_BACKGROUND_COLOR = 62;
WEBVIEW_INSTANCE_ON_START_TEMPORARY_DETACH = 63;
WEBVIEW_INSTANCE_ON_FINISH_TEMPORARY_DETACH = 64;
WEBVIEW_INSTANCE_ON_CHECK_IS_TEXT_EDITOR = 65;
WEBVIEW_INSTANCE_ON_APPLY_WINDOW_INSETS = 66;
WEBVIEW_INSTANCE_ON_RESOLVE_POINTER_ICON = 67;
WEBVIEW_INSTANCE_COMPUTE_HORIZONTAL_SCROLL_RANGE = 68;
WEBVIEW_INSTANCE_COMPUTE_HORIZONTAL_SCROLL_OFFSET = 69;
WEBVIEW_INSTANCE_COMPUTE_VERTICAL_SCROLL_RANGE = 70;
WEBVIEW_INSTANCE_COMPUTE_VERTICAL_SCROLL_OFFSET = 71;
WEBVIEW_INSTANCE_COMPUTE_VERTICAL_SCROLL_EXTENT = 72;
WEBVIEW_INSTANCE_COMPUTE_SCROLL = 73;
WEBVIEW_INSTANCE_CREATE_PRINT_DOCUMENT_ADAPTER = 74;
WEBVIEW_INSTANCE_EXTRACT_SMART_CLIP_DATA = 75;
WEBVIEW_INSTANCE_SET_SMART_CLIP_RESULT_HANDLER = 76;
WEBVIEW_INSTANCE_GET_RENDER_PROCESS = 77;
WEBVIEW_INSTANCE_GET_WEBVIEW_RENDERER_CLIENT_ADAPTER = 78;
WEBVIEW_INSTANCE_PAGE_UP = 79;
WEBVIEW_INSTANCE_PAGE_DOWN = 80;
WEBVIEW_INSTANCE_LOAD_URL_ADDITIONAL_HEADERS = 81;
WEBVIEW_INSTANCE_INIT = 82;
WEBVIEW_INSTANCE_CAPTURE_PICTURE = 83;
WEBVIEW_INSTANCE_GET_SCALE = 84;
WEBVIEW_INSTANCE_SET_INITIAL_SCALE = 85;
WEBVIEW_INSTANCE_GET_HIT_TEST_RESULT = 86;
WEBVIEW_INSTANCE_GET_URL = 87;
WEBVIEW_INSTANCE_GET_ORIGINAL_URL = 88;
WEBVIEW_INSTANCE_GET_TITLE = 89;
WEBVIEW_INSTANCE_GET_FAVICON = 90;
STATIC_FIND_ADDRESS = 91;
STATIC_GET_DEFAULT_USER_AGENT = 92;
STATIC_SET_WEB_CONTENTS_DEBUGGING_ENABLED = 93;
STATIC_CLEAR_CLIENT_CERT_PREFERENCES = 94;
STATIC_FREE_MEMORY_FOR_TESTS = 95;
STATIC_ENABLE_SLOW_WHOLE_DOCUMENT_DRAW = 96;
STATIC_PARSE_FILE_CHOOSER_RESULT = 97;
STATIC_INIT_SAFE_BROWSING = 98;
STATIC_SET_SAFE_BROWSING_ALLOWLIST = 99;
STATIC_GET_SAFE_BROWSING_PRIVACY_POLICY_URL = 100;
STATIC_IS_MULTI_PROCESS_ENABLED = 101;
STATIC_GET_VARIATIONS_HEADER = 102;
STATIC_SET_DEFAULT_TRAFFIC_STATS_TAG = 103;
STATIC_SET_DEFAULT_TRAFFIC_STATS_UID = 104;
STATIC_SET_RENDERER_LIBRARY_PREFETCH_MODE = 105;
STATIC_GET_RENDERER_LIBRARY_PREFETCH_MODE = 106;
GET_DEFAULT_COOKIE_MANAGER = 107;
// Remember to update WebViewStartupCallSite in enums.xml when adding new
// values here.
}
// LINT.ThenChange(//android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java:CallSite)
// LINT.IfChange(WebViewChromiumStartupMode)
enum StartupMode {
FULLY_SYNC = 0;
FULLY_ASYNC = 1;
PARTIAL_ASYNC_THEN_SYNC = 2;
ASYNC_BUT_FULLY_SYNC = 3;
}
// LINT.ThenChange(//tools/metrics/histograms/metadata/android/enums.xml:WebViewChromiumStartupMode)
optional CallSite start_call_site = 2;
optional CallSite finish_call_site = 3;
optional StartupMode startup_mode = 4;
}
message AnimationFrameTimingInfo {
optional int64 blocking_duration_ms = 1;
optional int64 duration_ms = 2;
optional int64 num_scripts = 3;
// Id for the BeginFrame, which triggered this animation frame.
optional BeginFrameId begin_frame_id = 4;
}
message AnimationFrameScriptTimingInfo {
optional int64 style_duration_ms = 1;
optional int64 layout_duration_ms = 2;
optional int64 pause_duration_ms = 3;
optional string class_like_name = 4;
optional string property_like_name = 5;
optional string source_location_url = 6;
optional string source_location_function_name = 7;
optional int64 source_location_char_position = 8;
enum InvokerType {
UNDEFINED = 0;
CLASSIC_SCRIPT = 1;
MODULE_SCRIPT = 2;
USER_CALLBACK = 3;
EVENT_HANDLER = 4;
PROMISE_RESOLVE = 5;
PROMISE_REJECT = 6;
}
optional InvokerType invoker_type = 9;
enum ThirdPartyTechnology {
UNSPECIFIED = 0;
NONE = 1;
WORD_PRESS = 2;
GOOGLE_ANALYTICS = 3;
GOOGLE_FONT_API = 4;
GOOGLE_TAG_MANAGER = 5;
GOOGLE_MAPS = 6;
META_PIXEL = 7;
YOUTUBE = 8;
ADOBE_ANALYTICS = 9;
TIKTOK_PIXEL = 10;
HOTJAR = 11;
GOOGLE_ADSENSE = 12;
GOOGLE_PUBLISHER_TAG = 13;
GOOGLE_ADS_LIBRARIES = 14;
FUNDING_CHOICES = 15;
ELEMENTOR = 16;
SLIDER_REVOLUTION = 17;
}
optional ThirdPartyTechnology third_party_technology = 10;
}
message BeginFrameId {
optional uint64 source_id = 1;
optional uint64 sequence_number = 2;
}
message MainFramePipeline {
enum Step {
UNKNOWN = 0;
SEND_BEGIN_MAIN_FRAME = 1;
BEGIN_MAIN_FRAME = 2;
ABORTED_ON_MAIN = 3;
COMMIT_ON_MAIN = 4;
READY_TO_COMMIT_ON_IMPL = 5;
COMMIT_ON_IMPL = 6;
COMMIT_COMPLETE = 7;
READY_TO_ACTIVATE = 8;
ACTIVATE = 9;
DRAW = 10;
UPDATE_DISPLAY_TREE = 11;
}
// Id connecting the steps of the pipeline together.
optional uint64 main_frame_id = 1;
optional Step step = 2;
// Id for the BeginFrame, which triggered this main frame.
// Set for the SEND_BEGIN_MAIN_FRAME step.
optional BeginFrameId begin_frame_id = 3;
// If the step is ABORTED_ON_MAIN, this field will contain the reason.
enum AbortedOnMainReason {
ABORTED_MAIN_REASON_UNKNOWN = 0;
NOT_VISIBLE = 1;
DEFERRED_UPDATE = 2;
DEFERRED_COMMIT_ABORTED = 3;
NO_UPDATE = 4;
}
optional AbortedOnMainReason aborted_on_main_reason = 4;
// Id of the last begin frame id issued by renderer compositor by the time
// this main frame is drawn for the first time.
// The difference between `begin_frame_id` and
// `last_begin_frame_id_during_first_draw` can be used to reason about the
// main frame latency. Set for the first DRAW step.
optional BeginFrameId last_begin_frame_id_during_first_draw = 5;
}
message CurrentTask {
// t1 - t0, where t1 is the start timestamp of this slice and t0 is the start
// timestamp of the task containing this slice.
optional uint64 event_offset_from_task_start_time_us = 1;
// Timestamp in microseconds of the start of the task containing this slice.
optional uint64 task_start_time_us = 2;
// t1 - t0, where t1 is the start timestamp of this slice and t0 is the
// timestamp of the time when the task containing this slice
// was queued.
optional uint64 task_queueing_time_us = 3;
// Timestamp in microseconds of the time when the task containing
// this slice was queued.
optional uint64 task_queued_time_us = 4;
}
message ChromeLatencyInfo2 {
optional int64 trace_id = 1;
// NEXT ID: 16
// All step are optional but the enum is ordered (not by number) below in the
// order we expect them to appear if they are emitted in trace in a blocking
// fashion.
enum Step {
STEP_UNSPECIFIED = 0;
// Emitted on the browser main thread.
STEP_SEND_INPUT_EVENT_UI = 3;
// The browser main thread sends a
// blink.mojom.WidgetInputHandler::DispatchEvent Mojo message to the
// renderer's compositor.
STEP_SEND_DISPATCH_EVENT_MOJO_MESSAGE = 15;
// Happens on the renderer's compositor.
STEP_HANDLE_INPUT_EVENT_IMPL = 5;
STEP_RESAMPLE_SCROLL_EVENTS = 14;
STEP_DID_HANDLE_INPUT_AND_OVERSCROLL = 8;
// Occurs on the Renderer's main thread.
STEP_HANDLE_INPUT_EVENT_MAIN = 4;
STEP_MAIN_THREAD_SCROLL_UPDATE = 2;
STEP_HANDLE_INPUT_EVENT_MAIN_COMMIT = 1;
// Could be emitted on both the renderer's main OR compositor.
STEP_HANDLED_INPUT_EVENT_MAIN_OR_IMPL = 9;
// Optionally sometimes HANDLED_INPUT_EVENT_MAIN_OR_IMPL will proxy to the
// renderer's compositor and this will be emitted.
STEP_HANDLED_INPUT_EVENT_IMPL = 10;
// Occurs on Browser Main.
STEP_TOUCH_EVENT_HANDLED = 12;
// Occurs on Browser Main.
STEP_GESTURE_EVENT_HANDLED = 13;
// Renderer's compositor.
STEP_SWAP_BUFFERS = 6 [deprecated = true];
// Happens on the VizCompositor in the GPU process.
STEP_DRAW_AND_SWAP = 7 [deprecated = true];
// Happens on the GPU main thread after the swap has completed.
STEP_FINISHED_SWAP_BUFFERS = 11 [deprecated = true];
// See above for NEXT ID, enum steps are not ordered by tag number.
};
optional Step step = 2;
optional int32 frame_tree_node_id = 3;
// This enum is a copy of LatencyComponentType enum in Chrome, located in
// ui/latency/latency_info.h, modulo added UNKNOWN value per protobuf
// practices.
enum LatencyComponentType {
COMPONENT_UNSPECIFIED = 0;
COMPONENT_INPUT_EVENT_LATENCY_BEGIN_RWH = 1;
COMPONENT_INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL = 2;
COMPONENT_INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL = 3;
COMPONENT_INPUT_EVENT_LATENCY_ORIGINAL = 4;
COMPONENT_INPUT_EVENT_LATENCY_UI = 5;
COMPONENT_INPUT_EVENT_LATENCY_RENDERER_MAIN = 6;
COMPONENT_INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN = 7;
COMPONENT_INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL = 8;
COMPONENT_INPUT_EVENT_LATENCY_SCROLL_UPDATE_LAST_EVENT = 9;
COMPONENT_INPUT_EVENT_LATENCY_ACK_RWH = 10;
COMPONENT_INPUT_EVENT_LATENCY_RENDERER_SWAP = 11;
COMPONENT_DISPLAY_COMPOSITOR_RECEIVED_FRAME = 12;
COMPONENT_INPUT_EVENT_GPU_SWAP_BUFFER = 13;
COMPONENT_INPUT_EVENT_LATENCY_FRAME_SWAP = 14;
}
message ComponentInfo {
optional LatencyComponentType component_type = 1;
// Microsecond timestamp in CLOCK_MONOTONIC domain
optional uint64 time_us = 2;
};
repeated ComponentInfo component_info = 4;
optional bool is_coalesced = 5;
optional int64 gesture_scroll_id = 6;
optional int64 touch_id = 7;
// Must be kept in sync with blink::mojom::EventType.
// All values are incremented by one for consistency with other proto enums.
enum InputType {
UNDEFINED_EVENT = 0;
MOUSE_DOWN_EVENT = 1;
MOUSE_UP_EVENT = 2;
MOUSE_MOVE_EVENT = 3;
MOUSE_ENTER_EVENT = 4;
MOUSE_LEAVE_EVENT = 5;
CONTEXT_MENU_EVENT = 6;
MOUSE_WHEEL_EVENT = 7;
RAW_KEY_DOWN_EVENT = 8;
KEY_DOWN_EVENT = 9;
KEY_UP_EVENT = 10;
CHAR_EVENT = 11;
GESTURE_SCROLL_BEGIN_EVENT = 12;
GESTURE_SCROLL_END_EVENT = 13;
GESTURE_SCROLL_UPDATE_EVENT = 14;
GESTURE_FLING_START_EVENT = 15;
GESTURE_FLING_CANCEL_EVENT = 16;
GESTURE_PINCH_BEGIN_EVENT = 17;
GESTURE_PINCH_END_EVENT = 18;
GESTURE_PINCH_UPDATE_EVENT = 19;
GESTURE_BEGIN_EVENT = 20;
GESTURE_TAP_DOWN_EVENT = 21;
GESTURE_SHOW_PRESS_EVENT = 22;
GESTURE_TAP_EVENT = 23;
GESTURE_TAP_CANCEL_EVENT = 24;
GESTURE_SHORT_PRESS_EVENT = 25;
GESTURE_LONG_PRESS_EVENT = 26;
GESTURE_LONG_TAP_EVENT = 27;
GESTURE_TWO_FINGER_TAP_EVENT = 28;
GESTURE_TAP_UNCONFIRMED_EVENT = 29;
GESTURE_DOUBLE_TAP_EVENT = 30;
GESTURE_END_EVENT = 31;
TOUCH_START_EVENT = 32;
TOUCH_MOVE_EVENT = 33;
TOUCH_END_EVENT = 34;
TOUCH_CANCEL_EVENT = 35;
TOUCH_SCROLL_STARTED_EVENT = 36;
POINTER_DOWN_EVENT = 37;
POINTER_UP_EVENT = 38;
POINTER_MOVE_EVENT = 39;
POINTER_RAW_UPDATE_EVENT = 40;
POINTER_CANCEL_EVENT = 41;
POINTER_CAUSED_UA_ACTION_EVENT = 42;
}
// The type of input corresponding to this `ChromeLatencyInfo`.
optional InputType input_type = 8;
// Intended to mirror `blink::mojom::InputEventResultState`.
enum InputResultState {
UNKNOWN = 0;
CONSUMED = 1;
NOT_CONSUMED = 2;
NO_CONSUMER_EXISTS = 3;
IGNORED = 4;
SET_NON_BLOCKING = 5;
SET_NON_BLOCKING_DUE_TO_FLING = 6;
}
// If applicable, the result of handling the input corresponding to this
// `ChromeLatencyInfo`.
optional InputResultState input_result_state = 9;
// `trace_id` values corresponding to inputs that were coalesced/combined into
// the input for this `ChromeLatencyInfo`.
repeated int64 coalesced_trace_ids = 10;
}
message EventTiming {
optional bool cancelable = 1;
optional string frame = 2;
optional uint32 interaction_id = 3;
optional uint32 interaction_offset = 4;
optional int64 node_id = 5;
optional int64 key_code = 6;
optional int32 pointer_id = 7;
optional uint64 fallback_time_us = 8;
enum EventType {
UNDEFINED = 0;
AUX_CLICK_EVENT = 1;
CLICK_EVENT = 2;
CONTEXT_MENU_EVENT = 3;
DOUBLE_CLICK_EVENT = 4;
MOUSE_DOWN_EVENT = 5;
MOUSE_ENTER_EVENT = 6;
MOUSE_LEAVE_EVENT = 7;
MOUSE_OUT_EVENT = 9;
MOUSE_OVER_EVENT = 10;
MOUSE_UP_EVENT = 11;
POINTER_OVER_EVENT = 12;
POINTER_ENTER_EVENT = 13;
POINTER_DOWN_EVENT = 14;
POINTER_UP_EVENT = 15;
POINTER_CANCEL_EVENT = 16;
POINTER_OUT_EVENT = 17;
POINTER_LEAVE_EVENT = 18;
GOT_POINTER_CAPTURE_EVENT = 19;
LOST_POINTER_CAPTURE_EVENT = 20;
TOUCH_START_EVENT = 21;
TOUCH_END_EVENT = 22;
TOUCH_CANCEL_EVENT = 23;
KEY_DOWN_EVENT = 24;
KEY_PRESS_EVENT = 25;
KEY_UP_EVENT = 26;
BEFORE_INPUT_EVENT = 27;
INPUT_EVENT = 28;
COMPOSITION_START_EVENT = 29;
COMPOSITION_UPDATE_EVENT = 30;
COMPOSITION_END_EVENT = 31;
DRAG_START_EVENT = 32;
DRAG_END_EVENT = 33;
DRAG_ENTER_EVENT = 34;
DRAG_LEAVE_EVENT = 35;
DRAG_OVER_EVENT = 36;
DROP_EVENT = 37;
}
optional EventType type = 9;
}
// Frame information provided by Android's Choreographer.
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata.
// Next ID: 4
message AndroidChoreographerFrameCallbackData {
// The time in microseconds at which the frame started being rendered.
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata_getframetimenanos.
optional int64 frame_time_us = 1;
message FrameTimeline {
// The token used by the platform to identify the frame timeline.
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata_getframetimelinevsyncid.
optional int64 vsync_id = 1;
// The difference in microseconds between:
// (A) the time at which the frame needs to be ready by in order to be
// presented on time and
// (B) the time at which the frame started being rendered (frame_time_us).
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata_getframetimelinedeadlinenanos.
optional int64 latch_delta_us = 2;
// The difference in microseconds between:
// (A) the time at which the frame is expected to be presented and
// (B) the time at which the frame started being rendered (frame_time_us).
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata_getframetimelineexpectedpresentationtimenanos.
optional int64 present_delta_us = 3;
}
// Possible frame timelines.
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata_getframetimelineslength.
repeated FrameTimeline frame_timeline = 2;
// The index (into frame_timeline) of the platform-preferred frame timeline.
// See
// https://developer.android.com/ndk/reference/group/choreographer#achoreographerframecallbackdata_getpreferredframetimelineindex.
optional int64 preferred_frame_timeline_index = 3;
}
message ChromeFrameReporter2 {
enum State {
// The frame did not have any updates to present.
STATE_NO_UPDATE_DESIRED = 0;
// The frame presented all the desired updates (i.e. any updates requested
// from both the compositor thread and main-threads were handled).
STATE_PRESENTED_ALL = 1;
// The frame was presented with some updates, but also missed some updates
// (e.g. missed updates from the main-thread, but included updates from the
// compositor thread).
STATE_PRESENTED_PARTIAL = 2;
// The frame was dropped, i.e. some updates were desired for the frame, but
// was not presented.
STATE_DROPPED = 3;
};
optional State state = 1;
enum FrameDropReason {
REASON_UNSPECIFIED = 0;
// Frame was dropped by the display-compositor.
// The display-compositor may drop a frame some times (e.g. the frame missed
// the deadline, or was blocked on surface-sync, etc.)
REASON_DISPLAY_COMPOSITOR = 1;
// Frame was dropped because of the main-thread.
// The main-thread may cause a frame to be dropped, e.g. if the main-thread
// is running expensive javascript, or doing a lot of layout updates, etc.
REASON_MAIN_THREAD = 2;
// Frame was dropped by the client compositor.
// The client compositor can drop some frames too (e.g. attempting to
// recover latency, missing the deadline, etc.).
REASON_CLIENT_COMPOSITOR = 3;
};
// The reason is set only if |state| is not |STATE_UPDATED_ALL|.
optional FrameDropReason reason = 2;
optional uint64 frame_source = 3;
optional uint64 frame_sequence = 4;
// If this is a dropped frame (i.e. if |state| is set to |STATE_DROPPED| or
// |STATE_PRESENTED_PARTIAL|), then indicates whether this frame impacts
// smoothness.
optional bool affects_smoothness = 5;
enum ScrollState {
SCROLL_NONE = 0;
SCROLL_MAIN_THREAD = 1;
SCROLL_COMPOSITOR_THREAD = 2;
SCROLL_RASTER = 3;
// Used when it can't be determined whether a scroll is in progress or not.
SCROLL_UNKNOWN = 4;
}
// The type of active scroll.
optional ScrollState scroll_state = 6;
// If any main thread animation is active during this frame.
optional bool has_main_animation = 7;
// If any compositor thread animation is active during this frame.
optional bool has_compositor_animation = 8;
// If any touch-driven UX (not scroll) is active during this frame.
optional bool has_smooth_input_main = 9;
// Whether the frame contained any missing content (i.e. whether there was
// checkerboarding in the frame). If has_missing_content,
// checkerboarded_needs_raster and checkerboarded_needs_record all have
// values, has_missing_content should equal checkerboarded_needs_raster ||
// checkerboarded_needs_record.
optional bool has_missing_content = 10;
// The id of layer_tree_host that the frame has been produced for.
optional uint64 layer_tree_host_id = 11;
// If total latency of PipelineReporter exceeds a certain limit.
optional bool has_high_latency = 12;
enum FrameType {
FORKED = 0;
BACKFILL = 1;
}
// Indicate if the frame is "FORKED" (i.e. a PipelineReporter event starts at
// the same frame sequence as another PipelineReporter) or "BACKFILL"
// (i.e. dropped frames when there are no partial compositor updates).
optional FrameType frame_type = 13;
// The breakdown stage of PipelineReporter that is most likely accountable for
// high latency.
repeated string high_latency_contribution_stage = 14;
// Whether the frame contained any content that is not fully rastered.
optional bool checkerboarded_needs_raster = 15;
// Whether the frame contained any content that is not fully recorded.
optional bool checkerboarded_needs_record = 16;
// viz::BeginFrameArgs.trace_id of the frame (before surface aggregation). See
// also ChromeTrackEvent.EventLatency.surface_frame_trace_id.
optional int64 surface_frame_trace_id = 17;
// gfx::PresentationFeedback.display_trace_id of the frame (after surface
// aggregation). See also ChromeTrackEvent.EventLatency.display_trace_id.
optional int64 display_trace_id = 18;
}
message InputTransferHandler {
// The values in this enum are incremented by one compared to histograms enum
// to follow proto guidelines to leave 0 for unknown or unset values.
// LINT.IfChange(TransferInputToVizResult)
enum TransferInputToVizResult {
// We don't expect this to be present in traces.
UNKNOWN = 0;
SUCCESSFULLY_TRANSFERRED = 1;
INPUT_TRANSFER_HANDLER_NOT_FOUND_IN_MAP = 2;
NON_FINGER_TOOL_TYPE = 3;
VIZ_INITIALIZATION_NOT_COMPLETE = 4;
SELECTION_HANDLES_ACTIVE = 5;
CAN_TRIGGER_BACK_GESTURE = 6;
IME_IS_ACTIVE = 7;
REQUESTED_BY_EMBEDDER = 8;
SYSTEM_SERVER_DID_NOT_TRANSFER = 9;
BROWSER_TOKEN_CHANGED = 10;
MULTIPLE_BROWSER_WINDOWS_OPEN = 11;
DOWN_TIME_AFTER_EVENT_TIME = 12;
SEQUENCE_TRANSFERRED_BACK_FROM_VIZ = 13;
};
// LINT.ThenChange(//tools/metrics/histograms/metadata/android/enums.xml:TransferInputToVizResult)
optional TransferInputToVizResult transfer_result = 1;
};
message ResponseInfo {
// The HTTP response code. Will be left empty if the response code is unknown.
optional int64 response_code = 1;
// Whether the response was served from the HTTP cache.
optional bool was_http_cache = 2;
};
message ChromeTrackEvent {
// Extension range for Chrome: 1000-1999
// Next ID: 1078
extend TrackEvent {
optional ChromeAppState chrome_app_state = 1000;
optional ChromeMemoryPressureNotification
chrome_memory_pressure_notification = 1001;
optional ChromeTaskAnnotator chrome_task_annotator = 1002;
optional ChromeBrowserContext chrome_browser_context = 1003;
optional ChromeProfileDestroyer chrome_profile_destroyer = 1004;
optional ChromeTaskPostedToDisabledQueue
chrome_task_posted_to_disabled_queue = 1005;
optional ChromeRasterTask chrome_raster_task = 1006;
optional ChromeMessagePumpForUI chrome_message_pump_for_ui = 1007;
optional RenderFrameImplDeletion render_frame_impl_deletion = 1008;
optional ShouldSwapBrowsingInstancesResult
should_swap_browsing_instances_result = 1009;
optional FrameTreeNodeInfo frame_tree_node_info = 1010;
optional ChromeHashedPerformanceMark chrome_hashed_performance_mark = 1011;
optional RenderProcessHost render_process_host = 1012;
optional RenderProcessHostCleanup render_process_host_cleanup = 1013;
optional RenderProcessHostListener render_process_host_listener_changed =
1014;
optional ChildProcessLauncherPriority child_process_launcher_priority =
1015;
optional ResourceBundle resource_bundle = 1016;
optional ChromeWebAppBadNavigate chrome_web_app_bad_navigate = 1017;
optional ChromeExtensionId chrome_extension_id = 1018;
optional SiteInstance site_instance = 1019;
optional RenderViewHost render_view_host = 1020;
optional RenderFrameProxyHost render_frame_proxy_host = 1021;
optional AndroidViewDump android_view_dump = 1022;
optional ParkableStringCompressInBackground
parkable_string_compress_in_background = 1023;
optional ParkableStringUnpark parkable_string_unpark = 1024;
optional ChromeSamplingProfilerSampleCollected
chrome_sampling_profiler_sample_completed = 1025;
optional SendBeginMainFrameToCommitBreakdown
send_begin_mainframe_to_commit_breakdown = 1026;
optional GlobalRenderFrameHostId global_render_frame_host_id = 1027;
optional RenderFrameHost render_frame_host = 1028;
optional ChromeThreadPoolTask thread_pool_task = 1029;
optional BackForwardCacheCanStoreDocumentResult
back_forward_cache_can_store_document_result = 1030;
optional RendererMainThreadTaskExecution
renderer_main_thread_task_execution = 1031;
optional EventLatency event_latency = 1032;
optional ProcessSingleton process_singleton = 1033;
optional SiteInstanceGroup site_instance_group = 1034;
optional BrowsingContextState browsing_context_state = 1035;
optional DeviceThermalState device_thermal_state = 1036;
optional NavigationHandle navigation = 1037;
optional AndroidIPC android_ipc = 1038;
optional ChromeSqlDiagnostics sql_diagnostics = 1039;
optional SequenceManagerTask sequence_manager_task = 1040;
optional AndroidToolbar android_toolbar = 1041;
optional ActiveProcesses active_processes = 1042;
optional BlinkTaskScope blink_task_scope = 1043;
optional UkmPageLoadTimingUpdate ukm_page_load_timing_update = 1044;
optional BlinkHighEntropyAPI high_entropy_api = 1045;
optional TabSwitchMeasurement tab_switch_measurement = 1046;
optional ScrollDeltas scroll_deltas = 1047;
optional WinRenderAudioFromSource win_render_audio_from_source = 1048;
optional MacAUHALStream mac_auhal_stream = 1049;
optional LinuxAlsaOutput linux_alsa_output = 1050;
optional LinuxPulseOutput linux_pulse_output = 1051;
optional ChromeGraphicsPipeline chrome_graphics_pipeline = 1052;
optional CrasUnified chromeos_cras_unified = 1053;
optional LibunwindstackUnwinder libunwindstack_unwinder = 1054;
optional ScrollPredictorMetrics scroll_predictor_metrics = 1055;
optional PageLoad page_load = 1056;
optional StartUp startup = 1057;
optional WebContentInteraction web_content_interaction = 1058;
optional EventForwarder event_forwarder = 1059;
optional TouchDispositionGestureFilter touch_disposition_gesture_filter =
1060;
optional ViewClassName view_class_name = 1061;
optional ChromeCompositorSchedulerStateV2 cc_scheduler_state = 1062;
optional WebViewStartup webview_startup = 1063;
optional AnimationFrameTimingInfo animation_frame_timing_info = 1064;
optional AnimationFrameScriptTimingInfo animation_frame_script_timing_info =
1065;
optional ScrollMetrics scroll_metrics = 1066;
optional MainFramePipeline main_frame_pipeline = 1067;
optional ChromeLatencyInfo2 chrome_latency_info = 1068;
optional EventTiming event_timing = 1069;
optional AndroidChoreographerFrameCallbackData
android_choreographer_frame_callback_data = 1070;
optional CurrentTask current_task = 1071;
optional WebExposedIsolationInfo web_exposed_isolation_info = 1072;
optional UrlInfo url_info = 1073;
optional BeginFrameId begin_frame_id = 1074;
// Older versions of Chrome set TrackEvent.chrome_frame_reporter, which is
// now deprecated, instead.
optional ChromeFrameReporter2 frame_reporter = 1075;
optional InputTransferHandler input_transfer_handler = 1076;
optional ResponseInfo response_info = 1077;
}
}