| // AUTOGENERATED - DO NOT EDIT |
| // --------------------------- |
| // This file has been generated by |
| // AOSP://external/perfetto/tools/gen_merged_protos |
| // merging the perfetto config protos. |
| // This fused proto is intended to be copied in: |
| // - Android tree, for statsd. |
| // - Google internal repos. |
| |
| syntax = "proto2"; |
| |
| package perfetto.protos; |
| |
| option go_package = "github.com/google/perfetto/perfetto_proto"; |
| |
| // Begin of protos/perfetto/common/ftrace_descriptor.proto |
| |
| message FtraceDescriptor { |
| message AtraceCategory { |
| optional string name = 1; |
| optional string description = 2; |
| } |
| |
| // Report the available atrace categories. |
| // |
| // Used by Traceur via `perfetto --query`. |
| repeated AtraceCategory atrace_categories = 1; |
| } |
| |
| // End of protos/perfetto/common/ftrace_descriptor.proto |
| |
| // Begin of protos/perfetto/common/gpu_counter_descriptor.proto |
| |
| // Description of GPU counters. |
| // This message is sent by a GPU counter producer to specify the counters |
| // available in the hardware. |
| message GpuCounterDescriptor { |
| // Logical groups for a counter. This is used in the UI to present the |
| // related counters together. |
| enum GpuCounterGroup { |
| UNCLASSIFIED = 0; |
| SYSTEM = 1; |
| VERTICES = 2; |
| FRAGMENTS = 3; |
| PRIMITIVES = 4; |
| // Includes counters relating to caching and bandwidth. |
| MEMORY = 5; |
| COMPUTE = 6; |
| } |
| |
| message GpuCounterSpec { |
| optional uint32 counter_id = 1; |
| optional string name = 2; |
| optional string description = 3; |
| // MeasureUnit unit (deprecated) |
| reserved 4; |
| oneof peak_value { |
| int64 int_peak_value = 5; |
| double double_peak_value = 6; |
| } |
| repeated MeasureUnit numerator_units = 7; |
| repeated MeasureUnit denominator_units = 8; |
| optional bool select_by_default = 9; |
| repeated GpuCounterGroup groups = 10; |
| } |
| repeated GpuCounterSpec specs = 1; |
| |
| // Allow producer to group counters into block to represent counter islands. |
| // A capacity may be specified to indicate the number of counters that can be |
| // enable simultaneously in that block. |
| message GpuCounterBlock { |
| // required. Unique ID for the counter group. |
| optional uint32 block_id = 1; |
| // optional. Number of counters supported by the block. No limit if unset. |
| optional uint32 block_capacity = 2; |
| // optional. Name of block. |
| optional string name = 3; |
| // optional. Description for the block. |
| optional string description = 4; |
| // list of counters that are part of the block. |
| repeated uint32 counter_ids = 5; |
| } |
| repeated GpuCounterBlock blocks = 2; |
| |
| // optional. Minimum sampling period supported by the producer in |
| // nanoseconds. |
| optional uint64 min_sampling_period_ns = 3; |
| |
| // optional. Maximum sampling period supported by the producer in |
| // nanoseconds. |
| optional uint64 max_sampling_period_ns = 4; |
| |
| // optional. The producer supports counter sampling by instrumenting the |
| // command buffer. |
| optional bool supports_instrumented_sampling = 5; |
| |
| // next id: 41 |
| enum MeasureUnit { |
| NONE = 0; |
| |
| BIT = 1; |
| KILOBIT = 2; |
| MEGABIT = 3; |
| GIGABIT = 4; |
| TERABIT = 5; |
| PETABIT = 6; |
| |
| BYTE = 7; |
| KILOBYTE = 8; |
| MEGABYTE = 9; |
| GIGABYTE = 10; |
| TERABYTE = 11; |
| PETABYTE = 12; |
| |
| HERTZ = 13; |
| KILOHERTZ = 14; |
| MEGAHERTZ = 15; |
| GIGAHERTZ = 16; |
| TERAHERTZ = 17; |
| PETAHERTZ = 18; |
| |
| NANOSECOND = 19; |
| MICROSECOND = 20; |
| MILLISECOND = 21; |
| SECOND = 22; |
| MINUTE = 23; |
| HOUR = 24; |
| |
| VERTEX = 25; |
| PIXEL = 26; |
| TRIANGLE = 27; |
| PRIMITIVE = 38; |
| FRAGMENT = 39; |
| |
| MILLIWATT = 28; |
| WATT = 29; |
| KILOWATT = 30; |
| |
| JOULE = 31; |
| VOLT = 32; |
| AMPERE = 33; |
| |
| CELSIUS = 34; |
| FAHRENHEIT = 35; |
| KELVIN = 36; |
| |
| // Values should be out of 100. |
| PERCENT = 37; |
| |
| INSTRUCTION = 40; |
| } |
| } |
| |
| // End of protos/perfetto/common/gpu_counter_descriptor.proto |
| |
| // Begin of protos/perfetto/common/track_event_descriptor.proto |
| |
| message TrackEventCategory { |
| optional string name = 1; |
| optional string description = 2; |
| repeated string tags = 3; |
| } |
| |
| message TrackEventDescriptor { |
| repeated TrackEventCategory available_categories = 1; |
| } |
| |
| // End of protos/perfetto/common/track_event_descriptor.proto |
| |
| // Begin of protos/perfetto/common/data_source_descriptor.proto |
| |
| // This message is sent from Producer(s) to the tracing Service when registering |
| // to advertise their capabilities. It describes the structure of tracing |
| // protos that will be produced by the data source and the supported filters. |
| message DataSourceDescriptor { |
| // e.g., "linux.ftrace", "chromium.tracing" |
| optional string name = 1; |
| |
| // When non-zero, this is a unique ID within the scope of the Producer for |
| // this data source (it is NOT globally unique). This is useful to |
| // differentiate between data sources with matching names when calling |
| // UpdateDataSource(). This field has been introduced in November 2021 |
| // (v22, Android T) and is not supported on older versions. |
| optional uint64 id = 7; |
| |
| // When true the data source is expected to ack the stop request through the |
| // NotifyDataSourceStopped() IPC. This field has been introduced after |
| // Android P in Jul 2018 and is not supported on older versions. |
| optional bool will_notify_on_stop = 2; |
| |
| // When true the data source is expected to ack the start request through the |
| // NotifyDataSourceStarted() IPC. This field has been introduced after |
| // Android P in March 2019 and is not supported on older versions. |
| optional bool will_notify_on_start = 3; |
| |
| // If true, opt into receiving the ClearIncrementalState() IPC. This should be |
| // set if the data source writes packets that refer to previous trace |
| // contents, and knows how to stop referring to the already-emitted data. |
| optional bool handles_incremental_state_clear = 4; |
| |
| // If true, indicates that the data source does nothing upon Flush. This |
| // allows the service to reduce the flush-related IPC traffic and better deal |
| // with frozen producers (see go/perfetto-frozen). This is usually the case |
| // for data sources like 'track_event' that don't have access to the various |
| // thread task runners to post a flush task and rely purely on server-side |
| // scraping. |
| // Introduced in v39 / Android V. |
| optional bool no_flush = 9; |
| |
| // Optional specification about available GPU counters. |
| optional GpuCounterDescriptor gpu_counter_descriptor = 5 [lazy = true]; |
| |
| optional TrackEventDescriptor track_event_descriptor = 6 [lazy = true]; |
| |
| optional FtraceDescriptor ftrace_descriptor = 8 [lazy = true]; |
| } |
| |
| // End of protos/perfetto/common/data_source_descriptor.proto |
| |
| // Begin of protos/perfetto/common/tracing_service_state.proto |
| |
| // Reports the state of the tracing service. Used to gather details about the |
| // data sources connected. |
| // See ConsumerPort::QueryServiceState(). |
| message TracingServiceState { |
| // Describes a producer process. |
| message Producer { |
| // Unique ID of the producer (monotonic counter). |
| optional int32 id = 1; |
| |
| // Typically matches the process name. |
| optional string name = 2; |
| |
| // Unix pid of the remote process. Supported only on Linux-based systems. |
| // Introduced in v24 / Android T. |
| optional int32 pid = 5; |
| |
| // Unix uid of the remote process. |
| optional int32 uid = 3; |
| |
| // The version of the client library used by the producer. |
| // This is a human readable string with and its format varies depending on |
| // the build system and the repo (standalone vs AOSP). |
| // This is intended for human debugging only. |
| optional string sdk_version = 4; |
| } |
| |
| // Describes a data source registered by a producer. Data sources are listed |
| // regardless of the fact that they are being used or not. |
| message DataSource { |
| // Descriptor passed by the data source when calling RegisterDataSource(). |
| optional DataSourceDescriptor ds_descriptor = 1; |
| |
| // ID of the producer, as per Producer.id. |
| optional int32 producer_id = 2; |
| } |
| |
| message TracingSession { |
| // The TracingSessionID. |
| optional uint64 id = 1; |
| |
| // The Unix uid of the consumer that started the session. |
| // This is meaningful only if the caller is root. In all other cases only |
| // tracing sessions that match the caller UID will be displayed. |
| optional int32 consumer_uid = 2; |
| |
| // Internal state of the tracing session. |
| // These strings are FYI only and subjected to change. |
| optional string state = 3; |
| |
| // The unique_session_name as set in the trace config (might be empty). |
| optional string unique_session_name = 4; |
| |
| // The number and size of each buffer. |
| repeated uint32 buffer_size_kb = 5; |
| |
| // Duration, as specified in the TraceConfig.duration_ms. |
| optional uint32 duration_ms = 6; |
| |
| // Number of data sources involved in the session. |
| optional uint32 num_data_sources = 7; |
| |
| // Time when the session was started, in the CLOCK_REALTIME domain. |
| // Available only on Linux-based systems. |
| optional int64 start_realtime_ns = 8; |
| } |
| |
| // Lists all the producers connected. |
| repeated Producer producers = 1; |
| |
| // Lists the data sources available. |
| repeated DataSource data_sources = 2; |
| |
| // Lists the tracing sessions active AND owned by a consumer that has the same |
| // UID of the caller (or all of them if the caller is root). |
| // Introduced in v24 / Android T. |
| repeated TracingSession tracing_sessions = 6; |
| |
| // This is always set to true from v24 and beyond. This flag is only used to |
| // tell the difference between: (1) talking to a recent service which happens |
| // to have no tracing session active; (2) talking to an older version of the |
| // service which will never report any tracing session. |
| optional bool supports_tracing_sessions = 7; |
| |
| // Total number of tracing sessions. |
| optional int32 num_sessions = 3; |
| |
| // Number of tracing sessions in the started state. Always <= num_sessions. |
| optional int32 num_sessions_started = 4; |
| |
| // The version of traced (the same returned by `traced --version`). |
| // This is a human readable string with and its format varies depending on |
| // the build system and the repo (standalone vs AOSP). |
| // This is intended for human debugging only. |
| optional string tracing_service_version = 5; |
| } |
| |
| // End of protos/perfetto/common/tracing_service_state.proto |
| |
| // Begin of protos/perfetto/common/builtin_clock.proto |
| |
| enum BuiltinClock { |
| BUILTIN_CLOCK_UNKNOWN = 0; |
| BUILTIN_CLOCK_REALTIME = 1; |
| BUILTIN_CLOCK_REALTIME_COARSE = 2; |
| BUILTIN_CLOCK_MONOTONIC = 3; |
| BUILTIN_CLOCK_MONOTONIC_COARSE = 4; |
| BUILTIN_CLOCK_MONOTONIC_RAW = 5; |
| BUILTIN_CLOCK_BOOTTIME = 6; |
| BUILTIN_CLOCK_MAX_ID = 63; |
| |
| reserved 7, 8; |
| |
| // An internal CL (ag/16521245) has taken this for BUILTIN_CLOCK_TSC. |
| // That might get upstreamed later on. Avoid diverging on this ID in future. |
| reserved 9; |
| } |
| |
| // End of protos/perfetto/common/builtin_clock.proto |
| |
| // Begin of protos/perfetto/config/android/android_game_intervention_list_config.proto |
| |
| // Data source that lists game modes and game interventions of games |
| // on an Android device. |
| message AndroidGameInterventionListConfig { |
| // If not empty, emit info about only the following list of package names |
| // (exact match, no regex). Otherwise, emit info about all packages. |
| repeated string package_name_filter = 1; |
| } |
| |
| // End of protos/perfetto/config/android/android_game_intervention_list_config.proto |
| |
| // Begin of protos/perfetto/common/android_log_constants.proto |
| |
| // Values from NDK's android/log.h. |
| enum AndroidLogId { |
| // MAIN. |
| LID_DEFAULT = 0; |
| |
| LID_RADIO = 1; |
| LID_EVENTS = 2; |
| LID_SYSTEM = 3; |
| LID_CRASH = 4; |
| LID_STATS = 5; |
| LID_SECURITY = 6; |
| LID_KERNEL = 7; |
| } |
| |
| enum AndroidLogPriority { |
| PRIO_UNSPECIFIED = 0; |
| |
| // _DEFAULT, but should never be seen in logs. |
| PRIO_UNUSED = 1; |
| |
| PRIO_VERBOSE = 2; |
| PRIO_DEBUG = 3; |
| PRIO_INFO = 4; |
| PRIO_WARN = 5; |
| PRIO_ERROR = 6; |
| PRIO_FATAL = 7; |
| } |
| |
| // End of protos/perfetto/common/android_log_constants.proto |
| |
| // Begin of protos/perfetto/config/android/android_log_config.proto |
| |
| message AndroidLogConfig { |
| repeated AndroidLogId log_ids = 1; |
| |
| // Was |poll_ms|, deprecated. |
| reserved 2; |
| |
| // If set ignores all log messages whose prio is < the given value. |
| optional AndroidLogPriority min_prio = 3; |
| |
| // If non-empty ignores all log messages whose tag doesn't match one of the |
| // specified values. |
| repeated string filter_tags = 4; |
| } |
| |
| // End of protos/perfetto/config/android/android_log_config.proto |
| |
| // Begin of protos/perfetto/config/android/android_polled_state_config.proto |
| |
| // Data source that polls for display state. This should only be used for |
| // backward-compatibility; AndroidSystemPropertyConfig should be preferred. |
| message AndroidPolledStateConfig { |
| // Frequency of polling. If absent the state will be recorded once, at the |
| // start of the trace. |
| // This is required to be > 100ms to avoid excessive CPU usage. |
| optional uint32 poll_ms = 1; |
| } |
| |
| // End of protos/perfetto/config/android/android_polled_state_config.proto |
| |
| // Begin of protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto |
| |
| // Data source that controls the system properties used to guard initialization |
| // of track_event producers (i.e. Skia) in apps using HWUI, and certain |
| // processes like SurfaceFlinger. |
| // |
| // This data source only tells Skia to initialized the Perfetto SDK and start |
| // routing data to the Track Event system instead of ATrace. For those events |
| // to actually show up in a trace, the track_event data source must be used as |
| // well. The Perfetto SDK cannot be de-initialized, so some long-lived apps and |
| // processes may need to be restarted for Skia to revert to using ATrace if |
| // Track Events are no longer desired. |
| // |
| // In addition to switching Skia to use Perfetto's track_event data source, |
| // this "guard" also controls Skia's "broad tracing", which removes Skia's |
| // internal tracing constraints and allows the track_event config to specify |
| // which categories should be traced. Filtering to the "skia.always" category |
| // *tag* in a track_event config can be used to re-enable the standard |
| // constraints typically used with ATrace. |
| // |
| // Data source name: android.sdk_sysprop_guard |
| // Introduced in Android 14 (U) QPR1. |
| // Next id: 4 |
| message AndroidSdkSyspropGuardConfig { |
| // If true, configures SurfaceFlinger to initialize Skia's Perfetto |
| // integration with the track_event data source in RenderEngine. |
| // If false or omitted, the simpler ATrace fallback is used. |
| // |
| // NOTE: once enabled, Skia will only revert to ATrace if SurfaceFlinger is |
| // restarted. |
| // |
| // Specifically this sets the following system properties: |
| // - debug.tracing.ctl.renderengine.skia_tracing_enabled |
| // - debug.tracing.ctl.renderengine.skia_use_perfetto_track_events |
| // |
| // Does not affect actual track_event data *collection*, which must be |
| // configured seperately. |
| optional bool surfaceflinger_skia_track_events = 1; |
| |
| // If true, configures HWUI apps to initialize Skia's Perfetto integration |
| // with the track_event data source. hwui_package_name_filter |
| // can be used to control which apps are affected. |
| // If false or omitted, the simpler ATrace fallback is used. |
| // |
| // NOTE: once enabled, Skia will only revert to ATrace if the app is |
| // restarted. |
| // |
| // ATTENTION: affects ALL HWUI APPS if hwui_package_name_filter is not set! |
| // If filtering is NOT set, this controls these GLOBAL system properties: |
| // - debug.tracing.ctl.hwui.skia_tracing_enabled |
| // - debug.tracing.ctl.hwui.skia_use_perfetto_track_events |
| // If filtering IS set, this controls these APP-SPECIFIC system properties, |
| // for each package listed in the filter: |
| // - debug.tracing.ctl.hwui.skia_tracing_enabled.<package.name> |
| // - debug.tracing.ctl.hwui.skia_use_perfetto_track_events.<package.name> |
| // |
| // Does not affect actual track_event data *collection*, which must be |
| // configured seperately. |
| optional bool hwui_skia_track_events = 2; |
| |
| // If non-empty, hwui_skia_track_events applies to only the packages listed. |
| // Otherwise, hwui_skia_track_events applies globally to all HWUI apps. |
| repeated string hwui_package_name_filter = 3; |
| } |
| |
| // End of protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto |
| |
| // Begin of protos/perfetto/config/android/android_system_property_config.proto |
| |
| // Data source that polls for system properties. |
| message AndroidSystemPropertyConfig { |
| // Frequency of polling. If absent the state will be recorded once, at the |
| // start of the trace. |
| // This is required to be > 100ms to avoid excessive CPU usage. |
| optional uint32 poll_ms = 1; |
| |
| // Properties to poll. All property names must start with "debug.tracing.". |
| repeated string property_name = 2; |
| } |
| |
| // End of protos/perfetto/config/android/android_system_property_config.proto |
| |
| // Begin of protos/perfetto/config/android/network_trace_config.proto |
| |
| // Network tracing data source that records details on all packets sent or |
| // received by the network. |
| message NetworkPacketTraceConfig { |
| // Polling frequency in milliseconds. Network tracing writes to a fixed size |
| // ring buffer. The polling interval should be such that the ring buffer is |
| // unlikely to fill in that interval (or that filling is an acceptable risk). |
| // The minimum polling rate is 100ms (values below this are ignored). |
| // Introduced in Android 14 (U). |
| optional uint32 poll_ms = 1; |
| |
| // The aggregation_threshold is the number of packets at which an event will |
| // switch from per-packet details to aggregate details. For example, a value |
| // of 50 means that if a particular event (grouped by the unique combinations |
| // of metadata fields: {interface, direction, uid, etc}) has fewer than 50 |
| // packets, the exact timestamp and length are recorded for each packet. If |
| // there were 50 or more packets in an event, it would only record the total |
| // duration, packets, and length. A value of zero or unspecified will always |
| /// record per-packet details. A value of 1 always records aggregate details. |
| optional uint32 aggregation_threshold = 2; |
| |
| // Specifies the maximum number of packet contexts to intern at a time. This |
| // prevents the interning table from growing too large and controls whether |
| // interning is enabled or disabled (a value of zero disables interning and |
| // is the default). When a data sources interning table reaches this amount, |
| // packet contexts will be inlined into NetworkPacketEvents. |
| optional uint32 intern_limit = 3; |
| |
| // The following fields specify whether certain fields should be dropped from |
| // the output. Dropping fields improves normalization results, reduces the |
| // size of the interning table, and slightly reduces event size. |
| optional bool drop_local_port = 4; |
| optional bool drop_remote_port = 5; |
| optional bool drop_tcp_flags = 6; |
| } |
| |
| // End of protos/perfetto/config/android/network_trace_config.proto |
| |
| // Begin of protos/perfetto/config/android/packages_list_config.proto |
| |
| // Data source that lists details (such as version code) about packages on an |
| // Android device. |
| message PackagesListConfig { |
| // If not empty, emit info about only the following list of package names |
| // (exact match, no regex). Otherwise, emit info about all packages. |
| repeated string package_name_filter = 1; |
| } |
| |
| // End of protos/perfetto/config/android/packages_list_config.proto |
| |
| // Begin of protos/perfetto/config/android/surfaceflinger_layers_config.proto |
| |
| // Custom configuration for the "android.surfaceflinger.layers" data source. |
| message SurfaceFlingerLayersConfig { |
| enum Mode { |
| MODE_UNSPECIFIED = 0; |
| |
| // Trace layers snapshots. A snapshot is taken every time a layers change |
| // occurs. |
| MODE_ACTIVE = 1; |
| |
| // Generate layers snapshots from the transactions kept in the |
| // SurfaceFlinger's internal ring buffer. |
| // The layers snapshots generation occurs when this data source is flushed. |
| MODE_GENERATED = 2; |
| |
| // Trace a single layers snapshot. |
| MODE_DUMP = 3; |
| |
| // Default mode (applied by SurfaceFlinger if no mode is specified). |
| // Same as MODE_GENERATED, but triggers the layers snapshots generation only when a bugreport |
| // is taken. |
| MODE_GENERATED_BUGREPORT_ONLY = 4; |
| } |
| optional Mode mode = 1; |
| |
| enum TraceFlag { |
| TRACE_FLAG_UNSPECIFIED = 0; |
| TRACE_FLAG_INPUT = 0x02; |
| TRACE_FLAG_COMPOSITION = 0x04; |
| TRACE_FLAG_EXTRA = 0x08; |
| TRACE_FLAG_HWC = 0x10; |
| TRACE_FLAG_BUFFERS = 0x20; |
| TRACE_FLAG_VIRTUAL_DISPLAYS = 0x40; |
| |
| // INPUT | COMPOSITION | EXTRA |
| TRACE_FLAG_ALL = 0x0e; |
| } |
| repeated TraceFlag trace_flags = 2; |
| } |
| |
| // End of protos/perfetto/config/android/surfaceflinger_layers_config.proto |
| |
| // Begin of protos/perfetto/config/android/surfaceflinger_transactions_config.proto |
| |
| // Custom configuration for the "android.surfaceflinger.transactions" data |
| // source. |
| message SurfaceFlingerTransactionsConfig { |
| enum Mode { |
| MODE_UNSPECIFIED = 0; |
| |
| // Default mode (applied by SurfaceFlinger if no mode is specified). |
| // SurfaceFlinger writes its internal ring buffer of transactions every time |
| // the data source is flushed. The ring buffer contains the SurfaceFlinger's |
| // initial state and the latest transactions. |
| MODE_CONTINUOUS = 1; |
| |
| // SurfaceFlinger writes the initial state and then each incoming |
| // transaction until the data source is stopped. |
| MODE_ACTIVE = 2; |
| } |
| optional Mode mode = 1; |
| } |
| |
| // End of protos/perfetto/config/android/surfaceflinger_transactions_config.proto |
| |
| // Begin of protos/perfetto/config/chrome/chrome_config.proto |
| |
| message ChromeConfig { |
| optional string trace_config = 1; |
| |
| // When enabled, the data source should only fill in fields in the output that |
| // are not potentially privacy sensitive. |
| optional bool privacy_filtering_enabled = 2; |
| |
| // Instead of emitting binary protobuf, convert the trace data to the legacy |
| // JSON format. Note that the trace data will still be returned as a series of |
| // TracePackets, but the embedded data will be JSON instead of serialized |
| // protobuf. |
| optional bool convert_to_legacy_json = 3; |
| |
| // Priority of the tracing session client. A higher priority session may |
| // preempt a lower priority one in configurations where concurrent sessions |
| // aren't supported. |
| enum ClientPriority { |
| UNKNOWN = 0; |
| BACKGROUND = 1; |
| USER_INITIATED = 2; |
| } |
| optional ClientPriority client_priority = 4; |
| |
| // Applicable only when using legacy JSON format. |
| // If |json_agent_label_filter| is not empty, only data pertaining to |
| // the specified tracing agent label (e.g. "traceEvents") will be returned. |
| optional string json_agent_label_filter = 5; |
| } |
| |
| // End of protos/perfetto/config/chrome/chrome_config.proto |
| |
| // Begin of protos/perfetto/config/etw/etw_config.proto |
| |
| // Proto definition based on the struct _EVENT_TRACE_PROPERTIES definition |
| // See: https://learn.microsoft.com/en-us/windows/win32/api/evntrace/ |
| // ns-evntrace-event_trace_properties |
| message EtwConfig { |
| // The KernelFlag represent list of kernel flags that we are intrested in. |
| // To get a more extensive list run 'xperf -providers k'. |
| enum KernelFlag { |
| CSWITCH = 0; |
| DISPATCHER = 1; |
| } |
| |
| // The kernel_flags determines the flags that will be used by the etw tracing |
| // session. These kernel flags have been built to expose the useful events |
| // captured from the kernel mode only. |
| repeated KernelFlag kernel_flags = 1; |
| } |
| // End of protos/perfetto/config/etw/etw_config.proto |
| |
| // Begin of protos/perfetto/config/ftrace/ftrace_config.proto |
| |
| // Next id: 26. |
| message FtraceConfig { |
| repeated string ftrace_events = 1; |
| repeated string atrace_categories = 2; |
| repeated string atrace_apps = 3; |
| // *Per-CPU* buffer size. |
| optional uint32 buffer_size_kb = 10; |
| optional uint32 drain_period_ms = 11; |
| |
| // Configuration for compact encoding of scheduler events. When enabled (and |
| // recording the relevant ftrace events), specific high-volume events are |
| // encoded in a denser format than normal. |
| message CompactSchedConfig { |
| // If true, and sched_switch or sched_waking ftrace events are enabled, |
| // record those events in the compact format. |
| optional bool enabled = 1; |
| } |
| optional CompactSchedConfig compact_sched = 12; |
| |
| // Optional filter for "ftrace/print" events. |
| // |
| // The filter consists of multiple rules. As soon as a rule matches (the rules |
| // are processed in order), its `allow` field will be used as the outcome: if |
| // `allow` is true, the event will be included in the trace, otherwise it will |
| // be discarded. If an event does not match any rule, it will be allowed by |
| // default (a rule with an empty prefix and allow=false, disallows everything |
| // by default). |
| message PrintFilter { |
| message Rule { |
| // Matches an atrace message of the form: |
| // <type>|pid|<prefix>... |
| message AtraceMessage { |
| optional string type = 1; |
| optional string prefix = 2; |
| } |
| oneof match { |
| // This rule matches if `prefix` matches exactly with the beginning of |
| // the "ftrace/print" "buf" field. |
| string prefix = 1; |
| // This rule matches if the "buf" field contains an atrace-style print |
| // message as specified in `atrace_msg`. |
| AtraceMessage atrace_msg = 3; |
| } |
| optional bool allow = 2; |
| } |
| repeated Rule rules = 1; |
| } |
| optional PrintFilter print_filter = 22; |
| |
| // Enables symbol name resolution against /proc/kallsyms. |
| // It requires that either traced_probes is running as root or that |
| // kptr_restrict has been manually lowered. |
| // It does not disclose KASLR, symbol addresses are mangled. |
| optional bool symbolize_ksyms = 13; |
| |
| // When symbolize_ksyms=true, determines whether the traced_probes daemon |
| // should keep the symbol map in memory (and reuse it for future tracing |
| // sessions) or clear it (saving memory) and re-create it on each tracing |
| // session (wasting cpu and wall time). |
| // The tradeoff is roughly: |
| // KSYMS_RETAIN: pay a fixed ~1.2 MB cost after the first trace. |
| // KSYMS_CLEANUP_ON_STOP: pay a ~300-500ms cost when starting each trace. |
| // Default behavior: KSYMS_CLEANUP_ON_STOP. |
| enum KsymsMemPolicy { |
| KSYMS_UNSPECIFIED = 0; |
| KSYMS_CLEANUP_ON_STOP = 1; |
| KSYMS_RETAIN = 2; |
| } |
| optional KsymsMemPolicy ksyms_mem_policy = 17; |
| |
| // By default the kernel symbolizer is lazily initialized on a deferred task |
| // to reduce ftrace's time-to-start-recording. Unfortunately that makes |
| // ksyms integration tests hard. This flag forces the kernel symbolizer to be |
| // initialized synchronously on the data source start and hence avoiding |
| // timing races in tests. |
| // DEPRECATED in v28 / Android U. This is now the default behavior, setting it |
| // to true is a no-op. |
| optional bool initialize_ksyms_synchronously_for_testing = 14 |
| [deprecated = true]; |
| |
| // When this boolean is true AND the ftrace_events contains "kmem/rss_stat", |
| // this option causes traced_probes to enable the "kmem/rss_stat_throttled" |
| // event instead if present, and fall back to "kmem/rss_stat" if not present. |
| // The historical context for this is the following: |
| // - Up to Android S (12), the rss_stat was internally throttled in its |
| // kernel implementation. |
| // - A change introduced in the kernels after S has introduced a new |
| // "rss_stat_throttled" making the original "rss_stat" event unthrottled |
| // (hence very spammy). |
| // - Not all Android T/13 devices will receive a new kernel though, hence we |
| // need to deal with both cases. |
| // For more context: go/rss-stat-throttled. |
| optional bool throttle_rss_stat = 15; |
| |
| // If true, avoid enabling events that aren't statically known by |
| // traced_probes. Otherwise, the default is to emit such events as |
| // GenericFtraceEvent protos. |
| // Prefer to keep this flag at its default. This was added for Android |
| // tracing, where atrace categories and/or atrace HAL requested events can |
| // expand to events that aren't of interest to the tracing user. |
| // Introduced in: Android T. |
| optional bool disable_generic_events = 16; |
| |
| // The list of syscalls that should be recorded by sys_{enter,exit} ftrace |
| // events. When empty, all syscalls are recorded. If neither sys_{enter,exit} |
| // are enabled, this setting has no effect. Example: ["sys_read", "sys_open"]. |
| // Introduced in: Android U. |
| repeated string syscall_events = 18; |
| |
| // If true, enable the "function_graph" kernel tracer that emits events |
| // whenever a kernel function is entered and exited |
| // (funcgraph_entry/funcgraph_exit). |
| // Notes on use: |
| // * Requires |symbolize_ksyms| for function name resolution. |
| // * Use |function_filters| or |function_graph_roots| to constrain the traced |
| // set of functions, otherwise the event bandwidth will be too high for |
| // practical use. |
| // * The data source might be rejected if there is already a concurrent |
| // ftrace data source that does not use function graph itself, as we do not |
| // support switching kernel tracers mid-trace. |
| // * Requires a kernel compiled with CONFIG_FUNCTION_GRAPH_TRACER. This is |
| // enabled if "cat /sys/kernel/tracing/available_tracers" includes |
| // "function_graph". |
| // Android: |
| // * Available only on debuggable builds. |
| // * Introduced in: Android U. |
| optional bool enable_function_graph = 19; |
| |
| // Constrains the set of functions traced when |enable_function_graph| is |
| // true. Supports globs, e.g. "sched*". You can specify multiple filters, |
| // in which case all matching functions will be traced. See kernel |
| // documentation on ftrace "set_ftrace_filter" file for more details. |
| // Android: |
| // * Available only on debuggable builds. |
| // * Introduced in: Android U. |
| repeated string function_filters = 20; |
| |
| // If |enable_function_graph| is true, trace this set of functions *and* all |
| // of its callees. Supports globs. Can be set together with |
| // |function_filters|, in which case only callees matching the filter will be |
| // traced. If setting both, you most likely want all roots to also be |
| // included in |function_filters|. |
| // Android: |
| // * Available only on debuggable builds. |
| // * Introduced in: Android U. |
| repeated string function_graph_roots = 21; |
| |
| // If true, does not clear ftrace buffers before the start of the program. |
| // This makes sense only if this is the first ftrace data source instance |
| // created after the daemon has been started. Can be useful for gathering boot |
| // traces, if ftrace has been separately configured (e.g. via kernel |
| // commandline). |
| optional bool preserve_ftrace_buffer = 23; |
| |
| // If true, overrides the default timestamp clock and uses a raw hardware |
| // based monotonic clock for getting timestamps. |
| // * Introduced in: Android U. |
| optional bool use_monotonic_raw_clock = 24; |
| |
| // Caution: under development as of 2023/03/01. |
| // If |instance_name| is not empty, then attempt to use that tracefs instance |
| // for event recording. Normally, this means |
| // `/sys/kernel/tracing/instances/$instance_name`. |
| // |
| // The name "hyp" is reserved. |
| // |
| // The instance must already exist, the tracing daemon *will not* create it |
| // for you as it typically doesn't have such permissions. |
| // Only a subset of features is guaranteed to work with non-default instances, |
| // at the time of writing: |
| // * ftrace_events |
| // * buffer_size_kb |
| // TODO(b/249050813): reword comment once instance support is stable. |
| optional string instance_name = 25; |
| } |
| |
| // End of protos/perfetto/config/ftrace/ftrace_config.proto |
| |
| // Begin of protos/perfetto/config/gpu/gpu_counter_config.proto |
| |
| message GpuCounterConfig { |
| // Desired sampling interval for counters. |
| optional uint64 counter_period_ns = 1; |
| |
| // List of counters to be sampled. Counter IDs correspond to the ones |
| // described in GpuCounterSpec in the data source descriptor. |
| repeated uint32 counter_ids = 2; |
| |
| // Sample counters by instrumenting command buffers. |
| optional bool instrumented_sampling = 3; |
| |
| // Fix gpu clock rate during trace session. |
| optional bool fix_gpu_clock = 4; |
| } |
| |
| // End of protos/perfetto/config/gpu/gpu_counter_config.proto |
| |
| // Begin of protos/perfetto/config/gpu/vulkan_memory_config.proto |
| |
| message VulkanMemoryConfig { |
| // Tracking driver memory usage events |
| optional bool track_driver_memory_usage = 1; |
| |
| // Tracking device memory usage events |
| optional bool track_device_memory_usage = 2; |
| } |
| |
| // End of protos/perfetto/config/gpu/vulkan_memory_config.proto |
| |
| // Begin of protos/perfetto/config/inode_file/inode_file_config.proto |
| |
| message InodeFileConfig { |
| message MountPointMappingEntry { |
| optional string mountpoint = 1; |
| repeated string scan_roots = 2; |
| } |
| |
| // How long to pause between batches. |
| optional uint32 scan_interval_ms = 1; |
| |
| // How long to wait before the first scan in order to accumulate inodes. |
| optional uint32 scan_delay_ms = 2; |
| |
| // How many inodes to scan in one batch. |
| optional uint32 scan_batch_size = 3; |
| |
| // Do not scan for inodes not found in the static map. |
| optional bool do_not_scan = 4; |
| |
| // If non-empty, only scan inodes corresponding to block devices named in |
| // this list. |
| repeated string scan_mount_points = 5; |
| |
| // When encountering an inode belonging to a block device corresponding |
| // to one of the mount points in this map, scan its scan_roots instead. |
| repeated MountPointMappingEntry mount_point_mapping = 6; |
| } |
| |
| // End of protos/perfetto/config/inode_file/inode_file_config.proto |
| |
| // Begin of protos/perfetto/config/interceptors/console_config.proto |
| |
| message ConsoleConfig { |
| enum Output { |
| OUTPUT_UNSPECIFIED = 0; |
| OUTPUT_STDOUT = 1; |
| OUTPUT_STDERR = 2; |
| } |
| optional Output output = 1; |
| optional bool enable_colors = 2; |
| } |
| |
| // End of protos/perfetto/config/interceptors/console_config.proto |
| |
| // Begin of protos/perfetto/config/interceptor_config.proto |
| |
| // Configuration for trace packet interception. Used for diverting trace data to |
| // non-Perfetto sources (e.g., logging to the console, ETW) when using the |
| // Perfetto SDK. |
| message InterceptorConfig { |
| // Matches the name given to RegisterInterceptor(). |
| optional string name = 1; |
| |
| optional ConsoleConfig console_config = 100; |
| } |
| |
| // End of protos/perfetto/config/interceptor_config.proto |
| |
| // Begin of protos/perfetto/config/power/android_power_config.proto |
| |
| message AndroidPowerConfig { |
| enum BatteryCounters { |
| BATTERY_COUNTER_UNSPECIFIED = 0; |
| |
| // Coulomb counter. |
| BATTERY_COUNTER_CHARGE = 1; |
| |
| // Charge (%). |
| BATTERY_COUNTER_CAPACITY_PERCENT = 2; |
| |
| // Instantaneous current. |
| BATTERY_COUNTER_CURRENT = 3; |
| |
| // Avg current. |
| BATTERY_COUNTER_CURRENT_AVG = 4; |
| |
| // Instantaneous voltage. |
| BATTERY_COUNTER_VOLTAGE = 5; |
| } |
| optional uint32 battery_poll_ms = 1; |
| repeated BatteryCounters battery_counters = 2; |
| |
| // Where available enables per-power-rail measurements. |
| optional bool collect_power_rails = 3; |
| |
| // Provides a breakdown of energy estimation for various subsystem (e.g. GPU). |
| // Available from Android S. |
| optional bool collect_energy_estimation_breakdown = 4; |
| |
| // Provides a breakdown of time in state for various subsystems. |
| // Available from Android U. |
| optional bool collect_entity_state_residency = 5; |
| } |
| |
| // End of protos/perfetto/config/power/android_power_config.proto |
| |
| // Begin of protos/perfetto/config/process_stats/process_stats_config.proto |
| |
| message ProcessStatsConfig { |
| enum Quirks { |
| QUIRKS_UNSPECIFIED = 0; |
| |
| // This has been deprecated and ignored as per 2018-05-01. Full scan at |
| // startup is now disabled by default and can be re-enabled using the |
| // |scan_all_processes_on_start| arg. |
| DISABLE_INITIAL_DUMP = 1 [deprecated = true]; |
| |
| DISABLE_ON_DEMAND = 2; |
| } |
| |
| repeated Quirks quirks = 1; |
| |
| // If enabled all processes will be scanned and dumped when the trace starts. |
| optional bool scan_all_processes_on_start = 2; |
| |
| // If enabled thread names are also recoded (this is redundant if sched_switch |
| // is enabled). |
| optional bool record_thread_names = 3; |
| |
| // If > 0 samples counters (see process_stats.proto) from |
| // /proc/pid/status and oom_score_adj every X ms. |
| // It will also sample /proc/pid/smaps_rollup if scan_smaps_rollup = true. |
| // This is required to be > 100ms to avoid excessive CPU usage. |
| // TODO(primiano): add CPU cost for change this value. |
| optional uint32 proc_stats_poll_ms = 4; |
| |
| // If empty samples stats for all processes. If non empty samples stats only |
| // for processes matching the given string in their argv0 (i.e. the first |
| // entry of /proc/pid/cmdline). |
| // TODO(primiano): implement this feature. |
| // repeated string proc_stats_filter = 5; |
| |
| // This is required to be either = 0 or a multiple of |proc_stats_poll_ms| |
| // (default: |proc_stats_poll_ms|). If = 0, will be set to |
| // |proc_stats_poll_ms|. Non-multiples will be rounded down to the nearest |
| // multiple. |
| optional uint32 proc_stats_cache_ttl_ms = 6; |
| |
| // DEPRECATED record_thread_time_in_state |
| reserved 7; |
| |
| // DEPRECATED thread_time_in_state_cache_size |
| reserved 8; |
| |
| // If true this will resolve filedescriptors for each process so these |
| // can be mapped to their actual device or file. |
| // Requires raw_syscalls/sys_exit ftrace events to be enabled or |
| // new fds opened after initially scanning a process will not be |
| // recognized. |
| optional bool resolve_process_fds = 9; |
| |
| // If enabled memory stats from /proc/pid/smaps_rollup will be included |
| // in process stats. |
| optional bool scan_smaps_rollup = 10; |
| } |
| |
| // End of protos/perfetto/config/process_stats/process_stats_config.proto |
| |
| // Begin of protos/perfetto/config/profiling/heapprofd_config.proto |
| |
| // Configuration for go/heapprofd. |
| // Next id: 28 |
| message HeapprofdConfig { |
| message ContinuousDumpConfig { |
| // ms to wait before first dump. |
| optional uint32 dump_phase_ms = 5; |
| // ms to wait between following dumps. |
| optional uint32 dump_interval_ms = 6; |
| } |
| |
| // Sampling rate for all heaps not specified via heap_sampling_intervals. |
| // |
| // These are: |
| // * All heaps if heap_sampling_intervals is empty. |
| // * Those profiled due to all_heaps and not named in heaps if |
| // heap_sampling_intervals is not empty. |
| // * The implicit libc.malloc heap if heaps is empty. |
| // |
| // Set to 1 for perfect accuracy. |
| // Otherwise, sample every sample_interval_bytes on average. |
| // |
| // See |
| // https://perfetto.dev/docs/data-sources/native-heap-profiler#sampling-interval |
| // for more details. |
| // |
| // BUGS |
| // Before Android 12, setting this to 0 would crash the target process. |
| // |
| // N.B. This must be explicitly set to a non-zero value for all heaps (with |
| // this field or with heap_sampling_intervals), otherwise the producer will |
| // not start. |
| optional uint64 sampling_interval_bytes = 1; |
| |
| // If less than the given numbers of bytes are left free in the shared |
| // memory buffer, increase sampling interval by a factor of two. |
| // Adaptive sampling is disabled when set to 0. |
| optional uint64 adaptive_sampling_shmem_threshold = 24; |
| // Stop doubling the sampling_interval once the sampling interval has reached |
| // this value. |
| optional uint64 adaptive_sampling_max_sampling_interval_bytes = 25; |
| |
| // E.g. surfaceflinger, com.android.phone |
| // This input is normalized in the following way: if it contains slashes, |
| // everything up to the last slash is discarded. If it contains "@", |
| // everything after the first @ is discared. |
| // E.g. /system/bin/surfaceflinger@1.0 normalizes to surfaceflinger. |
| // This transformation is also applied to the processes' command lines when |
| // matching. |
| repeated string process_cmdline = 2; |
| |
| // For watermark based triggering or local debugging. |
| repeated uint64 pid = 4; |
| |
| // Only profile target if it was installed by one of the packages given. |
| // Special values are: |
| // * @system: installed on the system partition |
| // * @product: installed on the product partition |
| // * @null: sideloaded |
| // Supported on Android 12+. |
| repeated string target_installed_by = 26; |
| |
| // Which heaps to sample, e.g. "libc.malloc". If left empty, only samples |
| // "malloc". |
| // |
| // Introduced in Android 12. |
| repeated string heaps = 20; |
| |
| // Which heaps not to sample, e.g. "libc.malloc". This is useful when used in |
| // combination with all_heaps; |
| // |
| // Introduced in Android 12. |
| repeated string exclude_heaps = 27; |
| |
| optional bool stream_allocations = 23; |
| |
| // If given, needs to be the same length as heaps and gives the sampling |
| // interval for the respective entry in heaps. |
| // |
| // Otherwise, sampling_interval_bytes is used. |
| // |
| // It is recommended to set sampling_interval_bytes to a reasonable default |
| // value when using this, as a value of 0 for sampling_interval_bytes will |
| // crash the target process before Android 12. |
| // |
| // Introduced in Android 12. |
| // |
| // All values must be non-zero or the producer will not start. |
| repeated uint64 heap_sampling_intervals = 22; |
| |
| // Sample all heaps registered by target process. Introduced in Android 12. |
| optional bool all_heaps = 21; |
| |
| // Profile all processes eligible for profiling on the system. |
| // See |
| // https://perfetto.dev/docs/data-sources/native-heap-profiler#heapprofd-targets |
| // for which processes are eligible. |
| // |
| // On unmodified userdebug builds, this will lead to system crashes. Zygote |
| // will crash when trying to launch a new process as it will have an |
| // unexpected open socket to heapprofd. |
| // |
| // heapprofd will likely be overloaded by the amount of data for low |
| // sampling intervals. |
| optional bool all = 5; |
| |
| // Do not profile processes whose anon RSS + swap < given value. |
| // Introduced in Android 11. |
| optional uint32 min_anonymous_memory_kb = 15; |
| |
| // Stop profile if heapprofd memory usage goes beyond the given value. |
| // Introduced in Android 11. |
| optional uint32 max_heapprofd_memory_kb = 16; |
| |
| // Stop profile if heapprofd CPU time since start of this data-source |
| // goes beyond given value. |
| // Introduced in Android 11. |
| optional uint64 max_heapprofd_cpu_secs = 17; |
| |
| // Do not emit function names for mappings starting with this prefix. |
| // E.g. /system to not emit symbols for any system libraries. |
| repeated string skip_symbol_prefix = 7; |
| |
| // Dump at a predefined interval. |
| optional ContinuousDumpConfig continuous_dump_config = 6; |
| |
| // Size of the shared memory buffer between the profiled processes and |
| // heapprofd. Defaults to 8 MiB. If larger than 500 MiB, truncated to 500 |
| // MiB. |
| // |
| // Needs to be: |
| // * at least 8192, |
| // * a power of two, |
| // * a multiple of 4096. |
| optional uint64 shmem_size_bytes = 8; |
| |
| // When the shmem buffer is full, block the client instead of ending the |
| // trace. Use with caution as this will significantly slow down the target |
| // process. |
| optional bool block_client = 9; |
| |
| // If set, stop the trace session after blocking the client for this |
| // timeout. Needs to be larger than 100 us, otherwise no retries are done. |
| // Introduced in Android 11. |
| optional uint32 block_client_timeout_us = 14; |
| |
| // Do not profile processes from startup, only match already running |
| // processes. |
| // |
| // Can not be set at the same time as no_running. |
| // Introduced in Android 11. |
| optional bool no_startup = 10; |
| |
| // Do not profile running processes. Only match processes on startup. |
| // |
| // Can not be set at the same time as no_startup. |
| // Introduced in Android 11. |
| optional bool no_running = 11; |
| |
| // deprecated idle_allocations. |
| reserved 12; |
| |
| // Cause heapprofd to emit a single dump at the end, showing the memory usage |
| // at the point in time when the sampled heap usage of the process was at its |
| // maximum. This causes ProfilePacket.HeapSample.self_max to be set, and |
| // self_allocated and self_freed to not be set. |
| // Introduced in Android 11. |
| optional bool dump_at_max = 13; |
| |
| // FEATURE FLAGS. THERE BE DRAGONS. |
| |
| // Escape hatch if the session is being torn down because of a forked child |
| // that shares memory space, but is not correctly identified as a vforked |
| // child. |
| // Introduced in Android 11. |
| optional bool disable_fork_teardown = 18; |
| |
| // We try to automatically detect when a target applicatation vforks but then |
| // does a memory allocation (or free). This auto-detection can be disabled |
| // with this. |
| // Introduced in Android 11. |
| optional bool disable_vfork_detection = 19; |
| } |
| |
| // End of protos/perfetto/config/profiling/heapprofd_config.proto |
| |
| // Begin of protos/perfetto/config/profiling/java_hprof_config.proto |
| |
| // Configuration for managed app heap graph snapshots. |
| message JavaHprofConfig { |
| // If dump_interval_ms != 0, the following configuration is used. |
| message ContinuousDumpConfig { |
| // ms to wait before first continuous dump. |
| // A dump is always created at the beginning of the trace. |
| optional uint32 dump_phase_ms = 1; |
| // ms to wait between following dumps. |
| optional uint32 dump_interval_ms = 2; |
| // If true, scans all the processes to find `process_cmdline` and filter by |
| // `min_anonymous_memory_kb` only at data source start. Default on Android |
| // S-. |
| // |
| // If false, rescans all the processes to find on every dump. Default on |
| // Android T+. |
| optional bool scan_pids_only_on_start = 3; |
| } |
| |
| // Command line allowlist, matched against the /proc/<pid>/cmdline (not the |
| // comm string). The semantics of this field were changed since its original |
| // introduction. |
| // |
| // On Android T+ (13+), this field can specify a single wildcard (*), and |
| // the profiler will attempt to match it in two possible ways: |
| // * if the pattern starts with a '/', then it is matched against the first |
| // segment of the cmdline (i.e. argv0). For example "/bin/e*" would match |
| // "/bin/echo". |
| // * otherwise the pattern is matched against the part of argv0 |
| // corresponding to the binary name (this is unrelated to /proc/pid/exe). |
| // For example "echo" would match "/bin/echo". |
| // |
| // On Android S (12) and below, both this pattern and /proc/pid/cmdline get |
| // normalized prior to an exact string comparison. Normalization is as |
| // follows: (1) trim everything beyond the first null or "@" byte; (2) if |
| // the string contains forward slashes, trim everything up to and including |
| // the last one. |
| // |
| // Implementation note: in either case, at most 511 characters of cmdline |
| // are considered. |
| repeated string process_cmdline = 1; |
| |
| // For watermark based triggering or local debugging. |
| repeated uint64 pid = 2; |
| |
| // Only profile target if it was installed by one of the packages given. |
| // Special values are: |
| // * @system: installed on the system partition |
| // * @product: installed on the product partition |
| // * @null: sideloaded |
| // Supported on Android 12+. |
| repeated string target_installed_by = 7; |
| |
| // Dump at a predefined interval. |
| optional ContinuousDumpConfig continuous_dump_config = 3; |
| |
| // Do not profile processes whose anon RSS + swap < given value. |
| optional uint32 min_anonymous_memory_kb = 4; |
| |
| // Include the process' /proc/self/smaps. |
| // This only shows maps that: |
| // * start with /system |
| // * start with /vendor |
| // * start with /data/app |
| // * contain "extracted in memory from Y", where Y matches any of the above |
| optional bool dump_smaps = 5; |
| |
| // Exclude objects of the following types from the profile. This can be |
| // useful if lots of uninteresting objects, e.g. "sun.misc.Cleaner". |
| repeated string ignored_types = 6; |
| } |
| |
| // End of protos/perfetto/config/profiling/java_hprof_config.proto |
| |
| // Begin of protos/perfetto/common/perf_events.proto |
| |
| // Next id: 12 |
| message PerfEvents { |
| // What event to sample on, and how often. Commented from the perspective of |
| // its use in |PerfEventConfig|. |
| message Timebase { |
| // How often the per-cpu sampling will occur. Not guaranteed to be honored |
| // as the kernel can throttle the sampling rate if it's too high. |
| // If unset, an implementation-defined default is used. |
| oneof interval { |
| // Per-cpu sampling frequency in Hz, as requested from the kernel. Not the |
| // same as 1/period. |
| // Details: the actual sampling will still be based on a period, but the |
| // kernel will dynamically adjust it based on the observed event rate, to |
| // approximate this frequency. Works best with steady-rate events like |
| // timers. |
| uint64 frequency = 2; |
| |
| // Per-cpu sampling will occur every |period| counts of |event|. |
| // Prefer |frequency| by default, as it's easier to oversample with a |
| // fixed period. |
| uint64 period = 1; |
| } |
| |
| // Counting event to use as a timebase for the sampling. |
| // If unset, implies the CPU timer (SW_CPU_CLOCK) as the event, |
| // which is what you usually want. |
| // See common/perf_events.proto for the definitions. |
| oneof event { |
| Counter counter = 4; |
| Tracepoint tracepoint = 3; |
| RawEvent raw_event = 5; |
| } |
| |
| // If set, samples will be timestamped with the given clock. |
| // If unset, the clock is chosen by the implementation. |
| // For software events, prefer PERF_CLOCK_BOOTTIME. However it cannot be |
| // used for hardware events (due to interrupt safety), for which the |
| // recommendation is to use one of the monotonic clocks. |
| optional PerfClock timestamp_clock = 11; |
| |
| // Optional arbitrary name for the event, to identify it in the parsed |
| // trace. Does *not* affect the profiling itself. If unset, the trace |
| // parser will choose a suitable name. |
| optional string name = 10; |
| } |
| |
| // Builtin counter names from the uapi header. Commented with their perf tool |
| // aliases. |
| // TODO(rsavitski): consider generating enums for cache events (should be |
| // finite), and generally make this list as extensive as possible. Excluding |
| // things like dynamic PMUs since those don't fit into a static enum. |
| // Next id: 21 |
| enum Counter { |
| UNKNOWN_COUNTER = 0; |
| |
| // cpu-clock |
| SW_CPU_CLOCK = 1; |
| // page-faults, faults |
| SW_PAGE_FAULTS = 2; |
| // task-clock |
| SW_TASK_CLOCK = 3; |
| // context-switches, cs |
| SW_CONTEXT_SWITCHES = 4; |
| // cpu-migrations, migrations |
| SW_CPU_MIGRATIONS = 5; |
| // minor-faults |
| SW_PAGE_FAULTS_MIN = 6; |
| // major-faults |
| SW_PAGE_FAULTS_MAJ = 7; |
| // alignment-faults |
| SW_ALIGNMENT_FAULTS = 8; |
| // emulation-faults |
| SW_EMULATION_FAULTS = 9; |
| // dummy |
| SW_DUMMY = 20; |
| |
| // cpu-cycles, cycles |
| HW_CPU_CYCLES = 10; |
| // instructions |
| HW_INSTRUCTIONS = 11; |
| // cache-references |
| HW_CACHE_REFERENCES = 12; |
| // cache-misses |
| HW_CACHE_MISSES = 13; |
| // branch-instructions, branches |
| HW_BRANCH_INSTRUCTIONS = 14; |
| // branch-misses |
| HW_BRANCH_MISSES = 15; |
| // bus-cycles |
| HW_BUS_CYCLES = 16; |
| // stalled-cycles-frontend, idle-cycles-frontend |
| HW_STALLED_CYCLES_FRONTEND = 17; |
| // stalled-cycles-backend, idle-cycles-backend |
| HW_STALLED_CYCLES_BACKEND = 18; |
| // ref-cycles |
| HW_REF_CPU_CYCLES = 19; |
| } |
| |
| message Tracepoint { |
| // Group and name for the tracepoint, acceptable forms: |
| // * "sched/sched_switch" |
| // * "sched:sched_switch" |
| optional string name = 1; |
| |
| // Optional field-level filter for the tracepoint. Only events matching this |
| // filter will be counted (and therefore contribute to the sampling period). |
| // Example: "prev_pid >= 42 && next_pid == 0". |
| // For full syntax, see kernel documentation on "Event filtering": |
| // https://www.kernel.org/doc/Documentation/trace/events.txt |
| optional string filter = 2; |
| } |
| |
| // Syscall-level description of the event, propagated to the perf_event_attr |
| // struct. Primarily for local use-cases, since the event availability and |
| // encoding is hardware-specific. |
| message RawEvent { |
| optional uint32 type = 1; |
| optional uint64 config = 2; |
| optional uint64 config1 = 3; |
| optional uint64 config2 = 4; |
| } |
| |
| // Subset of clocks that is supported by perf timestamping. |
| // CLOCK_TAI is excluded since it's not expected to be used in practice, but |
| // would require additions to the trace clock synchronisation logic. |
| enum PerfClock { |
| UNKNOWN_PERF_CLOCK = 0; |
| PERF_CLOCK_REALTIME = 1; |
| PERF_CLOCK_MONOTONIC = 2; |
| PERF_CLOCK_MONOTONIC_RAW = 3; |
| PERF_CLOCK_BOOTTIME = 4; |
| } |
| } |
| |
| // End of protos/perfetto/common/perf_events.proto |
| |
| // Begin of protos/perfetto/config/profiling/perf_event_config.proto |
| |
| // Configuration for the traced_perf profiler. |
| // |
| // Example config for basic cpu profiling: |
| // perf_event_config { |
| // timebase { |
| // frequency: 80 |
| // } |
| // callstack_sampling { |
| // scope { |
| // target_cmdline: "surfaceflinger" |
| // target_cmdline: "system_server" |
| // } |
| // kernel_frames: true |
| // } |
| // } |
| // |
| // Next id: 19 |
| message PerfEventConfig { |
| // What event to sample on, and how often. |
| // Defined in common/perf_events.proto. |
| optional PerfEvents.Timebase timebase = 15; |
| |
| // If set, the profiler will sample userspace processes' callstacks at the |
| // interval specified by the |timebase|. |
| // If unset, the profiler will record only the event counts. |
| optional CallstackSampling callstack_sampling = 16; |
| |
| // |
| // Kernel <-> userspace ring buffer options: |
| // |
| |
| // How often the per-cpu ring buffers are read by the producer. |
| // If unset, an implementation-defined default is used. |
| optional uint32 ring_buffer_read_period_ms = 8; |
| |
| // Size (in 4k pages) of each per-cpu ring buffer that is filled by the |
| // kernel. If set, must be a power of two. |
| // If unset, an implementation-defined default is used. |
| optional uint32 ring_buffer_pages = 3; |
| |
| // |
| // Daemon's resource usage limits: |
| // |
| |
| // Drop samples if the heap memory held by the samples in the unwinder queue |
| // is above the given limit. This counts the memory across all concurrent data |
| // sources (not just this one's), and there is no fairness guarantee - the |
| // whole quota might be used up by a concurrent source. |
| optional uint64 max_enqueued_footprint_kb = 17; |
| |
| // Stop the data source if traced_perf's combined {RssAnon + Swap} memory |
| // footprint exceeds this value. |
| optional uint32 max_daemon_memory_kb = 13; |
| |
| // |
| // Uncommon options: |
| // |
| |
| // Timeout for the remote /proc/<pid>/{maps,mem} file descriptors for a |
| // sampled process. This is primarily for Android, where this lookup is |
| // asynchronous. As long as the producer is waiting, the associated samples |
| // will be kept enqueued (putting pressure on the capacity of the shared |
| // unwinding queue). Once a lookup for a process expires, all associated |
| // samples are discarded. However, if the lookup still succeeds after the |
| // timeout, future samples will be handled normally. |
| // If unset, an implementation-defined default is used. |
| optional uint32 remote_descriptor_timeout_ms = 9; |
| |
| // Optional period for clearing state cached by the unwinder. This is a heavy |
| // operation that is only necessary for traces that target a wide set of |
| // processes, and require the memory footprint to be reset periodically. |
| // If unset, the cached state will not be cleared. |
| optional uint32 unwind_state_clear_period_ms = 10; |
| |
| // If set, only profile target if it was installed by a package with one of |
| // these names. Special values: |
| // * "@system": installed on the system partition |
| // * "@product": installed on the product partition |
| // * "@null": sideloaded |
| // Supported on Android 12+. |
| repeated string target_installed_by = 18; |
| |
| // |
| // Deprecated (superseded by options above): |
| // |
| // Do not set *any* of these fields in new configs. |
| // |
| |
| // Note: legacy configs had to set |all_cpus| to true to pass parsing. |
| // We rely on this to detect such configs. |
| optional bool all_cpus = 1; |
| optional uint32 sampling_frequency = 2; |
| optional bool kernel_frames = 12; |
| repeated int32 target_pid = 4; |
| repeated string target_cmdline = 5; |
| repeated int32 exclude_pid = 6; |
| repeated string exclude_cmdline = 7; |
| optional uint32 additional_cmdline_count = 11; |
| // previously |tracepoint| |
| reserved 14; |
| |
| // |
| // Sub-messages (nested for generated code namespacing). |
| // |
| |
| message CallstackSampling { |
| // Defines a set of processes for which samples are retained/skipped. If |
| // unset, all samples are kept, but beware that it will be very heavy on the |
| // stack unwinder, which might start dropping samples due to overload. |
| optional Scope scope = 1; |
| |
| // If true, callstacks will include the kernel-space frames. Such frames can |
| // be identified by a magical "kernel" string as their mapping name. |
| // Requires traced_perf to be running as root, or kptr_restrict to have been |
| // manually unrestricted. On Android, the platform should do the right thing |
| // on debug builds. |
| // This does *not* disclose KASLR, as only the function names are emitted. |
| optional bool kernel_frames = 2; |
| |
| // Whether to record and unwind userspace callstacks. If unset, defaults to |
| // including userspace (UNWIND_DWARF) both for backwards compatibility and |
| // as the most common default (this defaulting is only applicable if the |
| // outer CallstackSampling message is explicitly set). |
| optional UnwindMode user_frames = 3; |
| } |
| |
| message Scope { |
| // Process ID (TGID) allowlist. If this list is not empty, only matching |
| // samples will be retained. If multiple allow/deny-lists are |
| // specified by the config, then all of them are evaluated for each sampled |
| // process. |
| repeated int32 target_pid = 1; |
| |
| // Command line allowlist, matched against the /proc/<pid>/cmdline (not the |
| // comm string). The semantics of this field were changed since its original |
| // introduction. |
| // |
| // On Android T+ (13+), this field can specify a single wildcard (*), and |
| // the profiler will attempt to match it in two possible ways: |
| // * if the pattern starts with a '/', then it is matched against the first |
| // segment of the cmdline (i.e. argv0). For example "/bin/e*" would match |
| // "/bin/echo". |
| // * otherwise the pattern is matched against the part of argv0 |
| // corresponding to the binary name (this is unrelated to /proc/pid/exe). |
| // For example "echo" would match "/bin/echo". |
| // |
| // On Android S (12) and below, both this pattern and /proc/pid/cmdline get |
| // normalized prior to an exact string comparison. Normalization is as |
| // follows: (1) trim everything beyond the first null or "@" byte; (2) if |
| // the string contains forward slashes, trim everything up to and including |
| // the last one. |
| // |
| // Implementation note: in either case, at most 511 characters of cmdline |
| // are considered. |
| repeated string target_cmdline = 2; |
| |
| // List of excluded pids. |
| repeated int32 exclude_pid = 3; |
| |
| // List of excluded cmdlines. See description of |target_cmdline| for how |
| // this is handled. |
| repeated string exclude_cmdline = 4; |
| |
| // Niche features for systemwide callstacks: |
| |
| // Number of additional command lines to sample. Only those which are |
| // neither explicitly included nor excluded will be considered. Processes |
| // are accepted on a first come, first served basis. |
| optional uint32 additional_cmdline_count = 5; |
| |
| // If set to N, all encountered processes will be put into one of the N |
| // possible bins, and only one randomly-chosen bin will be selected for |
| // unwinding. The binning is simply "pid % N", under the assumption that |
| // low-order bits of pids are roughly uniformly distributed. Other explicit |
| // inclusions/exclusions in this |Scope| message are still respected. |
| // |
| // The profiler will report the chosen shard in PerfSampleDefaults, and the |
| // values will be queryable in trace processor under the "stats" table as |
| // "perf_process_shard_count" and "perf_chosen_process_shard". |
| // |
| // NB: all data sources in a config that set |process_shard_count| must set |
| // it to the same value. The profiler will choose one bin for all those data |
| // sources. |
| optional uint32 process_shard_count = 6; |
| } |
| |
| // Userspace unwinding mode. A possible future addition is kernel-unwound |
| // callchains for frame pointer based systems. |
| enum UnwindMode { |
| UNWIND_UNKNOWN = 0; |
| // Do not unwind userspace: |
| UNWIND_SKIP = 1; |
| // Use libunwindstack (default): |
| UNWIND_DWARF = 2; |
| } |
| } |
| |
| // End of protos/perfetto/config/profiling/perf_event_config.proto |
| |
| // Begin of protos/perfetto/config/statsd/atom_ids.proto |
| |
| // This enum is obtained by post-processing |
| // AOSP/frameworks/proto_logging/stats/atoms.proto through |
| // AOSP/external/perfetto/tools/update-statsd-descriptor, which extracts one |
| // enum value for each proto field defined in the upstream atoms.proto. |
| enum AtomId { |
| ATOM_UNSPECIFIED = 0; |
| ATOM_BLE_SCAN_STATE_CHANGED = 2; |
| ATOM_PROCESS_STATE_CHANGED = 3; |
| ATOM_BLE_SCAN_RESULT_RECEIVED = 4; |
| ATOM_SENSOR_STATE_CHANGED = 5; |
| ATOM_GPS_SCAN_STATE_CHANGED = 6; |
| ATOM_SYNC_STATE_CHANGED = 7; |
| ATOM_SCHEDULED_JOB_STATE_CHANGED = 8; |
| ATOM_SCREEN_BRIGHTNESS_CHANGED = 9; |
| ATOM_WAKELOCK_STATE_CHANGED = 10; |
| ATOM_LONG_PARTIAL_WAKELOCK_STATE_CHANGED = 11; |
| ATOM_MOBILE_RADIO_POWER_STATE_CHANGED = 12; |
| ATOM_WIFI_RADIO_POWER_STATE_CHANGED = 13; |
| ATOM_ACTIVITY_MANAGER_SLEEP_STATE_CHANGED = 14; |
| ATOM_MEMORY_FACTOR_STATE_CHANGED = 15; |
| ATOM_EXCESSIVE_CPU_USAGE_REPORTED = 16; |
| ATOM_CACHED_KILL_REPORTED = 17; |
| ATOM_PROCESS_MEMORY_STAT_REPORTED = 18; |
| ATOM_LAUNCHER_EVENT = 19; |
| ATOM_BATTERY_SAVER_MODE_STATE_CHANGED = 20; |
| ATOM_DEVICE_IDLE_MODE_STATE_CHANGED = 21; |
| ATOM_DEVICE_IDLING_MODE_STATE_CHANGED = 22; |
| ATOM_AUDIO_STATE_CHANGED = 23; |
| ATOM_MEDIA_CODEC_STATE_CHANGED = 24; |
| ATOM_CAMERA_STATE_CHANGED = 25; |
| ATOM_FLASHLIGHT_STATE_CHANGED = 26; |
| ATOM_UID_PROCESS_STATE_CHANGED = 27; |
| ATOM_PROCESS_LIFE_CYCLE_STATE_CHANGED = 28; |
| ATOM_SCREEN_STATE_CHANGED = 29; |
| ATOM_BATTERY_LEVEL_CHANGED = 30; |
| ATOM_CHARGING_STATE_CHANGED = 31; |
| ATOM_PLUGGED_STATE_CHANGED = 32; |
| ATOM_INTERACTIVE_STATE_CHANGED = 33; |
| ATOM_TOUCH_EVENT_REPORTED = 34; |
| ATOM_WAKEUP_ALARM_OCCURRED = 35; |
| ATOM_KERNEL_WAKEUP_REPORTED = 36; |
| ATOM_WIFI_LOCK_STATE_CHANGED = 37; |
| ATOM_WIFI_SIGNAL_STRENGTH_CHANGED = 38; |
| ATOM_WIFI_SCAN_STATE_CHANGED = 39; |
| ATOM_PHONE_SIGNAL_STRENGTH_CHANGED = 40; |
| ATOM_SETTING_CHANGED = 41; |
| ATOM_ACTIVITY_FOREGROUND_STATE_CHANGED = 42; |
| ATOM_ISOLATED_UID_CHANGED = 43; |
| ATOM_PACKET_WAKEUP_OCCURRED = 44; |
| ATOM_WALL_CLOCK_TIME_SHIFTED = 45; |
| ATOM_ANOMALY_DETECTED = 46; |
| ATOM_APP_BREADCRUMB_REPORTED = 47; |
| ATOM_APP_START_OCCURRED = 48; |
| ATOM_APP_START_CANCELED = 49; |
| ATOM_APP_START_FULLY_DRAWN = 50; |
| ATOM_LMK_KILL_OCCURRED = 51; |
| ATOM_PICTURE_IN_PICTURE_STATE_CHANGED = 52; |
| ATOM_WIFI_MULTICAST_LOCK_STATE_CHANGED = 53; |
| ATOM_LMK_STATE_CHANGED = 54; |
| ATOM_APP_START_MEMORY_STATE_CAPTURED = 55; |
| ATOM_SHUTDOWN_SEQUENCE_REPORTED = 56; |
| ATOM_BOOT_SEQUENCE_REPORTED = 57; |
| ATOM_DAVEY_OCCURRED = 58; |
| ATOM_OVERLAY_STATE_CHANGED = 59; |
| ATOM_FOREGROUND_SERVICE_STATE_CHANGED = 60; |
| ATOM_CALL_STATE_CHANGED = 61; |
| ATOM_KEYGUARD_STATE_CHANGED = 62; |
| ATOM_KEYGUARD_BOUNCER_STATE_CHANGED = 63; |
| ATOM_KEYGUARD_BOUNCER_PASSWORD_ENTERED = 64; |
| ATOM_APP_DIED = 65; |
| ATOM_RESOURCE_CONFIGURATION_CHANGED = 66; |
| ATOM_BLUETOOTH_ENABLED_STATE_CHANGED = 67; |
| ATOM_BLUETOOTH_CONNECTION_STATE_CHANGED = 68; |
| ATOM_GPS_SIGNAL_QUALITY_CHANGED = 69; |
| ATOM_USB_CONNECTOR_STATE_CHANGED = 70; |
| ATOM_SPEAKER_IMPEDANCE_REPORTED = 71; |
| ATOM_HARDWARE_FAILED = 72; |
| ATOM_PHYSICAL_DROP_DETECTED = 73; |
| ATOM_CHARGE_CYCLES_REPORTED = 74; |
| ATOM_MOBILE_CONNECTION_STATE_CHANGED = 75; |
| ATOM_MOBILE_RADIO_TECHNOLOGY_CHANGED = 76; |
| ATOM_USB_DEVICE_ATTACHED = 77; |
| ATOM_APP_CRASH_OCCURRED = 78; |
| ATOM_ANR_OCCURRED = 79; |
| ATOM_WTF_OCCURRED = 80; |
| ATOM_LOW_MEM_REPORTED = 81; |
| ATOM_GENERIC_ATOM = 82; |
| ATOM_VIBRATOR_STATE_CHANGED = 84; |
| ATOM_DEFERRED_JOB_STATS_REPORTED = 85; |
| ATOM_THERMAL_THROTTLING = 86; |
| ATOM_BIOMETRIC_ACQUIRED = 87; |
| ATOM_BIOMETRIC_AUTHENTICATED = 88; |
| ATOM_BIOMETRIC_ERROR_OCCURRED = 89; |
| ATOM_UI_EVENT_REPORTED = 90; |
| ATOM_BATTERY_HEALTH_SNAPSHOT = 91; |
| ATOM_SLOW_IO = 92; |
| ATOM_BATTERY_CAUSED_SHUTDOWN = 93; |
| ATOM_PHONE_SERVICE_STATE_CHANGED = 94; |
| ATOM_PHONE_STATE_CHANGED = 95; |
| ATOM_USER_RESTRICTION_CHANGED = 96; |
| ATOM_SETTINGS_UI_CHANGED = 97; |
| ATOM_CONNECTIVITY_STATE_CHANGED = 98; |
| ATOM_SERVICE_STATE_CHANGED = 99; |
| ATOM_SERVICE_LAUNCH_REPORTED = 100; |
| ATOM_FLAG_FLIP_UPDATE_OCCURRED = 101; |
| ATOM_BINARY_PUSH_STATE_CHANGED = 102; |
| ATOM_DEVICE_POLICY_EVENT = 103; |
| ATOM_DOCS_UI_FILE_OP_CANCELED = 104; |
| ATOM_DOCS_UI_FILE_OP_COPY_MOVE_MODE_REPORTED = 105; |
| ATOM_DOCS_UI_FILE_OP_FAILURE = 106; |
| ATOM_DOCS_UI_PROVIDER_FILE_OP = 107; |
| ATOM_DOCS_UI_INVALID_SCOPED_ACCESS_REQUEST = 108; |
| ATOM_DOCS_UI_LAUNCH_REPORTED = 109; |
| ATOM_DOCS_UI_ROOT_VISITED = 110; |
| ATOM_DOCS_UI_STARTUP_MS = 111; |
| ATOM_DOCS_UI_USER_ACTION_REPORTED = 112; |
| ATOM_WIFI_ENABLED_STATE_CHANGED = 113; |
| ATOM_WIFI_RUNNING_STATE_CHANGED = 114; |
| ATOM_APP_COMPACTED = 115; |
| ATOM_NETWORK_DNS_EVENT_REPORTED = 116; |
| ATOM_DOCS_UI_PICKER_LAUNCHED_FROM_REPORTED = 117; |
| ATOM_DOCS_UI_PICK_RESULT_REPORTED = 118; |
| ATOM_DOCS_UI_SEARCH_MODE_REPORTED = 119; |
| ATOM_DOCS_UI_SEARCH_TYPE_REPORTED = 120; |
| ATOM_DATA_STALL_EVENT = 121; |
| ATOM_RESCUE_PARTY_RESET_REPORTED = 122; |
| ATOM_SIGNED_CONFIG_REPORTED = 123; |
| ATOM_GNSS_NI_EVENT_REPORTED = 124; |
| ATOM_BLUETOOTH_LINK_LAYER_CONNECTION_EVENT = 125; |
| ATOM_BLUETOOTH_ACL_CONNECTION_STATE_CHANGED = 126; |
| ATOM_BLUETOOTH_SCO_CONNECTION_STATE_CHANGED = 127; |
| ATOM_APP_DOWNGRADED = 128; |
| ATOM_APP_OPTIMIZED_AFTER_DOWNGRADED = 129; |
| ATOM_LOW_STORAGE_STATE_CHANGED = 130; |
| ATOM_GNSS_NFW_NOTIFICATION_REPORTED = 131; |
| ATOM_GNSS_CONFIGURATION_REPORTED = 132; |
| ATOM_USB_PORT_OVERHEAT_EVENT_REPORTED = 133; |
| ATOM_NFC_ERROR_OCCURRED = 134; |
| ATOM_NFC_STATE_CHANGED = 135; |
| ATOM_NFC_BEAM_OCCURRED = 136; |
| ATOM_NFC_CARDEMULATION_OCCURRED = 137; |
| ATOM_NFC_TAG_OCCURRED = 138; |
| ATOM_NFC_HCE_TRANSACTION_OCCURRED = 139; |
| ATOM_SE_STATE_CHANGED = 140; |
| ATOM_SE_OMAPI_REPORTED = 141; |
| ATOM_BROADCAST_DISPATCH_LATENCY_REPORTED = 142; |
| ATOM_ATTENTION_MANAGER_SERVICE_RESULT_REPORTED = 143; |
| ATOM_ADB_CONNECTION_CHANGED = 144; |
| ATOM_SPEECH_DSP_STAT_REPORTED = 145; |
| ATOM_USB_CONTAMINANT_REPORTED = 146; |
| ATOM_WATCHDOG_ROLLBACK_OCCURRED = 147; |
| ATOM_BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED = 148; |
| ATOM_BUBBLE_UI_CHANGED = 149; |
| ATOM_SCHEDULED_JOB_CONSTRAINT_CHANGED = 150; |
| ATOM_BLUETOOTH_ACTIVE_DEVICE_CHANGED = 151; |
| ATOM_BLUETOOTH_A2DP_PLAYBACK_STATE_CHANGED = 152; |
| ATOM_BLUETOOTH_A2DP_CODEC_CONFIG_CHANGED = 153; |
| ATOM_BLUETOOTH_A2DP_CODEC_CAPABILITY_CHANGED = 154; |
| ATOM_BLUETOOTH_A2DP_AUDIO_UNDERRUN_REPORTED = 155; |
| ATOM_BLUETOOTH_A2DP_AUDIO_OVERRUN_REPORTED = 156; |
| ATOM_BLUETOOTH_DEVICE_RSSI_REPORTED = 157; |
| ATOM_BLUETOOTH_DEVICE_FAILED_CONTACT_COUNTER_REPORTED = 158; |
| ATOM_BLUETOOTH_DEVICE_TX_POWER_LEVEL_REPORTED = 159; |
| ATOM_BLUETOOTH_HCI_TIMEOUT_REPORTED = 160; |
| ATOM_BLUETOOTH_QUALITY_REPORT_REPORTED = 161; |
| ATOM_BLUETOOTH_DEVICE_INFO_REPORTED = 162; |
| ATOM_BLUETOOTH_REMOTE_VERSION_INFO_REPORTED = 163; |
| ATOM_BLUETOOTH_SDP_ATTRIBUTE_REPORTED = 164; |
| ATOM_BLUETOOTH_BOND_STATE_CHANGED = 165; |
| ATOM_BLUETOOTH_CLASSIC_PAIRING_EVENT_REPORTED = 166; |
| ATOM_BLUETOOTH_SMP_PAIRING_EVENT_REPORTED = 167; |
| ATOM_SCREEN_TIMEOUT_EXTENSION_REPORTED = 168; |
| ATOM_PROCESS_START_TIME = 169; |
| ATOM_PERMISSION_GRANT_REQUEST_RESULT_REPORTED = 170; |
| ATOM_BLUETOOTH_SOCKET_CONNECTION_STATE_CHANGED = 171; |
| ATOM_DEVICE_IDENTIFIER_ACCESS_DENIED = 172; |
| ATOM_BUBBLE_DEVELOPER_ERROR_REPORTED = 173; |
| ATOM_ASSIST_GESTURE_STAGE_REPORTED = 174; |
| ATOM_ASSIST_GESTURE_FEEDBACK_REPORTED = 175; |
| ATOM_ASSIST_GESTURE_PROGRESS_REPORTED = 176; |
| ATOM_TOUCH_GESTURE_CLASSIFIED = 177; |
| ATOM_HIDDEN_API_USED = 178; |
| ATOM_STYLE_UI_CHANGED = 179; |
| ATOM_PRIVACY_INDICATORS_INTERACTED = 180; |
| ATOM_APP_INSTALL_ON_EXTERNAL_STORAGE_REPORTED = 181; |
| ATOM_NETWORK_STACK_REPORTED = 182; |
| ATOM_APP_MOVED_STORAGE_REPORTED = 183; |
| ATOM_BIOMETRIC_ENROLLED = 184; |
| ATOM_SYSTEM_SERVER_WATCHDOG_OCCURRED = 185; |
| ATOM_TOMB_STONE_OCCURRED = 186; |
| ATOM_BLUETOOTH_CLASS_OF_DEVICE_REPORTED = 187; |
| ATOM_INTELLIGENCE_EVENT_REPORTED = 188; |
| ATOM_THERMAL_THROTTLING_SEVERITY_STATE_CHANGED = 189; |
| ATOM_ROLE_REQUEST_RESULT_REPORTED = 190; |
| ATOM_MEDIAMETRICS_AUDIOPOLICY_REPORTED = 191; |
| ATOM_MEDIAMETRICS_AUDIORECORD_REPORTED = 192; |
| ATOM_MEDIAMETRICS_AUDIOTHREAD_REPORTED = 193; |
| ATOM_MEDIAMETRICS_AUDIOTRACK_REPORTED = 194; |
| ATOM_MEDIAMETRICS_CODEC_REPORTED = 195; |
| ATOM_MEDIAMETRICS_DRM_WIDEVINE_REPORTED = 196; |
| ATOM_MEDIAMETRICS_EXTRACTOR_REPORTED = 197; |
| ATOM_MEDIAMETRICS_MEDIADRM_REPORTED = 198; |
| ATOM_MEDIAMETRICS_NUPLAYER_REPORTED = 199; |
| ATOM_MEDIAMETRICS_RECORDER_REPORTED = 200; |
| ATOM_MEDIAMETRICS_DRMMANAGER_REPORTED = 201; |
| ATOM_CAR_POWER_STATE_CHANGED = 203; |
| ATOM_GARAGE_MODE_INFO = 204; |
| ATOM_TEST_ATOM_REPORTED = 205; |
| ATOM_CONTENT_CAPTURE_CALLER_MISMATCH_REPORTED = 206; |
| ATOM_CONTENT_CAPTURE_SERVICE_EVENTS = 207; |
| ATOM_CONTENT_CAPTURE_SESSION_EVENTS = 208; |
| ATOM_CONTENT_CAPTURE_FLUSHED = 209; |
| ATOM_LOCATION_MANAGER_API_USAGE_REPORTED = 210; |
| ATOM_REVIEW_PERMISSIONS_FRAGMENT_RESULT_REPORTED = 211; |
| ATOM_RUNTIME_PERMISSIONS_UPGRADE_RESULT = 212; |
| ATOM_GRANT_PERMISSIONS_ACTIVITY_BUTTON_ACTIONS = 213; |
| ATOM_LOCATION_ACCESS_CHECK_NOTIFICATION_ACTION = 214; |
| ATOM_APP_PERMISSION_FRAGMENT_ACTION_REPORTED = 215; |
| ATOM_APP_PERMISSION_FRAGMENT_VIEWED = 216; |
| ATOM_APP_PERMISSIONS_FRAGMENT_VIEWED = 217; |
| ATOM_PERMISSION_APPS_FRAGMENT_VIEWED = 218; |
| ATOM_TEXT_SELECTION_EVENT = 219; |
| ATOM_TEXT_LINKIFY_EVENT = 220; |
| ATOM_CONVERSATION_ACTIONS_EVENT = 221; |
| ATOM_LANGUAGE_DETECTION_EVENT = 222; |
| ATOM_EXCLUSION_RECT_STATE_CHANGED = 223; |
| ATOM_BACK_GESTURE_REPORTED_REPORTED = 224; |
| ATOM_UPDATE_ENGINE_UPDATE_ATTEMPT_REPORTED = 225; |
| ATOM_UPDATE_ENGINE_SUCCESSFUL_UPDATE_REPORTED = 226; |
| ATOM_CAMERA_ACTION_EVENT = 227; |
| ATOM_APP_COMPATIBILITY_CHANGE_REPORTED = 228; |
| ATOM_PERFETTO_UPLOADED = 229; |
| ATOM_VMS_CLIENT_CONNECTION_STATE_CHANGED = 230; |
| ATOM_MEDIA_PROVIDER_SCAN_OCCURRED = 233; |
| ATOM_MEDIA_CONTENT_DELETED = 234; |
| ATOM_MEDIA_PROVIDER_PERMISSION_REQUESTED = 235; |
| ATOM_MEDIA_PROVIDER_SCHEMA_CHANGED = 236; |
| ATOM_MEDIA_PROVIDER_IDLE_MAINTENANCE_FINISHED = 237; |
| ATOM_REBOOT_ESCROW_RECOVERY_REPORTED = 238; |
| ATOM_BOOT_TIME_EVENT_DURATION_REPORTED = 239; |
| ATOM_BOOT_TIME_EVENT_ELAPSED_TIME_REPORTED = 240; |
| ATOM_BOOT_TIME_EVENT_UTC_TIME_REPORTED = 241; |
| ATOM_BOOT_TIME_EVENT_ERROR_CODE_REPORTED = 242; |
| ATOM_USERSPACE_REBOOT_REPORTED = 243; |
| ATOM_NOTIFICATION_REPORTED = 244; |
| ATOM_NOTIFICATION_PANEL_REPORTED = 245; |
| ATOM_NOTIFICATION_CHANNEL_MODIFIED = 246; |
| ATOM_INTEGRITY_CHECK_RESULT_REPORTED = 247; |
| ATOM_INTEGRITY_RULES_PUSHED = 248; |
| ATOM_CB_MESSAGE_REPORTED = 249; |
| ATOM_CB_MESSAGE_ERROR = 250; |
| ATOM_WIFI_HEALTH_STAT_REPORTED = 251; |
| ATOM_WIFI_FAILURE_STAT_REPORTED = 252; |
| ATOM_WIFI_CONNECTION_RESULT_REPORTED = 253; |
| ATOM_APP_FREEZE_CHANGED = 254; |
| ATOM_SNAPSHOT_MERGE_REPORTED = 255; |
| ATOM_FOREGROUND_SERVICE_APP_OP_SESSION_ENDED = 256; |
| ATOM_DISPLAY_JANK_REPORTED = 257; |
| ATOM_APP_STANDBY_BUCKET_CHANGED = 258; |
| ATOM_SHARESHEET_STARTED = 259; |
| ATOM_RANKING_SELECTED = 260; |
| ATOM_TVSETTINGS_UI_INTERACTED = 261; |
| ATOM_LAUNCHER_SNAPSHOT = 262; |
| ATOM_PACKAGE_INSTALLER_V2_REPORTED = 263; |
| ATOM_USER_LIFECYCLE_JOURNEY_REPORTED = 264; |
| ATOM_USER_LIFECYCLE_EVENT_OCCURRED = 265; |
| ATOM_ACCESSIBILITY_SHORTCUT_REPORTED = 266; |
| ATOM_ACCESSIBILITY_SERVICE_REPORTED = 267; |
| ATOM_DOCS_UI_DRAG_AND_DROP_REPORTED = 268; |
| ATOM_APP_USAGE_EVENT_OCCURRED = 269; |
| ATOM_AUTO_REVOKE_NOTIFICATION_CLICKED = 270; |
| ATOM_AUTO_REVOKE_FRAGMENT_APP_VIEWED = 271; |
| ATOM_AUTO_REVOKED_APP_INTERACTION = 272; |
| ATOM_APP_PERMISSION_GROUPS_FRAGMENT_AUTO_REVOKE_ACTION = 273; |
| ATOM_EVS_USAGE_STATS_REPORTED = 274; |
| ATOM_AUDIO_POWER_USAGE_DATA_REPORTED = 275; |
| ATOM_TV_TUNER_STATE_CHANGED = 276; |
| ATOM_MEDIAOUTPUT_OP_SWITCH_REPORTED = 277; |
| ATOM_CB_MESSAGE_FILTERED = 278; |
| ATOM_TV_TUNER_DVR_STATUS = 279; |
| ATOM_TV_CAS_SESSION_OPEN_STATUS = 280; |
| ATOM_ASSISTANT_INVOCATION_REPORTED = 281; |
| ATOM_DISPLAY_WAKE_REPORTED = 282; |
| ATOM_CAR_USER_HAL_MODIFY_USER_REQUEST_REPORTED = 283; |
| ATOM_CAR_USER_HAL_MODIFY_USER_RESPONSE_REPORTED = 284; |
| ATOM_CAR_USER_HAL_POST_SWITCH_RESPONSE_REPORTED = 285; |
| ATOM_CAR_USER_HAL_INITIAL_USER_INFO_REQUEST_REPORTED = 286; |
| ATOM_CAR_USER_HAL_INITIAL_USER_INFO_RESPONSE_REPORTED = 287; |
| ATOM_CAR_USER_HAL_USER_ASSOCIATION_REQUEST_REPORTED = 288; |
| ATOM_CAR_USER_HAL_SET_USER_ASSOCIATION_RESPONSE_REPORTED = 289; |
| ATOM_NETWORK_IP_PROVISIONING_REPORTED = 290; |
| ATOM_NETWORK_DHCP_RENEW_REPORTED = 291; |
| ATOM_NETWORK_VALIDATION_REPORTED = 292; |
| ATOM_NETWORK_STACK_QUIRK_REPORTED = 293; |
| ATOM_MEDIAMETRICS_AUDIORECORDDEVICEUSAGE_REPORTED = 294; |
| ATOM_MEDIAMETRICS_AUDIOTHREADDEVICEUSAGE_REPORTED = 295; |
| ATOM_MEDIAMETRICS_AUDIOTRACKDEVICEUSAGE_REPORTED = 296; |
| ATOM_MEDIAMETRICS_AUDIODEVICECONNECTION_REPORTED = 297; |
| ATOM_BLOB_COMMITTED = 298; |
| ATOM_BLOB_LEASED = 299; |
| ATOM_BLOB_OPENED = 300; |
| ATOM_CONTACTS_PROVIDER_STATUS_REPORTED = 301; |
| ATOM_KEYSTORE_KEY_EVENT_REPORTED = 302; |
| ATOM_NETWORK_TETHERING_REPORTED = 303; |
| ATOM_IME_TOUCH_REPORTED = 304; |
| ATOM_UI_INTERACTION_FRAME_INFO_REPORTED = 305; |
| ATOM_UI_ACTION_LATENCY_REPORTED = 306; |
| ATOM_WIFI_DISCONNECT_REPORTED = 307; |
| ATOM_WIFI_CONNECTION_STATE_CHANGED = 308; |
| ATOM_HDMI_CEC_ACTIVE_SOURCE_CHANGED = 309; |
| ATOM_HDMI_CEC_MESSAGE_REPORTED = 310; |
| ATOM_AIRPLANE_MODE = 311; |
| ATOM_MODEM_RESTART = 312; |
| ATOM_CARRIER_ID_MISMATCH_REPORTED = 313; |
| ATOM_CARRIER_ID_TABLE_UPDATED = 314; |
| ATOM_DATA_STALL_RECOVERY_REPORTED = 315; |
| ATOM_MEDIAMETRICS_MEDIAPARSER_REPORTED = 316; |
| ATOM_TLS_HANDSHAKE_REPORTED = 317; |
| ATOM_TEXT_CLASSIFIER_API_USAGE_REPORTED = 318; |
| ATOM_CAR_WATCHDOG_KILL_STATS_REPORTED = 319; |
| ATOM_MEDIAMETRICS_PLAYBACK_REPORTED = 320; |
| ATOM_MEDIA_NETWORK_INFO_CHANGED = 321; |
| ATOM_MEDIA_PLAYBACK_STATE_CHANGED = 322; |
| ATOM_MEDIA_PLAYBACK_ERROR_REPORTED = 323; |
| ATOM_MEDIA_PLAYBACK_TRACK_CHANGED = 324; |
| ATOM_WIFI_SCAN_REPORTED = 325; |
| ATOM_WIFI_PNO_SCAN_REPORTED = 326; |
| ATOM_TIF_TUNE_CHANGED = 327; |
| ATOM_AUTO_ROTATE_REPORTED = 328; |
| ATOM_PERFETTO_TRIGGER = 329; |
| ATOM_TRANSCODING_DATA = 330; |
| ATOM_IMS_SERVICE_ENTITLEMENT_UPDATED = 331; |
| ATOM_DEVICE_ROTATED = 333; |
| ATOM_SIM_SPECIFIC_SETTINGS_RESTORED = 334; |
| ATOM_TEXT_CLASSIFIER_DOWNLOAD_REPORTED = 335; |
| ATOM_PIN_STORAGE_EVENT = 336; |
| ATOM_FACE_DOWN_REPORTED = 337; |
| ATOM_BLUETOOTH_HAL_CRASH_REASON_REPORTED = 338; |
| ATOM_REBOOT_ESCROW_PREPARATION_REPORTED = 339; |
| ATOM_REBOOT_ESCROW_LSKF_CAPTURE_REPORTED = 340; |
| ATOM_REBOOT_ESCROW_REBOOT_REPORTED = 341; |
| ATOM_BINDER_LATENCY_REPORTED = 342; |
| ATOM_MEDIAMETRICS_AAUDIOSTREAM_REPORTED = 343; |
| ATOM_MEDIA_TRANSCODING_SESSION_ENDED = 344; |
| ATOM_MAGNIFICATION_USAGE_REPORTED = 345; |
| ATOM_MAGNIFICATION_MODE_WITH_IME_ON_REPORTED = 346; |
| ATOM_APP_SEARCH_CALL_STATS_REPORTED = 347; |
| ATOM_APP_SEARCH_PUT_DOCUMENT_STATS_REPORTED = 348; |
| ATOM_DEVICE_CONTROL_CHANGED = 349; |
| ATOM_DEVICE_STATE_CHANGED = 350; |
| ATOM_INPUTDEVICE_REGISTERED = 351; |
| ATOM_SMARTSPACE_CARD_REPORTED = 352; |
| ATOM_AUTH_PROMPT_AUTHENTICATE_INVOKED = 353; |
| ATOM_AUTH_MANAGER_CAN_AUTHENTICATE_INVOKED = 354; |
| ATOM_AUTH_ENROLL_ACTION_INVOKED = 355; |
| ATOM_AUTH_DEPRECATED_API_USED = 356; |
| ATOM_UNATTENDED_REBOOT_OCCURRED = 357; |
| ATOM_LONG_REBOOT_BLOCKING_REPORTED = 358; |
| ATOM_LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED = 359; |
| ATOM_FDTRACK_EVENT_OCCURRED = 364; |
| ATOM_TIMEOUT_AUTO_EXTENDED_REPORTED = 365; |
| ATOM_ALARM_BATCH_DELIVERED = 367; |
| ATOM_ALARM_SCHEDULED = 368; |
| ATOM_CAR_WATCHDOG_IO_OVERUSE_STATS_REPORTED = 369; |
| ATOM_USER_LEVEL_HIBERNATION_STATE_CHANGED = 370; |
| ATOM_APP_SEARCH_INITIALIZE_STATS_REPORTED = 371; |
| ATOM_APP_SEARCH_QUERY_STATS_REPORTED = 372; |
| ATOM_APP_PROCESS_DIED = 373; |
| ATOM_NETWORK_IP_REACHABILITY_MONITOR_REPORTED = 374; |
| ATOM_SLOW_INPUT_EVENT_REPORTED = 375; |
| ATOM_ANR_OCCURRED_PROCESSING_STARTED = 376; |
| ATOM_APP_SEARCH_REMOVE_STATS_REPORTED = 377; |
| ATOM_MEDIA_CODEC_REPORTED = 378; |
| ATOM_PERMISSION_USAGE_FRAGMENT_INTERACTION = 379; |
| ATOM_PERMISSION_DETAILS_INTERACTION = 380; |
| ATOM_PRIVACY_SENSOR_TOGGLE_INTERACTION = 381; |
| ATOM_PRIVACY_TOGGLE_DIALOG_INTERACTION = 382; |
| ATOM_APP_SEARCH_OPTIMIZE_STATS_REPORTED = 383; |
| ATOM_NON_A11Y_TOOL_SERVICE_WARNING_REPORT = 384; |
| ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385; |
| ATOM_APP_COMPAT_STATE_CHANGED = 386; |
| ATOM_SIZE_COMPAT_RESTART_BUTTON_EVENT_REPORTED = 387; |
| ATOM_SPLITSCREEN_UI_CHANGED = 388; |
| ATOM_NETWORK_DNS_HANDSHAKE_REPORTED = 389; |
| ATOM_BLUETOOTH_CODE_PATH_COUNTER = 390; |
| ATOM_BLUETOOTH_LE_BATCH_SCAN_REPORT_DELAY = 392; |
| ATOM_ACCESSIBILITY_FLOATING_MENU_UI_CHANGED = 393; |
| ATOM_NEURALNETWORKS_COMPILATION_COMPLETED = 394; |
| ATOM_NEURALNETWORKS_EXECUTION_COMPLETED = 395; |
| ATOM_NEURALNETWORKS_COMPILATION_FAILED = 396; |
| ATOM_NEURALNETWORKS_EXECUTION_FAILED = 397; |
| ATOM_CONTEXT_HUB_BOOTED = 398; |
| ATOM_CONTEXT_HUB_RESTARTED = 399; |
| ATOM_CONTEXT_HUB_LOADED_NANOAPP_SNAPSHOT_REPORTED = 400; |
| ATOM_CHRE_CODE_DOWNLOAD_TRANSACTED = 401; |
| ATOM_UWB_SESSION_INITED = 402; |
| ATOM_UWB_SESSION_CLOSED = 403; |
| ATOM_UWB_FIRST_RANGING_RECEIVED = 404; |
| ATOM_UWB_RANGING_MEASUREMENT_RECEIVED = 405; |
| ATOM_TEXT_CLASSIFIER_DOWNLOAD_WORK_SCHEDULED = 406; |
| ATOM_TEXT_CLASSIFIER_DOWNLOAD_WORK_COMPLETED = 407; |
| ATOM_CLIPBOARD_CLEARED = 408; |
| ATOM_VM_CREATION_REQUESTED = 409; |
| ATOM_NEARBY_DEVICE_SCAN_STATE_CHANGED = 410; |
| ATOM_CAMERA_COMPAT_CONTROL_EVENT_REPORTED = 411; |
| ATOM_APPLICATION_LOCALES_CHANGED = 412; |
| ATOM_MEDIAMETRICS_AUDIOTRACKSTATUS_REPORTED = 413; |
| ATOM_FOLD_STATE_DURATION_REPORTED = 414; |
| ATOM_LOCATION_TIME_ZONE_PROVIDER_CONTROLLER_STATE_CHANGED = 415; |
| ATOM_DISPLAY_HBM_STATE_CHANGED = 416; |
| ATOM_DISPLAY_HBM_BRIGHTNESS_CHANGED = 417; |
| ATOM_PERSISTENT_URI_PERMISSIONS_FLUSHED = 418; |
| ATOM_EARLY_BOOT_COMP_OS_ARTIFACTS_CHECK_REPORTED = 419; |
| ATOM_VBMETA_DIGEST_REPORTED = 420; |
| ATOM_APEX_INFO_GATHERED = 421; |
| ATOM_PVM_INFO_GATHERED = 422; |
| ATOM_WEAR_SETTINGS_UI_INTERACTED = 423; |
| ATOM_TRACING_SERVICE_REPORT_EVENT = 424; |
| ATOM_MEDIAMETRICS_AUDIORECORDSTATUS_REPORTED = 425; |
| ATOM_LAUNCHER_LATENCY = 426; |
| ATOM_DROPBOX_ENTRY_DROPPED = 427; |
| ATOM_WIFI_P2P_CONNECTION_REPORTED = 428; |
| ATOM_GAME_STATE_CHANGED = 429; |
| ATOM_HOTWORD_DETECTOR_CREATE_REQUESTED = 430; |
| ATOM_HOTWORD_DETECTION_SERVICE_INIT_RESULT_REPORTED = 431; |
| ATOM_HOTWORD_DETECTION_SERVICE_RESTARTED = 432; |
| ATOM_HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED = 433; |
| ATOM_HOTWORD_DETECTOR_EVENTS = 434; |
| ATOM_AD_SERVICES_API_CALLED = 435; |
| ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436; |
| ATOM_BOOT_COMPLETED_BROADCAST_COMPLETION_LATENCY_REPORTED = 437; |
| ATOM_CONTACTS_INDEXER_UPDATE_STATS_REPORTED = 440; |
| ATOM_APP_BACKGROUND_RESTRICTIONS_INFO = 441; |
| ATOM_MMS_SMS_PROVIDER_GET_THREAD_ID_FAILED = 442; |
| ATOM_MMS_SMS_DATABASE_HELPER_ON_UPGRADE_FAILED = 443; |
| ATOM_PERMISSION_REMINDER_NOTIFICATION_INTERACTED = 444; |
| ATOM_RECENT_PERMISSION_DECISIONS_INTERACTED = 445; |
| ATOM_GNSS_PSDS_DOWNLOAD_REPORTED = 446; |
| ATOM_LE_AUDIO_CONNECTION_SESSION_REPORTED = 447; |
| ATOM_LE_AUDIO_BROADCAST_SESSION_REPORTED = 448; |
| ATOM_DREAM_UI_EVENT_REPORTED = 449; |
| ATOM_TASK_MANAGER_EVENT_REPORTED = 450; |
| ATOM_CDM_ASSOCIATION_ACTION = 451; |
| ATOM_MAGNIFICATION_TRIPLE_TAP_AND_HOLD_ACTIVATED_SESSION_REPORTED = 452; |
| ATOM_MAGNIFICATION_FOLLOW_TYPING_FOCUS_ACTIVATED_SESSION_REPORTED = 453; |
| ATOM_ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED = 454; |
| ATOM_WIFI_SETUP_FAILURE_CRASH_REPORTED = 455; |
| ATOM_UWB_DEVICE_ERROR_REPORTED = 456; |
| ATOM_ISOLATED_COMPILATION_SCHEDULED = 457; |
| ATOM_ISOLATED_COMPILATION_ENDED = 458; |
| ATOM_ONS_OPPORTUNISTIC_ESIM_PROVISIONING_COMPLETE = 459; |
| ATOM_SYSTEM_SERVER_PRE_WATCHDOG_OCCURRED = 460; |
| ATOM_TELEPHONY_ANOMALY_DETECTED = 461; |
| ATOM_LETTERBOX_POSITION_CHANGED = 462; |
| ATOM_REMOTE_KEY_PROVISIONING_ATTEMPT = 463; |
| ATOM_REMOTE_KEY_PROVISIONING_NETWORK_INFO = 464; |
| ATOM_REMOTE_KEY_PROVISIONING_TIMING = 465; |
| ATOM_MEDIAOUTPUT_OP_INTERACTION_REPORT = 466; |
| ATOM_SYNC_EXEMPTION_OCCURRED = 468; |
| ATOM_AUTOFILL_PRESENTATION_EVENT_REPORTED = 469; |
| ATOM_DOCK_STATE_CHANGED = 470; |
| ATOM_SAFETY_SOURCE_STATE_COLLECTED = 471; |
| ATOM_SAFETY_CENTER_SYSTEM_EVENT_REPORTED = 472; |
| ATOM_SAFETY_CENTER_INTERACTION_REPORTED = 473; |
| ATOM_SETTINGS_PROVIDER_SETTING_CHANGED = 474; |
| ATOM_BROADCAST_DELIVERY_EVENT_REPORTED = 475; |
| ATOM_SERVICE_REQUEST_EVENT_REPORTED = 476; |
| ATOM_PROVIDER_ACQUISITION_EVENT_REPORTED = 477; |
| ATOM_BLUETOOTH_DEVICE_NAME_REPORTED = 478; |
| ATOM_CB_CONFIG_UPDATED = 479; |
| ATOM_CB_MODULE_ERROR_REPORTED = 480; |
| ATOM_CB_SERVICE_FEATURE_CHANGED = 481; |
| ATOM_CB_RECEIVER_FEATURE_CHANGED = 482; |
| ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483; |
| ATOM_PRIVACY_SIGNAL_NOTIFICATION_INTERACTION = 484; |
| ATOM_PRIVACY_SIGNAL_ISSUE_CARD_INTERACTION = 485; |
| ATOM_PRIVACY_SIGNALS_JOB_FAILURE = 486; |
| ATOM_VIBRATION_REPORTED = 487; |
| ATOM_UWB_RANGING_START = 489; |
| ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490; |
| ATOM_APP_COMPACTED_V2 = 491; |
| ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493; |
| ATOM_DISPLAY_BRIGHTNESS_CHANGED = 494; |
| ATOM_ACTIVITY_ACTION_BLOCKED = 495; |
| ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496; |
| ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497; |
| ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498; |
| ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499; |
| ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500; |
| ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501; |
| ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502; |
| ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503; |
| ATOM_NETWORK_DNS_SERVER_SUPPORT_REPORTED = 504; |
| ATOM_VM_BOOTED = 505; |
| ATOM_VM_EXITED = 506; |
| ATOM_AMBIENT_BRIGHTNESS_STATS_REPORTED = 507; |
| ATOM_MEDIAMETRICS_SPATIALIZERCAPABILITIES_REPORTED = 508; |
| ATOM_MEDIAMETRICS_SPATIALIZERDEVICEENABLED_REPORTED = 509; |
| ATOM_MEDIAMETRICS_HEADTRACKERDEVICEENABLED_REPORTED = 510; |
| ATOM_MEDIAMETRICS_HEADTRACKERDEVICESUPPORTED_REPORTED = 511; |
| ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512; |
| ATOM_HEARING_AID_INFO_REPORTED = 513; |
| ATOM_DEVICE_WIDE_JOB_CONSTRAINT_CHANGED = 514; |
| ATOM_AMBIENT_MODE_CHANGED = 515; |
| ATOM_ANR_LATENCY_REPORTED = 516; |
| ATOM_RESOURCE_API_INFO = 517; |
| ATOM_SYSTEM_DEFAULT_NETWORK_CHANGED = 518; |
| ATOM_IWLAN_SETUP_DATA_CALL_RESULT_REPORTED = 519; |
| ATOM_IWLAN_PDN_DISCONNECTED_REASON_REPORTED = 520; |
| ATOM_AIRPLANE_MODE_SESSION_REPORTED = 521; |
| ATOM_VM_CPU_STATUS_REPORTED = 522; |
| ATOM_VM_MEM_STATUS_REPORTED = 523; |
| ATOM_PACKAGE_INSTALLATION_SESSION_REPORTED = 524; |
| ATOM_DEFAULT_NETWORK_REMATCH_INFO = 525; |
| ATOM_NETWORK_SELECTION_PERFORMANCE = 526; |
| ATOM_NETWORK_NSD_REPORTED = 527; |
| ATOM_BLUETOOTH_DISCONNECTION_REASON_REPORTED = 529; |
| ATOM_BLUETOOTH_LOCAL_VERSIONS_REPORTED = 530; |
| ATOM_BLUETOOTH_REMOTE_SUPPORTED_FEATURES_REPORTED = 531; |
| ATOM_BLUETOOTH_LOCAL_SUPPORTED_FEATURES_REPORTED = 532; |
| ATOM_BLUETOOTH_GATT_APP_INFO = 533; |
| ATOM_BRIGHTNESS_CONFIGURATION_UPDATED = 534; |
| ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535; |
| ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536; |
| ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_LAUNCHED = 538; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FINISHED = 539; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_CONNECTION_REPORTED = 540; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_DEVICE_SCAN_TRIGGERED = 541; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FIRST_DEVICE_SCAN_LATENCY = 542; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_CONNECT_DEVICE_LATENCY = 543; |
| ATOM_PACKAGE_MANAGER_SNAPSHOT_REPORTED = 544; |
| ATOM_PACKAGE_MANAGER_APPS_FILTER_CACHE_BUILD_REPORTED = 545; |
| ATOM_PACKAGE_MANAGER_APPS_FILTER_CACHE_UPDATE_REPORTED = 546; |
| ATOM_LAUNCHER_IMPRESSION_EVENT = 547; |
| ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_ALL_DEVICES_SCAN_LATENCY = 549; |
| ATOM_WS_WATCH_FACE_EDITED = 551; |
| ATOM_WS_WATCH_FACE_FAVORITE_ACTION_REPORTED = 552; |
| ATOM_WS_WATCH_FACE_SET_ACTION_REPORTED = 553; |
| ATOM_PACKAGE_UNINSTALLATION_REPORTED = 554; |
| ATOM_GAME_MODE_CHANGED = 555; |
| ATOM_GAME_MODE_CONFIGURATION_CHANGED = 556; |
| ATOM_BEDTIME_MODE_STATE_CHANGED = 557; |
| ATOM_NETWORK_SLICE_SESSION_ENDED = 558; |
| ATOM_NETWORK_SLICE_DAILY_DATA_USAGE_REPORTED = 559; |
| ATOM_NFC_TAG_TYPE_OCCURRED = 560; |
| ATOM_NFC_AID_CONFLICT_OCCURRED = 561; |
| ATOM_NFC_READER_CONFLICT_OCCURRED = 562; |
| ATOM_WS_TILE_LIST_CHANGED = 563; |
| ATOM_GET_TYPE_ACCESSED_WITHOUT_PERMISSION = 564; |
| ATOM_MOBILE_BUNDLED_APP_INFO_GATHERED = 566; |
| ATOM_WS_WATCH_FACE_COMPLICATION_SET_CHANGED = 567; |
| ATOM_MEDIA_DRM_CREATED = 568; |
| ATOM_MEDIA_DRM_ERRORED = 569; |
| ATOM_MEDIA_DRM_SESSION_OPENED = 570; |
| ATOM_MEDIA_DRM_SESSION_CLOSED = 571; |
| ATOM_USER_SELECTED_RESOLUTION = 572; |
| ATOM_UNSAFE_INTENT_EVENT_REPORTED = 573; |
| ATOM_PERFORMANCE_HINT_SESSION_REPORTED = 574; |
| ATOM_MEDIAMETRICS_MIDI_DEVICE_CLOSE_REPORTED = 576; |
| ATOM_BIOMETRIC_TOUCH_REPORTED = 577; |
| ATOM_HOTWORD_AUDIO_EGRESS_EVENT_REPORTED = 578; |
| ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579; |
| ATOM_LOCATION_ENABLED_STATE_CHANGED = 580; |
| ATOM_IME_REQUEST_FINISHED = 581; |
| ATOM_USB_COMPLIANCE_WARNINGS_REPORTED = 582; |
| ATOM_APP_SUPPORTED_LOCALES_CHANGED = 583; |
| ATOM_GRAMMATICAL_INFLECTION_CHANGED = 584; |
| ATOM_MEDIA_PROVIDER_VOLUME_RECOVERY_REPORTED = 586; |
| ATOM_BIOMETRIC_PROPERTIES_COLLECTED = 587; |
| ATOM_KERNEL_WAKEUP_ATTRIBUTED = 588; |
| ATOM_SCREEN_STATE_CHANGED_V2 = 589; |
| ATOM_WS_BACKUP_ACTION_REPORTED = 590; |
| ATOM_WS_RESTORE_ACTION_REPORTED = 591; |
| ATOM_DEVICE_LOG_ACCESS_EVENT_REPORTED = 592; |
| ATOM_MEDIA_SESSION_UPDATED = 594; |
| ATOM_WEAR_OOBE_STATE_CHANGED = 595; |
| ATOM_WS_NOTIFICATION_UPDATED = 596; |
| ATOM_NETWORK_VALIDATION_FAILURE_STATS_DAILY_REPORTED = 601; |
| ATOM_WS_COMPLICATION_TAPPED = 602; |
| ATOM_WS_WEAR_TIME_SESSION = 610; |
| ATOM_WIFI_BYTES_TRANSFER = 10000; |
| ATOM_WIFI_BYTES_TRANSFER_BY_FG_BG = 10001; |
| ATOM_MOBILE_BYTES_TRANSFER = 10002; |
| ATOM_MOBILE_BYTES_TRANSFER_BY_FG_BG = 10003; |
| ATOM_BLUETOOTH_BYTES_TRANSFER = 10006; |
| ATOM_KERNEL_WAKELOCK = 10004; |
| ATOM_SUBSYSTEM_SLEEP_STATE = 10005; |
| ATOM_CPU_TIME_PER_UID = 10009; |
| ATOM_CPU_TIME_PER_UID_FREQ = 10010; |
| ATOM_WIFI_ACTIVITY_INFO = 10011; |
| ATOM_MODEM_ACTIVITY_INFO = 10012; |
| ATOM_BLUETOOTH_ACTIVITY_INFO = 10007; |
| ATOM_PROCESS_MEMORY_STATE = 10013; |
| ATOM_SYSTEM_ELAPSED_REALTIME = 10014; |
| ATOM_SYSTEM_UPTIME = 10015; |
| ATOM_CPU_ACTIVE_TIME = 10016; |
| ATOM_CPU_CLUSTER_TIME = 10017; |
| ATOM_DISK_SPACE = 10018; |
| ATOM_REMAINING_BATTERY_CAPACITY = 10019; |
| ATOM_FULL_BATTERY_CAPACITY = 10020; |
| ATOM_TEMPERATURE = 10021; |
| ATOM_BINDER_CALLS = 10022; |
| ATOM_BINDER_CALLS_EXCEPTIONS = 10023; |
| ATOM_LOOPER_STATS = 10024; |
| ATOM_DISK_STATS = 10025; |
| ATOM_DIRECTORY_USAGE = 10026; |
| ATOM_APP_SIZE = 10027; |
| ATOM_CATEGORY_SIZE = 10028; |
| ATOM_PROC_STATS = 10029; |
| ATOM_BATTERY_VOLTAGE = 10030; |
| ATOM_NUM_FINGERPRINTS_ENROLLED = 10031; |
| ATOM_DISK_IO = 10032; |
| ATOM_POWER_PROFILE = 10033; |
| ATOM_PROC_STATS_PKG_PROC = 10034; |
| ATOM_PROCESS_CPU_TIME = 10035; |
| ATOM_CPU_TIME_PER_THREAD_FREQ = 10037; |
| ATOM_ON_DEVICE_POWER_MEASUREMENT = 10038; |
| ATOM_DEVICE_CALCULATED_POWER_USE = 10039; |
| ATOM_PROCESS_MEMORY_HIGH_WATER_MARK = 10042; |
| ATOM_BATTERY_LEVEL = 10043; |
| ATOM_BUILD_INFORMATION = 10044; |
| ATOM_BATTERY_CYCLE_COUNT = 10045; |
| ATOM_DEBUG_ELAPSED_CLOCK = 10046; |
| ATOM_DEBUG_FAILING_ELAPSED_CLOCK = 10047; |
| ATOM_NUM_FACES_ENROLLED = 10048; |
| ATOM_ROLE_HOLDER = 10049; |
| ATOM_DANGEROUS_PERMISSION_STATE = 10050; |
| ATOM_TRAIN_INFO = 10051; |
| ATOM_TIME_ZONE_DATA_INFO = 10052; |
| ATOM_EXTERNAL_STORAGE_INFO = 10053; |
| ATOM_GPU_STATS_GLOBAL_INFO = 10054; |
| ATOM_GPU_STATS_APP_INFO = 10055; |
| ATOM_SYSTEM_ION_HEAP_SIZE = 10056; |
| ATOM_APPS_ON_EXTERNAL_STORAGE_INFO = 10057; |
| ATOM_FACE_SETTINGS = 10058; |
| ATOM_COOLING_DEVICE = 10059; |
| ATOM_APP_OPS = 10060; |
| ATOM_PROCESS_SYSTEM_ION_HEAP_SIZE = 10061; |
| ATOM_SURFACEFLINGER_STATS_GLOBAL_INFO = 10062; |
| ATOM_SURFACEFLINGER_STATS_LAYER_INFO = 10063; |
| ATOM_PROCESS_MEMORY_SNAPSHOT = 10064; |
| ATOM_VMS_CLIENT_STATS = 10065; |
| ATOM_NOTIFICATION_REMOTE_VIEWS = 10066; |
| ATOM_DANGEROUS_PERMISSION_STATE_SAMPLED = 10067; |
| ATOM_GRAPHICS_STATS = 10068; |
| ATOM_RUNTIME_APP_OP_ACCESS = 10069; |
| ATOM_ION_HEAP_SIZE = 10070; |
| ATOM_PACKAGE_NOTIFICATION_PREFERENCES = 10071; |
| ATOM_PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES = 10072; |
| ATOM_PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES = 10073; |
| ATOM_GNSS_STATS = 10074; |
| ATOM_ATTRIBUTED_APP_OPS = 10075; |
| ATOM_VOICE_CALL_SESSION = 10076; |
| ATOM_VOICE_CALL_RAT_USAGE = 10077; |
| ATOM_SIM_SLOT_STATE = 10078; |
| ATOM_SUPPORTED_RADIO_ACCESS_FAMILY = 10079; |
| ATOM_SETTING_SNAPSHOT = 10080; |
| ATOM_BLOB_INFO = 10081; |
| ATOM_DATA_USAGE_BYTES_TRANSFER = 10082; |
| ATOM_BYTES_TRANSFER_BY_TAG_AND_METERED = 10083; |
| ATOM_DND_MODE_RULE = 10084; |
| ATOM_GENERAL_EXTERNAL_STORAGE_ACCESS_STATS = 10085; |
| ATOM_INCOMING_SMS = 10086; |
| ATOM_OUTGOING_SMS = 10087; |
| ATOM_CARRIER_ID_TABLE_VERSION = 10088; |
| ATOM_DATA_CALL_SESSION = 10089; |
| ATOM_CELLULAR_SERVICE_STATE = 10090; |
| ATOM_CELLULAR_DATA_SERVICE_SWITCH = 10091; |
| ATOM_SYSTEM_MEMORY = 10092; |
| ATOM_IMS_REGISTRATION_TERMINATION = 10093; |
| ATOM_IMS_REGISTRATION_STATS = 10094; |
| ATOM_CPU_TIME_PER_CLUSTER_FREQ = 10095; |
| ATOM_CPU_CYCLES_PER_UID_CLUSTER = 10096; |
| ATOM_DEVICE_ROTATED_DATA = 10097; |
| ATOM_CPU_CYCLES_PER_THREAD_GROUP_CLUSTER = 10098; |
| ATOM_MEDIA_DRM_ACTIVITY_INFO = 10099; |
| ATOM_OEM_MANAGED_BYTES_TRANSFER = 10100; |
| ATOM_GNSS_POWER_STATS = 10101; |
| ATOM_TIME_ZONE_DETECTOR_STATE = 10102; |
| ATOM_KEYSTORE2_STORAGE_STATS = 10103; |
| ATOM_RKP_POOL_STATS = 10104; |
| ATOM_PROCESS_DMABUF_MEMORY = 10105; |
| ATOM_PENDING_ALARM_INFO = 10106; |
| ATOM_USER_LEVEL_HIBERNATED_APPS = 10107; |
| ATOM_LAUNCHER_LAYOUT_SNAPSHOT = 10108; |
| ATOM_GLOBAL_HIBERNATED_APPS = 10109; |
| ATOM_INPUT_EVENT_LATENCY_SKETCH = 10110; |
| ATOM_BATTERY_USAGE_STATS_BEFORE_RESET = 10111; |
| ATOM_BATTERY_USAGE_STATS_SINCE_RESET = 10112; |
| ATOM_BATTERY_USAGE_STATS_SINCE_RESET_USING_POWER_PROFILE_MODEL = 10113; |
| ATOM_INSTALLED_INCREMENTAL_PACKAGE = 10114; |
| ATOM_TELEPHONY_NETWORK_REQUESTS = 10115; |
| ATOM_APP_SEARCH_STORAGE_INFO = 10116; |
| ATOM_VMSTAT = 10117; |
| ATOM_KEYSTORE2_KEY_CREATION_WITH_GENERAL_INFO = 10118; |
| ATOM_KEYSTORE2_KEY_CREATION_WITH_AUTH_INFO = 10119; |
| ATOM_KEYSTORE2_KEY_CREATION_WITH_PURPOSE_AND_MODES_INFO = 10120; |
| ATOM_KEYSTORE2_ATOM_WITH_OVERFLOW = 10121; |
| ATOM_KEYSTORE2_KEY_OPERATION_WITH_PURPOSE_AND_MODES_INFO = 10122; |
| ATOM_KEYSTORE2_KEY_OPERATION_WITH_GENERAL_INFO = 10123; |
| ATOM_RKP_ERROR_STATS = 10124; |
| ATOM_KEYSTORE2_CRASH_STATS = 10125; |
| ATOM_VENDOR_APEX_INFO = 10126; |
| ATOM_ACCESSIBILITY_SHORTCUT_STATS = 10127; |
| ATOM_ACCESSIBILITY_FLOATING_MENU_STATS = 10128; |
| ATOM_DATA_USAGE_BYTES_TRANSFER_V2 = 10129; |
| ATOM_MEDIA_CAPABILITIES = 10130; |
| ATOM_CAR_WATCHDOG_SYSTEM_IO_USAGE_SUMMARY = 10131; |
| ATOM_CAR_WATCHDOG_UID_IO_USAGE_SUMMARY = 10132; |
| ATOM_IMS_REGISTRATION_FEATURE_TAG_STATS = 10133; |
| ATOM_RCS_CLIENT_PROVISIONING_STATS = 10134; |
| ATOM_RCS_ACS_PROVISIONING_STATS = 10135; |
| ATOM_SIP_DELEGATE_STATS = 10136; |
| ATOM_SIP_TRANSPORT_FEATURE_TAG_STATS = 10137; |
| ATOM_SIP_MESSAGE_RESPONSE = 10138; |
| ATOM_SIP_TRANSPORT_SESSION = 10139; |
| ATOM_IMS_DEDICATED_BEARER_LISTENER_EVENT = 10140; |
| ATOM_IMS_DEDICATED_BEARER_EVENT = 10141; |
| ATOM_IMS_REGISTRATION_SERVICE_DESC_STATS = 10142; |
| ATOM_UCE_EVENT_STATS = 10143; |
| ATOM_PRESENCE_NOTIFY_EVENT = 10144; |
| ATOM_GBA_EVENT = 10145; |
| ATOM_PER_SIM_STATUS = 10146; |
| ATOM_GPU_WORK_PER_UID = 10147; |
| ATOM_PERSISTENT_URI_PERMISSIONS_AMOUNT_PER_PACKAGE = 10148; |
| ATOM_SIGNED_PARTITION_INFO = 10149; |
| ATOM_PINNED_FILE_SIZES_PER_PACKAGE = 10150; |
| ATOM_PENDING_INTENTS_PER_PACKAGE = 10151; |
| ATOM_USER_INFO = 10152; |
| ATOM_TELEPHONY_NETWORK_REQUESTS_V2 = 10153; |
| ATOM_DEVICE_TELEPHONY_PROPERTIES = 10154; |
| ATOM_REMOTE_KEY_PROVISIONING_ERROR_COUNTS = 10155; |
| ATOM_SAFETY_STATE = 10156; |
| ATOM_INCOMING_MMS = 10157; |
| ATOM_OUTGOING_MMS = 10158; |
| ATOM_MULTI_USER_INFO = 10160; |
| ATOM_NETWORK_BPF_MAP_INFO = 10161; |
| ATOM_OUTGOING_SHORT_CODE_SMS = 10162; |
| ATOM_CONNECTIVITY_STATE_SAMPLE = 10163; |
| ATOM_NETWORK_SELECTION_REMATCH_REASONS_INFO = 10164; |
| ATOM_GAME_MODE_INFO = 10165; |
| ATOM_GAME_MODE_CONFIGURATION = 10166; |
| ATOM_GAME_MODE_LISTENER = 10167; |
| ATOM_NETWORK_SLICE_REQUEST_COUNT = 10168; |
| ATOM_WS_TILE_SNAPSHOT = 10169; |
| ATOM_WS_ACTIVE_WATCH_FACE_COMPLICATION_SET_SNAPSHOT = 10170; |
| ATOM_PROCESS_STATE = 10171; |
| ATOM_PROCESS_ASSOCIATION = 10172; |
| ATOM_ADPF_SYSTEM_COMPONENT_INFO = 10173; |
| ATOM_NOTIFICATION_MEMORY_USE = 10174; |
| ATOM_HDR_CAPABILITIES = 10175; |
| ATOM_WS_FAVOURITE_WATCH_FACE_LIST_SNAPSHOT = 10176; |
| ATOM_WIFI_AWARE_NDP_REPORTED = 638; |
| ATOM_WIFI_AWARE_ATTACH_REPORTED = 639; |
| ATOM_WIFI_SELF_RECOVERY_TRIGGERED = 661; |
| ATOM_SOFT_AP_STARTED = 680; |
| ATOM_SOFT_AP_STOPPED = 681; |
| ATOM_WIFI_LOCK_RELEASED = 687; |
| ATOM_WIFI_LOCK_DEACTIVATED = 688; |
| ATOM_WIFI_CONFIG_SAVED = 689; |
| ATOM_WIFI_AWARE_RESOURCE_USING_CHANGED = 690; |
| ATOM_WIFI_AWARE_HAL_API_CALLED = 691; |
| ATOM_WIFI_LOCAL_ONLY_REQUEST_RECEIVED = 692; |
| ATOM_WIFI_LOCAL_ONLY_REQUEST_SCAN_TRIGGERED = 693; |
| ATOM_WIFI_THREAD_TASK_EXECUTED = 694; |
| ATOM_WIFI_STATE_CHANGED = 700; |
| ATOM_WIFI_AWARE_CAPABILITIES = 10190; |
| ATOM_WIFI_MODULE_INFO = 10193; |
| ATOM_SETTINGS_SPA_REPORTED = 622; |
| ATOM_EXPRESS_EVENT_REPORTED = 528; |
| ATOM_EXPRESS_HISTOGRAM_SAMPLE_REPORTED = 593; |
| ATOM_EXPRESS_UID_EVENT_REPORTED = 644; |
| ATOM_EXPRESS_UID_HISTOGRAM_SAMPLE_REPORTED = 658; |
| ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645; |
| ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646; |
| ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647; |
| ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648; |
| ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649; |
| ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626; |
| ATOM_WS_CALL_DISCONNECTION_REPORTED = 627; |
| ATOM_WS_CALL_DURATION_REPORTED = 628; |
| ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629; |
| ATOM_WS_CALL_INTERACTION_REPORTED = 630; |
| ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631; |
| ATOM_BAL_ALLOWED = 632; |
| ATOM_IN_TASK_ACTIVITY_STARTED = 685; |
| ATOM_CACHED_APPS_HIGH_WATERMARK = 10189; |
| ATOM_ODREFRESH_REPORTED = 366; |
| ATOM_ODSIGN_REPORTED = 548; |
| ATOM_ART_DATUM_REPORTED = 332; |
| ATOM_ART_DEVICE_DATUM_REPORTED = 550; |
| ATOM_ART_DATUM_DELTA_REPORTED = 565; |
| ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467; |
| ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619; |
| ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620; |
| ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621; |
| ATOM_EMERGENCY_STATE_CHANGED = 633; |
| ATOM_DND_STATE_CHANGED = 657; |
| ATOM_MTE_STATE = 10181; |
| ATOM_AD_SERVICES_BACK_COMPAT_GET_TOPICS_REPORTED = 598; |
| ATOM_AD_SERVICES_BACK_COMPAT_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 599; |
| ATOM_AD_SERVICES_MEASUREMENT_DEBUG_KEYS = 640; |
| ATOM_AD_SERVICES_ERROR_REPORTED = 662; |
| ATOM_AD_SERVICES_BACKGROUND_JOBS_EXECUTION_REPORTED = 663; |
| ATOM_AD_SERVICES_MEASUREMENT_DELAYED_SOURCE_REGISTRATION = 673; |
| ATOM_AD_SERVICES_MEASUREMENT_ATTRIBUTION = 674; |
| ATOM_AD_SERVICES_MEASUREMENT_JOBS = 675; |
| ATOM_AD_SERVICES_MEASUREMENT_WIPEOUT = 676; |
| ATOM_AD_SERVICES_CONSENT_MIGRATED = 702; |
| ATOM_RKPD_POOL_STATS = 664; |
| ATOM_RKPD_CLIENT_OPERATION = 665; |
| ATOM_AUTOFILL_UI_EVENT_REPORTED = 603; |
| ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604; |
| ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605; |
| ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606; |
| ATOM_AUTOFILL_SESSION_COMMITTED = 607; |
| ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659; |
| ATOM_TEST_EXTENSION_ATOM_REPORTED = 660; |
| ATOM_TEST_RESTRICTED_ATOM_REPORTED = 672; |
| ATOM_STATS_SOCKET_LOSS_REPORTED = 752; |
| ATOM_PLUGIN_INITIALIZED = 655; |
| ATOM_TV_LOW_POWER_STANDBY_POLICY = 679; |
| ATOM_LOCKSCREEN_SHORTCUT_SELECTED = 611; |
| ATOM_LOCKSCREEN_SHORTCUT_TRIGGERED = 612; |
| ATOM_EMERGENCY_NUMBERS_INFO = 10180; |
| ATOM_QUALIFIED_RAT_LIST_CHANGED = 634; |
| ATOM_QNS_IMS_CALL_DROP_STATS = 635; |
| ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636; |
| ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177; |
| ATOM_QNS_HANDOVER_TIME_MILLIS = 10178; |
| ATOM_QNS_HANDOVER_PINGPONG = 10179; |
| ATOM_SATELLITE_CONTROLLER = 10182; |
| ATOM_SATELLITE_SESSION = 10183; |
| ATOM_SATELLITE_INCOMING_DATAGRAM = 10184; |
| ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185; |
| ATOM_SATELLITE_PROVISION = 10186; |
| ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187; |
| ATOM_IKE_SESSION_TERMINATED = 678; |
| ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760; |
| ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613; |
| ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614; |
| ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615; |
| ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656; |
| ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666; |
| ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696; |
| ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623; |
| ATOM_HEALTH_CONNECT_UI_INTERACTION = 624; |
| ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625; |
| ATOM_HEALTH_CONNECT_API_CALLED = 616; |
| ATOM_HEALTH_CONNECT_USAGE_STATS = 617; |
| ATOM_HEALTH_CONNECT_STORAGE_STATS = 618; |
| ATOM_HEALTH_CONNECT_API_INVOKED = 643; |
| ATOM_EXERCISE_ROUTE_API_CALLED = 654; |
| ATOM_ATOM_9999 = 9999; |
| ATOM_ATOM_99999 = 99999; |
| ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738; |
| ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739; |
| ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740; |
| ATOM_EMERGENCY_NUMBER_DIALED = 637; |
| ATOM_SANDBOX_API_CALLED = 488; |
| ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735; |
| ATOM_SANDBOX_SDK_STORAGE = 10159; |
| ATOM_CRONET_ENGINE_CREATED = 703; |
| ATOM_CRONET_TRAFFIC_REPORTED = 704; |
| ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762; |
| ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763; |
| ATOM_CRONET_INITIALIZED = 764; |
| ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650; |
| ATOM_IP_CLIENT_RA_INFO_REPORTED = 778; |
| ATOM_APF_SESSION_INFO_REPORTED = 777; |
| ATOM_CREDENTIAL_MANAGER_API_CALLED = 585; |
| ATOM_CREDENTIAL_MANAGER_INIT_PHASE_REPORTED = 651; |
| ATOM_CREDENTIAL_MANAGER_CANDIDATE_PHASE_REPORTED = 652; |
| ATOM_CREDENTIAL_MANAGER_FINAL_PHASE_REPORTED = 653; |
| ATOM_CREDENTIAL_MANAGER_TOTAL_REPORTED = 667; |
| ATOM_CREDENTIAL_MANAGER_FINALNOUID_REPORTED = 668; |
| ATOM_CREDENTIAL_MANAGER_GET_REPORTED = 669; |
| ATOM_CREDENTIAL_MANAGER_AUTH_CLICK_REPORTED = 670; |
| ATOM_CREDENTIAL_MANAGER_APIV2_CALLED = 671; |
| ATOM_UWB_ACTIVITY_INFO = 10188; |
| ATOM_MEDIA_ACTION_REPORTED = 608; |
| ATOM_MEDIA_CONTROLS_LAUNCHED = 609; |
| ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600; |
| ATOM_MEDIA_CODEC_STARTED = 641; |
| ATOM_MEDIA_CODEC_STOPPED = 642; |
| ATOM_MEDIA_CODEC_RENDERED = 684; |
| } |
| // End of protos/perfetto/config/statsd/atom_ids.proto |
| |
| // Begin of protos/perfetto/config/statsd/statsd_tracing_config.proto |
| |
| // This file is named 'statsd_tracing_config.proto' rather than |
| // 'statsd_config.proto' (which would be more consistent with the other |
| // config protos) so it doesn't show up and confuse folks looking for |
| // the existing statsd_config.proto for configuring statsd itself. |
| // Same for the config proto itself. |
| message StatsdTracingConfig { |
| // This is for the common case of the atom id being known in the enum AtomId. |
| repeated AtomId push_atom_id = 1; |
| |
| // Escape hatch for Atom IDs that are not yet in the AtomId enum |
| // (e.g. non-upstream atoms that don't exist in AOSP). |
| repeated int32 raw_push_atom_id = 2; |
| repeated StatsdPullAtomConfig pull_config = 3; |
| } |
| |
| message StatsdPullAtomConfig { |
| repeated AtomId pull_atom_id = 1; |
| repeated int32 raw_pull_atom_id = 2; |
| |
| optional int32 pull_frequency_ms = 3; |
| repeated string packages = 4; |
| } |
| |
| // End of protos/perfetto/config/statsd/statsd_tracing_config.proto |
| |
| // Begin of protos/perfetto/common/sys_stats_counters.proto |
| |
| // When editing entries here remember also to update "sys_stats_counters.h" with |
| // the corresponding string definitions for the actual /proc files parser. |
| |
| // Counter definitions for Linux's /proc/meminfo. |
| enum MeminfoCounters { |
| MEMINFO_UNSPECIFIED = 0; |
| MEMINFO_MEM_TOTAL = 1; |
| MEMINFO_MEM_FREE = 2; |
| MEMINFO_MEM_AVAILABLE = 3; |
| MEMINFO_BUFFERS = 4; |
| MEMINFO_CACHED = 5; |
| MEMINFO_SWAP_CACHED = 6; |
| MEMINFO_ACTIVE = 7; |
| MEMINFO_INACTIVE = 8; |
| MEMINFO_ACTIVE_ANON = 9; |
| MEMINFO_INACTIVE_ANON = 10; |
| MEMINFO_ACTIVE_FILE = 11; |
| MEMINFO_INACTIVE_FILE = 12; |
| MEMINFO_UNEVICTABLE = 13; |
| MEMINFO_MLOCKED = 14; |
| MEMINFO_SWAP_TOTAL = 15; |
| MEMINFO_SWAP_FREE = 16; |
| MEMINFO_DIRTY = 17; |
| MEMINFO_WRITEBACK = 18; |
| MEMINFO_ANON_PAGES = 19; |
| MEMINFO_MAPPED = 20; |
| MEMINFO_SHMEM = 21; |
| MEMINFO_SLAB = 22; |
| MEMINFO_SLAB_RECLAIMABLE = 23; |
| MEMINFO_SLAB_UNRECLAIMABLE = 24; |
| MEMINFO_KERNEL_STACK = 25; |
| MEMINFO_PAGE_TABLES = 26; |
| MEMINFO_COMMIT_LIMIT = 27; |
| MEMINFO_COMMITED_AS = 28; |
| MEMINFO_VMALLOC_TOTAL = 29; |
| MEMINFO_VMALLOC_USED = 30; |
| MEMINFO_VMALLOC_CHUNK = 31; |
| MEMINFO_CMA_TOTAL = 32; |
| MEMINFO_CMA_FREE = 33; |
| } |
| |
| // Counter definitions for Linux's /proc/vmstat. |
| enum VmstatCounters { |
| VMSTAT_UNSPECIFIED = 0; |
| VMSTAT_NR_FREE_PAGES = 1; |
| VMSTAT_NR_ALLOC_BATCH = 2; |
| VMSTAT_NR_INACTIVE_ANON = 3; |
| VMSTAT_NR_ACTIVE_ANON = 4; |
| VMSTAT_NR_INACTIVE_FILE = 5; |
| VMSTAT_NR_ACTIVE_FILE = 6; |
| VMSTAT_NR_UNEVICTABLE = 7; |
| VMSTAT_NR_MLOCK = 8; |
| VMSTAT_NR_ANON_PAGES = 9; |
| VMSTAT_NR_MAPPED = 10; |
| VMSTAT_NR_FILE_PAGES = 11; |
| VMSTAT_NR_DIRTY = 12; |
| VMSTAT_NR_WRITEBACK = 13; |
| VMSTAT_NR_SLAB_RECLAIMABLE = 14; |
| VMSTAT_NR_SLAB_UNRECLAIMABLE = 15; |
| VMSTAT_NR_PAGE_TABLE_PAGES = 16; |
| VMSTAT_NR_KERNEL_STACK = 17; |
| VMSTAT_NR_OVERHEAD = 18; |
| VMSTAT_NR_UNSTABLE = 19; |
| VMSTAT_NR_BOUNCE = 20; |
| VMSTAT_NR_VMSCAN_WRITE = 21; |
| VMSTAT_NR_VMSCAN_IMMEDIATE_RECLAIM = 22; |
| VMSTAT_NR_WRITEBACK_TEMP = 23; |
| VMSTAT_NR_ISOLATED_ANON = 24; |
| VMSTAT_NR_ISOLATED_FILE = 25; |
| VMSTAT_NR_SHMEM = 26; |
| VMSTAT_NR_DIRTIED = 27; |
| VMSTAT_NR_WRITTEN = 28; |
| VMSTAT_NR_PAGES_SCANNED = 29; |
| VMSTAT_WORKINGSET_REFAULT = 30; |
| VMSTAT_WORKINGSET_ACTIVATE = 31; |
| VMSTAT_WORKINGSET_NODERECLAIM = 32; |
| VMSTAT_NR_ANON_TRANSPARENT_HUGEPAGES = 33; |
| VMSTAT_NR_FREE_CMA = 34; |
| VMSTAT_NR_SWAPCACHE = 35; |
| VMSTAT_NR_DIRTY_THRESHOLD = 36; |
| VMSTAT_NR_DIRTY_BACKGROUND_THRESHOLD = 37; |
| VMSTAT_PGPGIN = 38; |
| VMSTAT_PGPGOUT = 39; |
| VMSTAT_PGPGOUTCLEAN = 40; |
| VMSTAT_PSWPIN = 41; |
| VMSTAT_PSWPOUT = 42; |
| VMSTAT_PGALLOC_DMA = 43; |
| VMSTAT_PGALLOC_NORMAL = 44; |
| VMSTAT_PGALLOC_MOVABLE = 45; |
| VMSTAT_PGFREE = 46; |
| VMSTAT_PGACTIVATE = 47; |
| VMSTAT_PGDEACTIVATE = 48; |
| VMSTAT_PGFAULT = 49; |
| VMSTAT_PGMAJFAULT = 50; |
| VMSTAT_PGREFILL_DMA = 51; |
| VMSTAT_PGREFILL_NORMAL = 52; |
| VMSTAT_PGREFILL_MOVABLE = 53; |
| VMSTAT_PGSTEAL_KSWAPD_DMA = 54; |
| VMSTAT_PGSTEAL_KSWAPD_NORMAL = 55; |
| VMSTAT_PGSTEAL_KSWAPD_MOVABLE = 56; |
| VMSTAT_PGSTEAL_DIRECT_DMA = 57; |
| VMSTAT_PGSTEAL_DIRECT_NORMAL = 58; |
| VMSTAT_PGSTEAL_DIRECT_MOVABLE = 59; |
| VMSTAT_PGSCAN_KSWAPD_DMA = 60; |
| VMSTAT_PGSCAN_KSWAPD_NORMAL = 61; |
| VMSTAT_PGSCAN_KSWAPD_MOVABLE = 62; |
| VMSTAT_PGSCAN_DIRECT_DMA = 63; |
| VMSTAT_PGSCAN_DIRECT_NORMAL = 64; |
| VMSTAT_PGSCAN_DIRECT_MOVABLE = 65; |
| VMSTAT_PGSCAN_DIRECT_THROTTLE = 66; |
| VMSTAT_PGINODESTEAL = 67; |
| VMSTAT_SLABS_SCANNED = 68; |
| VMSTAT_KSWAPD_INODESTEAL = 69; |
| VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY = 70; |
| VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY = 71; |
| VMSTAT_PAGEOUTRUN = 72; |
| VMSTAT_ALLOCSTALL = 73; |
| VMSTAT_PGROTATED = 74; |
| VMSTAT_DROP_PAGECACHE = 75; |
| VMSTAT_DROP_SLAB = 76; |
| VMSTAT_PGMIGRATE_SUCCESS = 77; |
| VMSTAT_PGMIGRATE_FAIL = 78; |
| VMSTAT_COMPACT_MIGRATE_SCANNED = 79; |
| VMSTAT_COMPACT_FREE_SCANNED = 80; |
| VMSTAT_COMPACT_ISOLATED = 81; |
| VMSTAT_COMPACT_STALL = 82; |
| VMSTAT_COMPACT_FAIL = 83; |
| VMSTAT_COMPACT_SUCCESS = 84; |
| VMSTAT_COMPACT_DAEMON_WAKE = 85; |
| VMSTAT_UNEVICTABLE_PGS_CULLED = 86; |
| VMSTAT_UNEVICTABLE_PGS_SCANNED = 87; |
| VMSTAT_UNEVICTABLE_PGS_RESCUED = 88; |
| VMSTAT_UNEVICTABLE_PGS_MLOCKED = 89; |
| VMSTAT_UNEVICTABLE_PGS_MUNLOCKED = 90; |
| VMSTAT_UNEVICTABLE_PGS_CLEARED = 91; |
| VMSTAT_UNEVICTABLE_PGS_STRANDED = 92; |
| VMSTAT_NR_ZSPAGES = 93; |
| VMSTAT_NR_ION_HEAP = 94; |
| VMSTAT_NR_GPU_HEAP = 95; |
| VMSTAT_ALLOCSTALL_DMA = 96; |
| VMSTAT_ALLOCSTALL_MOVABLE = 97; |
| VMSTAT_ALLOCSTALL_NORMAL = 98; |
| VMSTAT_COMPACT_DAEMON_FREE_SCANNED = 99; |
| VMSTAT_COMPACT_DAEMON_MIGRATE_SCANNED = 100; |
| VMSTAT_NR_FASTRPC = 101; |
| VMSTAT_NR_INDIRECTLY_RECLAIMABLE = 102; |
| VMSTAT_NR_ION_HEAP_POOL = 103; |
| VMSTAT_NR_KERNEL_MISC_RECLAIMABLE = 104; |
| VMSTAT_NR_SHADOW_CALL_STACK_BYTES = 105; |
| VMSTAT_NR_SHMEM_HUGEPAGES = 106; |
| VMSTAT_NR_SHMEM_PMDMAPPED = 107; |
| VMSTAT_NR_UNRECLAIMABLE_PAGES = 108; |
| VMSTAT_NR_ZONE_ACTIVE_ANON = 109; |
| VMSTAT_NR_ZONE_ACTIVE_FILE = 110; |
| VMSTAT_NR_ZONE_INACTIVE_ANON = 111; |
| VMSTAT_NR_ZONE_INACTIVE_FILE = 112; |
| VMSTAT_NR_ZONE_UNEVICTABLE = 113; |
| VMSTAT_NR_ZONE_WRITE_PENDING = 114; |
| VMSTAT_OOM_KILL = 115; |
| VMSTAT_PGLAZYFREE = 116; |
| VMSTAT_PGLAZYFREED = 117; |
| VMSTAT_PGREFILL = 118; |
| VMSTAT_PGSCAN_DIRECT = 119; |
| VMSTAT_PGSCAN_KSWAPD = 120; |
| VMSTAT_PGSKIP_DMA = 121; |
| VMSTAT_PGSKIP_MOVABLE = 122; |
| VMSTAT_PGSKIP_NORMAL = 123; |
| VMSTAT_PGSTEAL_DIRECT = 124; |
| VMSTAT_PGSTEAL_KSWAPD = 125; |
| VMSTAT_SWAP_RA = 126; |
| VMSTAT_SWAP_RA_HIT = 127; |
| VMSTAT_WORKINGSET_RESTORE = 128; |
| VMSTAT_ALLOCSTALL_DEVICE = 129; |
| VMSTAT_ALLOCSTALL_DMA32 = 130; |
| VMSTAT_BALLOON_DEFLATE = 131; |
| VMSTAT_BALLOON_INFLATE = 132; |
| VMSTAT_BALLOON_MIGRATE = 133; |
| VMSTAT_CMA_ALLOC_FAIL = 134; |
| VMSTAT_CMA_ALLOC_SUCCESS = 135; |
| VMSTAT_NR_FILE_HUGEPAGES = 136; |
| VMSTAT_NR_FILE_PMDMAPPED = 137; |
| VMSTAT_NR_FOLL_PIN_ACQUIRED = 138; |
| VMSTAT_NR_FOLL_PIN_RELEASED = 139; |
| VMSTAT_NR_SEC_PAGE_TABLE_PAGES = 140; |
| VMSTAT_NR_SHADOW_CALL_STACK = 141; |
| VMSTAT_NR_SWAPCACHED = 142; |
| VMSTAT_NR_THROTTLED_WRITTEN = 143; |
| VMSTAT_PGALLOC_DEVICE = 144; |
| VMSTAT_PGALLOC_DMA32 = 145; |
| VMSTAT_PGDEMOTE_DIRECT = 146; |
| VMSTAT_PGDEMOTE_KSWAPD = 147; |
| VMSTAT_PGREUSE = 148; |
| VMSTAT_PGSCAN_ANON = 149; |
| VMSTAT_PGSCAN_FILE = 150; |
| VMSTAT_PGSKIP_DEVICE = 151; |
| VMSTAT_PGSKIP_DMA32 = 152; |
| VMSTAT_PGSTEAL_ANON = 153; |
| VMSTAT_PGSTEAL_FILE = 154; |
| VMSTAT_THP_COLLAPSE_ALLOC = 155; |
| VMSTAT_THP_COLLAPSE_ALLOC_FAILED = 156; |
| VMSTAT_THP_DEFERRED_SPLIT_PAGE = 157; |
| VMSTAT_THP_FAULT_ALLOC = 158; |
| VMSTAT_THP_FAULT_FALLBACK = 159; |
| VMSTAT_THP_FAULT_FALLBACK_CHARGE = 160; |
| VMSTAT_THP_FILE_ALLOC = 161; |
| VMSTAT_THP_FILE_FALLBACK = 162; |
| VMSTAT_THP_FILE_FALLBACK_CHARGE = 163; |
| VMSTAT_THP_FILE_MAPPED = 164; |
| VMSTAT_THP_MIGRATION_FAIL = 165; |
| VMSTAT_THP_MIGRATION_SPLIT = 166; |
| VMSTAT_THP_MIGRATION_SUCCESS = 167; |
| VMSTAT_THP_SCAN_EXCEED_NONE_PTE = 168; |
| VMSTAT_THP_SCAN_EXCEED_SHARE_PTE = 169; |
| VMSTAT_THP_SCAN_EXCEED_SWAP_PTE = 170; |
| VMSTAT_THP_SPLIT_PAGE = 171; |
| VMSTAT_THP_SPLIT_PAGE_FAILED = 172; |
| VMSTAT_THP_SPLIT_PMD = 173; |
| VMSTAT_THP_SWPOUT = 174; |
| VMSTAT_THP_SWPOUT_FALLBACK = 175; |
| VMSTAT_THP_ZERO_PAGE_ALLOC = 176; |
| VMSTAT_THP_ZERO_PAGE_ALLOC_FAILED = 177; |
| VMSTAT_VMA_LOCK_ABORT = 178; |
| VMSTAT_VMA_LOCK_MISS = 179; |
| VMSTAT_VMA_LOCK_RETRY = 180; |
| VMSTAT_VMA_LOCK_SUCCESS = 181; |
| VMSTAT_WORKINGSET_ACTIVATE_ANON = 182; |
| VMSTAT_WORKINGSET_ACTIVATE_FILE = 183; |
| VMSTAT_WORKINGSET_NODES = 184; |
| VMSTAT_WORKINGSET_REFAULT_ANON = 185; |
| VMSTAT_WORKINGSET_REFAULT_FILE = 186; |
| VMSTAT_WORKINGSET_RESTORE_ANON = 187; |
| VMSTAT_WORKINGSET_RESTORE_FILE = 188; |
| } |
| |
| // End of protos/perfetto/common/sys_stats_counters.proto |
| |
| // Begin of protos/perfetto/config/sys_stats/sys_stats_config.proto |
| |
| // This file defines the configuration for the Linux /proc poller data source, |
| // which injects counters in the trace. |
| // Counters that are needed in the trace must be explicitly listed in the |
| // *_counters fields. This is to avoid spamming the trace with all counters |
| // at all times. |
| // The sampling rate is configurable. All polling rates (*_period_ms) need |
| // to be integer multiples of each other. |
| // OK: [10ms, 10ms, 10ms], [10ms, 20ms, 10ms], [10ms, 20ms, 60ms] |
| // Not OK: [10ms, 10ms, 11ms], [10ms, 15ms, 20ms] |
| message SysStatsConfig { |
| // Polls /proc/meminfo every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| // Cost: 0.3 ms [read] + 0.07 ms [parse + trace injection] |
| optional uint32 meminfo_period_ms = 1; |
| |
| // If empty all known counters are reported. Otherwise, only the counters |
| // specified below are reported. |
| repeated MeminfoCounters meminfo_counters = 2; |
| |
| // Polls /proc/vmstat every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| // Cost: 0.2 ms [read] + 0.3 ms [parse + trace injection] |
| optional uint32 vmstat_period_ms = 3; |
| repeated VmstatCounters vmstat_counters = 4; |
| |
| // Pols /proc/stat every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| // Cost: 4.1 ms [read] + 1.9 ms [parse + trace injection] |
| optional uint32 stat_period_ms = 5; |
| enum StatCounters { |
| STAT_UNSPECIFIED = 0; |
| STAT_CPU_TIMES = 1; |
| STAT_IRQ_COUNTS = 2; |
| STAT_SOFTIRQ_COUNTS = 3; |
| STAT_FORK_COUNT = 4; |
| } |
| repeated StatCounters stat_counters = 6; |
| |
| // Polls /sys/devfreq/*/curfreq every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| // This option can be used to record unchanging values. |
| // Updates from frequency changes can come from ftrace/set_clock_rate. |
| optional uint32 devfreq_period_ms = 7; |
| |
| // Polls /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq every X ms. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| optional uint32 cpufreq_period_ms = 8; |
| |
| // Polls /proc/buddyinfo every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| optional uint32 buddyinfo_period_ms = 9; |
| |
| // Polls /proc/diskstats every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| optional uint32 diskstat_period_ms = 10; |
| |
| // Polls /proc/pressure/* every X ms, if non-zero. |
| // This is required to be > 10ms to avoid excessive CPU usage. |
| optional uint32 psi_period_ms = 11; |
| } |
| |
| // End of protos/perfetto/config/sys_stats/sys_stats_config.proto |
| |
| // Begin of protos/perfetto/config/system_info/system_info.proto |
| |
| // This data-source does a one-off recording of system information when |
| // the trace starts. |
| // Currently this includes: |
| // - Values of |
| // /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies This |
| // datasource has no configuration options at present. |
| message SystemInfoConfig {} |
| |
| // End of protos/perfetto/config/system_info/system_info.proto |
| |
| // Begin of protos/perfetto/config/test_config.proto |
| |
| // The configuration for a fake producer used in tests. |
| message TestConfig { |
| message DummyFields { |
| optional uint32 field_uint32 = 1; |
| optional int32 field_int32 = 2; |
| optional uint64 field_uint64 = 3; |
| optional int64 field_int64 = 4; |
| optional fixed64 field_fixed64 = 5; |
| optional sfixed64 field_sfixed64 = 6; |
| optional fixed32 field_fixed32 = 7; |
| optional sfixed32 field_sfixed32 = 8; |
| optional double field_double = 9; |
| optional float field_float = 10; |
| optional sint64 field_sint64 = 11; |
| optional sint32 field_sint32 = 12; |
| optional string field_string = 13; |
| optional bytes field_bytes = 14; |
| } |
| |
| // The number of messages the fake producer should send. |
| optional uint32 message_count = 1; |
| |
| // The maximum number of messages which should be sent each second. |
| // The actual obserced speed may be lower if the producer is unable to |
| // work fast enough. |
| // If this is zero or unset, the producer will send as fast as possible. |
| optional uint32 max_messages_per_second = 2; |
| |
| // The seed value for a simple multiplicative congruential pseudo-random |
| // number sequence. |
| optional uint32 seed = 3; |
| |
| // The size of each message in bytes. Should be greater than or equal 5 to |
| // account for the number of bytes needed to encode the random number and a |
| // null byte for the string. |
| optional uint32 message_size = 4; |
| |
| // Whether the producer should send a event batch when the data source is |
| // is initially registered. |
| optional bool send_batch_on_register = 5; |
| |
| optional DummyFields dummy_fields = 6; |
| } |
| |
| // End of protos/perfetto/config/test_config.proto |
| |
| // Begin of protos/perfetto/config/track_event/track_event_config.proto |
| |
| message TrackEventConfig { |
| // The following fields define the set of enabled trace categories. Each list |
| // item is a glob. |
| // |
| // To determine if category is enabled, it is checked against the filters in |
| // the following order: |
| // |
| // 1. Exact matches in enabled categories. |
| // 2. Exact matches in enabled tags. |
| // 3. Exact matches in disabled categories. |
| // 4. Exact matches in disabled tags. |
| // 5. Pattern matches in enabled categories. |
| // 6. Pattern matches in enabled tags. |
| // 7. Pattern matches in disabled categories. |
| // 8. Pattern matches in disabled tags. |
| // |
| // If none of the steps produced a match, the category is enabled by default. |
| // |
| // Examples: |
| // |
| // - To enable all non-slow/debug categories: |
| // |
| // No configuration needed, happens by default. |
| // |
| // - To enable a specific category: |
| // |
| // disabled_categories = ["*"] |
| // enabled_categories = ["my_category"] |
| // |
| // - To enable only categories with a specific tag: |
| // |
| // disabled_tags = ["*"] |
| // enabled_tags = ["my_tag"] |
| // |
| |
| // Default: [] |
| repeated string disabled_categories = 1; |
| |
| // Default: [] |
| repeated string enabled_categories = 2; |
| |
| // Default: ["slow", "debug"] |
| repeated string disabled_tags = 3; |
| |
| // Default: [] |
| repeated string enabled_tags = 4; |
| |
| // Default: false (i.e. enabled by default) |
| optional bool disable_incremental_timestamps = 5; |
| |
| // Allows to specify a custom unit different than the default (ns). |
| // Also affects thread timestamps if enable_thread_time_sampling = true. |
| // A multiplier of 1000 means that a timestamp = 3 should be interpreted as |
| // 3000 ns = 3 us. |
| // Default: 1 (if unset, it should be read as 1). |
| optional uint64 timestamp_unit_multiplier = 6; |
| |
| // Default: false (i.e. debug_annotations is NOT filtered out by default) |
| // When true, any debug annotations provided as arguments to the |
| // TRACE_EVENT macros are not written into the trace. Typed arguments will |
| // still be emitted even if set to true. |
| optional bool filter_debug_annotations = 7; |
| |
| // Default : false (i.e. disabled) |
| // When true, the SDK samples and emits the current thread time counter value |
| // for each event on the current thread's track. This value represents the |
| // total CPU time consumed by that thread since its creation. Note that if a |
| // thread is not scheduled by OS for some duration, that time won't be |
| // included in thread_time. |
| // Learn more : "CLOCK_THREAD_CPUTIME_ID" flag at |
| // https://linux.die.net/man/3/clock_gettime |
| optional bool enable_thread_time_sampling = 8; |
| |
| // Default: false (i.e. dynamic event names are NOT filtered out by default) |
| // When true, event_names wrapped in perfetto::DynamicString will be filtered |
| // out. |
| optional bool filter_dynamic_event_names = 9; |
| } |
| |
| // End of protos/perfetto/config/track_event/track_event_config.proto |
| |
| // Begin of protos/perfetto/config/data_source_config.proto |
| |
| // The configuration that is passed to each data source when starting tracing. |
| // Next id: 126 |
| message DataSourceConfig { |
| enum SessionInitiator { |
| SESSION_INITIATOR_UNSPECIFIED = 0; |
| // This trace was initiated from a trusted system app has DUMP and |
| // USAGE_STATS permission. This system app is expected to not expose the |
| // trace to the user of the device. |
| // This is determined by checking the UID initiating the trace. |
| SESSION_INITIATOR_TRUSTED_SYSTEM = 1; |
| }; |
| // Data source unique name, e.g., "linux.ftrace". This must match |
| // the name passed by the data source when it registers (see |
| // RegisterDataSource()). |
| optional string name = 1; |
| |
| // The index of the logging buffer where TracePacket(s) will be stored. |
| // This field doesn't make a major difference for the Producer(s). The final |
| // logging buffers, in fact, are completely owned by the Service. We just ask |
| // the Producer to copy this number into the chunk headers it emits, so that |
| // the Service can quickly identify the buffer where to move the chunks into |
| // without expensive lookups on its fastpath. |
| optional uint32 target_buffer = 2; |
| |
| // Set by the service to indicate the duration of the trace. |
| // DO NOT SET in consumer as this will be overridden by the service. |
| optional uint32 trace_duration_ms = 3; |
| |
| // If true, |trace_duration_ms| should count also time in suspend. This |
| // is propagated from TraceConfig.prefer_suspend_clock_for_duration. |
| optional bool prefer_suspend_clock_for_duration = 122; |
| |
| // Set by the service to indicate how long it waits after StopDataSource. |
| // DO NOT SET in consumer as this will be overridden by the service. |
| optional uint32 stop_timeout_ms = 7; |
| |
| // Set by the service to indicate whether this tracing session has extra |
| // guardrails. |
| // DO NOT SET in consumer as this will be overridden by the service. |
| optional bool enable_extra_guardrails = 6; |
| |
| // Set by the service to indicate which user initiated this trace. |
| // DO NOT SET in consumer as this will be overridden by the service. |
| optional SessionInitiator session_initiator = 8; |
| |
| // Set by the service to indicate which tracing session the data source |
| // belongs to. The intended use case for this is checking if two data sources, |
| // one of which produces metadata for the other one, belong to the same trace |
| // session and hence should be linked together. |
| // This field was introduced in Aug 2018 after Android P. |
| // DO NOT SET in consumer as this will be overridden by the service. |
| optional uint64 tracing_session_id = 4; |
| |
| // Keeep the lower IDs (up to 99) for fields that are *not* specific to |
| // data-sources and needs to be processed by the traced daemon. |
| |
| // All data source config fields must be marked as [lazy=true]. This prevents |
| // the proto-to-cpp generator from recursing into those when generating the |
| // cpp classes and polluting tracing/core with data-source-specific classes. |
| // Instead they are treated as opaque strings containing raw proto bytes. |
| |
| // Data source name: linux.ftrace |
| optional FtraceConfig ftrace_config = 100 [lazy = true]; |
| // Data source name: linux.inode_file_map |
| optional InodeFileConfig inode_file_config = 102 [lazy = true]; |
| // Data source name: linux.process_stats |
| optional ProcessStatsConfig process_stats_config = 103 [lazy = true]; |
| // Data source name: linux.sys_stats |
| optional SysStatsConfig sys_stats_config = 104 [lazy = true]; |
| // Data source name: android.heapprofd |
| // Introduced in Android 10. |
| optional HeapprofdConfig heapprofd_config = 105 [lazy = true]; |
| // Data source name: android.java_hprof |
| // Introduced in Android 11. |
| optional JavaHprofConfig java_hprof_config = 110 [lazy = true]; |
| // Data source name: android.power |
| optional AndroidPowerConfig android_power_config = 106 [lazy = true]; |
| // Data source name: android.log |
| optional AndroidLogConfig android_log_config = 107 [lazy = true]; |
| // TODO(fmayer): Add data source name for this. |
| optional GpuCounterConfig gpu_counter_config = 108 [lazy = true]; |
| // Data source name: android.game_interventions |
| optional AndroidGameInterventionListConfig |
| android_game_intervention_list_config = 116 [lazy = true]; |
| // Data source name: android.packages_list |
| optional PackagesListConfig packages_list_config = 109 [lazy = true]; |
| // Data source name: linux.perf |
| optional PerfEventConfig perf_event_config = 111 [lazy = true]; |
| // Data source name: vulkan.memory_tracker |
| optional VulkanMemoryConfig vulkan_memory_config = 112 [lazy = true]; |
| // Data source name: track_event |
| optional TrackEventConfig track_event_config = 113 [lazy = true]; |
| // Data source name: android.polled_state |
| optional AndroidPolledStateConfig android_polled_state_config = 114 |
| [lazy = true]; |
| // Data source name: android.system_property |
| optional AndroidSystemPropertyConfig android_system_property_config = 118 |
| [lazy = true]; |
| // Data source name: android.statsd |
| optional StatsdTracingConfig statsd_tracing_config = 117 [lazy = true]; |
| // Data source name: linux.system_info |
| optional SystemInfoConfig system_info_config = 119; |
| |
| // Chrome is special as it doesn't use the perfetto IPC layer. We want to |
| // avoid proto serialization and de-serialization there because that would |
| // just add extra hops on top of the Mojo ser/des. Instead we auto-generate a |
| // C++ class for it so it can pass around plain C++ objets. |
| optional ChromeConfig chrome_config = 101; |
| |
| // If an interceptor is specified here, packets for this data source will be |
| // rerouted to the interceptor instead of the main trace buffer. This can be |
| // used, for example, to write trace data into ETW or for logging trace points |
| // to the console. |
| // |
| // Note that interceptors are only supported by data sources registered |
| // through the Perfetto SDK API. Data sources that don't use that API (e.g., |
| // traced_probes) may not support interception. |
| optional InterceptorConfig interceptor_config = 115; |
| |
| // Data source name: android.network_packets. |
| // Introduced in Android 14 (U). |
| optional NetworkPacketTraceConfig network_packet_trace_config = 120 |
| [lazy = true]; |
| |
| // Data source name: android.surfaceflinger.layers |
| optional SurfaceFlingerLayersConfig surfaceflinger_layers_config = 121 |
| [lazy = true]; |
| |
| // Data source name: android.surfaceflinger.transactions |
| optional SurfaceFlingerTransactionsConfig surfaceflinger_transactions_config = |
| 123 [lazy = true]; |
| |
| // Data source name: android.sdk_sysprop_guard |
| // Introduced in Android 14 (U) QPR1. |
| optional AndroidSdkSyspropGuardConfig android_sdk_sysprop_guard_config = 124 |
| [lazy = true]; |
| |
| // Data source name: windows.etw |
| optional EtwConfig etw_config = 125 [lazy = true]; |
| |
| // This is a fallback mechanism to send a free-form text config to the |
| // producer. In theory this should never be needed. All the code that |
| // is part of the platform (i.e. traced service) is supposed to *not* truncate |
| // the trace config proto and propagate unknown fields. However, if anything |
| // in the pipeline (client or backend) ends up breaking this forward compat |
| // plan, this field will become the escape hatch to allow future data sources |
| // to get some meaningful configuration. |
| optional string legacy_config = 1000; |
| |
| // This field is only used for testing. |
| optional TestConfig for_testing = 1001; |
| |
| // Was |for_testing|. Caused more problems then found. |
| reserved 268435455; |
| } |
| |
| // End of protos/perfetto/config/data_source_config.proto |
| |
| // Begin of protos/perfetto/config/trace_config.proto |
| |
| // The overall config that is used when starting a new tracing session through |
| // ProducerPort::StartTracing(). |
| // It contains the general config for the logging buffer(s) and the configs for |
| // all the data source being enabled. |
| // |
| // Next id: 38. |
| message TraceConfig { |
| message BufferConfig { |
| optional uint32 size_kb = 1; |
| |
| // |page_size|, now deprecated. |
| reserved 2; |
| |
| // |optimize_for|, now deprecated. |
| reserved 3; |
| |
| enum FillPolicy { |
| UNSPECIFIED = 0; |
| |
| // Default behavior. The buffer operates as a conventional ring buffer. |
| // If the writer is faster than the reader (or if the reader reads only |
| // after tracing is stopped) newly written packets will overwrite old |
| // packets. |
| RING_BUFFER = 1; |
| |
| // Behaves like RING_BUFFER as long as there is space in the buffer or |
| // the reader catches up with the writer. As soon as the writer hits |
| // an unread chunk, it stops accepting new data in the buffer. |
| DISCARD = 2; |
| } |
| optional FillPolicy fill_policy = 4; |
| |
| // When true the buffer is moved (rather than copied) onto the cloned |
| // session, and an empty buffer of the same size is allocated in the source |
| // tracing session. This feature will likely get deprecated in the future. |
| // It been introduced mainly to support the surfaceflinger snapshot dump |
| // for bugreports, where SF can dumps O(400MB) into the bugreport trace. In |
| // that case we don't want to retain another in-memory copy of the buffer. |
| optional bool transfer_on_clone = 5; |
| |
| // Used in conjuction with transfer_on_clone. When true the buffer is |
| // cleared before issuing the Flush(reason=kTraceClone). This is to ensure |
| // that if the data source took too long to write the data in a previous |
| // clone-related flush, we don't end up with a mixture of leftovers from |
| // the previous write and new data. |
| optional bool clear_before_clone = 6; |
| } |
| repeated BufferConfig buffers = 1; |
| |
| message DataSource { |
| // Filters and data-source specific config. It contains also the unique name |
| // of the data source, the one passed in the DataSourceDescriptor when they |
| // register on the service. |
| optional protos.DataSourceConfig config = 1; |
| |
| // Optional. If multiple producers (~processes) expose the same data source |
| // and either |producer_name_filter| or |producer_name_regex_filter| is set, |
| // the data source is enabled only for producers whose names match any of |
| // the filters. |
| // |producer_name_filter| has to be an exact match, while |
| // |producer_name_regex_filter| is a regular expression. |
| // This allows to enable a data source only for specific processes. |
| // The "repeated" fields have OR semantics: specifying a filter ["foo", |
| // "bar"] will enable data sources on both "foo" and "bar" (if they exist). |
| repeated string producer_name_filter = 2; |
| repeated string producer_name_regex_filter = 3; |
| } |
| repeated DataSource data_sources = 2; |
| |
| // Config for disabling builtin data sources in the tracing service. |
| message BuiltinDataSource { |
| // Disable emitting clock timestamps into the trace. |
| optional bool disable_clock_snapshotting = 1; |
| |
| // Disable echoing the original trace config in the trace. |
| optional bool disable_trace_config = 2; |
| |
| // Disable emitting system info (build fingerprint, cpuinfo, etc). |
| optional bool disable_system_info = 3; |
| |
| // Disable emitting events for data-source state changes (e.g. the marker |
| // for all data sources having ACKed the start of the trace). |
| optional bool disable_service_events = 4; |
| |
| // The authoritative clock domain for the trace. Defaults to BOOTTIME. See |
| // also ClockSnapshot's primary_trace_clock. The configured value is written |
| // into the trace as part of the ClockSnapshots emitted by the service. |
| // Trace processor will attempt to translate packet/event timestamps from |
| // various data sources (and their chosen clock domains) to this domain |
| // during import. Added in Android R. |
| optional BuiltinClock primary_trace_clock = 5; |
| |
| // Time interval in between snapshotting of sync markers, clock snapshots, |
| // stats, and other periodic service-emitted events. Note that the service |
| // only keeps track of the first and the most recent snapshot until |
| // ReadBuffers() is called. |
| optional uint32 snapshot_interval_ms = 6; |
| |
| // Hints to the service that a suspend-aware (i.e. counting time in suspend) |
| // clock should be used for periodic snapshots of service-emitted events. |
| // This means, if a snapshot *should* have happened during suspend, it will |
| // happen immediately after the device resumes. |
| // |
| // Choosing a clock like this is done on best-effort basis; not all |
| // platforms (e.g. Windows) expose a clock which can be used for periodic |
| // tasks counting suspend. If such a clock is not available, the service |
| // falls back to the best-available alternative. |
| // |
| // Introduced in Android S. |
| // TODO(lalitm): deprecate this in T and make this the default if nothing |
| // crashes in S. |
| optional bool prefer_suspend_clock_for_snapshot = 7; |
| |
| // Disables the reporting of per-trace-writer histograms in TraceStats. |
| optional bool disable_chunk_usage_histograms = 8; |
| } |
| optional BuiltinDataSource builtin_data_sources = 20; |
| |
| // If specified, the trace will be stopped |duration_ms| after starting. |
| // This does *not* count the time the system is suspended, so we will run |
| // for duration_ms of system activity, not wall time. |
| // |
| // However in case of traces with triggers, see |
| // TriggerConfig.trigger_timeout_ms instead. |
| optional uint32 duration_ms = 3; |
| |
| // If true, tries to use CLOCK_BOOTTIME for duration_ms rather than |
| // CLOCK_MONOTONIC (which doesn't count time in suspend). Supported only on |
| // Linux/Android, no-op on other platforms. This is used when dealing with |
| // long (e.g. 24h) traces, where suspend can inflate them to weeks of |
| // wall-time, making them more likely to hit device reboots (and hence loss). |
| // This option also changes consistently the semantic of |
| // TriggerConfig.stop_delay_ms. |
| optional bool prefer_suspend_clock_for_duration = 36; |
| |
| // This is set when --dropbox is passed to the Perfetto command line client |
| // and enables guardrails that limit resource usage for traces requested |
| // by statsd. |
| optional bool enable_extra_guardrails = 4; |
| |
| enum LockdownModeOperation { |
| LOCKDOWN_UNCHANGED = 0; |
| LOCKDOWN_CLEAR = 1; |
| LOCKDOWN_SET = 2; |
| } |
| // Reject producers that are not running under the same UID as the tracing |
| // service. |
| optional LockdownModeOperation lockdown_mode = 5; |
| |
| message ProducerConfig { |
| // Identifies the producer for which this config is for. |
| optional string producer_name = 1; |
| |
| // Specifies the preferred size of the shared memory buffer. If the size is |
| // larger than the max size, the max will be used. If it is smaller than |
| // the page size or doesn't fit pages evenly into it, it will fall back to |
| // the size specified by the producer or finally the default shared memory |
| // size. |
| optional uint32 shm_size_kb = 2; |
| |
| // Specifies the preferred size of each page in the shared memory buffer. |
| // Must be an integer multiple of 4K. |
| optional uint32 page_size_kb = 3; |
| } |
| |
| repeated ProducerConfig producers = 6; |
| |
| // Contains statsd-specific metadata about an alert associated with the trace. |
| message StatsdMetadata { |
| // The identifier of the alert which triggered this trace. |
| optional int64 triggering_alert_id = 1; |
| // The uid which registered the triggering configuration with statsd. |
| optional int32 triggering_config_uid = 2; |
| // The identifier of the config which triggered the alert. |
| optional int64 triggering_config_id = 3; |
| // The identifier of the subscription which triggered this trace. |
| optional int64 triggering_subscription_id = 4; |
| } |
| |
| // Statsd-specific metadata. |
| optional StatsdMetadata statsd_metadata = 7; |
| |
| // When true && |output_path| is empty, the EnableTracing() request must |
| // provide a file descriptor. The service will then periodically read packets |
| // out of the trace buffer and store it into the passed file. |
| // If |output_path| is not empty no fd should be passed, the service |
| // will create a new file and write into that (see comment below). |
| optional bool write_into_file = 8; |
| |
| // This must point to a non-existing file. If the file exists the service |
| // will NOT overwrite and will fail instead as a security precaution. |
| // On Android, when this is used with the system traced, the path must be |
| // within /data/misc/perfetto-traces/ or the trace will fail. |
| // This option has been introduced in Android R. Before R write_into_file |
| // can be used only with the "pass a file descriptor over IPC" mode. |
| optional string output_path = 29; |
| |
| // Optional. If non-zero tunes the write period. A min value of 100ms is |
| // enforced (i.e. smaller values are ignored). |
| optional uint32 file_write_period_ms = 9; |
| |
| // Optional. When non zero the periodic write stops once at most X bytes |
| // have been written into the file. Tracing is disabled when this limit is |
| // reached, even if |duration_ms| has not been reached yet. |
| optional uint64 max_file_size_bytes = 10; |
| |
| // Contains flags which override the default values of the guardrails inside |
| // Perfetto. |
| message GuardrailOverrides { |
| // Override the default limit (in bytes) for uploading data to server within |
| // a 24 hour period. |
| // On R-, this override only affected userdebug builds. Since S, it also |
| // affects user builds. |
| optional uint64 max_upload_per_day_bytes = 1; |
| |
| // Overrides the guardrail for maximum trace buffer size. |
| // Available on U+ |
| optional uint32 max_tracing_buffer_size_kb = 2; |
| } |
| optional GuardrailOverrides guardrail_overrides = 11; |
| |
| // When true, data sources are not started until an explicit call to |
| // StartTracing() on the consumer port. This is to support early |
| // initialization and fast trace triggering. This can be used only when the |
| // Consumer explicitly triggers the StartTracing() method. |
| // This should not be used in a remote trace config via statsd, doing so will |
| // result in a hung trace session. |
| optional bool deferred_start = 12; |
| |
| // When set, it periodically issues a Flush() to all data source, forcing them |
| // to commit their data into the tracing service. This can be used for |
| // quasi-real-time streaming mode and to guarantee some partial ordering of |
| // events in the trace in windows of X ms. |
| optional uint32 flush_period_ms = 13; |
| |
| // Wait for this long for producers to acknowledge flush requests. |
| // Default 5s. |
| optional uint32 flush_timeout_ms = 14; |
| |
| // Wait for this long for producers to acknowledge stop requests. |
| // Default 5s. |
| optional uint32 data_source_stop_timeout_ms = 23; |
| |
| // |disable_clock_snapshotting| moved. |
| reserved 15; |
| |
| // Android-only. If set, sends an intent to the Traceur system app when the |
| // trace ends to notify it about the trace readiness. |
| optional bool notify_traceur = 16; |
| |
| // This field was introduced in Android S. |
| // Android-only. If set to a value > 0, marks the trace session as a candidate |
| // for being attached to a bugreport. This field effectively acts as a z-index |
| // for bugreports. When Android's dumpstate runs perfetto |
| // --save-for-bugreport, traced will pick the tracing session with the highest |
| // score (score <= 0 is ignored) and: |
| // On Android S, T: will steal its contents, save the trace into |
| // a known path and stop prematurely. |
| // On Android U+: will create a read-only snapshot and save that into a known |
| // path, without stoppin the original tracing session. |
| // When this field is set the tracing session becomes eligible to be cloned |
| // by other UIDs. |
| optional int32 bugreport_score = 30; |
| |
| // Triggers allow producers to start or stop the tracing session when an event |
| // occurs. |
| // |
| // For example if we are tracing probabilistically, most traces will be |
| // uninteresting. Triggers allow us to keep only the interesting ones such as |
| // those traces during which the device temperature reached a certain |
| // threshold. In this case the producer can activate a trigger to keep |
| // (STOP_TRACING) the trace, otherwise it can also begin a trace |
| // (START_TRACING) because it knows something is about to happen. |
| message TriggerConfig { |
| enum TriggerMode { |
| UNSPECIFIED = 0; |
| |
| // When this mode is chosen, data sources are not started until one of the |
| // |triggers| are received. This supports early initialization and fast |
| // starting of the tracing system. On triggering, the session will then |
| // record for |stop_delay_ms|. However if no trigger is seen |
| // after |trigger_timeout_ms| the session will be stopped and no data will |
| // be returned. |
| START_TRACING = 1; |
| |
| // When this mode is chosen, the session will be started via the normal |
| // EnableTracing() & StartTracing(). If no trigger is ever seen |
| // the session will be stopped after |trigger_timeout_ms| and no data will |
| // be returned. However if triggered the trace will stop after |
| // |stop_delay_ms| and any data in the buffer will be returned to the |
| // consumer. |
| STOP_TRACING = 2; |
| |
| // 3 was taken by CLONE_SNAPSHOT but that has been moved to 4. |
| // The early implementation of CLONE_SNAPSHOT had various bugs |
| // (b/290798988, b/290799105) and made it into Android U. The number |
| // change is to make sure nobody rolls out a config that hits the broken |
| // behaviour. |
| reserved 3; |
| |
| // When this mode is chosen, this causes a snapshot of the current tracing |
| // session to be created after |stop_delay_ms| while the current tracing |
| // session continues undisturbed (% an extra flush). This mode can be |
| // used only when the tracing session is handled by the "perfetto" cmdline |
| // client (which is true in 90% of cases). Part of the business logic |
| // necessary for this behavior, and ensuing file handling, lives in |
| // perfetto_cmd.cc . On other consumers, this causes only a notification |
| // of the trigger through a CloneTriggerHit ObservableEvent. The custom |
| // consumer is supposed to call CloneSession() itself after the event. |
| // Use use_clone_snapshot_if_available=true when targeting older versions |
| // of perfetto. |
| CLONE_SNAPSHOT = 4; |
| |
| // NOTE: CLONE_SNAPSHOT should be used only when we targeting Android V+ |
| // (15+) / Perfetto v38+. A bug in older versions of the tracing service |
| // might cause indefinitely long tracing sessions (see b/274931668). |
| } |
| optional TriggerMode trigger_mode = 1; |
| |
| // This flag is really a workaround for b/274931668. This is needed only |
| // when deploying configs to different versions of the tracing service. |
| // When this is set to true this has the same effect of setting trigger_mode |
| // to CLONE_SNAPSHOT on newer versions of the service. This boolean has been |
| // introduced to allow to have configs that use CLONE_SNAPSHOT on newer |
| // versions of Android and fall back to STOP_TRACING on older versions where |
| // CLONE_SNAPSHOT did not exist. |
| // When using this flag, trigger_mode must be set to STOP_TRACING. |
| optional bool use_clone_snapshot_if_available = 5; |
| |
| // DEPRECATED, was use_clone_snapshot_if_available in U. See the comment |
| // around CLONE_SNAPSHOT. |
| reserved 4; |
| |
| message Trigger { |
| // The producer must specify this name to activate the trigger. |
| optional string name = 1; |
| |
| // An std::regex that will match the producer that can activate this |
| // trigger. This is optional. If unset any producers can activate this |
| // trigger. |
| optional string producer_name_regex = 2; |
| |
| // After a trigger is received either in START_TRACING or STOP_TRACING |
| // mode then the trace will end |stop_delay_ms| after triggering. |
| // In CLONE_SNAPSHOT mode, this is the delay between the trigger and the |
| // snapshot. |
| // If |prefer_suspend_clock_for_duration| is set, the duration will be |
| // based on wall-clock, counting also time in suspend. |
| optional uint32 stop_delay_ms = 3; |
| |
| // Limits the number of traces this trigger can start/stop in a rolling |
| // 24 hour window. If this field is unset or zero, no limit is applied and |
| // activiation of this trigger *always* starts/stops the trace. |
| optional uint32 max_per_24_h = 4; |
| |
| // A value between 0 and 1 which encodes the probability of skipping a |
| // trigger with this name. This is useful for reducing the probability |
| // of high-frequency triggers from dominating trace finaization. If this |
| // field is unset or zero, the trigger will *never* be skipped. If this |
| // field is greater than or equal to 1, this trigger will *always* be |
| // skipped i.e. it will be as if this trigger was never included in the |
| // first place. |
| // This probability check is applied *before* any other limits. For |
| // example, if |max_per_24_h| is also set, first we will check if the |
| // probability bar is met and only then will we check the |max_per_24_h| |
| // limit. |
| optional double skip_probability = 5; |
| } |
| // A list of triggers which are related to this configuration. If ANY |
| // trigger is seen then an action will be performed based on |trigger_mode|. |
| repeated Trigger triggers = 2; |
| |
| // Required and must be positive if a TriggerConfig is specified. This is |
| // how long this TraceConfig should wait for a trigger to arrive. After this |
| // period of time if no trigger is seen the TracingSession will be cleaned |
| // up. |
| optional uint32 trigger_timeout_ms = 3; |
| } |
| optional TriggerConfig trigger_config = 17; |
| |
| // When this is non-empty the perfetto command line tool will ignore the rest |
| // of this TraceConfig and instead connect to the perfetto service as a |
| // producer and send these triggers, potentially stopping or starting traces |
| // that were previous configured to use a TriggerConfig. |
| repeated string activate_triggers = 18; |
| |
| // Configuration for trace contents that reference earlier trace data. For |
| // example, a data source might intern strings, and emit packets containing |
| // {interned id : string} pairs. Future packets from that data source can then |
| // use the interned ids instead of duplicating the raw string contents. The |
| // trace parser will then need to use that interning table to fully interpret |
| // the rest of the trace. |
| message IncrementalStateConfig { |
| // If nonzero, notify eligible data sources to clear their incremental state |
| // periodically, with the given period. The notification is sent only to |
| // data sources that have |handles_incremental_state_clear| set in their |
| // DataSourceDescriptor. The notification requests that the data source |
| // stops referring to past trace contents. This is particularly useful when |
| // tracing in ring buffer mode, where it is not exceptional to overwrite old |
| // trace data. |
| // |
| // Warning: this time-based global clearing is likely to be removed in the |
| // future, to be replaced with a smarter way of sending the notifications |
| // only when necessary. |
| optional uint32 clear_period_ms = 1; |
| } |
| optional IncrementalStateConfig incremental_state_config = 21; |
| |
| // Additional guardrail used by the Perfetto command line client. |
| // On user builds when --dropbox is set perfetto will refuse to trace unless |
| // this is also set. |
| // Added in Q. |
| optional bool allow_user_build_tracing = 19; |
| |
| // If set the tracing service will ensure there is at most one tracing session |
| // with this key. |
| optional string unique_session_name = 22; |
| |
| // Compress trace with the given method. Best effort. |
| enum CompressionType { |
| COMPRESSION_TYPE_UNSPECIFIED = 0; |
| COMPRESSION_TYPE_DEFLATE = 1; |
| } |
| optional CompressionType compression_type = 24; |
| |
| // Use the legacy codepath that compresses from perfetto_cmd.cc instead of |
| // using the new codepath that compresses from tracing_service_impl.cc. This |
| // will be removed in the future. |
| optional bool compress_from_cli = 37; |
| |
| // Android-only. Not for general use. If set, saves the trace into an |
| // incident. This field is read by perfetto_cmd, rather than the tracing |
| // service. This field must be set when passing the --upload flag to |
| // perfetto_cmd. |
| message IncidentReportConfig { |
| // In this message, either: |
| // * all of |destination_package|, |destination_class| and |privacy_level| |
| // must be set. |
| // * |skip_incidentd| must be explicitly set to true. |
| |
| optional string destination_package = 1; |
| optional string destination_class = 2; |
| // Level of filtering in the requested incident. See |Destination| in |
| // frameworks/base/core/proto/android/privacy.proto. |
| optional int32 privacy_level = 3; |
| |
| // If true, then skips saving the trace to incidentd. |
| // |
| // This flag is useful in testing (e.g. Perfetto-statsd integration tests) |
| // or when we explicitly don't want traces to go to incidentd even when they |
| // usually would (e.g. configs deployed using statsd but only used for |
| // inclusion in bugreports using |bugreport_score|). |
| // |
| // The motivation for having this flag, instead of just not setting |
| // |incident_report_config|, is prevent accidents where |
| // |incident_report_config| is omitted by mistake. |
| optional bool skip_incidentd = 5; |
| |
| // If true, do not write the trace into dropbox (i.e. incident only). |
| // Otherwise, write to both dropbox and incident. |
| // TODO(lalitm): remove this field as we no longer use Dropbox. |
| optional bool skip_dropbox = 4 [deprecated = true]; |
| } |
| optional IncidentReportConfig incident_report_config = 25; |
| |
| enum StatsdLogging { |
| STATSD_LOGGING_UNSPECIFIED = 0; |
| STATSD_LOGGING_ENABLED = 1; |
| STATSD_LOGGING_DISABLED = 2; |
| } |
| |
| // Android-only. Not for general use. If specified, sets the logging to statsd |
| // of guardrails and checkpoints in the tracing service. perfetto_cmd sets |
| // this to enabled (if not explicitly set in the config) when specifying |
| // --upload. |
| optional StatsdLogging statsd_logging = 31; |
| |
| // DEPRECATED. Was trace_uuid, use trace_uuid_msb and trace_uuid_lsb instead. |
| reserved 26; |
| |
| // An identifier clients can use to tie this trace to other logging. |
| // DEPRECATED as per v32. See TracePacket.trace_uuid for the authoritative |
| // Trace UUID. If this field is set, the tracing service will respect the |
| // requested UUID (i.e. TracePacket.trace_uuid == this field) but only if |
| // gap-less snapshotting is not used. |
| optional int64 trace_uuid_msb = 27 [deprecated = true]; |
| optional int64 trace_uuid_lsb = 28 [deprecated = true]; |
| |
| // When set applies a post-filter to the trace contents using the filter |
| // provided. The filter is applied at ReadBuffers() time and works both in the |
| // case of IPC readback and write_into_file. This filter can be generated |
| // using `tools/proto_filter -s schema.proto -F filter_out.bytes` or |
| // `-T filter_out.escaped_string` (for .pbtx). See go/trace-filtering for |
| // design. |
| // |
| // Introduced in Android S, but it was broken (b/195065199). Reintroduced in |
| // Android T with a different field number. Updated in Android U with a new |
| // bytecode version which supports string filtering. |
| message TraceFilter { |
| // ========================= |
| // Filter bytecode. |
| // ========================= |
| |
| // The bytecode as implemented in Android T. |
| optional bytes bytecode = 1; |
| |
| // The bytecode as implemented in Android U. Adds support for string |
| // filtering. |
| optional bytes bytecode_v2 = 2; |
| |
| // ========================= |
| // String filtering |
| // ========================= |
| |
| // The principles and terminology of string filtering is heavily inspired by |
| // iptables. A "rule" decide how strings should be filtered. Each rule |
| // contains a "policy" which indicates the algorithm to use for filtering. |
| // A "chain" is a list of rules which will be sequentially checked against |
| // each string. |
| // |
| // The first rule which applies to the string terminates filtering for that |
| // string. If no rules apply, the string is left unchanged. |
| |
| // A policy specifies which algorithm should be used for filtering the |
| // string. |
| enum StringFilterPolicy { |
| SFP_UNSPECIFIED = 0; |
| |
| // Tries to match the string field against |regex_pattern|. If it |
| // matches, all matching groups are "redacted" (i.e. replaced with a |
| // constant string) and filtering is terminated (i.e. no further rules are |
| // checked). If it doesn't match, the string is left unchanged and the |
| // next rule in chain is considered. |
| SFP_MATCH_REDACT_GROUPS = 1; |
| |
| // Like |SFP_MATCH_REDACT_GROUPS| but tries to do some pre-work before |
| // checking the regex. Specifically, it tries to parse the string field as |
| // an atrace tracepoint and checks if the post-tgid field starts with |
| // |atrace_post_tgid_starts_with|. The regex matching is only performed if |
| // this check succeeds. |
| SFP_ATRACE_MATCH_REDACT_GROUPS = 2; |
| |
| // Tries to match the string field against |regex_pattern|. If it |
| // matches, filtering is terminated (i.e. no further rules are checked). |
| // If it doesn't match, the string is left unchanged and the next rule in |
| // chain is considered. |
| SFP_MATCH_BREAK = 3; |
| |
| // Like |SFP_MATCH_BREAK| but tries to do some pre-work before checking |
| // the regex. Specifically, it tries to parse the string field as an |
| // atrace tracepoint and checks if the post-tgid field starts with |
| // |atrace_post_tgid_starts_with|. The regex matching is only performed if |
| // this check succeeds. |
| SFP_ATRACE_MATCH_BREAK = 4; |
| |
| // Tries to repeatedly search (i.e. find substrings of) the string field |
| // with |regex_pattern|. For each match, redacts any matching groups (i.e. |
| // replaced with a constant string). Once there are no further matches, |
| // filtering is terminated (i.e. no further rules are checked). |
| // |
| // Note that this is policy is a "search" policy not a "match" policy |
| // unlike the above policies: |
| // * Match policies require matching the full string i.e. there is an |
| // implicit leading `^` and trailing `$`. |
| // * Search policies perform repeated partial matching of the string |
| // e.g. |
| // - String: `foo=aaa,bar=123,foo=bbb,baz=456` |
| // - Pattern: `foo=(\d+)` |
| // - Output: `foo=P6O,bar=123,foo=P6O,baz=456` |
| // where P6O is the redaction string |
| // |
| // All of this is only performed after some pre-work where we try to parse |
| // the string field as an atrace tracepoint and check if the post-tgid |
| // field starts with |atrace_post_tgid_starts_with|. |
| // |
| // If there are no partial matches, the string is left unchanged and the |
| // next rule in chain is considered. |
| SFP_ATRACE_REPEATED_SEARCH_REDACT_GROUPS = 5; |
| } |
| |
| // A rule specifies how strings should be filtered. |
| message StringFilterRule { |
| // The policy (i.e. algorithm) dictating how strings matching this rule |
| // should be handled. |
| optional StringFilterPolicy policy = 1; |
| |
| // The regex pattern used to match against each string. |
| optional string regex_pattern = 2; |
| |
| // The string which should appear after the tgid in atrace tracepoint |
| // strings. |
| optional string atrace_payload_starts_with = 3; |
| } |
| |
| // A chain is a list of rules which string will be sequentially checked |
| // against. |
| message StringFilterChain { |
| repeated StringFilterRule rules = 1; |
| } |
| optional StringFilterChain string_filter_chain = 3; |
| } |
| // old field number for trace_filter |
| reserved 32; |
| optional TraceFilter trace_filter = 33; |
| |
| // Android-only. Not for general use. If set, reports the trace to the |
| // Android framework. This field is read by perfetto_cmd, rather than the |
| // tracing service. This field must be set when passing the --upload flag to |
| // perfetto_cmd. |
| message AndroidReportConfig { |
| // In this message, either: |
| // * |reporter_service_package| and |reporter_service_class| must be set. |
| // * |skip_reporting| must be explicitly set to true. |
| |
| optional string reporter_service_package = 1; |
| optional string reporter_service_class = 2; |
| |
| // If true, then skips reporting the trace to Android framework. |
| // |
| // This flag is useful in testing (e.g. Perfetto-statsd integration tests) |
| // or when we explicitly don't want to report traces to the framework even |
| // when they usually would (e.g. configs deployed using statsd but only |
| // used for inclusion in bugreports using |bugreport_score|). |
| // |
| // The motivation for having this flag, instead of just not setting |
| // |framework_report_config|, is prevent accidents where |
| // |framework_report_config| is omitted by mistake. |
| optional bool skip_report = 3; |
| |
| // If true, will direct the Android framework to read the data in trace |
| // file and pass it to the reporter class over a pipe instead of passing |
| // the file descriptor directly. |
| // |
| // This flag is needed because the Android test framework does not |
| // currently support priv-app helper apps (in terms of SELinux) and we |
| // really don't want to add an allow rule for untrusted_app to receive |
| // trace fds. |
| // |
| // Because of this, we instead will direct the framework to create a new |
| // pipe and pass this to the reporter process instead. As the pipe is |
| // created by the framework, we won't have any problems with SELinux |
| // (system_server is already allowed to pass pipe fds, even |
| // to untrusted apps). |
| // |
| // As the name suggests this option *MUST* only be used for testing. |
| // Note that the framework will reject (and drop) files which are too |
| // large both for simplicity and to be minimize the amount of data we |
| // pass to a non-priv app (note that the framework will still check |
| // manifest permissions even though SELinux permissions are worked around). |
| optional bool use_pipe_in_framework_for_testing = 4; |
| } |
| optional AndroidReportConfig android_report_config = 34; |
| |
| // If set, delays the start of tracing by a random duration. The duration is |
| // chosen from a uniform distribution between the specified minimum and |
| // maximum. |
| // Note: this delay is implemented by perfetto_cmd *not* by traced so will |
| // not work if you communicate with traced directly over the consumer API. |
| // Introduced in Android T. |
| message CmdTraceStartDelay { |
| optional uint32 min_delay_ms = 1; |
| optional uint32 max_delay_ms = 2; |
| } |
| optional CmdTraceStartDelay cmd_trace_start_delay = 35; |
| } |
| |
| // End of protos/perfetto/config/trace_config.proto |