| // 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/metrics/android/process_metadata.proto |
| |
| message AndroidProcessMetadata { |
| // Process name. Usually, cmdline or <package_name>(:<custom_name>)?. |
| optional string name = 1; |
| |
| // User id under which this process runs. |
| optional int64 uid = 2; |
| |
| // Package metadata from Android package list. |
| message Package { |
| optional string package_name = 1; |
| optional int64 apk_version_code = 2; |
| optional bool debuggable = 3; |
| } |
| |
| // Package that this process belongs to. |
| // |
| // If this process shares its uid (see `packages_for_uid` field), the package |
| // is determined based on the process name and package name. If there is no |
| // match this field is empty. |
| optional Package package = 7; |
| |
| // All packages using this uid. |
| // |
| // Shared uid documentation: |
| // https://developer.android.com/guide/topics/manifest/manifest-element#uid |
| repeated Package packages_for_uid = 8; |
| |
| reserved 3, 4, 5, 6; |
| } |
| |
| // End of protos/perfetto/metrics/android/process_metadata.proto |
| |
| // Begin of protos/perfetto/metrics/android/android_blocking_calls_cuj_metric.proto |
| |
| // Blocking calls inside Android CUJs. Shows count and total duration for each. |
| message AndroidBlockingCallsCujMetric { |
| repeated Cuj cuj = 1; |
| |
| // Next id: 7 |
| message Cuj { |
| // ID of the CUJ that is unique within the trace. |
| optional int32 id = 1; |
| |
| // Name of the CUJ, extracted from the CUJ jank or latency trace marker. |
| // For example SHADE_EXPAND_COLLAPSE from J<SHADE_EXPAND_COLLAPSE>. |
| optional string name = 2; |
| |
| // Details about the process (uid, version, etc) |
| optional AndroidProcessMetadata process = 3; |
| |
| // ts of the CUJ trace marker slice, in ns. |
| optional int64 ts = 4; |
| |
| // dur of the CUJ trace marker slice, in ns. |
| optional int64 dur = 5; |
| |
| // List of blocking calls on the process main thread. |
| repeated BlockingCall blocking_calls = 6; |
| } |
| |
| // Blocking call on the main thread. |
| message BlockingCall { |
| // Name of the blocking call |
| optional string name = 1; |
| // Number of times it happened within the CUJ |
| optional int64 cnt = 2; |
| // Total duration within the CUJ |
| optional int64 total_dur_ms = 3; |
| } |
| } |
| |
| // End of protos/perfetto/metrics/android/android_blocking_calls_cuj_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/android_frame_timeline_metric.proto |
| |
| message AndroidFrameTimelineMetric { |
| message ProcessBreakdown { |
| optional AndroidProcessMetadata process = 3; |
| |
| optional int64 total_frames = 4; |
| optional int64 missed_frames = 5; |
| optional int64 missed_app_frames = 6; |
| optional int64 missed_sf_frames = 7; |
| |
| optional int64 frame_dur_max = 8; |
| optional int64 frame_dur_avg = 9; |
| optional int64 frame_dur_p50 = 10; |
| optional int64 frame_dur_p90 = 11; |
| optional int64 frame_dur_p95 = 12; |
| optional int64 frame_dur_p99 = 13; |
| optional double frame_dur_ms_p50 = 14; |
| optional double frame_dur_ms_p90 = 15; |
| optional double frame_dur_ms_p95 = 16; |
| optional double frame_dur_ms_p99 = 17; |
| optional int64 dropped_frames = 18; |
| |
| reserved 1, 2; |
| } |
| |
| optional int64 total_frames = 4; |
| optional int64 missed_app_frames = 5; |
| optional int64 dropped_frames = 6; |
| |
| repeated ProcessBreakdown process = 2; |
| |
| reserved 1; |
| } |
| |
| |
| // End of protos/perfetto/metrics/android/android_frame_timeline_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/android_trusty_workqueues.proto |
| |
| // Metric used to generate a simplified view of the Trusty kworker events. |
| message AndroidTrustyWorkqueues {} |
| |
| // End of protos/perfetto/metrics/android/android_trusty_workqueues.proto |
| |
| // Begin of protos/perfetto/metrics/android/batt_metric.proto |
| |
| message AndroidBatteryMetric { |
| message BatteryCounters { |
| // Timestamp measured from boot time [ns]. |
| optional int64 timestamp_ns = 1; |
| // Fields 2-5 are the same as in BatteryCounters proto in TracePacket. |
| optional double charge_counter_uah = 2; |
| optional float capacity_percent = 3; |
| optional double current_ua = 4; |
| optional double current_avg_ua = 5; |
| } |
| |
| message BatteryAggregates { |
| // Field numbers for these 3 == the int values from Android |
| optional int64 total_screen_off_ns = 1; |
| optional int64 total_screen_on_ns = 2; |
| optional int64 total_screen_doze_ns = 3; |
| // Total time a wakelock was held |
| optional int64 total_wakelock_ns = 4; |
| // Amount of time the device was suspended. Depends on the ftrace source |
| // "power/suspend_resume". |
| optional int64 sleep_ns = 5; |
| optional int64 sleep_screen_off_ns = 6; |
| optional int64 sleep_screen_on_ns = 7; |
| optional int64 sleep_screen_doze_ns = 8; |
| } |
| |
| // Period of time during the trace that the device went to sleep completely. |
| message SuspendPeriod { |
| optional int64 timestamp_ns = 1; |
| optional int64 duration_ns = 2; |
| } |
| |
| // Battery counters info for each ts of the trace. This should only be |
| // extracted for short traces. |
| repeated BatteryCounters battery_counters = 1; |
| |
| optional BatteryAggregates battery_aggregates = 2; |
| |
| repeated SuspendPeriod suspend_period = 3; |
| } |
| |
| // End of protos/perfetto/metrics/android/batt_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/binder_metric.proto |
| |
| // This metric provides the following: |
| // 1. Per-process Binder statistics for traces with binder_driver enabled. |
| // Specifically, transactions are categorized and counted |
| // 2. Unaggregated binder txn durations with per-txn aggregated thread state and |
| // blocked function |
| // durations |
| message AndroidBinderMetric { |
| message PerProcessBreakdown { |
| optional string process_name = 1; |
| optional uint32 pid = 2; |
| optional string slice_name = 3; |
| optional uint32 count = 4; |
| } |
| |
| message UnaggregatedTxnBreakdown { |
| // General |
| optional string aidl_name = 1; |
| // Client |
| optional uint32 binder_txn_id = 2; |
| optional string client_process = 3; |
| optional string client_thread = 4; |
| optional bool is_main_thread = 5; |
| optional int64 client_ts = 6; |
| optional int64 client_dur = 7; |
| // Server |
| optional uint32 binder_reply_id = 8; |
| optional string server_process = 9; |
| optional string server_thread = 10; |
| optional int64 server_ts = 11; |
| optional int64 server_dur = 12; |
| // Aggregations |
| repeated ThreadStateBreakdown thread_states = 13; |
| repeated BlockedFunctionBreakdown blocked_functions = 14; |
| } |
| |
| message ThreadStateBreakdown { |
| optional string thread_state_type = 1; |
| optional string thread_state = 2; |
| optional int64 thread_state_dur = 3; |
| optional int64 thread_state_count = 4; |
| } |
| |
| message BlockedFunctionBreakdown { |
| optional string thread_state_type = 1; |
| optional string blocked_function = 2; |
| optional int64 blocked_function_dur = 3; |
| optional int64 blocked_function_count = 4; |
| } |
| |
| repeated PerProcessBreakdown process_breakdown = 1; |
| repeated UnaggregatedTxnBreakdown unaggregated_txn_breakdown = 2; |
| } |
| |
| // End of protos/perfetto/metrics/android/binder_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/camera_metric.proto |
| |
| message AndroidCameraMetric { |
| message Counter { |
| optional double min = 1; |
| optional double max = 2; |
| optional double avg = 3; |
| } |
| |
| // Counter for the sum of DMA and RSS across GCA, cameraserver |
| // and HAL. This provides a single number for the memory |
| // pressure using the camera is putting on the rest of the |
| // system. |
| // |
| // Note: this number assumes that all DMA pressure is coming |
| // from the camera as this is usually a pretty good |
| // approximation. Being more accurate here would increase the |
| // complexity of the metric significantly. |
| // |
| // Note: if there are multiple GCA/cameraserver/HAL processes |
| // in the trace, this metric will simply take the latest |
| // one in the trace and ignore the others. |
| optional Counter gc_rss_and_dma = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/camera_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/camera_unagg_metric.proto |
| |
| message AndroidCameraUnaggregatedMetric { |
| message Value { |
| optional int64 ts = 1; |
| optional double value = 2; |
| } |
| |
| // Timeseries for the sum of DMA and RSS across GCA, cameraserver |
| // and HAL. This provides a single number for the memory |
| // pressure using the camera is putting on the rest of the |
| // system. |
| // |
| // Note: this number assumes that all DMA pressure is coming |
| // from the camera as this is usually a pretty good |
| // approximation. Being more accurate here would increase the |
| // complexity of the metric significantly. |
| // |
| // Note: if there are multiple GCA/cameraserver/HAL processes |
| // in the trace, this metric will simply take the latest |
| // one in the trace and ignore the others. |
| repeated Value gc_rss_and_dma = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/camera_unagg_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/cpu_metric.proto |
| |
| message AndroidCpuMetric { |
| // Next id: 6 |
| message Metrics { |
| // CPU megacycles (i.e. cycles divided by 1e6). |
| optional int64 mcycles = 1; |
| |
| // Total time the thread was running for this breakdown in |
| // nanoseconds. |
| optional int64 runtime_ns = 2; |
| |
| // Min/max/average CPU frequency weighted by the time the CPU was |
| // running at each frequency in this breakdown. |
| optional int64 min_freq_khz = 3; |
| optional int64 max_freq_khz = 4; |
| optional int64 avg_freq_khz = 5; |
| } |
| |
| // Next id: 7 |
| message CoreData { |
| optional uint32 id = 1; |
| optional Metrics metrics = 6; |
| |
| reserved 2 to 5; |
| } |
| |
| // Next id: 3 |
| message CoreTypeData { |
| optional string type = 1; |
| optional Metrics metrics = 2; |
| } |
| |
| // Next id: 7 |
| message Thread { |
| optional string name = 1; |
| optional Metrics metrics = 4; |
| |
| // Breakdowns of above metrics. |
| repeated CoreData core = 2; |
| repeated CoreTypeData core_type = 5; |
| |
| reserved 3; |
| } |
| |
| // Next id: 8 |
| message Process { |
| optional string name = 1; |
| optional Metrics metrics = 4; |
| |
| // Breakdowns of above metrics. |
| repeated Thread threads = 6; |
| repeated CoreData core = 7; |
| repeated CoreTypeData core_type = 5; |
| |
| reserved 3; |
| } |
| |
| repeated Process process_info = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/cpu_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/display_metrics.proto |
| |
| message AndroidDisplayMetrics { |
| // Stat that reports the number of duplicate frames submitted |
| // to the display for rendering. That is frames that have the same |
| // pixels values but where still submitted. It is tracked based on |
| // comparing the MISR of the current frame vs previous frame. |
| optional uint32 total_duplicate_frames = 1; |
| |
| // Stat reports whether there is any duplicate_frames tracked |
| optional uint32 duplicate_frames_logged = 2; |
| |
| // Stat that reports the number of dpu underrrun occurs count. |
| optional uint32 total_dpu_underrun_count = 3; |
| |
| |
| message RefreshRateStat { |
| // The refresh rate value (the number of frames per second) |
| optional uint32 refresh_rate_fps = 1; |
| |
| // Calculate the number of refresh rate switches to this fps |
| optional uint32 count = 2; |
| |
| // Calculate the total duration of refresh rate stays at this fps |
| optional double total_dur_ms = 3; |
| |
| // Calculate the average duration of refresh rate stays at this fps |
| optional double avg_dur_ms = 4; |
| } |
| |
| // Calculate the total number of refresh rate changes |
| optional uint32 refresh_rate_switches = 4; |
| |
| // The statistics for each refresh rate value |
| repeated RefreshRateStat refresh_rate_stats = 5; |
| |
| // Stats to measure the runtime of updating the power state in |
| // DisplayPowerController |
| message UpdatePowerState { |
| optional uint32 avg_runtime_micro_secs = 2; |
| |
| // Removed: avg_runtime_ms |
| reserved 1; |
| } |
| |
| optional UpdatePowerState update_power_state = 6; |
| } |
| |
| // End of protos/perfetto/metrics/android/display_metrics.proto |
| |
| // Begin of protos/perfetto/metrics/android/dma_heap_metric.proto |
| |
| // dma-buf heap memory stats on Android. |
| message AndroidDmaHeapMetric { |
| optional double avg_size_bytes = 1; |
| optional double min_size_bytes = 2; |
| optional double max_size_bytes = 3; |
| |
| // Total allocation size. |
| // Essentially the sum of positive allocs. |
| optional double total_alloc_size_bytes = 4; |
| } |
| |
| // End of protos/perfetto/metrics/android/dma_heap_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/dvfs_metric.proto |
| |
| message AndroidDvfsMetric { |
| |
| message BandStat { |
| // Operating frequency |
| optional int32 freq_value = 1; |
| |
| // Percentage of duration in this operating frequency compared to all frequencies |
| optional double percentage = 2; |
| |
| // Total duration in ns when the state was in this operating frequency |
| optional int64 duration_ns = 3; |
| } |
| |
| message FrequencyResidency { |
| // Frequency representative name |
| optional string freq_name = 1; |
| // Each band statistics meta |
| repeated BandStat band_stat = 2; |
| } |
| |
| // Frequency residency metrics from clock_set_rate ftrace event. |
| repeated FrequencyResidency freq_residencies = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/dvfs_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/fastrpc_metric.proto |
| |
| // fastrpc memory stats on Android. |
| message AndroidFastrpcMetric { |
| message Subsystem { |
| optional string name = 1; |
| optional double avg_size_bytes = 2; |
| optional double min_size_bytes = 3; |
| optional double max_size_bytes = 4; |
| |
| // Total allocation size. |
| // Essentially the sum of positive allocs. |
| optional double total_alloc_size_bytes = 5; |
| } |
| |
| repeated Subsystem subsystem = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/fastrpc_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/g2d_metric.proto |
| |
| message G2dMetrics { |
| message G2dInstance { |
| // G2d name. |
| optional string name = 1; |
| |
| optional uint32 frame_count = 5; |
| optional uint32 error_count = 6; |
| |
| optional double max_dur_ms = 7; |
| optional double min_dur_ms = 8; |
| optional double avg_dur_ms = 9; |
| |
| // Removed: was int64 versions of max_dur_ns, min_dur_ns and avg_dur_ns. |
| reserved 2 to 4; |
| } |
| message G2dMetric { |
| // G2D Metric for each G2D Instance. |
| repeated G2dInstance instances = 1; |
| |
| // the number of frames processed by G2D |
| optional uint32 frame_count = 5; |
| // the number of error events |
| optional uint32 error_count = 6; |
| |
| // max/min/avg G2d frame durations for all instances. |
| optional double max_dur_ms = 7; |
| optional double min_dur_ms = 8; |
| optional double avg_dur_ms = 9; |
| |
| // Removed: was int64 versions of max_dur_ns, min_dur_ns and avg_dur_ns. |
| reserved 2 to 4; |
| } |
| |
| optional G2dMetric g2d_hw = 1; |
| optional G2dMetric g2d_sw = 2; |
| } |
| |
| // End of protos/perfetto/metrics/android/g2d_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/gpu_metric.proto |
| |
| message AndroidGpuMetric { |
| message Process { |
| // Process name. |
| optional string name = 1; |
| |
| // max/min/avg GPU memory used by this process. |
| optional int64 mem_max = 2; |
| optional int64 mem_min = 3; |
| optional int64 mem_avg = 4; |
| } |
| |
| // GPU metric for processes using GPU. |
| repeated Process processes = 1; |
| |
| // max/min/avg GPU memory used by the entire system. |
| optional int64 mem_max = 2; |
| optional int64 mem_min = 3; |
| optional int64 mem_avg = 4; |
| |
| message FrequencyMetric { |
| // Identifier for GPU in a multi-gpu device. |
| optional uint32 gpu_id = 1; |
| |
| // max/min/avg GPU frequency for this gpu_id |
| // the calculation of avg is weighted by the duration of each frequency |
| optional int64 freq_max = 2; |
| optional int64 freq_min = 3; |
| optional double freq_avg = 4; |
| |
| message MetricsPerFrequency { |
| // Used frequency |
| optional int64 freq = 1; |
| |
| // Total duration in ms when the state of GPU was in this frequency |
| optional double dur_ms = 2; |
| |
| // Percentage of duration in this frequency compared to all frequencies |
| // in this gpu_id |
| optional double percentage = 3; |
| } |
| |
| // Metrics for each used GPU frequency |
| repeated MetricsPerFrequency used_freqs = 5; |
| } |
| |
| // GPU frequency metric for each gpu_id |
| repeated FrequencyMetric freq_metrics = 5; |
| } |
| |
| // End of protos/perfetto/metrics/android/gpu_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/hwcomposer.proto |
| |
| message AndroidHwcomposerMetrics { |
| // Counts the number of composition total layers in the trace. (non-weighted average) |
| optional double composition_total_layers = 1; |
| |
| // Counts the number of composition dpu layers in the trace. (non-weighted average) |
| optional double composition_dpu_layers = 2; |
| |
| // Counts the number of composition gpu layers in the trace. (non-weighted average) |
| optional double composition_gpu_layers = 3; |
| |
| // Counts the number of composition dpu cached layers in the trace. (non-weighted average) |
| optional double composition_dpu_cached_layers = 4; |
| |
| // Counts the number of composition surfaceflinger cached layers in the trace. |
| // (non-weighted average) |
| optional double composition_sf_cached_layers = 5; |
| |
| // Counts how many times validateDisplay is skipped. |
| optional int32 skipped_validation_count = 6; |
| |
| // Counts how many times validateDisplay cannot be skipped. |
| optional int32 unskipped_validation_count = 7; |
| |
| // Counts how many times validateDisplay is already separated from presentDisplay |
| // since the beginning. |
| optional int32 separated_validation_count = 8; |
| |
| // Counts how many unhandled validation cases which might be caused by errors. |
| optional int32 unknown_validation_count = 9; |
| |
| // the average of overall hwcomposer execution time. |
| optional double avg_all_execution_time_ms = 10; |
| |
| // the average of hwcomposer execution time for skipped validation cases. |
| optional double avg_skipped_execution_time_ms = 11; |
| |
| // the average of hwcomposer execution time for unskipped validation cases. |
| optional double avg_unskipped_execution_time_ms = 12; |
| |
| // the average of hwcomposer execution time for separated validation cases. |
| optional double avg_separated_execution_time_ms = 13; |
| |
| message DpuVoteMetrics { |
| // the thread ID that handles this track |
| optional uint32 tid = 1; |
| |
| // the weighted average of DPU Vote Clock |
| optional double avg_dpu_vote_clock = 2; |
| |
| // the weighted average of DPU Vote Avg Bandwidth |
| optional double avg_dpu_vote_avg_bw = 3; |
| |
| // the weighted average of DPU Vote Peak Bandwidth |
| optional double avg_dpu_vote_peak_bw = 4; |
| |
| // the weighted average of DPU Vote RT (Real Time) Bandwidth |
| optional double avg_dpu_vote_rt_bw = 5; |
| } |
| |
| // DPU Vote Metrics for each thread track |
| repeated DpuVoteMetrics dpu_vote_metrics = 14; |
| } |
| |
| // End of protos/perfetto/metrics/android/hwcomposer.proto |
| |
| // Begin of protos/perfetto/metrics/android/hwui_metric.proto |
| |
| // Android HWUI graphics performance and graphics memory usage metrics. |
| message ProcessRenderInfo { |
| // Name of the package launched |
| optional string process_name = 1; |
| |
| // CPU time spent on RenderThread in milliseconds. |
| optional int64 rt_cpu_time_ms = 2; |
| |
| // Number of frames drawn on RenderThread, followed by max/min/avg CPU time to draw a frame |
| // in nanoseconds. |
| optional uint32 draw_frame_count = 3; |
| optional int64 draw_frame_max = 4; |
| optional int64 draw_frame_min = 5; |
| optional double draw_frame_avg = 6; |
| |
| // Number of GPU commands flushes and max/min/avg time per flush in nanoseconds. |
| optional uint32 flush_count = 7; |
| optional int64 flush_max = 8; |
| optional int64 flush_min = 9; |
| optional double flush_avg = 10; |
| |
| // Number of View tree preparation counts and max/min/avg time to traverse the tree in |
| // nanoseconds. |
| optional uint32 prepare_tree_count = 11; |
| optional int64 prepare_tree_max = 12; |
| optional int64 prepare_tree_min = 13; |
| optional double prepare_tree_avg = 14; |
| |
| // Number of times the GPU rendered a frame and max/min/avg time for GPU to finish rendering in |
| // in nanoseconds. |
| optional uint32 gpu_completion_count = 15; |
| optional int64 gpu_completion_max = 16; |
| optional int64 gpu_completion_min = 17; |
| optional double gpu_completion_avg = 18; |
| |
| // Number of times a frame was recorded/serialized in a display list on the UI thread with |
| // max/min/avg time in nanoseconds. |
| optional uint32 ui_record_count = 19; |
| optional int64 ui_record_max = 20; |
| optional int64 ui_record_min = 21; |
| optional double ui_record_avg = 22; |
| |
| // number of unique shader programs that were used to render frames, followed by total and average |
| // times to prepare a shader in nanoseconds. |
| optional uint32 shader_compile_count = 23; |
| optional int64 shader_compile_time = 24; |
| optional double shader_compile_avg = 25; |
| // number of shader programs loaded from the disk cache, followed by total time and average time |
| // to prepare a shader in nanoseconds. |
| optional uint32 cache_hit_count = 26; |
| optional int64 cache_hit_time = 27; |
| optional double cache_hit_avg = 28; |
| // number of shader programs compiled/linked, followed by total time and average time to prepare |
| // a shader in nanoseconds. |
| optional uint32 cache_miss_count = 29; |
| optional int64 cache_miss_time = 30; |
| optional double cache_miss_avg = 31; |
| |
| // max/min/avg CPU memory used for graphics by HWUI at the end of a frame. |
| optional int64 graphics_cpu_mem_max = 32; |
| optional int64 graphics_cpu_mem_min = 33; |
| optional double graphics_cpu_mem_avg = 34; |
| |
| // max/min/avg GPU memory used by HWUI at the end of a frame excluding textures. |
| optional int64 graphics_gpu_mem_max = 35; |
| optional int64 graphics_gpu_mem_min = 36; |
| optional double graphics_gpu_mem_avg = 37; |
| |
| // max/min/avg memory used for GPU textures by HWUI at the end of a frame. |
| optional int64 texture_mem_max = 38; |
| optional int64 texture_mem_min = 39; |
| optional double texture_mem_avg = 40; |
| |
| // max/min/avg memory used by HWUI at the end of a frame. This is a sum of previous 3 categories. |
| optional int64 all_mem_max = 41; |
| optional int64 all_mem_min = 42; |
| optional double all_mem_avg = 43; |
| } |
| |
| message AndroidHwuiMetric { |
| // HWUI metrics for processes that have a RenderThread. |
| repeated ProcessRenderInfo process_info = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/hwui_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/ion_metric.proto |
| |
| // ion memory stats on Android. |
| message AndroidIonMetric { |
| message Buffer { |
| optional string name = 1; |
| optional double avg_size_bytes = 2; |
| optional double min_size_bytes = 3; |
| optional double max_size_bytes = 4; |
| |
| // Total allocation size. |
| // Essentially the sum of positive allocs (-> new buffers). |
| optional double total_alloc_size_bytes = 5; |
| } |
| |
| repeated Buffer buffer = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/ion_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/irq_runtime_metric.proto |
| |
| // measure max IRQ runtime and IRQ tasks running over threshold. |
| message AndroidIrqRuntimeMetric { |
| message IrqSlice { |
| // IRQ name |
| optional string irq_name = 1; |
| // timestamp |
| optional int64 ts = 2; |
| // runtime of IRQ task |
| optional int64 dur = 3; |
| } |
| message ThresholdMetric { |
| // Threshold value |
| optional string threshold = 1; |
| // over threshold count |
| optional int64 over_threshold_count = 2; |
| // anomaly ratio (over threshold count / total count) |
| optional double anomaly_ratio= 3; |
| } |
| message IrqRuntimeMetric { |
| // max runtime of IRQ tasks |
| optional int64 max_runtime = 1; |
| // total IRQ tasks |
| optional int64 total_count = 2; |
| // over threshold metric |
| optional ThresholdMetric threshold_metric = 3; |
| // information for top 10 IRQ tasks |
| repeated IrqSlice longest_irq_slices = 4; |
| } |
| |
| // metrics for hardirq and softirq |
| optional IrqRuntimeMetric hw_irq = 1; |
| optional IrqRuntimeMetric sw_irq = 2; |
| } |
| |
| |
| // End of protos/perfetto/metrics/android/irq_runtime_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/jank_cuj_metric.proto |
| |
| message AndroidJankCujMetric { |
| repeated Cuj cuj = 1; |
| |
| // Next id: 11 |
| message Cuj { |
| // ID of the CUJ that is unique within the trace. |
| optional int32 id = 1; |
| |
| // Name of the CUJ, extracted from the CUJ trace marker. |
| // For example SHADE_EXPAND_COLLAPSE from J<SHADE_EXPAND_COLLAPSE>. |
| optional string name = 2; |
| |
| // Details about the process (uid, version, etc) |
| optional AndroidProcessMetadata process = 3; |
| |
| // ts of the CUJ trace marker slice. |
| optional int64 ts = 4; |
| |
| // dur of the CUJ trace marker slice. |
| optional int64 dur = 5; |
| |
| // Details about each of the frames within the CUJ. |
| repeated Frame frame = 6; |
| |
| // Details about each of the SF frames within the CUJ. |
| repeated Frame sf_frame = 10; |
| |
| // Metrics extracted from the counters output by FrameTracker |
| // Does not contain the frame_dur percentile information. |
| optional Metrics counter_metrics = 7; |
| |
| // Metrics extracted from the frame timeline. |
| optional Metrics timeline_metrics = 8; |
| |
| // Metrics extracted from the trace slices. |
| optional Metrics trace_metrics = 9; |
| } |
| |
| // Next id: 8 |
| message Frame { |
| // Index of the frame within the single user journey. |
| optional int64 frame_number = 1; |
| |
| // VSYNC ID of the frame. |
| optional int64 vsync = 2; |
| |
| optional int64 ts = 3; |
| optional int64 dur = 4; |
| optional int64 dur_expected = 7; |
| |
| // Whether the app process missed the frame deadline. |
| // Only set for the App frames. Always left unset for SF frames. |
| optional bool app_missed = 5; |
| |
| // Whether SF missed the frame deadline. |
| optional bool sf_missed = 6; |
| } |
| |
| // Next id: 16 |
| message Metrics { |
| // Overall number of frames within the CUJ. |
| optional int64 total_frames = 1; |
| |
| // Number of missed frames. |
| optional int64 missed_frames = 2; |
| |
| // Number of frames missed due to the app missing the deadline. |
| optional int64 missed_app_frames = 3; |
| |
| // Number of frames missed due to SF. |
| optional int64 missed_sf_frames = 4; |
| |
| // Number of successive frames missed. |
| // Not available in timeline_metrics and trace_metrics. |
| optional int64 missed_frames_max_successive = 5; |
| |
| // Max frame duration in nanoseconds. |
| optional int64 frame_dur_max = 6; |
| |
| // Average frame duration in nanoseconds. |
| // Not available in counter_metrics. |
| optional int64 frame_dur_avg = 7; |
| |
| // Median frame duration in nanoseconds. |
| // Not available in counter_metrics. |
| optional int64 frame_dur_p50 = 8; |
| |
| // P90 frame duration in nanoseconds. |
| // Not available in counter_metrics. |
| optional int64 frame_dur_p90 = 9; |
| |
| // P95 frame duration in nanoseconds. |
| // Not available in counter_metrics. |
| optional int64 frame_dur_p95 = 10; |
| |
| // P99 frame duration in nanoseconds. |
| // Not available in counter_metrics. |
| optional int64 frame_dur_p99 = 11; |
| |
| // Median frame duration in milliseconds. |
| // Not available in counter_metrics. |
| optional double frame_dur_ms_p50 = 12; |
| |
| // P90 frame duration in milliseconds. |
| // Not available in counter_metrics. |
| optional double frame_dur_ms_p90 = 13; |
| |
| // P95 frame duration in milliseconds. |
| // Not available in counter_metrics. |
| optional double frame_dur_ms_p95 = 14; |
| |
| // P99 frame duration in milliseconds. |
| // Not available in counter_metrics. |
| optional double frame_dur_ms_p99 = 15; |
| } |
| } |
| |
| // End of protos/perfetto/metrics/android/jank_cuj_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/java_heap_histogram.proto |
| |
| message JavaHeapHistogram { |
| // Next id: 9 |
| message TypeCount { |
| optional string type_name = 1; |
| optional string category = 4; |
| |
| optional uint32 obj_count = 2; |
| optional uint32 reachable_obj_count = 3; |
| |
| optional uint32 size_kb = 5; |
| optional uint32 reachable_size_kb = 6; |
| optional uint32 native_size_kb = 7; |
| optional uint32 reachable_native_size_kb = 8; |
| } |
| |
| message Sample { |
| optional int64 ts = 1; |
| repeated TypeCount type_count = 2; |
| } |
| |
| // Heap stats per process. One sample per dump (with continuous dump you can |
| // have more samples differentiated by ts). |
| message InstanceStats { |
| optional uint32 upid = 1; |
| optional AndroidProcessMetadata process = 2; |
| repeated Sample samples = 3; |
| } |
| |
| repeated InstanceStats instance_stats = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/java_heap_histogram.proto |
| |
| // Begin of protos/perfetto/metrics/android/java_heap_stats.proto |
| |
| message JavaHeapStats { |
| message HeapRoots { |
| optional string root_type = 1; |
| optional string type_name = 2; |
| optional int64 obj_count = 3; |
| } |
| |
| // Next id: 10 |
| message Sample { |
| optional int64 ts = 1; |
| // Size of the Java heap in bytes |
| optional int64 heap_size = 2; |
| // Native size of all the objects (not included in heap_size) |
| optional int64 heap_native_size = 8; |
| optional int64 obj_count = 4; |
| // Size of the reachable objects in bytes. |
| optional int64 reachable_heap_size = 3; |
| // Native size of all the reachable objects (not included in |
| // reachable_heap_size) |
| optional int64 reachable_heap_native_size = 9; |
| optional int64 reachable_obj_count = 5; |
| // Sum of anonymous RSS + swap pages in bytes. |
| optional int64 anon_rss_and_swap_size = 6; |
| |
| // ART root objects |
| repeated HeapRoots roots = 7; |
| } |
| |
| // Heap stats per process. One sample per dump (can be > 1 if continuous |
| // dump is enabled). |
| message InstanceStats { |
| optional uint32 upid = 1; |
| optional AndroidProcessMetadata process = 2; |
| repeated Sample samples = 3; |
| } |
| |
| repeated InstanceStats instance_stats = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/java_heap_stats.proto |
| |
| // Begin of protos/perfetto/metrics/android/lmk_metric.proto |
| |
| // LMK stats on Android. |
| message AndroidLmkMetric { |
| message ByOomScore { |
| optional int32 oom_score_adj = 1; |
| optional int32 count = 2; |
| } |
| |
| // Total count of LMK events observed in the trace. |
| optional int32 total_count = 1; |
| repeated ByOomScore by_oom_score = 2; |
| |
| // OOM reaper kills. Enabled via the oom/mark_victim point. Should never |
| // happen. |
| optional int32 oom_victim_count = 3; |
| } |
| |
| // End of protos/perfetto/metrics/android/lmk_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/lmk_reason_metric.proto |
| |
| // Global process state at LMK time, used to identify potential culprits. |
| // TODO: rename to AndroidLmkProcessState |
| message AndroidLmkReasonMetric { |
| message Process { |
| optional AndroidProcessMetadata process = 1; |
| |
| // OOM score adj of the process. |
| optional int32 oom_score_adj = 2; |
| |
| // RSS + swap. |
| optional int64 size = 3; |
| |
| optional int64 file_rss_bytes = 4; |
| optional int64 anon_rss_bytes = 5; |
| optional int64 shmem_rss_bytes = 6; |
| optional int64 swap_bytes = 7; |
| } |
| message Lmk { |
| // OOM score adj of the LMK'ed process. |
| optional int32 oom_score_adj = 1; |
| |
| // Total size of the ION heap in bytes during this LMK. |
| optional int64 ion_heaps_bytes = 4; |
| // Deprecated. Prefer ion_heaps_bytes. |
| optional int64 system_ion_heap_size = 2; |
| |
| // Processes present during this LMK. |
| repeated Process processes = 3; |
| } |
| |
| // LMKs present in the trace, ordered on their timestamp. |
| repeated Lmk lmks = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/lmk_reason_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/mem_metric.proto |
| |
| // Memory metrics on Android. |
| message AndroidMemoryMetric { |
| message ProcessMetrics { |
| optional string process_name = 1; |
| optional ProcessMemoryCounters total_counters = 2; |
| repeated PriorityBreakdown priority_breakdown = 3; |
| } |
| |
| message PriorityBreakdown { |
| optional string priority = 1; |
| optional ProcessMemoryCounters counters = 2; |
| } |
| |
| message ProcessMemoryCounters { |
| optional Counter anon_rss = 1; |
| optional Counter file_rss = 2; |
| optional Counter swap = 3; |
| optional Counter anon_and_swap = 4; |
| |
| // Available when ART trace events are available. |
| optional Counter java_heap = 5; |
| } |
| |
| message Counter { |
| optional double min = 1; |
| optional double max = 2; |
| optional double avg = 3; |
| |
| // Memory growth observed in the counter sequence. In case of multiple |
| // processes with the same name, break ties using max. |
| optional double delta = 4; |
| } |
| |
| // Process metrics, grouped by process name |
| repeated ProcessMetrics process_metrics = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/mem_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/mem_unagg_metric.proto |
| |
| // Unaggregated memory metrics on Android. |
| message AndroidMemoryUnaggregatedMetric { |
| message ProcessValues { |
| optional string process_name = 1; |
| optional ProcessMemoryValues mem_values = 2; |
| } |
| |
| message ProcessMemoryValues { |
| repeated Value anon_rss = 1; |
| repeated Value file_rss = 2; |
| repeated Value swap = 3; |
| repeated Value anon_and_swap = 4; |
| } |
| |
| message Value { |
| optional int64 ts = 1; |
| optional int32 oom_score = 2; |
| optional double value = 3; |
| } |
| |
| // Process metrics for every process instance in trace. |
| repeated ProcessValues process_values = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/mem_unagg_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/multiuser_metric.proto |
| |
| // Metrics for Multiuser events, such as switching users. |
| message AndroidMultiuserMetric { |
| |
| // Holds the data for a Multiuser event. |
| message EventData { |
| // Duration of the event (in milliseconds). |
| optional int32 duration_ms = 1; |
| |
| // CPU usage of each process during the event. |
| message CpuUsage { |
| // The userId of the process (e.g. 0 or 10). |
| optional int32 user_id = 1; |
| // The name of the process. |
| optional string process_name = 2; |
| // The number of CPU cycles (in megacycles) spent by that process during the event. |
| optional int32 cpu_mcycles = 3; |
| // The ratio of this process's cycles to the total for all processes, expressed as a percentage. |
| optional float cpu_percentage = 4; |
| // General identifier for this usage source: determined from the process name, user, etc. |
| // Should be stable across multiple runs (i.e. does not print the user_id directly). |
| optional string identifier = 5; |
| } |
| repeated CpuUsage cpu_usage = 2; |
| } |
| |
| // Metrics for a user switch. |
| optional EventData user_switch = 1; |
| } |
| // End of protos/perfetto/metrics/android/multiuser_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/network_metric.proto |
| |
| message AndroidNetworkMetric { |
| message PacketStatistic { |
| // Packet count. |
| optional int64 packets = 1; |
| |
| // Packet Bytes. |
| optional int64 bytes = 2; |
| |
| // Timestamp when first packet received or transmitted. |
| optional int64 first_packet_timestamp_ns = 3; |
| |
| // Timestamp when last packet received or transmitted. |
| optional int64 last_packet_timestamp_ns = 4; |
| |
| // Interval between first & last packet. The minimum interval is 10ms. |
| optional int64 interval_ns = 5; |
| |
| // Data Speed. |
| optional double data_rate_kbps = 6; |
| } |
| |
| message CorePacketStatistic { |
| optional uint32 id = 1; |
| optional PacketStatistic packet_statistic = 2; |
| } |
| |
| message Rx { |
| // Total packets statistic. |
| optional PacketStatistic total = 1; |
| |
| // Per core packets statistic. |
| repeated CorePacketStatistic core = 2; |
| |
| // GRO aggregation ratio. |
| optional string gro_aggregation_ratio = 3; |
| } |
| |
| message Tx { |
| // Total packets statistic. |
| optional PacketStatistic total = 1; |
| |
| // Per core packets statistic. |
| repeated CorePacketStatistic core = 2; |
| } |
| |
| message NetDevice { |
| // Network device name. |
| optional string name = 1; |
| |
| // Ingress traffic statistic. |
| optional Rx rx = 2; |
| |
| // Egress traffic statistic |
| optional Tx tx = 3; |
| } |
| |
| message NetRxActionStatistic { |
| // SoftIrq NET_RX action count. |
| optional int64 count = 1; |
| |
| // SoftIrq NET_RX action was running in millisecond. |
| optional double runtime_ms = 2; |
| |
| // SoftIrq NET_RX action average running time. |
| optional double avg_runtime_ms = 3; |
| |
| // CPU megacycles (i.e. cycles divided by 1e6). |
| optional int64 mcycles = 4; |
| |
| // Average weighted CPU frequency by the time the NET_RX Action |
| // running at each frequency. |
| optional int64 avg_freq_khz = 5; |
| } |
| |
| message NetTxActionStatistic { |
| // SoftIrq NET_TX action count. |
| optional int64 count = 1; |
| |
| // SoftIrq NET_TX action was running in millisecond. |
| optional double runtime_ms = 2; |
| |
| // SoftIrq NET_TX action average running time. |
| optional double avg_runtime_ms = 3; |
| |
| // CPU megacycles (i.e. cycles divided by 1e6). |
| optional int64 mcycles = 4; |
| |
| // Average weighted CPU frequency by the time the NET_TX Action |
| // running at each frequency. |
| optional int64 avg_freq_khz = 5; |
| } |
| |
| message IpiActionStatistic { |
| // SoftIrq IPI action count. |
| optional int64 count = 1; |
| |
| // SoftIrq IPI action was running in millisecond. |
| optional double runtime_ms = 2; |
| |
| // SoftIrq IPI action average running time. |
| optional double avg_runtime_ms = 3; |
| } |
| |
| message CoreNetRxActionStatistic { |
| optional uint32 id = 1; |
| optional NetRxActionStatistic net_rx_action_statistic = 2; |
| } |
| |
| message CoreNetTxActionStatistic { |
| optional uint32 id = 1; |
| optional NetTxActionStatistic net_tx_action_statistic = 2; |
| } |
| |
| message NetRxAction { |
| // Total NET_RX action statistics. |
| optional NetRxActionStatistic total = 1; |
| |
| // Per core NET_RX action statistics. |
| repeated CoreNetRxActionStatistic core = 2; |
| |
| // The average packet time moves through the kernel stack. |
| optional double avg_interstack_latency_ms = 3; |
| } |
| |
| message NetTxAction { |
| // Total NET_TX action statistics. |
| optional NetTxActionStatistic total = 1; |
| |
| // Per core NET_TX action statistics. |
| repeated CoreNetTxActionStatistic core = 2; |
| } |
| |
| message IpiAction { |
| // Total IPI action statistics. |
| optional IpiActionStatistic total = 1; |
| } |
| |
| // Network device metrics. |
| repeated NetDevice net_devices = 1; |
| |
| // SoftIrq NET_RX action metrics. |
| optional NetRxAction net_rx_action = 2; |
| |
| // Packet retransmission rate. |
| optional double retransmission_rate = 3; |
| |
| // Kfree Skb rate (i.e. kfree_skb count divided by the packet count from all |
| // net devices). |
| optional double kfree_skb_rate = 4; |
| |
| // SoftIrq NET_TX action metrics. |
| optional NetTxAction net_tx_action = 5; |
| |
| // SoftIrq IPI action metrics. |
| optional IpiAction ipi_action = 6; |
| } |
| |
| // End of protos/perfetto/metrics/android/network_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/other_traces.proto |
| |
| message AndroidOtherTracesMetric { |
| // Uuids of other traces being finalized while the current trace was being |
| // recorded. |
| repeated string finalized_traces_uuid = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/other_traces.proto |
| |
| // Begin of protos/perfetto/metrics/android/package_list.proto |
| |
| message AndroidPackageList { |
| message Package { |
| optional string package_name = 1; |
| optional int64 uid = 2; |
| optional int64 version_code = 3; |
| } |
| |
| repeated Package packages = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/package_list.proto |
| |
| // Begin of protos/perfetto/metrics/android/powrails_metric.proto |
| |
| message AndroidPowerRails { |
| // Energy data per Power Rail at given ts. |
| message EnergyData { |
| // Time since device boot(CLOCK_BOTTOMTIME) in milli-seconds. |
| optional int64 timestamp_ms = 1; |
| // Accumulated energy since device boot in microwatt-seconds(uws). |
| optional double energy_uws = 2; |
| } |
| |
| message PowerRails { |
| // Name of the rail. |
| optional string name = 1; |
| // Energy data for given rail and for all samples in the trace. |
| repeated EnergyData energy_data = 2; |
| // The average used power between the first and the last sampled |
| // energy data in miliwatt (mw) |
| optional double avg_used_power_mw = 3; |
| } |
| |
| // Energy data per Power Rail. |
| repeated PowerRails power_rails = 1; |
| |
| // The average used power between the first and last sampled rail across all |
| // the rails in milliwatts (mw). |
| optional double avg_total_used_power_mw = 2; |
| } |
| // End of protos/perfetto/metrics/android/powrails_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/profiler_smaps.proto |
| |
| message ProfilerSmaps { |
| message Mapping { |
| optional string path = 1; |
| optional int32 size_kb = 2; |
| optional int32 private_dirty_kb = 3; |
| optional int32 swap_kb = 4; |
| } |
| |
| message Instance { |
| optional AndroidProcessMetadata process = 1; |
| repeated Mapping mappings = 2; |
| } |
| |
| repeated Instance instance = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/profiler_smaps.proto |
| |
| // Begin of protos/perfetto/metrics/android/rt_runtime_metric.proto |
| |
| // measure max RT runtime and RT tasks running over 5ms. |
| message AndroidRtRuntimeMetric { |
| message RtSlice { |
| // thread name |
| optional string tname = 1; |
| // timestamp |
| optional int64 ts = 2; |
| // runtime of RT task |
| optional int64 dur = 3; |
| } |
| |
| // max runtime of RT tasks |
| optional int64 max_runtime = 1; |
| // how many RT tasks are over 5ms. |
| optional int64 over_5ms_count = 2; |
| // information for top 10 RT tasks |
| repeated RtSlice longest_rt_slices = 3; |
| } |
| |
| |
| // End of protos/perfetto/metrics/android/rt_runtime_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/simpleperf.proto |
| |
| // Metric that stores information related to atrace events generated by |
| // simpleperf tool |
| message AndroidSimpleperfMetric { |
| optional double urgent_ratio = 1; |
| |
| message PerfEventMetric { |
| // Simpleperf event name |
| optional string name = 1; |
| |
| message Thread { |
| // Thread ID |
| optional int32 tid = 1; |
| // Thread name |
| optional string name = 2; |
| // CPU ID |
| optional int32 cpu = 3; |
| // Total counter value |
| optional double total = 4; |
| } |
| |
| message Process { |
| // Process ID |
| optional int32 pid = 1; |
| // Process name |
| optional string name = 2; |
| // Metrics for each thread in this process. |
| repeated Thread threads = 3; |
| // Total counter value over all threads in this process |
| optional double total = 4; |
| } |
| |
| // Metrics for each process |
| repeated Process processes = 2; |
| |
| // Total counter value over all processes and threads |
| optional double total = 3; |
| } |
| |
| repeated PerfEventMetric events = 2; |
| } |
| |
| // End of protos/perfetto/metrics/android/simpleperf.proto |
| |
| // Begin of protos/perfetto/metrics/android/startup_metric.proto |
| |
| // Android app startup metrics. |
| message AndroidStartupMetric { |
| // A simplified view of the task state durations for a thread |
| // and a span of time. |
| message TaskStateBreakdown { |
| optional int64 running_dur_ns = 1; |
| optional int64 runnable_dur_ns = 2; |
| optional int64 uninterruptible_sleep_dur_ns = 3; |
| optional int64 interruptible_sleep_dur_ns = 4; |
| optional int64 uninterruptible_io_sleep_dur_ns = 5; |
| optional int64 uninterruptible_non_io_sleep_dur_ns = 6; |
| } |
| |
| message McyclesByCoreType { |
| optional int64 little = 1; |
| optional int64 big = 2; |
| optional int64 bigger = 3; |
| optional int64 unknown = 4; |
| } |
| |
| message Slice { |
| optional int64 dur_ns = 1; |
| optional double dur_ms = 2; |
| } |
| |
| // Timing information spanning the intent received by the |
| // activity manager to the first frame drawn. |
| // Next id: 33. |
| message ToFirstFrame { |
| // The duration between the intent received and first frame. |
| optional int64 dur_ns = 1; |
| optional double dur_ms = 17; |
| |
| // Breakdown of time to first frame by task state for the main thread of |
| // the process starting up. |
| optional TaskStateBreakdown main_thread_by_task_state = 2; |
| |
| // The mcycles taken by this startup across all CPUs (broken down by core |
| // type). |
| optional McyclesByCoreType mcycles_by_core_type = 26; |
| |
| // In this timespan, how many processes (apart from the main activity) were |
| // spawned. |
| optional uint32 other_processes_spawned_count = 3; |
| |
| // Total time spent in activity manager between the initial intent |
| // and the end of the activity starter. |
| optional Slice time_activity_manager = 4; |
| |
| // The following slices follow the typical steps post-fork. |
| optional Slice time_activity_thread_main = 5; |
| optional Slice time_bind_application = 6; |
| optional Slice time_activity_start = 7; |
| optional Slice time_activity_resume = 8; |
| optional Slice time_activity_restart = 21; |
| optional Slice time_choreographer = 9; |
| optional Slice time_inflate = 22; |
| optional Slice time_get_resources = 23; |
| |
| // If we are starting a new process, record the duration from the |
| // intent being received to the time we call the zygote. |
| optional Slice time_before_start_process = 10; |
| |
| // The actual duration of the process start (based on the zygote slice). |
| optional Slice time_during_start_process = 11; |
| |
| optional Slice to_post_fork = 18; |
| optional Slice to_activity_thread_main = 19; |
| optional Slice to_bind_application = 20; |
| |
| optional Slice time_post_fork = 16; |
| |
| // The total time spent on opening dex files. |
| optional Slice time_dex_open = 24; |
| // Total time spent verifying classes during app startup. |
| optional Slice time_verify_class = 25; |
| |
| // Number of methods that were compiled by JIT during app startup. |
| optional uint32 jit_compiled_methods = 27; |
| |
| // Time spent running CPU on jit thread pool. |
| optional Slice time_jit_thread_pool_on_cpu = 28; |
| |
| // Time spent on garbage collection. |
| optional Slice time_gc_total = 29; |
| optional Slice time_gc_on_cpu = 30; |
| |
| // Time spent in lock contention on the main thread of the process being |
| // started up. This includes *all* types of lock contention not just monitor |
| // contention. |
| optional Slice time_lock_contention_thread_main = 31; |
| |
| // Time spent in monitor lock contention on the main thread of the |
| // process being started up. This will be a subset of the time counted by |
| // |time_lock_contention_thread_main|. |
| optional Slice time_monitor_contention_thread_main = 32; |
| |
| // Removed: was other_process_to_activity_cpu_ratio. |
| reserved 12; |
| |
| // Removed: was uint32 versions of to_post_fork, to_activity_thread_main and |
| // to_bind_application. |
| reserved 13, 14, 15; |
| } |
| |
| // Metrics about startup which were developed by looking at experiments using |
| // high-speed cameras (HSC). |
| message HscMetrics { |
| // The duration of the full "startup" as defined by HSC tests. |
| optional Slice full_startup = 1; |
| } |
| |
| message Activity { |
| optional string name = 1; |
| optional string method = 2; |
| optional int64 ts_method_start = 4; |
| |
| // Field 3 contained Slice with a sum of durations for matching slices. |
| reserved 3; |
| } |
| |
| message BinderTransaction { |
| optional Slice duration = 1; |
| optional string thread = 2; |
| optional string destination_thread = 3; |
| optional string destination_process = 4; |
| // From |
| // https://cs.android.com/android/platform/superproject/+/master:external/perfetto/protos/perfetto/trace/ftrace/binder.proto;l=15;drc=7b6a788162a30802f4c9d8d7a30a54e25edd30f1 |
| optional string flags = 5; |
| // From |
| // https://cs.android.com/android/platform/superproject/+/master:external/perfetto/protos/perfetto/trace/ftrace/binder.proto;l=14;drc=7b6a788162a30802f4c9d8d7a30a54e25edd30f1 |
| optional string code = 6; |
| // From |
| // https://cs.android.com/android/platform/superproject/+/master:external/perfetto/protos/perfetto/trace/ftrace/binder.proto;l=37;drc=7b6a788162a30802f4c9d8d7a30a54e25edd30f1 |
| optional int64 data_size = 7; |
| } |
| |
| // Metrics with information about the status of odex files and the outcome |
| // of the loading process. |
| // Multiple files might be loaded for a single startup. Platform might also |
| // decide to discard an odex file and instead load a fallback, for example |
| // in case the OS or apk were updated. |
| message OptimizationStatus { |
| optional string odex_status = 1; |
| optional string compilation_filter = 2; |
| optional string compilation_reason = 3; |
| optional string location = 4; |
| } |
| |
| // Contains timestamps of important events which occurred during the |
| // startup. |
| message EventTimestamps { |
| optional int64 intent_received = 1; |
| optional int64 first_frame = 2; |
| } |
| |
| // Contains information about the state of a system during the app startup. |
| // Useful to put the startup in context. |
| message SystemState { |
| // Whether the dex2oat64 process was running concurrent to the startup. |
| // Deprecated as of 10/2022. |
| optional bool dex2oat_running = 1 [deprecated=true]; |
| |
| // Whether the installd process was running concurrent to the startup. |
| // Deprecated as of 10/2022. |
| optional bool installd_running = 2 [deprecated=true]; |
| |
| // The number of broadcasts dispatched by the system during the app |
| // launch. |
| optional int64 broadcast_dispatched_count = 3; |
| |
| // The number of broadcasts received by an app or the system during the |
| // app launch. Note that multiple packages can be subscribed to the same |
| // broadcast so a single dsipatch can cause multiple packages to receive |
| // and process a broadcast. |
| optional int64 broadcast_received_count = 4; |
| |
| // The most active (i.e. consuming the most mcycles) processes during the |
| // app launch excluding the process(es) being launched. |
| // Note: the exact number of returned is an implementation detail and |
| // will likely change over time. |
| repeated string most_active_non_launch_processes = 5; |
| |
| // Duration the installd process was running concurrent to the startup. |
| optional int64 installd_dur_ns = 6; |
| // Duration the dex2oat64 process was running concurrent to the startup. |
| optional int64 dex2oat_dur_ns = 7; |
| } |
| |
| // Next id: 19 |
| message Startup { |
| // Random id uniquely identifying an app startup in this trace. |
| optional uint32 startup_id = 1; |
| |
| // Startup type (cold / warm / hot) |
| optional string startup_type = 16; |
| |
| // Name of the package launched |
| optional string package_name = 2; |
| |
| // Name of the process launched |
| optional string process_name = 3; |
| |
| // Details about the activities launched |
| repeated Activity activities = 11; |
| |
| // Details about slow binder transactions during the startup. The definition |
| // of a slow transaction is an implementation detail. |
| repeated BinderTransaction long_binder_transactions = 14; |
| |
| // Did we ask the zygote for a new process |
| optional bool zygote_new_process = 4; |
| |
| // Number of processes hosting the activity involved in the launch. |
| // This will usually be 1. If it is 0, it is indicative of a data / process |
| // error. If > 1, the process died during startup and the system respawned |
| // it. |
| optional uint32 activity_hosting_process_count = 6; |
| |
| // Contains timestamps of important events which happened during |
| // the startup. |
| optional EventTimestamps event_timestamps = 13; |
| |
| // Timing information spanning the intent received by the |
| // activity manager to the first frame drawn. |
| optional ToFirstFrame to_first_frame = 5; |
| |
| // Details about the process (uid, version, etc) |
| optional AndroidProcessMetadata process = 7; |
| |
| // Metrics about startup which were developed by looking at experiments |
| // using high-speed cameras (HSC). |
| optional HscMetrics hsc = 8; |
| |
| // The time taken in the startup from intent received to the start time |
| // of the reportFullyDrawn slice. This should be longer than the time to |
| // first frame as the application decides this after it starts rendering. |
| optional Slice report_fully_drawn = 9; |
| |
| // Contains information about the status of odex files. |
| repeated OptimizationStatus optimization_status = 12; |
| |
| // Package name of startups running concurrent to the launch. |
| repeated string startup_concurrent_to_launch = 18; |
| |
| // Contains information about the state of the rest of the system during the |
| // startup. This is useful for getting context about why a startup might |
| // be slow beyond just what the app is doing. |
| optional SystemState system_state = 15; |
| |
| // A list of identified potential causes for slow startup. |
| // Optional. |
| repeated string slow_start_reason = 17; |
| |
| reserved 10; |
| } |
| |
| repeated Startup startup = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/startup_metric.proto |
| |
| // Begin of protos/perfetto/metrics/android/surfaceflinger.proto |
| |
| message AndroidSurfaceflingerMetric { |
| // Counts the number of missed frames in the trace. |
| optional uint32 missed_frames = 1; |
| |
| // Counts the number of missed HWC frames in the trace. |
| optional uint32 missed_hwc_frames = 2; |
| |
| // Counts the number of missed GPU frames in the trace. |
| optional uint32 missed_gpu_frames = 3; |
| |
| // Calculate the number of missed frames divided by |
| // total frames |
| optional double missed_frame_rate = 4; |
| |
| // Calculate the number of missed HWC frames divided by |
| // total HWC frames |
| optional double missed_hwc_frame_rate = 5; |
| |
| // Calculate the number of missed GPU frames divided by |
| // total GPU frames |
| optional double missed_gpu_frame_rate = 6; |
| |
| // Count the number of times SurfaceFlinger needs to invoke GPU |
| // for rendering some layers |
| optional uint32 gpu_invocations = 7; |
| |
| // Calculate the average duration of GPU request by SurfaceFlinger |
| // since it enters the FenceMonitor's queue until it gets completed |
| optional double avg_gpu_waiting_dur_ms = 8; |
| |
| // Calculate the total duration when there is at least one GPU request |
| // by SurfaceFlinger that is still waiting for GPU to complete the |
| // request. |
| // This also equals to the total duration of |
| // "waiting for GPU completion <fence_num>" in SurfaceFlinger. |
| optional double total_non_empty_gpu_waiting_dur_ms = 9; |
| } |
| |
| // End of protos/perfetto/metrics/android/surfaceflinger.proto |
| |
| // Begin of protos/perfetto/metrics/android/task_names.proto |
| |
| message AndroidTaskNames { |
| message Process { |
| optional int64 pid = 1; |
| |
| // Process name. |
| optional string process_name = 2; |
| |
| // Names of all threads for this process. |
| repeated string thread_name = 3; |
| |
| // User id under which this process runs. |
| optional int64 uid = 4; |
| |
| // Packages matching the process uid. |
| repeated string uid_package_name = 5; |
| } |
| |
| repeated Process process = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/task_names.proto |
| |
| // Begin of protos/perfetto/metrics/android/trace_quality.proto |
| |
| // Metric which checks the data in the trace processor tables is "reasonble" |
| // (i.e. we would expect to see it from a real device). |
| // |
| // This is useful to reject traces which may be valid (so no stat would be |
| // recorded) but a human would find the trace nonsensical. |
| message AndroidTraceQualityMetric { |
| message Failure { |
| // The name of the failed check. |
| optional string name = 1; |
| } |
| repeated Failure failures = 1; |
| } |
| // End of protos/perfetto/metrics/android/trace_quality.proto |
| |
| // Begin of protos/perfetto/metrics/android/unsymbolized_frames.proto |
| |
| message UnsymbolizedFrames { |
| message Frame { |
| optional string module = 1; |
| optional string build_id = 2; |
| optional int64 address = 3; |
| |
| // In some cases (Chrome/Webview) the ID that should be used to query |
| // symbols in Google's internal tera-scale symbolization service is != |
| // `build_id` and requires some mangling. |
| // This field is == 'build_id` for non-chromium cases, and is the breakpad |
| // module ID (with lowercase hex digics) for chromium cases. |
| optional string google_lookup_id = 4; |
| } |
| |
| repeated Frame frames = 1; |
| } |
| |
| // End of protos/perfetto/metrics/android/unsymbolized_frames.proto |
| |
| // Begin of protos/perfetto/metrics/metrics.proto |
| |
| // Trace processor metadata |
| message TraceMetadata { |
| reserved 1; |
| optional int64 trace_duration_ns = 2; |
| optional string trace_uuid = 3; |
| optional string android_build_fingerprint = 4; |
| optional int64 statsd_triggering_subscription_id = 5; |
| optional int64 trace_size_bytes = 6; |
| repeated string trace_trigger = 7; |
| optional string unique_session_name = 8; |
| optional string trace_config_pbtxt = 9; |
| optional int64 sched_duration_ns = 10; |
| } |
| |
| // Stats counters for the trace. |
| // Defined in src/trace_processor/storage/stats.h |
| message TraceAnalysisStats { |
| enum Severity { |
| SEVERITY_UNKNOWN = 0; |
| SEVERITY_INFO = 1; |
| SEVERITY_DATA_LOSS = 2; |
| SEVERITY_ERROR = 3; |
| } |
| |
| enum Source { |
| SOURCE_UNKNOWN = 0; |
| SOURCE_TRACE = 1; |
| SOURCE_ANALYSIS = 2; |
| } |
| |
| message Stat { |
| optional string name = 1; |
| optional uint32 idx = 2; |
| optional Severity severity = 3; |
| optional Source source = 4; |
| |
| optional int64 count = 5; |
| } |
| |
| repeated Stat stat = 1; |
| } |
| |
| // Root message for all Perfetto-based metrics. |
| // |
| // Next id: 50 |
| message TraceMetrics { |
| reserved 4, 10, 13, 14, 16, 19; |
| |
| // Battery counters metric on Android. |
| optional AndroidBatteryMetric android_batt = 5; |
| |
| // CPU usage per trace, process and thread. |
| optional AndroidCpuMetric android_cpu = 6; |
| |
| // Memory metrics on Android (owned by the Android Telemetry team). |
| optional AndroidMemoryMetric android_mem = 1; |
| |
| // Memory metrics on Android in unaggregated form. (owned by the Android |
| // Telemetry team). |
| // Note: this generates a lot of data so should not be requested unless it |
| // is clear that this data is necessary. |
| optional AndroidMemoryUnaggregatedMetric android_mem_unagg = 11; |
| |
| // Package list. |
| optional AndroidPackageList android_package_list = 12; |
| |
| // ion buffer memory metrics. |
| optional AndroidIonMetric android_ion = 9; |
| |
| // fastrpc subsystem memory metrics. |
| optional AndroidFastrpcMetric android_fastrpc = 31; |
| |
| // Statistics about low memory kills. |
| optional AndroidLmkMetric android_lmk = 8; |
| |
| // Power Rails metrics on Android. |
| optional AndroidPowerRails android_powrails = 7; |
| |
| // Startup metrics on Android (owned by the Android Telemetry team). |
| optional AndroidStartupMetric android_startup = 2; |
| |
| // Trace metadata (applicable to all traces). |
| optional TraceMetadata trace_metadata = 3; |
| |
| // Trace stats (applicable to all traces). |
| optional TraceAnalysisStats trace_stats = 33; |
| |
| // Returns stack frames missing symbols. |
| optional UnsymbolizedFrames unsymbolized_frames = 15; |
| |
| // If the trace contains a heap graph, output allocation statistics. |
| optional JavaHeapStats java_heap_stats = 17; |
| |
| // If the trace contains a heap graph, output histogram. |
| optional JavaHeapHistogram java_heap_histogram = 21; |
| |
| // Metrics used to find potential culprits of low-memory kills. |
| optional AndroidLmkReasonMetric android_lmk_reason = 18; |
| |
| optional AndroidHwuiMetric android_hwui_metric = 20; |
| |
| optional AndroidDisplayMetrics display_metrics = 22; |
| |
| optional AndroidTaskNames android_task_names = 23; |
| |
| // Deprecated was AndroidThreadTimeInStateMetric |
| reserved 24; |
| |
| // Metric associated with surfaceflinger. |
| optional AndroidSurfaceflingerMetric android_surfaceflinger = 25; |
| |
| // GPU metrics on Android. |
| optional AndroidGpuMetric android_gpu = 26; |
| |
| // Deprecated AndroidSysUiCujMetrics. |
| reserved 27; |
| |
| // Interaction and frame timings for CUJs (important UI transitions). |
| optional AndroidJankCujMetric android_jank_cuj = 48; |
| |
| // Metric associated with hwcomposer. |
| optional AndroidHwcomposerMetrics android_hwcomposer = 28; |
| |
| // Deprecated was AndroidJankMetrics; |
| reserved 29; |
| |
| // G2D metrics. |
| optional G2dMetrics g2d = 30; |
| |
| // Dmabuf heap metrics. |
| optional AndroidDmaHeapMetric android_dma_heap = 32; |
| |
| // Metric to verify the quality of the trace. |
| optional AndroidTraceQualityMetric android_trace_quality = 34; |
| |
| // Profiler smaps |
| optional ProfilerSmaps profiler_smaps = 35; |
| |
| // Multiuser - metrics for switching users. |
| optional AndroidMultiuserMetric android_multiuser = 36; |
| |
| // Metrics related to simpleperf tool |
| optional AndroidSimpleperfMetric android_simpleperf = 37; |
| |
| // Metrics for the Camera team. |
| optional AndroidCameraMetric android_camera = 38; |
| |
| // Metrics for dynamic voltage and frequency scaling. |
| optional AndroidDvfsMetric android_dvfs = 39; |
| |
| // Metrics for network performance. |
| optional AndroidNetworkMetric android_netperf = 40; |
| |
| // Metrics for the Camera team. |
| // Note: this generates a lot of data so should not be requested unless it |
| // is clear that this data is necessary. |
| optional AndroidCameraUnaggregatedMetric android_camera_unagg = 41; |
| |
| // Metrics for RT runtime. |
| optional AndroidRtRuntimeMetric android_rt_runtime = 42; |
| |
| // Metrics for IRQ runtime. |
| optional AndroidIrqRuntimeMetric android_irq_runtime = 43; |
| |
| // Metrics for the Trusty team. |
| optional AndroidTrustyWorkqueues android_trusty_workqueues = 44; |
| |
| // Summary of other concurrent trace recording. |
| optional AndroidOtherTracesMetric android_other_traces = 45; |
| |
| // Per-process Binder transaction metrics. |
| optional AndroidBinderMetric android_binder = 46; |
| |
| // Metrics for app deadline missed. |
| optional AndroidFrameTimelineMetric android_frame_timeline_metric = 47; |
| |
| // Blocking calls (e.g. binder calls) for CUJs (important UI transitions). |
| optional AndroidBlockingCallsCujMetric android_blocking_calls_cuj_metric = 49; |
| |
| // Demo extensions. |
| extensions 450 to 499; |
| |
| // Vendor extensions. |
| extensions 500 to 1000; |
| |
| // Chrome metrics. |
| extensions 1001 to 2000; |
| } |
| |
| // End of protos/perfetto/metrics/metrics.proto |