Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 syntax = "proto2";
     18 
     19 package android.os.statsd;
     20 option java_package = "com.android.os";
     21 option java_outer_classname = "AtomsProto";
     22 
     23 import "frameworks/base/cmds/statsd/src/atom_field_options.proto";
     24 import "frameworks/base/core/proto/android/app/enums.proto";
     25 import "frameworks/base/core/proto/android/app/job/enums.proto";
     26 import "frameworks/base/core/proto/android/app/settings_enums.proto";
     27 import "frameworks/base/core/proto/android/bluetooth/a2dp/enums.proto";
     28 import "frameworks/base/core/proto/android/bluetooth/enums.proto";
     29 import "frameworks/base/core/proto/android/bluetooth/hci/enums.proto";
     30 import "frameworks/base/core/proto/android/bluetooth/hfp/enums.proto";
     31 import "frameworks/base/core/proto/android/bluetooth/smp/enums.proto";
     32 import "frameworks/base/core/proto/android/debug/enums.proto";
     33 import "frameworks/base/core/proto/android/hardware/biometrics/enums.proto";
     34 import "frameworks/base/core/proto/android/hardware/sensor/assist/enums.proto";
     35 import "frameworks/base/core/proto/android/net/networkcapabilities.proto";
     36 import "frameworks/base/core/proto/android/os/enums.proto";
     37 import "frameworks/base/core/proto/android/server/connectivity/data_stall_event.proto";
     38 import "frameworks/base/core/proto/android/server/enums.proto";
     39 import "frameworks/base/core/proto/android/server/job/enums.proto";
     40 import "frameworks/base/core/proto/android/server/location/enums.proto";
     41 import "frameworks/base/core/proto/android/service/procstats_enum.proto";
     42 import "frameworks/base/core/proto/android/service/usb.proto";
     43 import "frameworks/base/core/proto/android/stats/connectivity/network_stack.proto";
     44 import "frameworks/base/core/proto/android/stats/dnsresolver/dns_resolver.proto";
     45 import "frameworks/base/core/proto/android/stats/devicepolicy/device_policy.proto";
     46 import "frameworks/base/core/proto/android/stats/devicepolicy/device_policy_enums.proto";
     47 import "frameworks/base/core/proto/android/stats/docsui/docsui_enums.proto";
     48 import "frameworks/base/core/proto/android/stats/enums.proto";
     49 import "frameworks/base/core/proto/android/stats/intelligence/enums.proto";
     50 import "frameworks/base/core/proto/android/stats/launcher/launcher.proto";
     51 import "frameworks/base/core/proto/android/stats/location/location_enums.proto";
     52 import "frameworks/base/core/proto/android/stats/mediametrics/mediametrics.proto";
     53 import "frameworks/base/core/proto/android/stats/storage/storage_enums.proto";
     54 import "frameworks/base/core/proto/android/stats/style/style_enums.proto";
     55 import "frameworks/base/core/proto/android/telecomm/enums.proto";
     56 import "frameworks/base/core/proto/android/telephony/enums.proto";
     57 import "frameworks/base/core/proto/android/view/enums.proto";
     58 import "frameworks/base/core/proto/android/wifi/enums.proto";
     59 
     60 /**
     61  * The master atom class. This message defines all of the available
     62  * raw stats log events from the Android system, also known as "atoms."
     63  *
     64  * This field contains a single oneof with all of the available messages.
     65  * The stats-log-api-gen tool runs as part of the Android build and
     66  * generates the android.util.StatsLog class, which contains the constants
     67  * and methods that Android uses to log.
     68  *
     69  * This Atom class is not actually built into the Android system.
     70  * Instead, statsd on Android constructs these messages synthetically,
     71  * in the format defined here and in stats_log.proto.
     72  */
     73 message Atom {
     74     // Pushed atoms start at 2.
     75     oneof pushed {
     76         // For StatsLog reasons, 1 is illegal and will not work. Must start at 2.
     77         BleScanStateChanged ble_scan_state_changed = 2;
     78         ProcessStateChanged process_state_changed = 3;
     79         BleScanResultReceived ble_scan_result_received = 4;
     80         SensorStateChanged sensor_state_changed = 5;
     81         GpsScanStateChanged gps_scan_state_changed = 6;
     82         SyncStateChanged sync_state_changed = 7;
     83         ScheduledJobStateChanged scheduled_job_state_changed = 8;
     84         ScreenBrightnessChanged screen_brightness_changed = 9;
     85         WakelockStateChanged wakelock_state_changed = 10;
     86         LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 11;
     87         MobileRadioPowerStateChanged mobile_radio_power_state_changed = 12;
     88         WifiRadioPowerStateChanged wifi_radio_power_state_changed = 13;
     89         ActivityManagerSleepStateChanged activity_manager_sleep_state_changed = 14;
     90         MemoryFactorStateChanged memory_factor_state_changed = 15;
     91         ExcessiveCpuUsageReported excessive_cpu_usage_reported = 16;
     92         CachedKillReported cached_kill_reported = 17;
     93         ProcessMemoryStatReported process_memory_stat_reported = 18;
     94         LauncherUIChanged launcher_event = 19;
     95         BatterySaverModeStateChanged battery_saver_mode_state_changed = 20;
     96         DeviceIdleModeStateChanged device_idle_mode_state_changed = 21;
     97         DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22;
     98         AudioStateChanged audio_state_changed = 23;
     99         MediaCodecStateChanged media_codec_state_changed = 24;
    100         CameraStateChanged camera_state_changed = 25;
    101         FlashlightStateChanged flashlight_state_changed = 26;
    102         UidProcessStateChanged uid_process_state_changed = 27;
    103         ProcessLifeCycleStateChanged process_life_cycle_state_changed = 28;
    104         ScreenStateChanged screen_state_changed = 29;
    105         BatteryLevelChanged battery_level_changed = 30;
    106         ChargingStateChanged charging_state_changed = 31;
    107         PluggedStateChanged plugged_state_changed = 32;
    108         InteractiveStateChanged interactive_state_changed = 33;
    109         TouchEventReported touch_event_reported = 34;
    110         WakeupAlarmOccurred wakeup_alarm_occurred = 35;
    111         KernelWakeupReported kernel_wakeup_reported = 36;
    112         WifiLockStateChanged wifi_lock_state_changed = 37;
    113         WifiSignalStrengthChanged wifi_signal_strength_changed = 38;
    114         WifiScanStateChanged wifi_scan_state_changed = 39;
    115         PhoneSignalStrengthChanged phone_signal_strength_changed = 40;
    116         SettingChanged setting_changed = 41;
    117         ActivityForegroundStateChanged activity_foreground_state_changed = 42;
    118         IsolatedUidChanged isolated_uid_changed = 43;
    119         PacketWakeupOccurred packet_wakeup_occurred = 44;
    120         WallClockTimeShifted wall_clock_time_shifted = 45;
    121         AnomalyDetected anomaly_detected = 46;
    122         AppBreadcrumbReported app_breadcrumb_reported = 47 [(allow_from_any_uid) = true];
    123         AppStartOccurred app_start_occurred = 48;
    124         AppStartCanceled app_start_canceled = 49;
    125         AppStartFullyDrawn app_start_fully_drawn = 50;
    126         LmkKillOccurred lmk_kill_occurred = 51;
    127         PictureInPictureStateChanged picture_in_picture_state_changed = 52;
    128         WifiMulticastLockStateChanged wifi_multicast_lock_state_changed = 53;
    129         LmkStateChanged lmk_state_changed = 54;
    130         AppStartMemoryStateCaptured app_start_memory_state_captured = 55;
    131         ShutdownSequenceReported shutdown_sequence_reported = 56;
    132         BootSequenceReported boot_sequence_reported = 57;
    133         DaveyOccurred davey_occurred = 58 [(allow_from_any_uid) = true];
    134         OverlayStateChanged overlay_state_changed = 59;
    135         ForegroundServiceStateChanged foreground_service_state_changed = 60;
    136         CallStateChanged call_state_changed = 61;
    137         KeyguardStateChanged keyguard_state_changed = 62;
    138         KeyguardBouncerStateChanged keyguard_bouncer_state_changed = 63;
    139         KeyguardBouncerPasswordEntered keyguard_bouncer_password_entered = 64;
    140         AppDied app_died = 65;
    141         ResourceConfigurationChanged resource_configuration_changed = 66;
    142         BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67;
    143         BluetoothConnectionStateChanged bluetooth_connection_state_changed = 68;
    144         GpsSignalQualityChanged gps_signal_quality_changed = 69;
    145         UsbConnectorStateChanged usb_connector_state_changed = 70;
    146         SpeakerImpedanceReported speaker_impedance_reported = 71;
    147         HardwareFailed hardware_failed = 72;
    148         PhysicalDropDetected physical_drop_detected = 73;
    149         ChargeCyclesReported charge_cycles_reported = 74;
    150         MobileConnectionStateChanged mobile_connection_state_changed = 75;
    151         MobileRadioTechnologyChanged mobile_radio_technology_changed = 76;
    152         UsbDeviceAttached usb_device_attached = 77;
    153         AppCrashOccurred app_crash_occurred = 78;
    154         ANROccurred anr_occurred = 79;
    155         WTFOccurred wtf_occurred = 80;
    156         LowMemReported low_mem_reported = 81;
    157         GenericAtom generic_atom = 82;
    158         KeyValuePairsAtom key_value_pairs_atom = 83 [(allow_from_any_uid) = true];
    159         VibratorStateChanged vibrator_state_changed = 84;
    160         DeferredJobStatsReported deferred_job_stats_reported = 85;
    161         ThermalThrottlingStateChanged thermal_throttling = 86 [deprecated=true];
    162         BiometricAcquired biometric_acquired = 87;
    163         BiometricAuthenticated biometric_authenticated = 88;
    164         BiometricErrorOccurred biometric_error_occurred = 89;
    165         // Atom number 90 is available for use.
    166         BatteryHealthSnapshot battery_health_snapshot = 91;
    167         SlowIo slow_io = 92;
    168         BatteryCausedShutdown battery_caused_shutdown = 93;
    169         PhoneServiceStateChanged phone_service_state_changed = 94;
    170         PhoneStateChanged phone_state_changed = 95;
    171         UserRestrictionChanged user_restriction_changed = 96;
    172         SettingsUIChanged settings_ui_changed = 97;
    173         ConnectivityStateChanged connectivity_state_changed = 98;
    174         // TODO: service state change is very noisy shortly after boot, as well
    175         // as at other transitions - coming out of doze, device plugged in, etc.
    176         // Consider removing this if it becomes a problem
    177         ServiceStateChanged service_state_changed = 99;
    178         ServiceLaunchReported service_launch_reported = 100;
    179         FlagFlipUpdateOccurred flag_flip_update_occurred = 101;
    180         BinaryPushStateChanged binary_push_state_changed = 102;
    181         DevicePolicyEvent device_policy_event = 103;
    182         DocsUIFileOperationCanceledReported docs_ui_file_op_canceled =
    183             104 [(log_from_module) = "docsui"];
    184         DocsUIFileOperationCopyMoveModeReported
    185             docs_ui_file_op_copy_move_mode_reported =
    186             105 [(log_from_module) = "docsui"];
    187         DocsUIFileOperationFailureReported docs_ui_file_op_failure =
    188             106 [(log_from_module) = "docsui"];
    189         DocsUIFileOperationReported docs_ui_provider_file_op =
    190             107 [(log_from_module) = "docsui"];
    191         DocsUIInvalidScopedAccessRequestReported
    192             docs_ui_invalid_scoped_access_request =
    193             108 [(log_from_module) = "docsui"];
    194         DocsUILaunchReported docs_ui_launch_reported =
    195             109 [(log_from_module) = "docsui"];
    196         DocsUIRootVisitedReported docs_ui_root_visited =
    197             110 [(log_from_module) = "docsui"];
    198         DocsUIStartupMsReported docs_ui_startup_ms =
    199             111 [(log_from_module) = "docsui"];
    200         DocsUIUserActionReported docs_ui_user_action_reported =
    201             112 [(log_from_module) = "docsui"];
    202         WifiEnabledStateChanged wifi_enabled_state_changed = 113;
    203         WifiRunningStateChanged wifi_running_state_changed = 114;
    204         AppCompacted app_compacted = 115;
    205         NetworkDnsEventReported network_dns_event_reported = 116 [(log_from_module) = "resolv"];
    206         DocsUIPickerLaunchedFromReported docs_ui_picker_launched_from_reported =
    207             117 [(log_from_module) = "docsui"];
    208         DocsUIPickResultReported docs_ui_pick_result_reported =
    209             118 [(log_from_module) = "docsui"];
    210         DocsUISearchModeReported docs_ui_search_mode_reported =
    211             119 [(log_from_module) = "docsui"];
    212         DocsUISearchTypeReported docs_ui_search_type_reported =
    213             120 [(log_from_module) = "docsui"];
    214         DataStallEvent data_stall_event = 121 [(log_from_module) = "network_stack"];
    215         RescuePartyResetReported rescue_party_reset_reported = 122;
    216         SignedConfigReported signed_config_reported = 123;
    217         GnssNiEventReported gnss_ni_event_reported = 124;
    218         BluetoothLinkLayerConnectionEvent bluetooth_link_layer_connection_event = 125;
    219         BluetoothAclConnectionStateChanged bluetooth_acl_connection_state_changed = 126;
    220         BluetoothScoConnectionStateChanged bluetooth_sco_connection_state_changed = 127;
    221         AppDowngraded app_downgraded = 128;
    222         AppOptimizedAfterDowngraded app_optimized_after_downgraded = 129;
    223         LowStorageStateChanged low_storage_state_changed = 130;
    224         GnssNfwNotificationReported gnss_nfw_notification_reported = 131;
    225         GnssConfigurationReported gnss_configuration_reported = 132;
    226         UsbPortOverheatEvent usb_port_overheat_event_reported = 133;
    227         NfcErrorOccurred nfc_error_occurred = 134;
    228         NfcStateChanged nfc_state_changed = 135;
    229         NfcBeamOccurred nfc_beam_occurred = 136;
    230         NfcCardemulationOccurred nfc_cardemulation_occurred = 137;
    231         NfcTagOccurred nfc_tag_occurred = 138;
    232         NfcHceTransactionOccurred nfc_hce_transaction_occurred = 139;
    233         SeStateChanged se_state_changed = 140;
    234         SeOmapiReported se_omapi_reported = 141;
    235         BroadcastDispatchLatencyReported broadcast_dispatch_latency_reported = 142;
    236         AttentionManagerServiceResultReported attention_manager_service_result_reported = 143;
    237         AdbConnectionChanged adb_connection_changed = 144;
    238         SpeechDspStatReported speech_dsp_stat_reported = 145;
    239         UsbContaminantReported usb_contaminant_reported = 146;
    240         WatchdogRollbackOccurred watchdog_rollback_occurred = 147;
    241         BiometricSystemHealthIssueDetected biometric_system_health_issue_detected = 148;
    242         BubbleUIChanged bubble_ui_changed = 149;
    243         ScheduledJobConstraintChanged scheduled_job_constraint_changed = 150;
    244         BluetoothActiveDeviceChanged bluetooth_active_device_changed = 151;
    245         BluetoothA2dpPlaybackStateChanged bluetooth_a2dp_playback_state_changed = 152;
    246         BluetoothA2dpCodecConfigChanged bluetooth_a2dp_codec_config_changed = 153;
    247         BluetoothA2dpCodecCapabilityChanged bluetooth_a2dp_codec_capability_changed = 154;
    248         BluetoothA2dpAudioUnderrunReported bluetooth_a2dp_audio_underrun_reported = 155;
    249         BluetoothA2dpAudioOverrunReported bluetooth_a2dp_audio_overrun_reported = 156;
    250         BluetoothDeviceRssiReported bluetooth_device_rssi_reported = 157;
    251         BluetoothDeviceFailedContactCounterReported bluetooth_device_failed_contact_counter_reported = 158;
    252         BluetoothDeviceTxPowerLevelReported bluetooth_device_tx_power_level_reported = 159;
    253         BluetoothHciTimeoutReported bluetooth_hci_timeout_reported = 160;
    254         BluetoothQualityReportReported bluetooth_quality_report_reported = 161;
    255         BluetoothDeviceInfoReported bluetooth_device_info_reported = 162;
    256         BluetoothRemoteVersionInfoReported bluetooth_remote_version_info_reported = 163;
    257         BluetoothSdpAttributeReported bluetooth_sdp_attribute_reported = 164;
    258         BluetoothBondStateChanged bluetooth_bond_state_changed = 165;
    259         BluetoothClassicPairingEventReported bluetooth_classic_pairing_event_reported = 166;
    260         BluetoothSmpPairingEventReported bluetooth_smp_pairing_event_reported = 167;
    261         ScreenTimeoutExtensionReported screen_timeout_extension_reported = 168;
    262         ProcessStartTime process_start_time = 169;
    263         PermissionGrantRequestResultReported permission_grant_request_result_reported =
    264             170 [(log_from_module) = "permissioncontroller"];
    265         BluetoothSocketConnectionStateChanged bluetooth_socket_connection_state_changed = 171;
    266         DeviceIdentifierAccessDenied device_identifier_access_denied = 172;
    267         BubbleDeveloperErrorReported bubble_developer_error_reported = 173;
    268         AssistGestureStageReported assist_gesture_stage_reported = 174;
    269         AssistGestureFeedbackReported assist_gesture_feedback_reported = 175;
    270         AssistGestureProgressReported assist_gesture_progress_reported = 176;
    271         TouchGestureClassified touch_gesture_classified = 177;
    272         HiddenApiUsed hidden_api_used = 178 [(allow_from_any_uid) = true];
    273         StyleUIChanged style_ui_changed = 179 [(log_from_module) = "style"];
    274         PrivacyIndicatorsInteracted privacy_indicators_interacted =
    275             180 [(log_from_module) = "permissioncontroller"];
    276         AppInstallOnExternalStorageReported app_install_on_external_storage_reported = 181;
    277         NetworkStackReported network_stack_reported = 182 [(log_from_module) = "network_stack"];
    278         AppMovedStorageReported app_moved_storage_reported = 183;
    279         BiometricEnrolled biometric_enrolled = 184;
    280         SystemServerWatchdogOccurred system_server_watchdog_occurred = 185;
    281         TombStoneOccurred tomb_stone_occurred = 186;
    282         BluetoothClassOfDeviceReported bluetooth_class_of_device_reported = 187;
    283         IntelligenceEventReported intelligence_event_reported =
    284             188 [(log_from_module) = "intelligence"];
    285         ThermalThrottlingSeverityStateChanged thermal_throttling_severity_state_changed = 189;
    286         RoleRequestResultReported role_request_result_reported =
    287             190 [(log_from_module) = "permissioncontroller"];
    288         MediametricsAudiopolicyReported mediametrics_audiopolicy_reported = 191;
    289         MediametricsAudiorecordReported mediametrics_audiorecord_reported = 192;
    290         MediametricsAudiothreadReported mediametrics_audiothread_reported = 193;
    291         MediametricsAudiotrackReported mediametrics_audiotrack_reported = 194;
    292         MediametricsCodecReported mediametrics_codec_reported = 195;
    293         MediametricsDrmWidevineReported mediametrics_drm_widevine_reported = 196;
    294         MediametricsExtractorReported mediametrics_extractor_reported = 197;
    295         MediametricsMediadrmReported mediametrics_mediadrm_reported = 198;
    296         MediametricsNuPlayerReported mediametrics_nuplayer_reported = 199;
    297         MediametricsRecorderReported mediametrics_recorder_reported = 200;
    298         CarPowerStateChanged car_power_state_changed = 203;
    299         GarageModeInfo garage_mode_info = 204;
    300         TestAtomReported test_atom_reported = 205 [(log_from_module) = "cts"];
    301         ContentCaptureCallerMismatchReported content_capture_caller_mismatch_reported = 206;
    302         ContentCaptureServiceEvents content_capture_service_events = 207;
    303         ContentCaptureSessionEvents content_capture_session_events = 208;
    304         ContentCaptureFlushed content_capture_flushed = 209;
    305         LocationManagerApiUsageReported location_manager_api_usage_reported = 210;
    306         ReviewPermissionsFragmentResultReported review_permissions_fragment_result_reported =
    307             211 [(log_from_module) = "permissioncontroller"];
    308         RuntimePermissionsUpgradeResult runtime_permissions_upgrade_result =
    309             212 [(log_from_module) = "permissioncontroller"];
    310         GrantPermissionsActivityButtonActions grant_permissions_activity_button_actions =
    311             213 [(log_from_module) = "permissioncontroller"];
    312         LocationAccessCheckNotificationAction location_access_check_notification_action =
    313             214 [(log_from_module) = "permissioncontroller"];
    314         AppPermissionFragmentActionReported app_permission_fragment_action_reported =
    315             215 [(log_from_module) = "permissioncontroller"];
    316         AppPermissionFragmentViewed app_permission_fragment_viewed =
    317             216 [(log_from_module) = "permissioncontroller"];
    318         AppPermissionsFragmentViewed app_permissions_fragment_viewed =
    319             217 [(log_from_module) = "permissioncontroller"];
    320         PermissionAppsFragmentViewed permission_apps_fragment_viewed =
    321             218  [(log_from_module) = "permissioncontroller"];
    322     }
    323 
    324     // Pulled events will start at field 10000.
    325     // Next: 10062
    326     oneof pulled {
    327         WifiBytesTransfer wifi_bytes_transfer = 10000;
    328         WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001;
    329         MobileBytesTransfer mobile_bytes_transfer = 10002;
    330         MobileBytesTransferByFgBg mobile_bytes_transfer_by_fg_bg = 10003;
    331         BluetoothBytesTransfer bluetooth_bytes_transfer = 10006;
    332         KernelWakelock kernel_wakelock = 10004;
    333         SubsystemSleepState subsystem_sleep_state = 10005;
    334         CpuTimePerFreq cpu_time_per_freq = 10008;
    335         CpuTimePerUid cpu_time_per_uid = 10009;
    336         CpuTimePerUidFreq cpu_time_per_uid_freq = 10010;
    337         WifiActivityInfo wifi_activity_info = 10011;
    338         ModemActivityInfo modem_activity_info = 10012;
    339         BluetoothActivityInfo bluetooth_activity_info = 10007;
    340         ProcessMemoryState process_memory_state = 10013;
    341         SystemElapsedRealtime system_elapsed_realtime = 10014;
    342         SystemUptime system_uptime = 10015;
    343         CpuActiveTime cpu_active_time = 10016;
    344         CpuClusterTime cpu_cluster_time = 10017;
    345         DiskSpace disk_space = 10018 [deprecated=true];
    346         RemainingBatteryCapacity remaining_battery_capacity = 10019;
    347         FullBatteryCapacity full_battery_capacity = 10020;
    348         Temperature temperature = 10021;
    349         BinderCalls binder_calls = 10022;
    350         BinderCallsExceptions binder_calls_exceptions = 10023;
    351         LooperStats looper_stats = 10024;
    352         DiskStats disk_stats = 10025;
    353         DirectoryUsage directory_usage = 10026;
    354         AppSize app_size = 10027;
    355         CategorySize category_size = 10028;
    356         ProcStats proc_stats = 10029;
    357         BatteryVoltage battery_voltage = 10030;
    358         NumFingerprintsEnrolled num_fingerprints_enrolled = 10031;
    359         DiskIo disk_io = 10032;
    360         PowerProfile power_profile = 10033;
    361         ProcStatsPkgProc proc_stats_pkg_proc = 10034;
    362         ProcessCpuTime process_cpu_time = 10035;
    363         NativeProcessMemoryState native_process_memory_state = 10036;
    364         CpuTimePerThreadFreq cpu_time_per_thread_freq = 10037;
    365         OnDevicePowerMeasurement on_device_power_measurement = 10038;
    366         DeviceCalculatedPowerUse device_calculated_power_use = 10039;
    367         DeviceCalculatedPowerBlameUid device_calculated_power_blame_uid = 10040;
    368         DeviceCalculatedPowerBlameOther device_calculated_power_blame_other = 10041;
    369         ProcessMemoryHighWaterMark process_memory_high_water_mark = 10042;
    370         BatteryLevel battery_level = 10043;
    371         BuildInformation build_information = 10044;
    372         BatteryCycleCount battery_cycle_count = 10045;
    373         DebugElapsedClock debug_elapsed_clock = 10046;
    374         DebugFailingElapsedClock debug_failing_elapsed_clock = 10047;
    375         NumFacesEnrolled num_faces_enrolled = 10048;
    376         RoleHolder role_holder = 10049;
    377         DangerousPermissionState dangerous_permission_state = 10050;
    378         TrainInfo train_info = 10051;
    379         TimeZoneDataInfo time_zone_data_info = 10052;
    380         ExternalStorageInfo external_storage_info = 10053;
    381         GpuStatsGlobalInfo gpu_stats_global_info = 10054;
    382         GpuStatsAppInfo gpu_stats_app_info = 10055;
    383         SystemIonHeapSize system_ion_heap_size = 10056;
    384         AppsOnExternalStorageInfo apps_on_external_storage_info = 10057;
    385         FaceSettings face_settings = 10058;
    386         CoolingDevice cooling_device = 10059;
    387         AppOps app_ops = 10060;
    388         ProcessSystemIonHeapSize process_system_ion_heap_size = 10061;
    389     }
    390 
    391     // DO NOT USE field numbers above 100,000 in AOSP.
    392     // Field numbers 100,000 - 199,999 are reserved for non-AOSP (e.g. OEMs) to use.
    393     // Field numbers 200,000 and above are reserved for future use; do not use them at all.
    394 }
    395 
    396 /**
    397  * This proto represents a node of an attribution chain.
    398  * Note: All attribution chains are represented as a repeated field of type
    399  * AttributionNode. It is understood that in such arrays, the order is that
    400  * of calls, that is [A, B, C] if A calls B that calls C.
    401  */
    402 message AttributionNode {
    403     // The uid for a given element in the attribution chain.
    404     optional int32 uid = 1;
    405 
    406     // The (optional) string tag for an element in the attribution chain. If the
    407     // element has no tag, it is encoded as an empty string.
    408     optional string tag = 2;
    409 }
    410 
    411 message KeyValuePair {
    412     optional int32 key = 1;
    413     oneof value {
    414         int32 value_int = 2;
    415         int64 value_long = 3;
    416         string value_str = 4;
    417         float value_float = 5;
    418     }
    419 }
    420 
    421 message KeyValuePairsAtom {
    422     optional int32 uid = 1;
    423     repeated KeyValuePair pairs = 2;
    424 }
    425 
    426 /*
    427  * *****************************************************************************
    428  * Below are all of the individual atoms that are logged by Android via statsd.
    429  *
    430  * RULES:
    431  *   - The field ids for each atom must start at 1, and count upwards by 1.
    432  *     Skipping field ids is not allowed.
    433  *   - These form an API, so renaming, renumbering or removing fields is
    434  *     not allowed between android releases.  (This is not currently enforced,
    435  *     but there will be a tool to enforce this restriction).
    436  *   - The types must be built-in protocol buffer types, namely, no sub-messages
    437  *     are allowed (yet).  The bytes type is also not allowed.
    438  *   - The CamelCase name of the message type should match the
    439  *     underscore_separated name as defined in Atom.
    440  *   - If an atom represents work that can be attributed to an app, there can
    441  *     be exactly one AttributionChain field. It must be field number 1.
    442  *   - A field that is a uid should be a string field, tagged with the [xxx]
    443  *     annotation. The generated code on android will be represented by UIDs,
    444  *     and those UIDs will be translated in xxx to those strings.
    445  *
    446  * CONVENTIONS:
    447  *   - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange.
    448  *   - If there is a UID, it goes first. Think in an object-oriented fashion.
    449  * *****************************************************************************
    450  */
    451 
    452 /**
    453  * This atom is deprecated starting in Q. Please use ThermalThrottlingSeverityStateChanged.
    454  * Logs when the Thermal service HAL notifies the throttling start/stop events.
    455  *
    456  * Logged from:
    457  *   frameworks/base/services/core/java/com/android/server/stats/StatsCompanionService.java
    458  */
    459 message ThermalThrottlingStateChanged {
    460     // The type of temperature being reported (CPU, GPU, SKIN, etc)
    461     optional android.os.TemperatureTypeEnum sensor_type = 1;
    462 
    463     // Throttling state, this field is DEPRECATED
    464     enum State {
    465         UNKNOWN = 0;
    466         START = 1; // START indicated that throttling was triggered.
    467         STOP = 2; // STOP indicates that throttling was cleared.
    468     }
    469     optional State state = 2;
    470 
    471     optional float temperature = 3;
    472 }
    473 
    474 /**
    475  * Logs when the screen state changes.
    476  *
    477  * Logged from:
    478  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    479  */
    480 message ScreenStateChanged {
    481     // New screen state, from frameworks/base/core/proto/android/view/enums.proto.
    482     optional android.view.DisplayStateEnum state = 1 [(state_field_option).option = EXCLUSIVE];
    483 }
    484 
    485 /**
    486  * Logs that the process state of the uid, as determined by ActivityManager
    487  * (i.e. the highest process state of that uid's processes) has changed.
    488  *
    489  * Logged from:
    490  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    491  */
    492 message UidProcessStateChanged {
    493     optional int32 uid = 1 [(state_field_option).option = PRIMARY, (is_uid) = true];
    494 
    495     // The state, from frameworks/base/core/proto/android/app/enums.proto.
    496     optional android.app.ProcessStateEnum state = 2 [(state_field_option).option = EXCLUSIVE];
    497 }
    498 
    499 /**
    500  * Logs process state change of a process, as per the activity manager.
    501  *
    502  * Logged from:
    503  *   frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java
    504  */
    505 message ProcessStateChanged {
    506     optional int32 uid = 1;
    507     optional string process_name = 2;
    508     optional string package_name = 3;
    509     // TODO: remove this when validation is done
    510     optional int64 version = 5;
    511     // The state, from frameworks/base/core/proto/android/app/enums.proto.
    512     optional android.app.ProcessStateEnum state = 4;
    513 }
    514 
    515 /**
    516  * Logs when ActivityManagerService sleep state is changed.
    517  *
    518  * Logged from:
    519  *   frameworks/base/services/core/java/com/android/server/am/ActivityTaskManagerService.java
    520  */
    521 message ActivityManagerSleepStateChanged {
    522     // TODO: import frameworks proto
    523     enum State {
    524         UNKNOWN = 0;
    525         ASLEEP = 1;
    526         AWAKE = 2;
    527     }
    528     optional State state = 1 [(state_field_option).option = EXCLUSIVE];
    529 }
    530 
    531 /**
    532  * Logs when system memory state changes.
    533  *
    534  * Logged from:
    535  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
    536  */
    537 message MemoryFactorStateChanged {
    538     // TODO: import frameworks proto
    539     enum State {
    540         MEMORY_UNKNOWN = 0;
    541         NORMAL = 1;     // normal.
    542         MODERATE = 2;   // moderate memory pressure.
    543         LOW = 3;        // low memory.
    544         CRITICAL = 4;   // critical memory.
    545 
    546     }
    547     optional State factor = 1 [(state_field_option).option = EXCLUSIVE];
    548 }
    549 
    550 /**
    551  * Logs when app is using too much cpu, according to ActivityManagerService.
    552  *
    553  * Logged from:
    554  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
    555  */
    556 message ExcessiveCpuUsageReported {
    557     optional int32 uid = 1;
    558     optional string process_name = 2;
    559     optional string package_name = 3;
    560     // package version. TODO: remove this when validation is done
    561     optional int64 version = 4;
    562 }
    563 
    564 /**
    565  * Logs when a cached process is killed, along with its pss.
    566  *
    567  * Logged from:
    568  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
    569  */
    570 message CachedKillReported {
    571     optional int32 uid = 1;
    572     optional string process_name = 2;
    573     optional string package_name = 3;
    574     // TODO: remove this when validation is done
    575     optional int64 version = 5;
    576     optional int64 pss = 4;
    577 }
    578 
    579 /**
    580  * Logs when memory stats of a process is reported.
    581  *
    582  * Logged from:
    583  *   frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java
    584  */
    585 message ProcessMemoryStatReported {
    586     optional int32 uid = 1;
    587     optional string process_name = 2;
    588     optional string package_name = 3;
    589     //TODO: remove this when validation is done
    590     optional int64 version = 9;
    591     optional int64 pss = 4;
    592     optional int64 uss = 5;
    593     optional int64 rss = 6;
    594     enum Type {
    595         ADD_PSS_INTERNAL_SINGLE = 0;
    596         ADD_PSS_INTERNAL_ALL_MEM = 1;
    597         ADD_PSS_INTERNAL_ALL_POLL = 2;
    598         ADD_PSS_EXTERNAL = 3;
    599         ADD_PSS_EXTERNAL_SLOW = 4;
    600     }
    601     optional Type type = 7;
    602     optional int64 duration_millis = 8;
    603 }
    604 
    605 /**
    606  * Logs that a process started, finished, crashed, or ANRed.
    607  *
    608  * Logged from:
    609  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    610  */
    611 message ProcessLifeCycleStateChanged {
    612     optional int32 uid = 1 [(is_uid) = true];
    613 
    614     // The process name (usually same as the app name).
    615     optional string process_name = 2;
    616 
    617     // What lifecycle state the process changed to.
    618     // This enum is specific to atoms.proto.
    619     enum State {
    620         FINISHED = 0;
    621         STARTED = 1;
    622         CRASHED = 2;
    623     }
    624     optional State state = 3;
    625 }
    626 
    627 /**
    628  * Logs when the ble scan state changes.
    629  *
    630  * Logged from:
    631  *   packages/apps/Bluetooth/src/com/android/bluetooth/gatt/AppScanStats.java
    632  */
    633 message BleScanStateChanged {
    634     repeated AttributionNode attribution_node = 1;
    635 
    636     enum State {
    637         OFF = 0;
    638         ON = 1;
    639         // RESET indicates all ble stopped. Used when it (re)starts (e.g. after it crashes).
    640         RESET = 2;
    641     }
    642     optional State state = 2;
    643 
    644     // Does the scan have a filter.
    645     optional bool is_filtered = 3;
    646     // Whether the scan is a CALLBACK_TYPE_FIRST_MATCH scan. Called 'background' scan internally.
    647     optional bool is_first_match = 4;
    648     // Whether the scan set to piggy-back off the results of other scans (SCAN_MODE_OPPORTUNISTIC).
    649     optional bool is_opportunistic = 5;
    650 }
    651 
    652 /**
    653  * Logs reporting of a ble scan finding results.
    654  *
    655  * Logged from:
    656  *   packages/apps/Bluetooth/src/com/android/bluetooth/gatt/AppScanStats.java
    657  */
    658 // TODO: Consider also tracking per-scanner-id.
    659 message BleScanResultReceived {
    660     repeated AttributionNode attribution_node = 1;
    661 
    662     // Number of ble scan results returned.
    663     optional int32 num_results = 2;
    664 }
    665 
    666 /**
    667  * Logs when a sensor state changes.
    668  *
    669  * Logged from:
    670  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    671  */
    672 message SensorStateChanged {
    673     repeated AttributionNode attribution_node = 1;
    674 
    675     // The id (int) of the sensor.
    676     optional int32 sensor_id = 2;
    677 
    678     enum State {
    679         OFF = 0;
    680         ON = 1;
    681     }
    682     optional State state = 3;
    683 }
    684 
    685 /**
    686  * Logs when GPS state changes.
    687  *
    688  * Logged from:
    689  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    690  */
    691 message GpsScanStateChanged {
    692     repeated AttributionNode attribution_node = 1;
    693 
    694     enum State {
    695         OFF = 0;
    696         ON = 1;
    697     }
    698     optional State state = 2;
    699 }
    700 
    701 /**
    702  * Logs when GPS signal quality.
    703  *
    704  * Logged from:
    705  *   /frameworks/base/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
    706  */
    707 message GpsSignalQualityChanged {
    708     optional android.server.location.GpsSignalQualityEnum level = 1;
    709 }
    710 
    711 
    712 /**
    713  * Logs when a sync manager sync state changes.
    714  *
    715  * Logged from:
    716  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    717  */
    718 message SyncStateChanged {
    719     repeated AttributionNode attribution_node = 1;
    720 
    721     // Name of the sync (as named in the app). Can be chosen at run-time.
    722     optional string sync_name = 2;
    723 
    724     enum State {
    725         OFF = 0;
    726         ON = 1;
    727     }
    728     optional State state = 3;
    729 }
    730 
    731 /*
    732  * Deferred job stats.
    733  *
    734  * Logged from:
    735  *   frameworks/base/services/core/java/com/android/server/job/JobSchedulerService.java
    736 */
    737 message DeferredJobStatsReported {
    738     repeated AttributionNode attribution_node = 1;
    739 
    740     // Number of jobs deferred.
    741     optional int32 num_jobs_deferred = 2;
    742 
    743     // Time since the last job runs.
    744     optional int64 time_since_last_job_millis = 3;
    745 }
    746 
    747 /**
    748  * Logs when a job scheduler job state changes.
    749  *
    750  * Logged from:
    751  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    752  */
    753 message ScheduledJobStateChanged {
    754     repeated AttributionNode attribution_node = 1;
    755 
    756     // Name of the job (as named in the app)
    757     optional string job_name = 2;
    758 
    759     enum State {
    760         FINISHED = 0;
    761         STARTED = 1;
    762         SCHEDULED = 2;
    763     }
    764     optional State state = 3;
    765 
    766     // The reason a job has stopped.
    767     // This is only applicable when the state is FINISHED.
    768     // The default value is STOP_REASON_UNKNOWN.
    769     optional android.app.job.StopReasonEnum stop_reason = 4;
    770 
    771     // The standby bucket of the app that scheduled the job. These match the framework constants
    772     // defined in JobSchedulerService.java with the addition of UNKNOWN using -1, as ACTIVE is
    773     // already assigned 0.
    774     enum Bucket {
    775         UNKNOWN = -1;
    776         ACTIVE = 0;
    777         WORKING_SET = 1;
    778         FREQUENT = 2;
    779         RARE = 3;
    780         NEVER = 4;
    781     }
    782     optional Bucket standby_bucket = 5 [default = UNKNOWN];
    783 
    784     // The job id (as assigned by the app).
    785     optional int32 job_id = 6;
    786 }
    787 
    788 /**
    789  * Logs when the audio state changes.
    790  *
    791  * Logged from:
    792  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    793  */
    794 message AudioStateChanged {
    795     repeated AttributionNode attribution_node = 1;
    796 
    797     enum State {
    798         OFF = 0;
    799         ON = 1;
    800         // RESET indicates all audio stopped. Used when it (re)starts (e.g. after it crashes).
    801         RESET = 2;
    802     }
    803     optional State state = 2;
    804 }
    805 
    806 /**
    807  * Logs when the video codec state changes.
    808  *
    809  * Logged from:
    810  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    811  */
    812 message MediaCodecStateChanged {
    813     repeated AttributionNode attribution_node = 1;
    814 
    815     enum State {
    816         OFF = 0;
    817         ON = 1;
    818         // RESET indicates all mediaCodec stopped. Used when it (re)starts (e.g. after it crashes).
    819         RESET = 2;
    820     }
    821     optional State state = 2;
    822 }
    823 
    824 /**
    825  * Logs when the flashlight state changes.
    826  *
    827  * Logged from:
    828  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    829  */
    830 message FlashlightStateChanged {
    831     repeated AttributionNode attribution_node = 1;
    832 
    833     enum State {
    834         OFF = 0;
    835         ON = 1;
    836         // RESET indicates all flashlight stopped. Used when it (re)starts (e.g. after it crashes).
    837         RESET = 2;
    838     }
    839     optional State state = 2;
    840 }
    841 
    842 /**
    843  * Logs when the camera state changes.
    844  *
    845  * Logged from:
    846  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    847  */
    848 message CameraStateChanged {
    849     repeated AttributionNode attribution_node = 1;
    850 
    851     enum State {
    852         OFF = 0;
    853         ON = 1;
    854         // RESET indicates all camera stopped. Used when it (re)starts (e.g. after it crashes).
    855         RESET = 2;
    856     }
    857     optional State state = 2;
    858 }
    859 
    860 /**
    861  * Logs that the state of a wakelock (per app and per wakelock name) has changed.
    862  *
    863  * Logged from:
    864  *   TODO
    865  */
    866 message WakelockStateChanged {
    867     repeated AttributionNode attribution_node = 1;
    868 
    869     // The type (level) of the wakelock; e.g. a partial wakelock or a full wakelock.
    870     // From frameworks/base/core/proto/android/os/enums.proto.
    871     optional android.os.WakeLockLevelEnum type = 2;
    872 
    873     // The wakelock tag (Called tag in the Java API, sometimes name elsewhere).
    874     optional string tag = 3;
    875 
    876     enum State {
    877         RELEASE = 0;
    878         ACQUIRE = 1;
    879         CHANGE_RELEASE = 2;
    880         CHANGE_ACQUIRE = 3;
    881     }
    882     optional State state = 4;
    883 }
    884 
    885 /**
    886  * Logs when a partial wakelock is considered 'long' (over 1 min).
    887  *
    888  * Logged from:
    889  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    890  */
    891 message LongPartialWakelockStateChanged {
    892     repeated AttributionNode attribution_node = 1;
    893 
    894     // The wakelock tag (Called tag in the Java API, sometimes name elsewhere).
    895     optional string tag = 2;
    896 
    897     // TODO: I have no idea what this is.
    898     optional string history_tag = 3;
    899 
    900     enum State {
    901         OFF = 0;
    902         ON = 1;
    903     }
    904     optional State state = 4;
    905 }
    906 
    907 /**
    908  * Logs when the device is interactive, according to the PowerManager Notifier.
    909  *
    910  * Logged from:
    911  *   frameworks/base/services/core/java/com/android/server/power/Notifier.java
    912  */
    913 message InteractiveStateChanged {
    914     enum State {
    915         OFF = 0;
    916         ON = 1;
    917     }
    918     optional State state = 1;
    919 }
    920 
    921 /**
    922  * Logs Battery Saver state change.
    923  *
    924  * Logged from:
    925  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    926  */
    927 message BatterySaverModeStateChanged {
    928     enum State {
    929         OFF = 0;
    930         ON = 1;
    931     }
    932     optional State state = 1;
    933 }
    934 
    935 /**
    936  * Logs Doze mode state change.
    937  *
    938  * Logged from:
    939  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    940  */
    941 message DeviceIdleModeStateChanged {
    942     optional android.server.DeviceIdleModeEnum state = 1;
    943 }
    944 
    945 
    946 /**
    947  * Logs state change of Doze mode including maintenance windows.
    948  *
    949  * Logged from:
    950  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    951  */
    952 message DeviceIdlingModeStateChanged {
    953     optional android.server.DeviceIdleModeEnum state = 1;
    954 }
    955 
    956 /**
    957  * Logs screen brightness level.
    958  *
    959  * Logged from:
    960  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
    961  */
    962 message ScreenBrightnessChanged {
    963     // Screen brightness level. Should be in [-1, 255] according to PowerManager.java.
    964     optional int32 level = 1;
    965 }
    966 
    967 /**
    968  * Logs battery level (percent full, from 0 to 100).
    969  *
    970  * Logged from:
    971  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    972  */
    973 message BatteryLevelChanged {
    974     // Battery level. Should be in [0, 100].
    975     optional int32 battery_level = 1;
    976 }
    977 
    978 /**
    979  * Logs change in charging status of the device.
    980  *
    981  * Logged from:
    982  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    983  */
    984 message ChargingStateChanged {
    985     // State of the battery, from frameworks/base/core/proto/android/os/enums.proto.
    986     optional android.os.BatteryStatusEnum state = 1;
    987 }
    988 
    989 /**
    990  * Logs whether the device is plugged in, and what power source it is using.
    991  *
    992  * Logged from:
    993  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
    994  */
    995 message PluggedStateChanged {
    996     // Whether the device is plugged in, from frameworks/base/core/proto/android/os/enums.proto.
    997     optional android.os.BatteryPluggedStateEnum state = 1;
    998 }
    999 
   1000 /**
   1001  * Logs when an app's wakeup alarm fires.
   1002  *
   1003  * Logged from:
   1004  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   1005  */
   1006 message WakeupAlarmOccurred {
   1007     repeated AttributionNode attribution_node = 1;
   1008 
   1009     // Name of the wakeup alarm.
   1010     optional string tag = 2;
   1011 
   1012     // Name of source package (for historical reasons, since BatteryStats tracked it).
   1013     optional string package_name = 3;
   1014 
   1015     // These enum values match the STANDBY_BUCKET_XXX constants defined in UsageStatsManager.java.
   1016     enum Bucket {
   1017         UNKNOWN = 0;
   1018         EXEMPTED = 5;
   1019         ACTIVE = 10;
   1020         WORKING_SET = 20;
   1021         FREQUENT = 30;
   1022         RARE = 40;
   1023         NEVER = 50;
   1024     }
   1025     // The App Standby bucket of the app that scheduled the alarm at the time the alarm fired.
   1026     optional Bucket app_standby_bucket = 4;
   1027 }
   1028 
   1029 /**
   1030  * Logs when an an app causes the mobile radio to change state.
   1031  * Changing from LOW to MEDIUM or HIGH can be considered the app waking the mobile radio.
   1032  *
   1033  * Logged from:
   1034  *   frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
   1035  */
   1036 message MobileRadioPowerStateChanged {
   1037     repeated AttributionNode attribution_node = 1;
   1038 
   1039     // Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
   1040     optional android.telephony.DataConnectionPowerStateEnum state = 2;
   1041 }
   1042 
   1043 /**
   1044  * Logs when an an app causes the wifi radio to change state.
   1045  * Changing from LOW to MEDIUM or HIGH can be considered the app waking the wifi radio.
   1046  *
   1047  * Logged from:
   1048  *   frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
   1049  */
   1050 message WifiRadioPowerStateChanged {
   1051     repeated AttributionNode attribution_node = 1;
   1052 
   1053     // Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
   1054     optional android.telephony.DataConnectionPowerStateEnum state = 2;
   1055 }
   1056 
   1057 /**
   1058  * Logs kernel wakeup reasons and aborts.
   1059  *
   1060  * Logged from:
   1061  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
   1062  */
   1063 message KernelWakeupReported {
   1064     // Name of the kernel wakeup reason (or abort).
   1065     optional string wakeup_reason_name = 1;
   1066 
   1067     // Duration (in microseconds) for the wake-up interrupt to be serviced.
   1068     optional int64 duration_micros = 2;
   1069 }
   1070 
   1071 /**
   1072  * Logs when Wifi is toggled on/off.
   1073  * Note that Wifi may still perform certain functions (e.g. location scanning) even when disabled.
   1074  *
   1075  * Logged from:
   1076  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
   1077  */
   1078 message WifiEnabledStateChanged {
   1079     enum State {
   1080         OFF = 0;
   1081         ON = 1;
   1082     }
   1083     optional State state = 1;
   1084 }
   1085 
   1086 /**
   1087  * Logs when an app causes Wifi to run. In this context, 'to run' means to use Wifi Client Mode.
   1088  * TODO: Include support for Hotspot, perhaps by using an extra field to denote 'mode'.
   1089  * Note that Wifi Scanning is monitored separately in WifiScanStateChanged.
   1090  *
   1091  * Logged from:
   1092  *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
   1093  */
   1094 message WifiRunningStateChanged {
   1095     repeated AttributionNode attribution_node = 1;
   1096 
   1097     enum State {
   1098         OFF = 0;
   1099         ON = 1;
   1100     }
   1101     optional State state = 2;
   1102 }
   1103 
   1104 /**
   1105  * Logs wifi locks held by an app.
   1106  *
   1107  * Logged from:
   1108  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
   1109  */
   1110 message WifiLockStateChanged {
   1111     repeated AttributionNode attribution_node = 1;
   1112 
   1113     enum State {
   1114         OFF = 0;
   1115         ON = 1;
   1116     }
   1117     optional State state = 2;
   1118 
   1119     // WifiLock type, from frameworks/base/core/proto/android/wifi/enums.proto.
   1120     optional android.net.wifi.WifiModeEnum mode = 3;
   1121 }
   1122 
   1123 /**
   1124  * Logs wifi signal strength changes.
   1125  *
   1126  * Logged from:
   1127  *   frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.java
   1128  */
   1129 message WifiSignalStrengthChanged {
   1130     // Signal strength, from frameworks/base/core/proto/android/telephony/enums.proto.
   1131     optional android.telephony.SignalStrengthEnum signal_strength = 1;
   1132 }
   1133 
   1134 /**
   1135  * Logs wifi scans performed by an app.
   1136  *
   1137  * Logged from:
   1138  *   frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
   1139  */
   1140 message WifiScanStateChanged {
   1141     repeated AttributionNode attribution_node = 1;
   1142 
   1143     enum State {
   1144         OFF = 0;
   1145         ON = 1;
   1146     }
   1147     optional State state = 2;
   1148 }
   1149 
   1150 /**
   1151  * Logs wifi multicast locks held by an app
   1152  *
   1153  * Logged from:
   1154  *   frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiMulticastLockManager.java
   1155  */
   1156 message WifiMulticastLockStateChanged {
   1157     repeated AttributionNode attribution_node = 1;
   1158 
   1159     enum State {
   1160         OFF = 0;
   1161         ON = 1;
   1162     }
   1163     optional State state = 2;
   1164 
   1165     optional string tag = 3;
   1166 }
   1167 
   1168 /**
   1169  * Logs shutdown reason and duration on next boot.
   1170  *
   1171  * Logged from:
   1172  *   frameworks/base/core/java/com/android/server/BootReceiver.java
   1173  */
   1174 message ShutdownSequenceReported {
   1175     // True if shutdown is for a reboot. Default: false if we do not know.
   1176     optional bool reboot = 1;
   1177 
   1178     // Reason for shutdown. Eg: userrequested. Default: "<EMPTY>".
   1179     optional string reason = 2;
   1180 
   1181     // Beginning of shutdown time in ms using wall clock time since unix epoch.
   1182     // Default: 0 if no start time received.
   1183     optional int64 start_time_millis = 3;
   1184 
   1185     // Duration of shutdown in ms. Default: 0 if no duration received.
   1186     optional int64 duration_millis = 4;
   1187 }
   1188 
   1189 
   1190 /**
   1191  * Logs boot reason and duration.
   1192  *
   1193  * Logged from:
   1194  *   system/core/bootstat/bootstat.cpp
   1195  */
   1196 message BootSequenceReported {
   1197     // Reason for bootloader boot. Eg. reboot. See bootstat.cpp for larger list
   1198     // Default: "<EMPTY>" if not available.
   1199     optional string bootloader_reason = 1;
   1200 
   1201     // Reason for system boot. Eg. bootloader, reboot,userrequested
   1202     // Default: "<EMPTY>" if not available.
   1203     optional string system_reason = 2;
   1204 
   1205     // End of boot time in ms from unix epoch using system wall clock.
   1206     optional int64 end_time_millis = 3;
   1207 
   1208     // Total boot duration in ms.
   1209     optional int64 total_duration_millis = 4;
   1210 
   1211     // Bootloader duration in ms.
   1212     optional int64 bootloader_duration_millis = 5;
   1213 
   1214     // Time since last boot in ms. Default: 0 if not available.
   1215     optional int64 time_since_last_boot = 6;
   1216 }
   1217 
   1218 
   1219 /**
   1220  * Logs call state and disconnect cause (if applicable).
   1221  *
   1222  * Logged from:
   1223  *   packages/services/Telecomm/src/com/android/server/telecom/Call.java
   1224  */
   1225 message CallStateChanged {
   1226     // The state of the call. Eg. DIALING, ACTIVE, ON_HOLD, DISCONNECTED.
   1227     // From frameworks/base/core/proto/android/telecomm/enums.proto.
   1228     optional android.telecom.CallStateEnum call_state = 1;
   1229 
   1230     // The reason the call disconnected. Eg. ERROR, MISSED, REJECTED, BUSY.
   1231     // This value is only applicable when the call_state is DISCONNECTED, and
   1232     // should always be UNKNOWN if the call_state is not DISCONNECTED.
   1233     // From frameworks/base/core/proto/android/telecomm/enums.proto.
   1234     optional android.telecom.DisconnectCauseEnum disconnect_cause = 2;
   1235 
   1236     // True if the call is self-managed, which are apps that use the
   1237     // telecom infrastructure to make their own calls.
   1238     optional bool self_managed = 3;
   1239 
   1240     // True if call is external. External calls are calls on connected Wear
   1241     // devices but show up in Telecom so the user can pull them onto the device.
   1242     optional bool external_call = 4;
   1243 }
   1244 
   1245 /**
   1246  * Logs keyguard state. The keyguard is the lock screen.
   1247  *
   1248  * Logged from:
   1249  *   frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
   1250  */
   1251 message KeyguardStateChanged {
   1252     enum State {
   1253         UNKNOWN = 0;
   1254         // The keyguard is hidden when the phone is unlocked.
   1255         HIDDEN = 1;
   1256         // The keyguard is shown when the phone is locked (screen turns off).
   1257         SHOWN= 2;
   1258         // The keyguard is occluded when something is overlaying the keyguard.
   1259         // Eg. Opening the camera while on the lock screen.
   1260         OCCLUDED = 3;
   1261     }
   1262     optional State state = 1;
   1263 }
   1264 
   1265 /**
   1266  * Logs keyguard bouncer state. The bouncer is a part of the keyguard, and
   1267  * prompts the user to enter a password (pattern, pin, etc).
   1268  *
   1269  * Logged from:
   1270  *   frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
   1271  */
   1272 
   1273 message KeyguardBouncerStateChanged {
   1274     enum State {
   1275         UNKNOWN = 0;
   1276         // Bouncer is hidden, either as a result of successfully entering the
   1277         // password, screen timing out, or user going back to lock screen.
   1278         HIDDEN = 1;
   1279         // This is when the user is being prompted to enter the password.
   1280         SHOWN = 2;
   1281     }
   1282     optional State state = 1;
   1283 }
   1284 
   1285 /**
   1286  * Logs the result of entering a password into the keyguard bouncer.
   1287  *
   1288  * Logged from:
   1289  *   frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
   1290  */
   1291 message KeyguardBouncerPasswordEntered {
   1292     enum BouncerResult {
   1293         UNKNOWN = 0;
   1294         // The password entered was incorrect.
   1295         FAILURE = 1;
   1296         // The password entered was correct.
   1297         SUCCESS = 2;
   1298     }
   1299     optional BouncerResult result = 1;
   1300 }
   1301 
   1302 /*
   1303  * Logs changes to the configuration of the device. The configuration is defined
   1304  * in frameworks/base/core/java/android/content/res/Configuration.java
   1305  * More documentation is at https://d.android.com/reference/android/content/res/Configuration.html
   1306  * Please go there to interpret the possible values each field can be.
   1307  *
   1308  * Logged from:
   1309  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   1310  */
   1311 message ResourceConfigurationChanged {
   1312     // Bit mask of color capabilities of the screen.
   1313     // Contains information about the color gamut and hdr mode of the screen.
   1314     // See: https://d.android.com/reference/android/content/res/Configuration.html#colorMode
   1315     optional int32 color_mode = 1;
   1316 
   1317     // The target screen density being rendered to.
   1318     // See: https://d.android.com/reference/android/content/res/Configuration.html#densityDpi
   1319     optional int32 density_dpi = 2;
   1320 
   1321     // Current user preference for the scaling factor for fonts,
   1322     // relative to the base density scaling.
   1323     // See: https://d.android.com/reference/android/content/res/Configuration.html#fontScale
   1324     optional float font_scale = 3;
   1325 
   1326     // Flag indicating whether the hard keyboard is hidden.
   1327     // See: https://d.android.com/reference/android/content/res/Configuration.html#hardKeyboardHidden
   1328     optional int32 hard_keyboard_hidden = 4;
   1329 
   1330     // The type of keyboard attached to the device.
   1331     // See: https://d.android.com/reference/android/content/res/Configuration.html#keyboard
   1332     optional int32 keyboard = 5;
   1333 
   1334     // Flag indicating whether any keyboard is available. Takes soft keyboards into account.
   1335     // See: https://d.android.com/reference/android/content/res/Configuration.html#keyboardHidden
   1336     optional int32 keyboard_hidden = 6;
   1337 
   1338     // IMSI MCC (Mobile Country Code), corresponding to mcc resource qualifier.
   1339     // 0 if undefined.
   1340     // See: https://d.android.com/reference/android/content/res/Configuration.html#mcc
   1341     optional int32 mcc = 7;
   1342 
   1343     // IMSI MNC (Mobile Network Code), corresponding to mnc resource qualifier.
   1344     // 0 if undefined. Note: the actual MNC may be 0, to check for this use the
   1345     // MNC_ZERO symbol defined in Configuration.java.
   1346     // See: https://d.android.com/reference/android/content/res/Configuration.html#mnc
   1347     optional int32 mnc = 8;
   1348 
   1349     // The kind of navigation available on the device.
   1350     // See: https://developer.android.com/reference/android/content/res/Configuration.html#navigation
   1351     optional int32 navigation = 9;
   1352 
   1353     // Flag indicating whether the navigation is available.
   1354     // See: https://d.android.com/reference/android/content/res/Configuration.html#navigationHidden
   1355     optional int32 navigation_hidden = 10;
   1356 
   1357     // Overall orientation of the screen.
   1358     // See: https://d.android.com/reference/android/content/res/Configuration.html#orientation
   1359     optional int32 orientation = 11;
   1360 
   1361     // The current height of the available screen space, in dp units.
   1362     // See: https://d.android.com/reference/android/content/res/Configuration.html#screenHeightDp
   1363     optional int32 screen_height_dp = 12;
   1364 
   1365     // Bit mask of overall layout of the screen.
   1366     // Contains information about screen size, whether the screen is wider/taller
   1367     // than normal, whether the screen layout is right-tl-left or left-to-right,
   1368     // and whether the screen has a rounded shape.
   1369     // See: https://d.android.com/reference/android/content/res/Configuration.html#screenLayout
   1370     optional int32 screen_layout = 13;
   1371 
   1372     // Current width of the available screen space, in dp units.
   1373     // See: https://d.android.com/reference/android/content/res/Configuration.html#screenWidthDp
   1374     optional int32 screen_width_dp = 14;
   1375 
   1376     // The smallest screen size an application will see in normal operation.
   1377     // This is the smallest value of both screenWidthDp and screenHeightDp
   1378     // in portrait and landscape.
   1379     // See: https://d.android.com/reference/android/content/res/Configuration.html#smallestScreenWidthDp
   1380     optional int32 smallest_screen_width_dp = 15;
   1381 
   1382     // The type of touch screen attached to the device.
   1383     // See: https://d.android.com/reference/android/content/res/Configuration.html#touchscreen
   1384     optional int32 touchscreen = 16;
   1385 
   1386     // Bit mask of the ui mode.
   1387     // Contains information about the overall ui mode of the device.
   1388     // Eg: NORMAL, DESK, CAR, TELEVISION, WATCH, VR_HEADSET
   1389     // Also contains information about whether the device is in night mode.
   1390     // See: https://d.android.com/reference/android/content/res/Configuration.html#uiMode
   1391     optional int32 ui_mode = 17;
   1392 }
   1393 
   1394 
   1395 /**
   1396  * Logs changes in the connection state of the mobile radio.
   1397  *
   1398  * Logged from:
   1399  *    frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
   1400  */
   1401 message MobileConnectionStateChanged {
   1402     // States are from the state machine DataConnection.java.
   1403     enum State {
   1404         UNKNOWN = 0;
   1405         // The connection is inactive, or disconnected.
   1406         INACTIVE = 1;
   1407         // The connection is being activated, or connecting.
   1408         ACTIVATING = 2;
   1409         // The connection is active, or connected.
   1410         ACTIVE = 3;
   1411         // The connection is disconnecting.
   1412         DISCONNECTING = 4;
   1413         // The connection is disconnecting after creating a connection.
   1414         DISCONNECTION_ERROR_CREATING_CONNECTION = 5;
   1415     }
   1416     optional State state  = 1;
   1417     // For multi-sim phones, this distinguishes between the sim cards.
   1418     optional int32 sim_slot_index = 2;
   1419     // Used to identify the connection. Starts at 0 and increments by 1 for
   1420     // every new network created. Resets whenever the device reboots.
   1421     optional int32 data_connection_id = 3;
   1422     // A bitmask for the capabilities of this connection.
   1423     // Eg. DEFAULT (internet), MMS, SUPL, DUN, IMS.
   1424     // Default value (if we have no information): 0
   1425     optional int64 capabilities = 4;
   1426     // If this connection has internet.
   1427     // This just checks if the DEFAULT bit of capabilities is set.
   1428     optional bool has_internet = 5;
   1429 }
   1430 
   1431 /**
   1432  * Logs changes in mobile radio technology. eg: LTE, EDGE, CDMA.
   1433  *
   1434  * Logged from:
   1435  *   frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java
   1436  */
   1437 message MobileRadioTechnologyChanged {
   1438     optional android.telephony.NetworkTypeEnum state = 1;
   1439     // For multi-sim phones, this distinguishes between the sim cards.
   1440     optional int32 sim_slot_index = 2;
   1441 }
   1442 
   1443 /**
   1444  * Logs the VID and PID of any connected USB devices.
   1445  *
   1446  * Notes if any Audio, HID (input buttons/mouse/keyboard), or Storage interfaces are present.
   1447  *
   1448  * Logged by Vendor.
   1449  */
   1450 message UsbDeviceAttached {
   1451     optional int32 vid = 1;
   1452     optional int32 pid = 2;
   1453     optional bool has_audio = 3;
   1454     optional bool has_hid = 4;
   1455     optional bool has_storage = 5;
   1456     enum State {
   1457         STATE_DISCONNECTED = 0;
   1458         STATE_CONNECTED = 1;
   1459     }
   1460     optional State state = 6;
   1461     optional int64 last_connect_duration_millis = 7;
   1462 }
   1463 
   1464 
   1465 /**
   1466  * Logs when Bluetooth is enabled and disabled.
   1467  *
   1468  * Logged from:
   1469  *   services/core/java/com/android/server/BluetoothManagerService.java
   1470  */
   1471 message BluetoothEnabledStateChanged {
   1472     repeated AttributionNode attribution_node = 1;
   1473     // Whether or not bluetooth is enabled on the device.
   1474     enum State {
   1475         UNKNOWN = 0;
   1476         ENABLED = 1;
   1477         DISABLED = 2;
   1478     }
   1479     optional State state = 2;
   1480     // The reason for being enabled/disabled.
   1481     // Eg. Airplane mode, crash, application request.
   1482     optional android.bluetooth.EnableDisableReasonEnum reason = 3;
   1483     // If the reason is an application request, this will be the package name.
   1484     optional string pkg_name = 4;
   1485 }
   1486 
   1487 /**
   1488  * Logs when profiles on a Bluetooth device connects and disconnects.
   1489  *
   1490  * Logged from:
   1491  *    packages/apps/Bluetooth/src/com/android/bluetooth/btservice/RemoteDevices.java
   1492  *
   1493  * Next Tag: 5
   1494  */
   1495 message BluetoothConnectionStateChanged {
   1496     // The state of the connection.
   1497     // Eg: CONNECTING, CONNECTED, DISCONNECTING, DISCONNECTED.
   1498     optional android.bluetooth.ConnectionStateEnum state = 1;
   1499     // An identifier that can be used to match connect and disconnect events.
   1500     // Currently is last two bytes of a hash of a device level ID and
   1501     // the mac address of the bluetooth device that is connected.
   1502     // Deprecated: use obfuscated_id instead, this one is always 0 for Q+
   1503     optional int32 obfuscated_id = 2 [deprecated = true];
   1504     // The profile that is connected. Eg. GATT, A2DP, HEADSET.
   1505     // From android.bluetooth.BluetoothAdapter.java
   1506     // Default: 0 when not used
   1507     optional int32 bt_profile = 3;
   1508     // An identifier that can be used to match events for this device.
   1509     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1510     // Salt: Randomly generated 256 bit value
   1511     // Hash algorithm: HMAC-SHA256
   1512     // Size: 32 byte
   1513     // Default: null or empty if the device identifier is not known
   1514     optional bytes new_obfuscated_id = 4 [(android.os.statsd.log_mode) = MODE_BYTES];
   1515 }
   1516 
   1517 /**
   1518  * Logs when a Bluetooth device connects and disconnects over ACL
   1519  *
   1520  * Logged from:
   1521  *    packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterProperties.java
   1522  *
   1523  * Next Tag: 3
   1524  */
   1525 message BluetoothAclConnectionStateChanged {
   1526     // An identifier that can be used to match events for this device.
   1527     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1528     // Salt: Randomly generated 256 bit value
   1529     // Hash algorithm: HMAC-SHA256
   1530     // Size: 32 byte
   1531     // Default: null or empty if the device identifier is not known
   1532     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1533     // The state of the connection.
   1534     // Eg: CONNECTING, CONNECTED, DISCONNECTING, DISCONNECTED.
   1535     optional android.bluetooth.ConnectionStateEnum state = 2;
   1536 }
   1537 
   1538 /**
   1539  * Logs when a Bluetooth device connects and disconnects over SCO
   1540  *
   1541  * Logged from:
   1542  *    packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
   1543  *    packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetClientStateMachine.java
   1544  *
   1545  * Next Tag: 4
   1546  */
   1547 message BluetoothScoConnectionStateChanged {
   1548     // An identifier that can be used to match events for this device.
   1549     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1550     // Salt: Randomly generated 256 bit value
   1551     // Hash algorithm: HMAC-SHA256
   1552     // Size: 32 byte
   1553     // Default: null or empty if the device identifier is not known
   1554     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1555     // The state of the connection.
   1556     // Eg: CONNECTING, CONNECTED, DISCONNECTING, DISCONNECTED.
   1557     optional android.bluetooth.ConnectionStateEnum state = 2;
   1558     // Codec used for this SCO connection
   1559     // Default: UNKNOWN
   1560     optional android.bluetooth.hfp.ScoCodec codec = 3;
   1561 }
   1562 
   1563 /**
   1564  * Logged when active device of a profile changes
   1565  *
   1566  * Logged from:
   1567  *     packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpService.java
   1568  *     packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetService.java
   1569  *     packages/apps/Bluetooth/src/com/android/bluetooth/hearingaid/HearingAidService.java
   1570  */
   1571 message BluetoothActiveDeviceChanged {
   1572     // The profile whose active device has changed. Eg. A2DP, HEADSET, HEARING_AID
   1573     // From android.bluetooth.BluetoothProfile
   1574     optional int32 bt_profile = 1;
   1575     // An identifier that can be used to match events for this new active device.
   1576     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1577     // Salt: Randomly generated 256 bit value
   1578     // Hash algorithm: HMAC-SHA256
   1579     // Size: 32 byte
   1580     // Default: null or empty if there is no active device for this profile
   1581     optional bytes obfuscated_id = 2 [(android.os.statsd.log_mode) = MODE_BYTES];
   1582 }
   1583 
   1584 // Logs when there is an event affecting Bluetooth device's link layer connection.
   1585 // - This event is triggered when there is a related HCI command or event
   1586 // - Users of this metrics can deduce Bluetooth device's connection state from these events
   1587 // - HCI commands are logged before the command is sent, after receiving command status, and after
   1588 //   receiving command complete
   1589 // - HCI events are logged when they arrive
   1590 //
   1591 // Low level log from system/bt
   1592 //
   1593 // Bluetooth classic commands:
   1594 // - CMD_CREATE_CONNECTION
   1595 // - CMD_DISCONNECT
   1596 // - CMD_CREATE_CONNECTION_CANCEL
   1597 // - CMD_ACCEPT_CONNECTION_REQUEST
   1598 // - CMD_REJECT_CONNECTION_REQUEST
   1599 // - CMD_SETUP_ESCO_CONNECTION
   1600 // - CMD_ACCEPT_ESCO_CONNECTION
   1601 // - CMD_REJECT_ESCO_CONNECTION
   1602 // - CMD_ENH_SETUP_ESCO_CONNECTION
   1603 // - CMD_ENH_ACCEPT_ESCO_CONNECTION
   1604 //
   1605 // Bluetooth low energy commands:
   1606 // - CMD_BLE_CREATE_LL_CONN [Only logged on error or when initiator filter policy is 0x00]
   1607 // - CMD_BLE_CREATE_CONN_CANCEL [Only logged when there is an error]
   1608 // - CMD_BLE_EXTENDED_CREATE_CONNECTION [Only logged on error or when initiator filter policy is 0x00]
   1609 // - CMD_BLE_CLEAR_WHITE_LIST
   1610 // - CMD_BLE_ADD_WHITE_LIST
   1611 // - CMD_BLE_REMOVE_WHITE_LIST
   1612 //
   1613 // Bluetooth classic events:
   1614 // - EVT_CONNECTION_COMP
   1615 // - EVT_CONNECTION_REQUEST
   1616 // - EVT_DISCONNECTION_COMP
   1617 // - EVT_ESCO_CONNECTION_COMP
   1618 // - EVT_ESCO_CONNECTION_CHANGED
   1619 //
   1620 // Bluetooth low energy meta events:
   1621 // - BLE_EVT_CONN_COMPLETE_EVT
   1622 // - BLE_EVT_ENHANCED_CONN_COMPLETE_EVT
   1623 //
   1624 // Next tag: 10
   1625 message BluetoothLinkLayerConnectionEvent {
   1626     // An identifier that can be used to match events for this device.
   1627     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1628     // Salt: Randomly generated 256 bit value
   1629     // Hash algorithm: HMAC-SHA256
   1630     // Size: 32 byte
   1631     // Default: null or empty if the device identifier is not known
   1632     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1633     // Connection handle of this connection if available
   1634     // Range: 0x0000 - 0x0EFF (12 bits)
   1635     // Default: 0xFFFF if the handle is unknown
   1636     optional int32 connection_handle = 2;
   1637     // Direction of the link
   1638     // Default: DIRECTION_UNKNOWN
   1639     optional android.bluetooth.DirectionEnum direction = 3;
   1640     // Type of this link
   1641     // Default: LINK_TYPE_UNKNOWN
   1642     optional android.bluetooth.LinkTypeEnum type = 4;
   1643 
   1644     // Reason metadata for this link layer connection event, rules for interpretation:
   1645     // 1. If hci_cmd is set and valid, hci_event can be either EVT_COMMAND_STATUS or
   1646     //    EVT_COMMAND_COMPLETE, ignore hci_ble_event in this case
   1647     // 2. If hci_event is set to EVT_BLE_META, look at hci_ble_event; otherwise, if hci_event is
   1648     //    set and valid, ignore hci_ble_event
   1649 
   1650     // HCI command associated with this event
   1651     // Default: CMD_UNKNOWN
   1652     optional android.bluetooth.hci.CommandEnum hci_cmd = 5;
   1653     // HCI event associated with this event
   1654     // Default: EVT_UNKNOWN
   1655     optional android.bluetooth.hci.EventEnum hci_event = 6;
   1656     // HCI BLE meta event associated with this event
   1657     // Default: BLE_EVT_UNKNOWN
   1658     optional android.bluetooth.hci.BleMetaEventEnum hci_ble_event = 7;
   1659     // HCI command status code if this is triggerred by hci_cmd
   1660     // Default: STATUS_UNKNOWN
   1661     optional android.bluetooth.hci.StatusEnum cmd_status = 8;
   1662     // HCI reason code associated with this event
   1663     // Default: STATUS_UNKNOWN
   1664     optional android.bluetooth.hci.StatusEnum reason_code = 9;
   1665 }
   1666 
   1667 /**
   1668  * Logs when a module is rolled back by Watchdog.
   1669  *
   1670  * Logged from: Rollback Manager
   1671  */
   1672 message WatchdogRollbackOccurred {
   1673     enum RollbackType {
   1674         UNKNOWN = 0;
   1675         ROLLBACK_INITIATE = 1;
   1676         ROLLBACK_SUCCESS = 2;
   1677         ROLLBACK_FAILURE = 3;
   1678         ROLLBACK_BOOT_TRIGGERED = 4;
   1679     }
   1680     optional RollbackType rollback_type = 1;
   1681 
   1682     optional string package_name = 2;
   1683 
   1684     optional int32 package_version_code = 3;
   1685 }
   1686 
   1687 /**
   1688  * Logs when there is a change in Bluetooth A2DP playback state
   1689  *
   1690  * Logged from:
   1691  *     packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpService.java
   1692  */
   1693 message BluetoothA2dpPlaybackStateChanged {
   1694     // An identifier that can be used to match events for this device.
   1695     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1696     // Salt: Randomly generated 256 bit value
   1697     // Hash algorithm: HMAC-SHA256
   1698     // Size: 32 byte
   1699     // Default: null or empty if the device identifier is not known
   1700     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1701     // Current playback state
   1702     // Default: PLAYBACK_STATE_UNKNOWN
   1703     optional android.bluetooth.a2dp.PlaybackStateEnum playback_state = 2;
   1704     // Current audio coding mode
   1705     // Default: AUDIO_CODING_MODE_UNKNOWN
   1706     optional android.bluetooth.a2dp.AudioCodingModeEnum audio_coding_mode = 3;
   1707 }
   1708 
   1709 /**
   1710  * Logs when there is a change in A2DP codec config for a particular remote device
   1711  *
   1712  * Logged from:
   1713  *     frameworks/base/core/java/android/bluetooth/BluetoothCodecConfig.java
   1714  *     packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpService.java
   1715  */
   1716 message BluetoothA2dpCodecConfigChanged {
   1717     // An identifier that can be used to match events for this device.
   1718     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1719     // Salt: Randomly generated 256 bit value
   1720     // Hash algorithm: HMAC-SHA256
   1721     // Size: 32 byte
   1722     // Default: null or empty if the device identifier is not known
   1723     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1724     // Type of codec as defined by various SOURCE_CODEC_TYPE_* constants in BluetoothCodecConfig
   1725     // Default SOURCE_CODEC_TYPE_INVALID
   1726     optional int32 codec_type = 2;
   1727     // Codec priroity, the higher the more preferred, -1 for disabled
   1728     // Default: CODEC_PRIORITY_DEFAULT
   1729     optional int32 codec_priority = 3;
   1730     // Sample rate in Hz as defined by various SAMPLE_RATE_* constants in BluetoothCodecConfig
   1731     // Default: SAMPLE_RATE_NONE
   1732     optional int32 sample_rate = 4;
   1733     // Bits per sample as defined by various BITS_PER_SAMPLE_* constants in BluetoothCodecConfig
   1734     // Default: BITS_PER_SAMPLE_NONE
   1735     optional int32 bits_per_sample = 5;
   1736     // Channel mode as defined by various CHANNEL_MODE_* constants in BluetoothCodecConfig
   1737     // Default: CHANNEL_MODE_NONE
   1738     optional int32 channel_mode = 6;
   1739     // Codec specific values
   1740     // Default 0
   1741     optional int64 codec_specific_1 = 7;
   1742     optional int64 codec_specific_2 = 8;
   1743     optional int64 codec_specific_3 = 9;
   1744     optional int64 codec_specific_4 = 10;
   1745 }
   1746 
   1747 /**
   1748  * Logs when there is a change in selectable A2DP codec capability for a paricular remote device
   1749  * Each codec's capability is logged separately due to statsd restriction
   1750  *
   1751  * Logged from:
   1752  *     frameworks/base/core/java/android/bluetooth/BluetoothCodecConfig.java
   1753  *     packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpService.java
   1754  */
   1755 message BluetoothA2dpCodecCapabilityChanged {
   1756     // An identifier that can be used to match events for this device.
   1757     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1758     // Salt: Randomly generated 256 bit value
   1759     // Hash algorithm: HMAC-SHA256
   1760     // Size: 32 byte
   1761     // Default: null or empty if the device identifier is not known
   1762     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1763     // Type of codec as defined by various SOURCE_CODEC_TYPE_* constants in BluetoothCodecConfig
   1764     // Default SOURCE_CODEC_TYPE_INVALID
   1765     optional int32 codec_type = 2;
   1766     // Codec priroity, the higher the more preferred, -1 for disabled
   1767     // Default: CODEC_PRIORITY_DEFAULT
   1768     optional int32 codec_priority = 3;
   1769     // A bit field of supported sample rates as defined by various SAMPLE_RATE_* constants
   1770     // in BluetoothCodecConfig
   1771     // Default: empty and SAMPLE_RATE_NONE for individual item
   1772     optional int32 sample_rate = 4;
   1773     // A bit field of supported bits per sample as defined by various BITS_PER_SAMPLE_* constants
   1774     // in BluetoothCodecConfig
   1775     // Default: empty and BITS_PER_SAMPLE_NONE for individual item
   1776     optional int32 bits_per_sample = 5;
   1777     // A bit field of supported channel mode as defined by various CHANNEL_MODE_* constants in
   1778     // BluetoothCodecConfig
   1779     // Default: empty and CHANNEL_MODE_NONE for individual item
   1780     optional int32 channel_mode = 6;
   1781     // Codec specific values
   1782     // Default 0
   1783     optional int64 codec_specific_1 = 7;
   1784     optional int64 codec_specific_2 = 8;
   1785     optional int64 codec_specific_3 = 9;
   1786     optional int64 codec_specific_4 = 10;
   1787 }
   1788 
   1789 /**
   1790  * Logs when A2DP failed to read from PCM source.
   1791  * This typically happens when audio HAL cannot supply A2DP with data fast enough for encoding.
   1792  *
   1793  * Logged from:
   1794  *     system/bt
   1795  */
   1796 message BluetoothA2dpAudioUnderrunReported {
   1797     // An identifier that can be used to match events for this device.
   1798     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1799     // Salt: Randomly generated 256 bit value
   1800     // Hash algorithm: HMAC-SHA256
   1801     // Size: 32 byte
   1802     // Default: null or empty if the device identifier is not known
   1803     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1804     // Encoding interval in nanoseconds
   1805     // Default: 0
   1806     optional int64 encoding_interval_nanos = 2;
   1807     // Number of bytes of PCM data that could not be read from the source
   1808     // Default: 0
   1809     optional int32 num_missing_pcm_bytes = 3;
   1810 }
   1811 
   1812 /**
   1813  * Logs when A2DP failed send encoded data to the remote device fast enough such that the transmit
   1814  * buffer queue is full and we have to drop data
   1815  *
   1816  * Logged from:
   1817  *     system/bt
   1818  */
   1819 message BluetoothA2dpAudioOverrunReported {
   1820     // An identifier that can be used to match events for this device.
   1821     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1822     // Salt: Randomly generated 256 bit value
   1823     // Hash algorithm: HMAC-SHA256
   1824     // Size: 32 byte
   1825     // Default: null or empty if the device identifier is not known
   1826     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1827     // Encoding interval in nanoseconds
   1828     // Default: 0
   1829     optional int64 encoding_interval_nanos = 2;
   1830     // Number of buffers dropped in this event
   1831     // Each buffer is encoded in one encoding interval and consists of multiple encoded frames
   1832     // Default: 0
   1833     optional int32 num_dropped_buffers = 3;
   1834     // Number of encoded buffers dropped in this event
   1835     // Default 0
   1836     optional int32 num_dropped_encoded_frames = 4;
   1837     // Number of encoded bytes dropped in this event
   1838     // Default: 0
   1839     optional int32 num_dropped_encoded_bytes = 5;
   1840 }
   1841 
   1842 /**
   1843  * Logs when we receive reports regarding a device's RSSI value
   1844  *
   1845  * Logged from:
   1846  *     system/bt
   1847  */
   1848 message BluetoothDeviceRssiReported {
   1849     // An identifier that can be used to match events for this device.
   1850     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1851     // Salt: Randomly generated 256 bit value
   1852     // Hash algorithm: HMAC-SHA256
   1853     // Size: 32 byte
   1854     // Default: null or empty if the device identifier is not known
   1855     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1856     // Connection handle of this connection if available
   1857     // Range: 0x0000 - 0x0EFF (12 bits)
   1858     // Default: 0xFFFF if the handle is unknown
   1859     optional int32 connection_handle = 2;
   1860     // HCI command status code if this is triggerred by hci_cmd
   1861     // Default: STATUS_UNKNOWN
   1862     optional android.bluetooth.hci.StatusEnum hci_status = 3;
   1863     // BR/EDR
   1864     //   Range: -128  N  127 (signed integer)
   1865     //   Units: dB
   1866     // LE:
   1867     //   Range: -127 to 20, 127 (signed integer)
   1868     //   Units: dBm
   1869     // Invalid when an out of range value is reported
   1870     optional int32 rssi = 4;
   1871 }
   1872 
   1873 /**
   1874  * Logs when we receive reports regarding how many consecutive failed contacts for a connection
   1875  *
   1876  * Logged from:
   1877  *     system/bt
   1878  */
   1879 message BluetoothDeviceFailedContactCounterReported {
   1880     // An identifier that can be used to match events for this device.
   1881     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1882     // Salt: Randomly generated 256 bit value
   1883     // Hash algorithm: HMAC-SHA256
   1884     // Size: 32 byte
   1885     // Default: null or empty if the device identifier is not known
   1886     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1887     // Connection handle of this connection if available
   1888     // Range: 0x0000 - 0x0EFF (12 bits)
   1889     // Default: 0xFFFF if the handle is unknown
   1890     optional int32 connection_handle = 2;
   1891     // HCI command status code if this is triggerred by hci_cmd
   1892     // Default: STATUS_UNKNOWN
   1893     optional android.bluetooth.hci.StatusEnum cmd_status = 3;
   1894     // Number of consecutive failed contacts for a connection corresponding to the Handle
   1895     // Range: uint16_t, 0-0xFFFF
   1896     // Default: 0xFFFFF
   1897     optional int32 failed_contact_counter = 4;
   1898 }
   1899 
   1900 /**
   1901  * Logs when we receive reports regarding the tranmit power level used for a specific connection
   1902  *
   1903  * Logged from:
   1904  *     system/bt
   1905  */
   1906 message BluetoothDeviceTxPowerLevelReported {
   1907     // An identifier that can be used to match events for this device.
   1908     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   1909     // Salt: Randomly generated 256 bit value
   1910     // Hash algorithm: HMAC-SHA256
   1911     // Size: 32 byte
   1912     // Default: null or empty if the device identifier is not known
   1913     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   1914     // Connection handle of this connection if available
   1915     // Range: 0x0000 - 0x0EFF (12 bits)
   1916     // Default: 0xFFFF if the handle is unknown
   1917     optional int32 connection_handle = 2;
   1918     // HCI command status code if this is triggered by hci_cmd
   1919     // Default: STATUS_UNKNOWN
   1920     optional android.bluetooth.hci.StatusEnum hci_status = 3;
   1921     // Range: -30  N  20
   1922     // Units: dBm
   1923     // Invalid when an out of range value is reported
   1924     optional int32 transmit_power_level = 4;
   1925 }
   1926 
   1927 /**
   1928  * Logs when Bluetooth controller failed to reply with command status within a timeout period after
   1929  * receiving an HCI command from the host
   1930  *
   1931  * Logged from: system/bt
   1932  */
   1933 message BluetoothHciTimeoutReported {
   1934     // HCI command associated with this event
   1935     // Default: CMD_UNKNOWN
   1936     optional android.bluetooth.hci.CommandEnum hci_command = 1;
   1937 }
   1938 
   1939 /**
   1940  * Logs when we receive Bluetooth Link Quality Report event from the controller
   1941  * See Android Bluetooth HCI specification for more details
   1942  *
   1943  * Note: all count and bytes field are counted since last event
   1944  *
   1945  * Logged from: system/bt
   1946  */
   1947 message BluetoothQualityReportReported {
   1948     // Quality report ID
   1949     // Original type: uint8_t
   1950     // Default: BQR_ID_UNKNOWN
   1951     optional android.bluetooth.hci.BqrIdEnum quality_report_id = 1;
   1952     // Packet type of the connection
   1953     // Original type: uint8_t
   1954     // Default: BQR_PACKET_TYPE_UNKNOWN
   1955     optional android.bluetooth.hci.BqrPacketTypeEnum packet_types = 2;
   1956     // Connection handle of the connection
   1957     // Original type: uint16_t
   1958     optional int32 connection_handle = 3;
   1959     // Performing Role for the connection
   1960     // Original type: uint8_t
   1961     optional int32 connection_role = 4;
   1962     // Current Transmit Power Level for the connection. This value is the same as the controller's
   1963     // response to the HCI_Read_Transmit_Power_Level HCI command
   1964     // Original type: uint8_t
   1965     optional int32 tx_power_level = 5;
   1966     // Received Signal Strength Indication (RSSI) value for the connection. This value is an
   1967     // absolute receiver signal strength value
   1968     // Original type: int8_t
   1969     optional int32 rssi = 6;
   1970     // Signal-to-Noise Ratio (SNR) value for the connection. It is the average SNR of all the
   1971     // channels used by the link currently
   1972     // Original type: uint8_t
   1973     optional int32 snr = 7;
   1974     // Indicates the number of unused channels in AFH_channel_map
   1975     // Original type: uint8_t
   1976     optional int32 unused_afh_channel_count = 8;
   1977     // Indicates the number of the channels which are interfered and quality is bad but are still
   1978     // selected for AFH
   1979     // Original type: uint8_t
   1980     optional int32 afh_select_unideal_channel_count = 9;
   1981     // Current Link Supervision Timeout Setting
   1982     // Unit: N * 0.3125 ms (1 Bluetooth Clock)
   1983     // Original type: uint16_t
   1984     optional int32 lsto = 10;
   1985     // Piconet Clock for the specified Connection_Handle. This value is the same as the controller's
   1986     // response to HCI_Read_Clock HCI command with the parameter "Which_Clock" of
   1987     // 0x01 (Piconet Clock)
   1988     // Unit: N * 0.3125 ms (1 Bluetooth Clock)
   1989     // Original type: uint32_t
   1990     optional int64 connection_piconet_clock = 11;
   1991     // The count of retransmission
   1992     // Original type: uint32_t
   1993     optional int64 retransmission_count = 12;
   1994     // The count of no RX
   1995     // Original type: uint32_t
   1996     optional int64 no_rx_count = 13;
   1997     // The count of NAK (Negative Acknowledge)
   1998     // Original type: uint32_t
   1999     optional int64 nak_count = 14;
   2000     // Controller timestamp of last TX ACK
   2001     // Unit: N * 0.3125 ms (1 Bluetooth Clock)
   2002     // Original type: uint32_t
   2003     optional int64 last_tx_ack_timestamp = 15;
   2004     // The count of Flow-off (STOP)
   2005     // Original type: uint32_t
   2006     optional int64 flow_off_count = 16;
   2007     // Controller timestamp of last Flow-on (GO)
   2008     // Unit: N * 0.3125 ms (1 Bluetooth Clock)
   2009     // Original type: uint32_t
   2010     optional int64 last_flow_on_timestamp = 17;
   2011     // Buffer overflow count (how many bytes of TX data are dropped) since the last event
   2012     // Original type: uint32_t
   2013     optional int64 buffer_overflow_bytes = 18;
   2014     // Buffer underflow count (in byte) since last event
   2015     // Original type: uint32_t
   2016     optional int64 buffer_underflow_bytes = 19;
   2017 }
   2018 
   2019 /**
   2020  * Logs when a Bluetooth device's manufacturer information is learnt by the Bluetooth stack
   2021  *
   2022  * Notes:
   2023  * - Each event can be partially filled as we might learn different pieces of device
   2024  *   information at different time
   2025  * - Multiple device info events can be combined to give more complete picture
   2026  * - When multiple device info events tries to describe the same information, the
   2027  *   later one wins
   2028  *
   2029  * Logged from:
   2030  *     packages/apps/Bluetooth
   2031  */
   2032 message BluetoothDeviceInfoReported {
   2033     // An identifier that can be used to match events for this device.
   2034     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2035     // Salt: Randomly generated 256 bit value
   2036     // Hash algorithm: HMAC-SHA256
   2037     // Size: 32 byte
   2038     // Default: null or empty if the device identifier is not known
   2039     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2040     // Where is this device info obtained from
   2041     optional android.bluetooth.DeviceInfoSrcEnum source_type = 2;
   2042     // Name of the data source
   2043     // For EXTERNAL: package name of the data source
   2044     // For INTERNAL: null for general case, component name otherwise
   2045     optional string source_name = 3;
   2046     // Name of the manufacturer of this device
   2047     optional string manufacturer = 4;
   2048     // Model of this device
   2049     optional string model = 5;
   2050     // Hardware version of this device
   2051     optional string hardware_version = 6;
   2052     // Software version of this device
   2053     optional string software_version = 7;
   2054 }
   2055 
   2056 /**
   2057  * Logs when we receive Bluetooth Read Remote Version Information Complete Event from the remote
   2058  * device, as documented by the Bluetooth Core HCI specification
   2059  * Reference: https://www.bluetooth.com/specifications/bluetooth-core-specification
   2060  * Vol 2, Part E, Page 1118
   2061  *
   2062  * Logged from:
   2063  *     system/bt
   2064  */
   2065 message BluetoothRemoteVersionInfoReported {
   2066     // Connection handle of the connection
   2067     // Original type: uint16_t
   2068     optional int32 connection_handle = 1;
   2069     // HCI command status code
   2070     // Default: STATUS_UNKNOWN
   2071     optional android.bluetooth.hci.StatusEnum hci_status = 2;
   2072     // 1 byte Version of current LMP in the remote controller
   2073     optional int32 lmp_version = 3;
   2074     // 2 bytes LMP manufacturer code of the remote controller
   2075     // https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers
   2076     optional int32 lmp_manufacturer_code = 4;
   2077     // 4 bytes subversion of the LMP in the remote controller
   2078     optional int32 lmp_subversion = 5;
   2079 }
   2080 
   2081 /**
   2082  * Logs when certain Bluetooth SDP attributes are discovered
   2083  * Constant definitions are from:
   2084  *     https://www.bluetooth.com/specifications/assigned-numbers/service-discovery
   2085  *
   2086  * Current logged attributes:
   2087  * - BluetoothProfileDescriptorList
   2088  * - Supported Features Bitmask
   2089  *
   2090  * Logged from:
   2091  *     system/bt
   2092  */
   2093 message BluetoothSdpAttributeReported {
   2094     // An identifier that can be used to match events for this device.
   2095     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2096     // Salt: Randomly generated 256 bit value
   2097     // Hash algorithm: HMAC-SHA256
   2098     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2099     // Short form UUIDs used to identify Bluetooth protocols, profiles, and service classes
   2100     // Original type: uint16_t
   2101     optional int32 protocol_uuid = 2;
   2102     // Short form UUIDs used to identify Bluetooth SDP attribute types
   2103     // Original type: uint16_t
   2104     optional int32 attribute_id = 3;
   2105     // Attribute value for the particular attribute
   2106     optional bytes attribute_value = 4 [(android.os.statsd.log_mode) = MODE_BYTES];
   2107 }
   2108 
   2109 /**
   2110  * Logs when bond state of a Bluetooth device changes
   2111  *
   2112  * Logged from:
   2113  *     frameworks/base/core/java/android/bluetooth/BluetoothDevice.java
   2114  *     packages/apps/Bluetooth/src/com/android/bluetooth/btservice/BondStateMachine.java
   2115  */
   2116 message BluetoothBondStateChanged {
   2117     // An identifier that can be used to match events for this device.
   2118     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2119     // Salt: Randomly generated 256 bit value
   2120     // Hash algorithm: HMAC-SHA256
   2121     // Size: 32 byte
   2122     // Default: null or empty if the device identifier is not known
   2123     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2124     // Preferred transport type to remote dual mode device
   2125     // Default: TRANSPORT_AUTO means no preference
   2126     optional android.bluetooth.TransportTypeEnum transport = 2;
   2127     // The type of this Bluetooth device (Classic, LE, or Dual mode)
   2128     // Default: UNKNOWN
   2129     optional android.bluetooth.DeviceTypeEnum type = 3;
   2130     // Current bond state (NONE, BONDING, BONDED)
   2131     // Default: BOND_STATE_UNKNOWN
   2132     optional android.bluetooth.BondStateEnum bond_state = 4;
   2133     // Bonding sub state
   2134     // Default: BOND_SUB_STATE_UNKNOWN
   2135     optional android.bluetooth.BondSubStateEnum bonding_sub_state = 5;
   2136     // Unbond Reason
   2137     // Default: UNBOND_REASON_UNKNOWN
   2138     optional android.bluetooth.UnbondReasonEnum unbond_reason = 6;
   2139 }
   2140 
   2141 /**
   2142  * Logs there is an event related Bluetooth classic pairing
   2143  *
   2144  * Logged from:
   2145  *     system/bt
   2146  */
   2147 message BluetoothClassicPairingEventReported {
   2148     // An identifier that can be used to match events for this device.
   2149     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2150     // Salt: Randomly generated 256 bit value
   2151     // Hash algorithm: HMAC-SHA256
   2152     // Size: 32 byte
   2153     // Default: null or empty if the device identifier is not known
   2154     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2155     // Connection handle of this connection if available
   2156     // Range: 0x0000 - 0x0EFF (12 bits)
   2157     // Default: 0xFFFF if the handle is unknown
   2158     optional int32 connection_handle = 2;
   2159     // HCI command associated with this event
   2160     // Default: CMD_UNKNOWN
   2161     optional android.bluetooth.hci.CommandEnum hci_cmd = 3;
   2162     // HCI event associated with this event
   2163     // Default: EVT_UNKNOWN
   2164     optional android.bluetooth.hci.EventEnum hci_event = 4;
   2165     // HCI command status code if this is triggerred by hci_cmd
   2166     // Default: STATUS_UNKNOWN
   2167     optional android.bluetooth.hci.StatusEnum cmd_status = 5;
   2168     // HCI reason code associated with this event
   2169     // Default: STATUS_UNKNOWN
   2170     optional android.bluetooth.hci.StatusEnum reason_code = 6;
   2171     // A status value related to this specific event
   2172     // Default: 0
   2173     optional int64 event_value = 7;
   2174 }
   2175 
   2176 /**
   2177  * Logs when there is an event related to Bluetooth Security Manager Protocol (SMP)
   2178  *
   2179  * Logged from:
   2180  *     system/bt
   2181  */
   2182 message BluetoothSmpPairingEventReported {
   2183     // An identifier that can be used to match events for this device.
   2184     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2185     // Salt: Randomly generated 256 bit value
   2186     // Hash algorithm: HMAC-SHA256
   2187     // Size: 32 byte
   2188     // Default: null or empty if the device identifier is not known
   2189     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2190     // SMP command sent or received over L2CAP
   2191     // Default: CMD_UNKNOWN
   2192     optional android.bluetooth.smp.CommandEnum smp_command = 2;
   2193     // Whether this command is sent or received
   2194     // Default: DIRECTION_UNKNOWN
   2195     optional android.bluetooth.DirectionEnum direction = 3;
   2196     // SMP failure reason code
   2197     // Default: PAIRING_FAIL_REASON_DEFAULT
   2198     optional android.bluetooth.smp.PairingFailReasonEnum smp_fail_reason = 4;
   2199 }
   2200 
   2201 /**
   2202  * Logs when a Bluetooth sockets connection state changed
   2203  *
   2204  * Logged from:
   2205  *   system/bt
   2206  */
   2207 message BluetoothSocketConnectionStateChanged {
   2208     // An identifier that can be used to match events for this device.
   2209     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2210     // Salt: Randomly generated 256 bit value
   2211     // Hash algorithm: HMAC-SHA256
   2212     // Size: 32 byte
   2213     // Default: null or empty if this is a server listener socket
   2214     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2215     // Temporary port of this socket for the current connection or session only
   2216     // Default 0 when unknown or don't care
   2217     optional int32 port = 2;
   2218     // Socket type as mentioned in
   2219     // frameworks/base/core/java/android/bluetooth/BluetoothSocket.java
   2220     // Default: SOCKET_TYPE_UNKNOWN
   2221     optional android.bluetooth.SocketTypeEnum type = 3;
   2222     // Socket connection state
   2223     // Default: SOCKET_CONNECTION_STATE_UNKNOWN
   2224     optional android.bluetooth.SocketConnectionstateEnum state = 4;
   2225     // Number of bytes sent to remote device during this connection
   2226     optional int64 tx_bytes = 5;
   2227     // Number of bytes received from remote device during this connection
   2228     optional int64 rx_bytes = 6;
   2229     // Socket owner's UID
   2230     optional int32 uid = 7 [(is_uid) = true];
   2231     // Server port of this socket, if any. When both |server_port| and |port| fields are populated,
   2232     // |port| must be spawned by |server_port|
   2233     // Default 0 when unknown or don't care
   2234     optional int32 server_port = 8;
   2235     // Whether this is a server listener socket
   2236     optional android.bluetooth.SocketRoleEnum is_server = 9;
   2237 }
   2238 
   2239 /**
   2240  * Logs when Class of Device (CoD) value is learnt for a device during pairing or connection
   2241  *
   2242  * Logged from:
   2243  *   packages/apps/Bluetooth/src/com/android/bluetooth/btservice/BondStateMachine.java
   2244  *   packages/apps/Bluetooth/src/com/android/bluetooth/btservice/RemoteDevices.java
   2245  *
   2246  */
   2247 message BluetoothClassOfDeviceReported {
   2248     // An identifier that can be used to match events for this device.
   2249     // Currently, this is a salted hash of the MAC address of this Bluetooth device.
   2250     // Salt: Randomly generated 256 bit value
   2251     // Hash algorithm: HMAC-SHA256
   2252     // Size: 32 byte
   2253     // Default: null or empty if this is a server listener socket
   2254     optional bytes obfuscated_id = 1 [(android.os.statsd.log_mode) = MODE_BYTES];
   2255     // Class of Device (CoD) value including both Major, Minor device class and service class
   2256     // Defined in: https://www.bluetooth.com/specifications/assigned-numbers/baseband
   2257     // Also defined in: https://developer.android.com/reference/android/bluetooth/BluetoothClass
   2258     // Default: 0
   2259     optional int32 class_of_device = 2;
   2260 }
   2261 
   2262 /**
   2263  * Logs when something is plugged into or removed from the USB-C connector.
   2264  *
   2265  * Logged from:
   2266  *  UsbService
   2267  */
   2268 message UsbConnectorStateChanged {
   2269     enum State {
   2270         STATE_DISCONNECTED = 0;
   2271         STATE_CONNECTED = 1;
   2272     }
   2273     optional State state = 1;
   2274     optional string id = 2;
   2275     // Last active session in ms.
   2276     // 0 when the port is in connected state.
   2277     optional int64 last_connect_duration_millis = 3;
   2278 }
   2279 
   2280 /**
   2281  * Logs the reported speaker impedance.
   2282  *
   2283  * Logged from:
   2284  *  Vendor audio implementation.
   2285  */
   2286 message SpeakerImpedanceReported {
   2287     optional int32 speaker_location = 1;
   2288     optional int32 impedance = 2;
   2289 }
   2290 
   2291 /**
   2292  * Logs the report of a failed hardware.
   2293  *
   2294  * Logged from:
   2295  *  Vendor HALs.
   2296  *
   2297  */
   2298 message HardwareFailed {
   2299     enum HardwareType {
   2300         HARDWARE_FAILED_UNKNOWN = 0;
   2301         HARDWARE_FAILED_MICROPHONE = 1;
   2302         HARDWARE_FAILED_CODEC = 2;
   2303         HARDWARE_FAILED_SPEAKER = 3;
   2304         HARDWARE_FAILED_FINGERPRINT = 4;
   2305     }
   2306     optional HardwareType hardware_type = 1;
   2307 
   2308    /**
   2309     * hardware_location allows vendors to differentiate between multiple instances of
   2310     * the same hardware_type.  The specific locations are vendor defined integers,
   2311     * referring to board-specific numbering schemes.
   2312     */
   2313     optional int32 hardware_location = 2;
   2314 
   2315     /**
   2316      * failure_code is specific to the HardwareType of the failed hardware.
   2317      * It should use one of the enum values defined below.
   2318      */
   2319     enum HardwareErrorCode {
   2320         UNKNOWN = 0;
   2321         COMPLETE = 1;
   2322         SPEAKER_HIGH_Z = 2;
   2323         SPEAKER_SHORT = 3;
   2324         FINGERPRINT_SENSOR_BROKEN = 4;
   2325         FINGERPRINT_TOO_MANY_DEAD_PIXELS = 5;
   2326         DEGRADE = 6;
   2327     }
   2328     optional int32 failure_code = 3;
   2329 }
   2330 
   2331 /**
   2332  * Log an event when the device has been physically dropped.
   2333  * Reported from the /vendor partition.
   2334  */
   2335 message PhysicalDropDetected {
   2336     // Confidence that the event was actually a drop, 0 -> 100
   2337     optional int32 confidence_pctg = 1;
   2338     // Peak acceleration of the drop, in 1/1000s of a g.
   2339     optional int32 accel_peak_thousandths_g = 2;
   2340     // Duration of freefall in ms
   2341     optional int32 freefall_time_millis = 3;
   2342 }
   2343 
   2344 /**
   2345  * Log bucketed battery charge cycles.
   2346  *
   2347  * Each bucket represents cycles of the battery past
   2348  * a given charge point.  For example, if 10 cycle buckets are
   2349  * initialized, bucket 1 is the lowest 1/10th of the battery,
   2350  * and bucket 10 is 100%.
   2351  *
   2352  * Logged from:
   2353  * /sys/class/power_supply/bms/cycle_count, via Vendor.
   2354  */
   2355 message ChargeCyclesReported {
   2356     optional int32 cycle_bucket_1 = 1;
   2357     optional int32 cycle_bucket_2 = 2;
   2358     optional int32 cycle_bucket_3 = 3;
   2359     optional int32 cycle_bucket_4 = 4;
   2360     optional int32 cycle_bucket_5 = 5;
   2361     optional int32 cycle_bucket_6 = 6;
   2362     optional int32 cycle_bucket_7 = 7;
   2363     optional int32 cycle_bucket_8 = 8;
   2364     optional int32 cycle_bucket_9 = 9;
   2365     optional int32 cycle_bucket_10 = 10;
   2366 }
   2367 
   2368 /**
   2369  * Log battery health snapshot.
   2370  *
   2371  * Resistance, Voltage, Open Circuit Voltage, Temperature, and Charge Level
   2372  * are snapshotted periodically over 24hrs.
   2373  */
   2374 message BatteryHealthSnapshot {
   2375     enum BatterySnapshotType {
   2376         UNKNOWN = 0;
   2377         MIN_TEMP = 1;         // Snapshot at min batt temp over 24hrs.
   2378         MAX_TEMP = 2;         // Snapshot at max batt temp over 24hrs.
   2379         MIN_RESISTANCE = 3;   // Snapshot at min batt resistance over 24hrs.
   2380         MAX_RESISTANCE = 4;   // Snapshot at max batt resistance over 24hrs.
   2381         MIN_VOLTAGE = 5;      // Snapshot at min batt voltage over 24hrs.
   2382         MAX_VOLTAGE = 6;      // Snapshot at max batt voltage over 24hrs.
   2383         MIN_CURRENT = 7;      // Snapshot at min batt current over 24hrs.
   2384         MAX_CURRENT = 8;      // Snapshot at max batt current over 24hrs.
   2385         MIN_BATT_LEVEL = 9;   // Snapshot at min battery level (SoC) over 24hrs.
   2386         MAX_BATT_LEVEL = 10;  // Snapshot at max battery level (SoC) over 24hrs.
   2387         AVG_RESISTANCE = 11;  // Snapshot at average battery resistance over 24hrs.
   2388     }
   2389     optional BatterySnapshotType type = 1;
   2390     // Temperature, in 1/10ths of degree C.
   2391     optional int32 temperature_deci_celsius = 2;
   2392     // Voltage Battery Voltage, in microVolts.
   2393     optional int32 voltage_micro_volt = 3;
   2394     // Current Battery current, in microAmps.
   2395     optional int32 current_micro_amps = 4;
   2396     // OpenCircuitVoltage Battery Open Circuit Voltage, in microVolts.
   2397     optional int32 open_circuit_micro_volt = 5;
   2398     // Resistance Battery Resistance, in microOhms.
   2399     optional int32 resistance_micro_ohm = 6;
   2400     // Level Battery Level, as % of full.
   2401     optional int32 level_percent = 7;
   2402 }
   2403 
   2404 /**
   2405  * Log slow I/O operations on the primary storage.
   2406  */
   2407 message SlowIo {
   2408     // Classifications of IO Operations.
   2409     enum IoOperation {
   2410         UNKNOWN = 0;
   2411         READ = 1;
   2412         WRITE = 2;
   2413         UNMAP = 3;
   2414         SYNC = 4;
   2415     }
   2416     optional IoOperation operation = 1;
   2417 
   2418     // The number of slow IO operations of this type over 24 hours.
   2419     optional int32 count = 2;
   2420 }
   2421 
   2422 /**
   2423  * Log battery caused shutdown with the last recorded voltage.
   2424  */
   2425 message BatteryCausedShutdown {
   2426     // The last recorded battery voltage prior to shutdown.
   2427     optional int32 last_recorded_micro_volt = 1;
   2428 }
   2429 
   2430 /**
   2431  * Logs when ThermalService receives throttling events.
   2432  *
   2433  * Logged from:
   2434  *   frameworks/base/services/core/java/com/android/server/stats/StatsCompanionService.java
   2435  */
   2436 message ThermalThrottlingSeverityStateChanged {
   2437     // The type of temperature being reported (CPU, GPU, SKIN, etc)
   2438     optional android.os.TemperatureTypeEnum sensor_type = 1;
   2439 
   2440     // The name of the temperature source. Eg. CPU0
   2441     optional string sensor_name = 2;
   2442 
   2443     // Temperature in tenths of a degree C.
   2444     // For BCL, it is decimillivolt, decimilliamps, and percentage * 10.
   2445     optional int32 temperature_deci_celsius = 3;
   2446 
   2447     // Relative severity of the throttling, see enum definition.
   2448     optional android.os.ThrottlingSeverityEnum severity = 4;
   2449 }
   2450 
   2451 /**
   2452  * Logs the duration of a davey (jank of >=700ms) when it occurs
   2453  *
   2454  * Logged from:
   2455  *   frameworks/base/libs/hwui/JankTracker.cpp
   2456  */
   2457 message DaveyOccurred {
   2458     // The UID that logged this atom.
   2459     optional int32 uid = 1 [(is_uid) = true];
   2460 
   2461     // Amount of time it took to render the frame. Should be >=700ms.
   2462     optional int64 jank_duration_millis = 2;
   2463 }
   2464 
   2465 /**
   2466  * Logs phone signal strength changes.
   2467  *
   2468  * Logged from:
   2469  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
   2470  */
   2471 message PhoneSignalStrengthChanged {
   2472     // Signal strength, from frameworks/base/core/proto/android/telephony/enums.proto.
   2473     optional android.telephony.SignalStrengthEnum signal_strength = 1;
   2474 }
   2475 
   2476 
   2477 /**
   2478  * Logs when the phone state, sim state or signal strength changes
   2479  *
   2480  * Logged from:
   2481  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
   2482  */
   2483 message PhoneServiceStateChanged {
   2484     optional android.telephony.ServiceStateEnum state = 1;
   2485     optional android.telephony.SimStateEnum sim_state = 2;
   2486     optional android.telephony.SignalStrengthEnum signal_strength = 3;
   2487 }
   2488 
   2489 /**
   2490  * Logs when the phone becomes on or off.
   2491  *
   2492  * Logged from:
   2493  *   frameworks/base/core/java/com/android/internal/os/TelephonyRegistry.java
   2494  */
   2495 message PhoneStateChanged {
   2496     enum State {
   2497         OFF = 0;
   2498         ON = 1;
   2499     }
   2500     optional State state = 1;
   2501 }
   2502 
   2503 message LauncherUIChanged {
   2504     optional android.stats.launcher.LauncherAction action = 1;
   2505     optional android.stats.launcher.LauncherState src_state = 2;
   2506     optional android.stats.launcher.LauncherState dst_state = 3;
   2507     optional android.stats.launcher.LauncherExtension extension = 4 [(log_mode) = MODE_BYTES];
   2508     optional bool is_swipe_up_enabled = 5;
   2509 }
   2510 
   2511 message StyleUIChanged {
   2512     optional android.stats.style.Action action = 1;
   2513     optional int32 color_package_hash = 2;
   2514     optional int32 font_package_hash  = 3;
   2515     optional int32 shape_package_hash = 4;
   2516     optional int32 clock_package_hash = 5;
   2517     optional int32 launcher_grid = 6;
   2518     optional int32 wallpaper_category_hash = 7;
   2519     optional int32 wallpaper_id_hash = 8;
   2520     optional int32 color_preference = 9;
   2521     optional android.stats.style.LocationPreference location_preference = 10;
   2522 }
   2523 
   2524 /**
   2525  * Logs when Settings UI has changed.
   2526  *
   2527  * Logged from:
   2528  *   packages/apps/Settings
   2529  */
   2530 message SettingsUIChanged {
   2531     /**
   2532      * Where this SettingsUIChange event comes from. For example, if
   2533      * it's a PAGE_VISIBLE event, where the page is opened from.
   2534      */
   2535     optional android.app.settings.PageId attribution = 1;
   2536 
   2537     /**
   2538      * What the UI action is.
   2539      */
   2540     optional android.app.settings.Action action = 2;
   2541 
   2542     /**
   2543      * Where the action is happening
   2544      */
   2545     optional android.app.settings.PageId page_id = 3;
   2546 
   2547     /**
   2548      * What preference changed in this event.
   2549      */
   2550     optional string changed_preference_key = 4;
   2551 
   2552     /**
   2553      * The new value of the changed preference.
   2554      */
   2555     optional int64 changed_preference_int_value = 5;
   2556 }
   2557 
   2558 /**
   2559  * Logs basic timing information about touch events.
   2560  * Reported at most every 5 minutes while device is being interacted with.
   2561  *
   2562  * Logged from:
   2563  *   frameworks/native/services/inputflinger
   2564  */
   2565 message TouchEventReported {
   2566     /**
   2567      * The fields latency_{min|max|mean|stdev} represent minimum, maximum, mean,
   2568      * and the standard deviation of latency between the kernel and framework
   2569      * for touchscreen events. The units are microseconds.
   2570      *
   2571      * The number is measured as the difference between the time at which
   2572      * the input event was received in the evdev driver,
   2573      * and the time at which the input event was received in EventHub.
   2574      */
   2575     // Minimum value
   2576     optional float latency_min_micros = 1;
   2577     // Maximum value
   2578     optional float latency_max_micros = 2;
   2579     // Average value
   2580     optional float latency_mean_micros = 3;
   2581     // Standard deviation
   2582     optional float latency_stdev_micros = 4;
   2583     // Number of touch events (input_event) in this report
   2584     optional int32 count = 5;
   2585 }
   2586 
   2587 /**
   2588  * Logs gesture classification and timing information for touch events.
   2589  *
   2590  * Logged from:
   2591  *   frameworks/base/core/java/android/view/GestureDetector.java
   2592  *   frameworks/base/core/java/android/view/View.java
   2593  */
   2594 message TouchGestureClassified {
   2595     // The source of the classification (e.g. Java class name).
   2596     optional string source = 1;
   2597 
   2598     enum Classification {
   2599         UNKNOWN_CLASSIFICATION = 0;
   2600         SINGLE_TAP = 1;
   2601         DOUBLE_TAP = 2;
   2602         LONG_PRESS = 3;
   2603         DEEP_PRESS = 4;
   2604         SCROLL = 5;
   2605     }
   2606     // The classification of the gesture.
   2607     optional Classification classification = 2;
   2608 
   2609     // The interval from the start of a touch event stream until the
   2610     // classification was made.
   2611     optional int32 latency_millis = 3;
   2612 
   2613     // The distance from the location of the first touch event to the
   2614     // location of the touch event when the classification was made.
   2615     optional float displacement_px = 4;
   2616 }
   2617 
   2618 /**
   2619  * Logs that a setting was updated.
   2620  * Logged from:
   2621  *   frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
   2622  * The tag and is_default allow resetting of settings to default values based on the specified
   2623  * tag. See Settings#putString(ContentResolver, String, String, String, boolean) for more details.
   2624  */
   2625 message SettingChanged {
   2626     // The name of the setting.
   2627     optional string setting = 1;
   2628 
   2629     // The change being imposed on this setting. May represent a number, eg "3".
   2630     optional string value = 2;
   2631 
   2632     // The new value of this setting. For most settings, this is same as value. For some settings,
   2633     // value is +X or -X where X represents an element in a set. For example, if the previous value
   2634     // is A,B,C and value is -B, then new_value is A,C and prev_value is A,B,C.
   2635     // The +/- feature is currently only used for location_providers_allowed.
   2636     optional string new_value = 3;
   2637 
   2638     // The previous value of this setting.
   2639     optional string prev_value = 4;
   2640 
   2641     // The tag used with the is_default for resetting sets of settings. This is generally null.
   2642     optional string tag = 5;
   2643 
   2644     // True if this setting with tag should be resettable.
   2645     optional bool is_default = 6;
   2646 
   2647     // The associated user (for multi-user feature). Defined in android/os/UserHandle.java
   2648     optional int32 user = 7;
   2649 
   2650     enum ChangeReason {
   2651         UPDATED = 1; // Updated can be an insertion or an update.
   2652         DELETED = 2;
   2653     }
   2654     optional ChangeReason reason = 8;
   2655 }
   2656 
   2657 /**
   2658  * Logs activity going to foreground or background
   2659  *
   2660  * Logged from:
   2661   *   frameworks/base/services/core/java/com/android/server/am/ActivityRecord.java
   2662  */
   2663 message ActivityForegroundStateChanged {
   2664     optional int32 uid = 1 [(is_uid) = true];
   2665     optional string pkg_name = 2;
   2666     optional string class_name = 3;
   2667 
   2668     enum State {
   2669         BACKGROUND = 0;
   2670         FOREGROUND = 1;
   2671     }
   2672     optional State state = 4;
   2673 }
   2674 
   2675 /**
   2676  * Logs when a volume entered low Storage state.
   2677  * Logged from:
   2678  *      frameworks/base/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
   2679  */
   2680 message LowStorageStateChanged {
   2681     // Volume that ran out of storage.
   2682     optional string volume_description = 1;
   2683 
   2684     enum State {
   2685         UNKNOWN = 0;
   2686         OFF = 1;
   2687         ON = 2;
   2688     }
   2689     optional State state = 2;
   2690 }
   2691 
   2692 /**
   2693  * Logs when an app is downgraded.
   2694  * Logged from:
   2695  *      frameworks/base/services/core/java/com/android/server/pm/BackgroundDexOptService.java
   2696  */
   2697 message AppDowngraded {
   2698     optional string package_name = 1;
   2699     // Size of the package (all data) before being downgraded.
   2700     optional int64 size_in_bytes_before = 2;
   2701     // Size of the package (all data) after being downgraded.
   2702     optional int64 size_in_bytes_after = 3;
   2703 
   2704     optional bool aggressive = 4;
   2705 }
   2706 
   2707 /**
   2708  * Logs when an app is optimized after being downgraded.
   2709  * Logged from:
   2710  *      frameworks/base/services/core/java/com/android/server/pm/BackgroundDexOptService.java
   2711  */
   2712 message AppOptimizedAfterDowngraded {
   2713     optional string package_name = 1;
   2714 }
   2715 
   2716 /**
   2717  * Logs whenever an app is installed on external storage.
   2718  * Logged from:
   2719         frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
   2720  */
   2721 message AppInstallOnExternalStorageReported {
   2722     // The type of external storage.
   2723     optional android.stats.storage.ExternalStorageType storage_type = 1;
   2724     // The name of the package that is installed on the sd card.
   2725     optional string package_name = 2;
   2726 }
   2727 
   2728 /**
   2729  * Logs when an app crashes.
   2730  * Logged from:
   2731  *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   2732  */
   2733 message AppCrashOccurred {
   2734     optional int32 uid = 1 [(is_uid) = true];
   2735 
   2736     optional string event_type = 2;
   2737 
   2738     // The name of the process.
   2739     // system_server if it is not by an app
   2740     optional string process_name = 3;
   2741 
   2742     // The pid if available. -1 means not available.
   2743     optional sint32 pid = 4;
   2744 
   2745     optional string package_name = 5;
   2746 
   2747     enum InstantApp {
   2748         UNAVAILABLE = 0;
   2749         FALSE = 1;
   2750         TRUE = 2;
   2751     }
   2752     optional InstantApp is_instant_app = 6;
   2753 
   2754     enum ForegroundState {
   2755         UNKNOWN = 0;
   2756         BACKGROUND = 1;
   2757         FOREGROUND = 2;
   2758     }
   2759     optional ForegroundState foreground_state = 7;
   2760 
   2761     optional android.server.ErrorSource error_source = 8;
   2762 }
   2763 
   2764 /**
   2765  * Logs when a WTF (What a Terrible Failure) happened.
   2766  * Logged from:
   2767  *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   2768  */
   2769 message WTFOccurred {
   2770     optional int32 uid = 1 [(is_uid) = true];
   2771 
   2772     optional string tag = 2;
   2773 
   2774     // The name of the process.
   2775     // system_server if it is not by an app
   2776     optional string process_name = 3;
   2777 
   2778     // The pid if available. -1 means not available.
   2779     optional sint32 pid = 4;
   2780 
   2781     optional android.server.ErrorSource error_source = 5;
   2782 }
   2783 
   2784 /**
   2785  * Logs when system server reports low memory.
   2786  * Logged from:
   2787  *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   2788  */
   2789 message LowMemReported {
   2790 }
   2791 
   2792 /**
   2793  * Logs when an app ANR (App Not Responding) occurs.
   2794  * Logged from:
   2795  *      frameworks/base/services/core/java/com/android/server/am/AppErrors.java
   2796  */
   2797 message ANROccurred {
   2798     optional int32 uid = 1 [(is_uid) = true];
   2799 
   2800     optional string process_name = 2;
   2801 
   2802     optional string short_component_name = 3;
   2803 
   2804     optional string reason = 4;
   2805 
   2806     enum InstantApp {
   2807         UNAVAILABLE = 0;
   2808         FALSE = 1;
   2809         TRUE = 2;
   2810     }
   2811     optional InstantApp is_instant_app = 5;
   2812 
   2813     enum ForegroundState {
   2814         UNKNOWN = 0;
   2815         BACKGROUND = 1;
   2816         FOREGROUND = 2;
   2817     }
   2818     optional ForegroundState foreground_state = 6;
   2819 
   2820     optional android.server.ErrorSource error_source = 7;
   2821 
   2822     optional string package_name = 8;
   2823 }
   2824 
   2825 /**
   2826  * Logs when the vibrator state changes.
   2827  * Logged from:
   2828  *      frameworks/base/services/core/java/com/android/server/VibratorService.java
   2829  */
   2830 message VibratorStateChanged {
   2831     repeated AttributionNode attribution_node = 1;
   2832 
   2833     enum State {
   2834         OFF = 0;
   2835         ON = 1;
   2836     }
   2837     optional State state = 2;
   2838 
   2839     // Duration (in milliseconds) requested to keep the vibrator on.
   2840     // Only applicable for State == ON.
   2841     optional int64 duration_millis = 3;
   2842 }
   2843 
   2844 /*
   2845  * Allows other apps to push events into statsd.
   2846  * Logged from:
   2847  *      frameworks/base/core/java/android/util/StatsLog.java
   2848  */
   2849 message AppBreadcrumbReported {
   2850     // The uid of the application that sent this custom atom.
   2851     optional int32 uid = 1 [(is_uid) = true];
   2852 
   2853     // An arbitrary label chosen by the developer. For Android P, the label should be in [0, 16).
   2854     optional int32 label = 2;
   2855 
   2856     // Allows applications to easily use a custom event as start/stop boundaries (ie, define custom
   2857     // predicates for the metrics).
   2858     enum State {
   2859         UNKNOWN = 0;
   2860         UNSPECIFIED = 1;  // For events that are known to not represent START/STOP.
   2861         STOP = 2;
   2862         START = 3;
   2863     }
   2864     optional State state = 3;
   2865 }
   2866 
   2867 /**
   2868  * Logs the wall-clock time when a significant wall-clock time shift occurs.
   2869  * For example, this could be due to the user manually changing the time.
   2870  *
   2871  * Logged from:
   2872  *   frameworks/base/services/core/java/com/android/server/AlarmManagerService.java
   2873  */
   2874 message WallClockTimeShifted {
   2875     // New wall-clock time in milliseconds, according to System.currentTimeMillis().
   2876     optional int64 wall_clock_timestamp_millis = 1;
   2877 }
   2878 
   2879 /**
   2880  * Logs when statsd detects an anomaly.
   2881  *
   2882  * Logged from:
   2883  *   frameworks/base/cmds/statsd/src/anomaly/AnomalyTracker.cpp
   2884  */
   2885 message AnomalyDetected {
   2886     // Uid that owns the config whose anomaly detection alert fired.
   2887     optional int32 config_uid = 1 [(is_uid) = true];
   2888 
   2889     // Id of the config whose anomaly detection alert fired.
   2890     optional int64 config_id = 2;
   2891 
   2892     // Id of the alert (i.e. name of the anomaly that was detected).
   2893     optional int64 alert_id = 3;
   2894 }
   2895 
   2896 message AppStartOccurred {
   2897     // The uid if available. -1 means not available.
   2898     optional int32 uid = 1 [(is_uid) = true];
   2899 
   2900     // The app package name.
   2901     optional string pkg_name = 2;
   2902 
   2903     enum TransitionType {
   2904         UNKNOWN = 0;
   2905         WARM = 1;
   2906         HOT = 2;
   2907         COLD = 3;
   2908     }
   2909     // The transition type.
   2910     optional TransitionType type = 3;
   2911 
   2912     // The activity name.
   2913     optional string activity_name = 4;
   2914 
   2915     // The name of the calling app. Empty if not set.
   2916     optional string calling_pkg_name = 5;
   2917 
   2918     // Whether the app is an instant app.
   2919     optional bool is_instant_app = 6;
   2920 
   2921     // Device uptime when activity started.
   2922     optional int64 activity_start_millis = 7;
   2923 
   2924     optional android.app.AppTransitionReasonEnum reason = 8;
   2925 
   2926     optional int32 transition_delay_millis = 9;
   2927     // -1 if not set.
   2928     optional int32 starting_window_delay_millis = 10;
   2929     // -1 if not set.
   2930     optional int32 bind_application_delay_millis = 11;
   2931     optional int32 windows_drawn_delay_millis = 12;
   2932 
   2933     // Empty if not set.
   2934     optional string launch_token = 13;
   2935 
   2936     // The compiler filter used when when the package was optimized.
   2937     optional int32 package_optimization_compilation_filter = 14;
   2938 
   2939     // The reason why the package was optimized.
   2940     optional int32 package_optimization_compilation_reason = 15;
   2941 }
   2942 
   2943 message AppStartCanceled {
   2944     // The uid if available. -1 means not available.
   2945     optional int32 uid = 1 [(is_uid) = true];
   2946 
   2947     // The app package name.
   2948     optional string pkg_name = 2;
   2949 
   2950     enum TransitionType {
   2951         UNKNOWN = 0;
   2952         WARM = 1;
   2953         HOT = 2;
   2954         COLD = 3;
   2955     }
   2956     // The transition type.
   2957     optional TransitionType type = 3;
   2958 
   2959     // The activity name.
   2960     optional string activity_name = 4;
   2961 }
   2962 
   2963 message AppStartFullyDrawn {
   2964     // The uid if available. -1 means not available.
   2965     optional int32 uid = 1 [(is_uid) = true];
   2966 
   2967     // The app package name.
   2968     optional string pkg_name = 2;
   2969 
   2970     enum TransitionType {
   2971         UNKNOWN = 0;
   2972         WITH_BUNDLE = 1;
   2973         WITHOUT_BUNDLE = 2;
   2974     }
   2975     // The transition type.
   2976     optional TransitionType type = 3;
   2977 
   2978     // The activity name.
   2979     optional string activity_name = 4;
   2980 
   2981     optional bool transition_process_running = 5;
   2982 
   2983     // App startup time (until call to Activity#reportFullyDrawn()).
   2984     optional int64 app_startup_time_millis = 6;
   2985 }
   2986 
   2987 /**
   2988  * Logs a picture-in-picture action
   2989  * Logged from:
   2990  *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   2991  *      frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
   2992  *      frameworks/base/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
   2993  */
   2994 message PictureInPictureStateChanged {
   2995     // -1 if it is not available
   2996     optional int32 uid = 1 [(is_uid) = true];
   2997 
   2998     optional string short_name = 2;
   2999 
   3000     enum State {
   3001         ENTERED = 1;
   3002         EXPANDED_TO_FULL_SCREEN = 2;
   3003         MINIMIZED = 3;
   3004         DISMISSED = 4;
   3005     }
   3006     optional State state = 3;
   3007 }
   3008 
   3009 /**
   3010  * Logs overlay action
   3011  * Logged from:
   3012  *     services/core/java/com/android/server/wm/Session.java
   3013  */
   3014 message OverlayStateChanged {
   3015     optional int32 uid = 1 [(is_uid) = true];
   3016 
   3017     optional string package_name = 2;
   3018 
   3019     optional bool using_alert_window = 3;
   3020 
   3021     enum State {
   3022         ENTERED = 1;
   3023         EXITED = 2;
   3024     }
   3025     optional State state = 4;
   3026 }
   3027 
   3028 /*
   3029  * Logs foreground service starts and stops.
   3030  * Note that this is not when a service starts or stops, but when it is
   3031  * considered foreground.
   3032  * Logged from
   3033  *     //frameworks/base/services/core/java/com/android/server/am/ActiveServices.java
   3034  */
   3035 message ForegroundServiceStateChanged {
   3036     optional int32 uid = 1 [(is_uid) = true];
   3037     // package_name + "/" + class_name
   3038     optional string short_name = 2;
   3039 
   3040     enum State {
   3041         ENTER = 1;
   3042         EXIT = 2;
   3043     }
   3044     optional State state = 3;
   3045 }
   3046 
   3047 /**
   3048  * Logs creation or removal of an isolated uid. Isolated uid's are temporary uid's to sandbox risky
   3049  * behavior in its own uid. However, the metrics of these isolated uid's almost always should be
   3050  * attributed back to the parent (host) uid. One example is Chrome.
   3051  *
   3052  * Logged from:
   3053  *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
   3054  */
   3055 message IsolatedUidChanged {
   3056     // The host UID. Generally, we should attribute metrics from the isolated uid to the host uid.
   3057     // NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd.
   3058     // This field is ignored when event == REMOVED.
   3059     optional int32 parent_uid = 1;
   3060 
   3061     optional int32 isolated_uid = 2;
   3062 
   3063     // We expect an isolated uid to be removed before if it's used for another parent uid.
   3064     enum Event {
   3065         REMOVED = 0;
   3066         CREATED = 1;
   3067     }
   3068     optional Event event = 3;
   3069 }
   3070 
   3071 /*
   3072  * Logs the reception of an incoming network packet causing the main system to wake up for
   3073  * processing that packet. These events are notified by the kernel via Netlink NFLOG to Netd
   3074  * and processed by WakeupController.cpp.
   3075  */
   3076 message PacketWakeupOccurred {
   3077     // The uid owning the socket into which the packet was delivered, or -1 if the packet was
   3078     // delivered nowhere.
   3079     optional int32 uid = 1 [(is_uid) = true];
   3080     // The interface name on which the packet was received.
   3081     optional string iface = 2;
   3082     // The ethertype value of the packet.
   3083     optional int32 ethertype = 3;
   3084     // String representation of the destination MAC address of the packet.
   3085     optional string destination_hardware_address = 4;
   3086     // String representation of the source address of the packet if this was an IP packet.
   3087     optional string source_ip = 5;
   3088     // String representation of the destination address of the packet if this was an IP packet.
   3089     optional string destination_ip = 6;
   3090     // The value of the protocol field if this was an IPv4 packet or the value of the Next Header
   3091     // field if this was an IPv6 packet. The range of possible values is the same for both IP
   3092     // families.
   3093     optional int32 ip_next_header = 7;
   3094     // The source port if this was a TCP or UDP packet.
   3095     optional int32 source_port = 8;
   3096     // The destination port if this was a TCP or UDP packet.
   3097     optional int32 destination_port = 9;
   3098 }
   3099 
   3100 /*
   3101  * Logs the memory stats for an app on startup.
   3102  * Logged from:
   3103  *     frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   3104  */
   3105 message AppStartMemoryStateCaptured {
   3106     // The uid if available. -1 means not available.
   3107     optional int32 uid = 1 [(is_uid) = true];
   3108 
   3109     // The process name.
   3110     optional string process_name = 2;
   3111 
   3112     // The activity name.
   3113     optional string activity_name = 3;
   3114 
   3115     // # of page-faults
   3116     optional int64 page_fault = 4;
   3117 
   3118     // # of major page-faults
   3119     optional int64 page_major_fault = 5;
   3120 
   3121     // RSS
   3122     optional int64 rss_in_bytes = 6;
   3123 
   3124     // CACHE
   3125     optional int64 cache_in_bytes = 7;
   3126 
   3127     // SWAP
   3128     optional int64 swap_in_bytes = 8;
   3129 }
   3130 
   3131 /*
   3132  * Logs the change in Low Memory Killer Daemon (LMKD) state which is used as start/stop boundaries
   3133  * for LMK event.
   3134  * Logged from:
   3135  *      system/core/lmkd/lmkd.c
   3136  */
   3137 message LmkStateChanged {
   3138     enum State {
   3139         UNKNOWN = 0;
   3140         START = 1;
   3141         STOP = 2;
   3142     }
   3143     optional State state = 1;
   3144 }
   3145 
   3146 /*
   3147  * Logs the event when Low Memory Killer Daemon (LMKD) kills a process to reduce memory pressure.
   3148  * Logged from:
   3149  *      system/core/lmkd/lmkd.c
   3150  */
   3151 message LmkKillOccurred {
   3152     // The uid if available. -1 means not available.
   3153     optional int32 uid = 1 [(is_uid) = true];
   3154 
   3155     // The process name.
   3156     optional string process_name = 2;
   3157 
   3158     // oom adj score.
   3159     optional int32 oom_adj_score = 3;
   3160 
   3161     // # of page-faults
   3162     optional int64 page_fault = 4;
   3163 
   3164     // # of major page-faults
   3165     optional int64 page_major_fault = 5;
   3166 
   3167     // RSS
   3168     optional int64 rss_in_bytes = 6;
   3169 
   3170     // CACHE
   3171     optional int64 cache_in_bytes = 7;
   3172 
   3173     // SWAP
   3174     optional int64 swap_in_bytes = 8;
   3175 
   3176     // The elapsed real time of start of the process.
   3177     optional int64 process_start_time_nanos = 9;
   3178 
   3179     // Min oom adj score considered by lmkd.
   3180     optional int32 min_oom_score = 10;
   3181 }
   3182 
   3183 /*
   3184  * Logs when the ActivityManagerService detects that an app died.
   3185  *
   3186  * Logged from:
   3187  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   3188  */
   3189 message AppDied {
   3190     // timestamp(elapsedRealtime) of record creation
   3191     optional uint64 timestamp_millis = 1 [(state_field_option).option = EXCLUSIVE];
   3192 }
   3193 
   3194 /**
   3195  * An atom for generic metrics logging. Available from Android Q.
   3196  */
   3197 message GenericAtom {
   3198     // The uid of the application that sent this custom atom.
   3199     optional int32 uid = 1 [(is_uid) = true];
   3200 
   3201     // An event_id indicates the type of event.
   3202     optional android.stats.EventType event_id = 2;
   3203 }
   3204 
   3205 /**
   3206  * Logs when a biometric acquire event occurs.
   3207  *
   3208  * Logged from:
   3209  *   frameworks/base/services/core/java/com/android/server/biometrics
   3210  */
   3211 message BiometricAcquired {
   3212     // Biometric modality that was acquired.
   3213     optional android.hardware.biometrics.ModalityEnum modality = 1;
   3214     // The associated user. Eg: 0 for owners, 10+ for others. Defined in android/os/UserHandle.java.
   3215     optional int32 user = 2;
   3216     // If this acquire is for a crypto operation. e.g. Secure purchases, unlock password storage.
   3217     optional bool is_crypto = 3;
   3218     // Action that the device is performing. Acquired messages are only expected for enroll and
   3219     // authenticate. Other actions may indicate an error.
   3220     optional android.hardware.biometrics.ActionEnum action = 4;
   3221     // The client that this acquisition was received for.
   3222     optional android.hardware.biometrics.ClientEnum client = 5;
   3223     // Acquired constants, e.g. ACQUIRED_GOOD. See constants defined by <Biometric>Manager.
   3224     optional int32 acquire_info = 6;
   3225     // Vendor-specific acquire info. Valid only if acquire_info == ACQUIRED_VENDOR.
   3226     optional int32 acquire_info_vendor = 7;
   3227     // Dictates if this message should trigger additional debugging.
   3228     optional bool debug = 8;
   3229 }
   3230 
   3231 /**
   3232  * Logs when a biometric authentication event occurs.
   3233  *
   3234  * Logged from:
   3235  *   frameworks/base/services/core/java/com/android/server/biometrics
   3236  */
   3237 message BiometricAuthenticated {
   3238     // Biometric modality that was used.
   3239     optional android.hardware.biometrics.ModalityEnum modality = 1;
   3240     // The associated user. Eg: 0 for owners, 10+ for others. Defined in android/os/UserHandle.java
   3241     optional int32 user = 2;
   3242     // If this authentication is for a crypto operation. e.g. Secure purchases, unlock password
   3243     // storage.
   3244     optional bool is_crypto = 3;
   3245     // The client that this acquisition was received for.
   3246     optional android.hardware.biometrics.ClientEnum client = 4;
   3247     // If authentication requires user confirmation. See BiometricPrompt's
   3248     // setRequireConfirmation(bool) method.
   3249     optional bool require_confirmation = 5;
   3250 
   3251     enum State {
   3252         UNKNOWN = 0;
   3253         REJECTED = 1;
   3254         PENDING_CONFIRMATION = 2;
   3255         CONFIRMED = 3;
   3256     }
   3257 
   3258     // State of the current auth attempt.
   3259     optional State state = 6;
   3260     // Time it took to authenticate. For BiometricPrompt where setRequireConfirmation(false) is
   3261     // specified and supported by the biometric modality, this is from the first ACQUIRED_GOOD to
   3262     // AUTHENTICATED. for setRequireConfirmation(true), this is from PENDING_CONFIRMATION to
   3263     // CONFIRMED.
   3264     optional int64 latency_millis = 7;
   3265     // Dictates if this message should trigger additional debugging.
   3266     optional bool debug = 8;
   3267 }
   3268 
   3269 /**
   3270  * Logs when a biometric error occurs.
   3271  *
   3272  * Logged from:
   3273  *   frameworks/base/services/core/java/com/android/server/biometrics
   3274  */
   3275 message BiometricErrorOccurred {
   3276     // Biometric modality that was used.
   3277     optional android.hardware.biometrics.ModalityEnum modality = 1;
   3278     // The associated user. Eg: 0 for owners, 10+ for others. Defined in android/os/UserHandle.java
   3279     optional int32 user = 2;
   3280     // If this error is for a crypto operation. e.g. Secure purchases, unlock password storage.
   3281     optional bool is_crypto = 3;
   3282     // Action that the device is performing.
   3283     optional android.hardware.biometrics.ActionEnum action = 4;
   3284     // The client that this acquisition was received for.
   3285     optional android.hardware.biometrics.ClientEnum client = 5;
   3286     // Error constants. See constants defined by <Biometric>Manager. Enums won't work since errors
   3287     // are unique to modality.
   3288     optional int32 error_info = 6;
   3289     // Vendor-specific error info. Valid only if acquire_info == ACQUIRED_VENDOR. These are defined
   3290     // by the vendor and not specified by the HIDL interface.
   3291     optional int32 error_info_vendor = 7;
   3292     // Dictates if this message should trigger additional debugging.
   3293     optional bool debug = 8;
   3294 }
   3295 
   3296 /**
   3297  * Logs when a system health issue is detected.
   3298  * Logged from:
   3299  *   frameworks/base/services/core/java/com/android/server/biometrics
   3300  */
   3301 message BiometricSystemHealthIssueDetected {
   3302     // Biometric modality.
   3303     optional android.hardware.biometrics.ModalityEnum modality = 1;
   3304     // Type of issue detected.
   3305     optional android.hardware.biometrics.IssueEnum issue = 2;
   3306     // Dictates if this message should trigger additional debugging.
   3307     optional bool debug = 3;
   3308 }
   3309 
   3310 /**
   3311  * Logs when a biometric enrollment occurs.
   3312  *
   3313  * Logged from:
   3314  *   frameworks/base/services/core/java/com/android/server/biometrics
   3315  */
   3316 message BiometricEnrolled {
   3317     // Biometric modality that was used.
   3318     optional android.hardware.biometrics.ModalityEnum modality = 1;
   3319     // The associated user. Eg: 0 for owners, 10+ for others. Defined in android/os/UserHandle.java
   3320     optional int32 user = 2;
   3321     // The amount of time the enrollment took in milliseconds.
   3322     optional int64 latency_millis = 3;
   3323     // Whether or not the enrollment was successful.
   3324     optional bool success = 4;
   3325 }
   3326 
   3327 /*
   3328  * Logs when a flag flip update occurrs. Used for mainline modules that update via flag flips.
   3329  */
   3330 message FlagFlipUpdateOccurred {
   3331     // If the event is from a flag config package, specify the package name.
   3332     optional string flag_flip_package_name = 1;
   3333 
   3334     // The order id of the package
   3335     optional int64 order_id = 2;
   3336 }
   3337 
   3338 /**
   3339  * Potential experiment ids that goes with a train install.
   3340  */
   3341 message TrainExperimentIds {
   3342     repeated int64 experiment_id = 1;
   3343 }
   3344 
   3345 /*
   3346  * Logs when a binary push state changes.
   3347  * Logged by the installer via public api.
   3348  */
   3349 message BinaryPushStateChanged {
   3350     // Name of the train.
   3351     optional string train_name = 1;
   3352     // Version code for a "train" of packages that need to be installed atomically
   3353     optional int64 train_version_code = 2;
   3354     // After installation of this package, device requires a restart.
   3355     optional bool requires_staging = 3;
   3356     // Rollback should be enabled for this install.
   3357     optional bool rollback_enabled = 4;
   3358     // Requires low latency monitoring if possible.
   3359     optional bool requires_low_latency_monitor = 5;
   3360 
   3361     enum State {
   3362         UNKNOWN = 0;
   3363         INSTALL_REQUESTED = 1;
   3364         INSTALL_STARTED = 2;
   3365         INSTALL_STAGED_NOT_READY = 3;
   3366         INSTALL_STAGED_READY = 4;
   3367         INSTALL_SUCCESS = 5;
   3368         // Replaced by INSTALL_FAILURE_DOWNLOAD, INSTALL_FAILURE_STATE_MISMATCH,
   3369         // and INSTALL_FAILURE_COMMIT.
   3370         INSTALL_FAILURE = 6  [deprecated = true];
   3371         // This enum is for installs that are manually cancelled via the Manual Update UI.
   3372         INSTALL_CANCELLED = 7;
   3373         INSTALLER_ROLLBACK_REQUESTED = 8;
   3374         INSTALLER_ROLLBACK_INITIATED = 9;
   3375         INSTALLER_ROLLBACK_INITIATED_FAILURE = 10;
   3376         INSTALLER_ROLLBACK_STAGED = 11;
   3377         INSTALLER_ROLLBACK_STAGED_FAILURE = 12;
   3378         INSTALLER_ROLLBACK_BOOT_TRIGGERED = 13;
   3379         INSTALLER_ROLLBACK_BOOT_TRIGGERED_FAILURE = 14;
   3380         INSTALLER_ROLLBACK_SUCCESS = 15;
   3381         INSTALLER_ROLLBACK_FAILURE = 16;
   3382         INSTALLER_ROLLBACK_STAGED_CANCEL_REQUESTED = 17;
   3383         INSTALLER_ROLLBACK_STAGED_CANCEL_SUCCESS = 18;
   3384         INSTALLER_ROLLBACK_STAGED_CANCEL_FAILURE = 19;
   3385         INSTALL_STAGED_CANCEL_REQUESTED = 20;
   3386         INSTALL_STAGED_CANCEL_SUCCESS = 21;
   3387         INSTALL_STAGED_CANCEL_FAILURE = 22;
   3388         INSTALL_FAILURE_DOWNLOAD = 23;
   3389         INSTALL_FAILURE_STATE_MISMATCH = 24;
   3390         INSTALL_FAILURE_COMMIT = 25;
   3391     }
   3392     optional State state = 6;
   3393     // Possible experiment ids for monitoring this push.
   3394     optional TrainExperimentIds experiment_ids = 7 [(log_mode) = MODE_BYTES];
   3395     // user id
   3396     optional int32 user_id = 8;
   3397 }
   3398 
   3399 /* Test atom, is not logged anywhere */
   3400 message TestAtomReported {
   3401     repeated AttributionNode attribution_node = 1;
   3402     optional int32 int_field = 2;
   3403     optional int64 long_field = 3;
   3404     optional float float_field = 4;
   3405     optional string string_field = 5;
   3406     optional bool boolean_field = 6;
   3407     enum State {
   3408         UNKNOWN = 0;
   3409         OFF = 1;
   3410         ON = 2;
   3411     }
   3412     optional State state = 7;
   3413     optional TrainExperimentIds bytes_field = 8 [(android.os.statsd.log_mode) = MODE_BYTES];
   3414 }
   3415 
   3416 /** Represents USB port overheat event. */
   3417 message UsbPortOverheatEvent {
   3418     /* Temperature of USB port at USB plug event, in 1/10ths of degree C. */
   3419     optional int32 plug_temperature_deci_c = 1;
   3420 
   3421     /* Maximum temperature of USB port during overheat event, in 1/10ths of degree C. */
   3422     optional int32 max_temperature_deci_c = 2;
   3423 
   3424     /* Time between USB plug event and overheat threshold trip, in seconds. */
   3425     optional int32 time_to_overheat_secs = 3;
   3426 
   3427     /* Time between overheat threshold trip and hysteresis, in seconds. */
   3428     optional int32 time_to_hysteresis_secs = 4;
   3429 
   3430     /* Time between hysteresis and active mitigation ending, in seconds. */
   3431     optional int32 time_to_inactive_secs = 5;
   3432 };
   3433 
   3434 /**
   3435  * Logs total effective full charge and discharge cycles on a battery.
   3436  * Here are some examples of one effective cycle:
   3437  *   1) the battery charges from 0% to 100% and drains back to 0%,
   3438  *   2) charging from 50% to 100% and draining back to 50% twice.
   3439  * Pulled from:
   3440  *   frameworks/base/cmds/statsd/src/external/ResourceHealthManagerPuller.cpp
   3441  */
   3442 message BatteryCycleCount {
   3443     /* Number of total charge and discharge cycles on the system battery. */
   3444     optional int32 cycle_count = 1;
   3445 }
   3446 
   3447 /**
   3448  * Logs that external storage is mounted and information about it, the storage type (sd card/usb/
   3449  * others), its type (public or private) and the size in bytes.
   3450  * Pulled from:
   3451  *   StatsCompanionService
   3452  */
   3453 
   3454 message ExternalStorageInfo {
   3455 
   3456     enum VolumeType {
   3457         UNKNOWN = 0;
   3458         PUBLIC = 1;
   3459         PRIVATE = 2;
   3460         OTHER = 3;
   3461     }
   3462 
   3463     // The type of external storage.
   3464     optional android.stats.storage.ExternalStorageType storage_type = 1;
   3465     // Type of the volume: TYPE_PUBLIC if portable and TYPE_PRIVATE if internal.
   3466     optional VolumeType volume_type = 2;
   3467     // Total size of the sd card in bytes.
   3468     optional int64 size_bytes = 3;
   3469 }
   3470 
   3471 /*
   3472  * Logs when a connection becomes available and lost.
   3473  * Logged in StatsCompanionService.java
   3474  */
   3475 message ConnectivityStateChanged {
   3476   // Id of the network.
   3477   optional int32 net_id = 1;
   3478 
   3479   enum State {
   3480     UNKNOWN = 0;
   3481     CONNECTED = 1;
   3482     DISCONNECTED = 2;
   3483   }
   3484   // Connected state of a network.
   3485   optional State state = 2;
   3486 }
   3487 
   3488 /**
   3489  * Logs when a service starts and stops.
   3490  * Logged from:
   3491  *   services/core/java/com/android/server/am/ActiveServices.java
   3492  */
   3493 message ServiceStateChanged {
   3494 
   3495     optional int32 uid = 1 [(is_uid) = true];
   3496 
   3497     optional string package_name = 2;
   3498 
   3499     optional string service_name = 3;
   3500 
   3501     enum State {
   3502         START = 1;
   3503         STOP = 2;
   3504     }
   3505 
   3506     optional State state = 4;
   3507 }
   3508 
   3509 /**
   3510  * Logs when a service is launched.
   3511  * Logged from:
   3512  *   services/core/java/com/android/server/am/ActiveServices.java
   3513  */
   3514 message ServiceLaunchReported {
   3515 
   3516     optional int32 uid = 1 [(is_uid) = true];
   3517 
   3518     optional string package_name = 2;
   3519 
   3520     optional string service_name = 3;
   3521 }
   3522 
   3523 /**
   3524  * Logs when a hidden API is used.
   3525  *
   3526  * Logged from:
   3527  *     libcore/libart/src/main/java/dalvik/system/VMRuntime.java
   3528  */
   3529 message HiddenApiUsed {
   3530     // The uid of the app making the hidden access.
   3531     optional int32 uid = 1 [(is_uid) = true];
   3532 
   3533     // Signature of the method or field accessed.
   3534     optional string signature = 2;
   3535 
   3536     enum AccessMethod {
   3537         NONE = 0;
   3538         REFLECTION = 1;
   3539         JNI = 2;
   3540         LINKING = 3;
   3541     }
   3542 
   3543     // Type of access.
   3544     optional AccessMethod access_method = 3;
   3545 
   3546     // Whether the access was prevented or not.
   3547     optional bool access_denied = 4;
   3548 }
   3549 
   3550 /**
   3551  * Logs user interaction with the Privacy Indicators added in Q. In particular:
   3552  * - When user sees privacy chip
   3553  * - When user clicks privacy chip
   3554  * - How does the user exit the Privacy Dialog
   3555  * Logged from:
   3556  *   packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
   3557  */
   3558 message PrivacyIndicatorsInteracted {
   3559 
   3560     enum Type {
   3561         UNKNOWN = 0;
   3562         CHIP_VIEWED = 1;
   3563         CHIP_CLICKED = 2;
   3564         DIALOG_PRIVACY_SETTINGS = 3;
   3565         DIALOG_DISMISS = 4;
   3566         DIALOG_LINE_ITEM = 5;
   3567     }
   3568 
   3569     optional Type type = 1 [(state_field_option).option = EXCLUSIVE];
   3570 
   3571     // Used if the type is LINE_ITEM
   3572     optional string package_name = 2;
   3573 }
   3574 
   3575 /**
   3576  * Logs information about a package that is moved from the internal to external storage and vice
   3577  * versa.
   3578  * It logs the package name, the type of the external storage where the package is installed
   3579  * (if moved to external storage, or UNKNOWN if moved to internal storage),
   3580  * and the move type: if it's from internal to external or the other way around.
   3581  *
   3582  * Logged from:
   3583         frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
   3584  */
   3585 message AppMovedStorageReported {
   3586     enum MoveType {
   3587         UNKNOWN = 0;
   3588         TO_EXTERNAL = 1;
   3589         TO_INTERNAL = 2;
   3590     }
   3591     // The type of the external storage.
   3592     optional android.stats.storage.ExternalStorageType external_storage_type = 1;
   3593     // The type of move.
   3594     optional MoveType move_type = 2;
   3595     // The name of the package that was moved.
   3596     optional string package_name = 3;
   3597 }
   3598 
   3599 /**
   3600  * Logs when system server watchdog occurs.
   3601  * Logged from:
   3602  *      frameworks/base/services/core/java/com/android/server/Watchdog.java
   3603  */
   3604 message SystemServerWatchdogOccurred {
   3605     optional string subject = 1;
   3606 }
   3607 
   3608 /**
   3609  * Logs when new file added to tombstones.
   3610  * Logged from:
   3611  *      frameworks/base/core/java/com/android/server/BootReceiver.java
   3612  */
   3613 message TombStoneOccurred {
   3614 }
   3615 
   3616 /*
   3617  * Information about a role request
   3618  *
   3619  * Logged from:
   3620  *   packages/apps/PermissionController/src/com/android/packageinstaller/role/ui/RequestRoleFragment.java
   3621  */
   3622 message RoleRequestResultReported {
   3623     // UID of application requesting the role
   3624     optional int32 requesting_uid = 1;
   3625 
   3626     // Package name of application requesting the role
   3627     optional string requesting_package_name = 2;
   3628 
   3629     // The role to be granted
   3630     optional string role_name = 3;
   3631 
   3632     // The count of applications qualifying for the role
   3633     optional int32 qualifying_count = 4;
   3634 
   3635     // UID of application current granted the role
   3636     optional int32 current_uid = 5;
   3637 
   3638     // Package name of application current granted the role
   3639     optional string current_package_name = 6;
   3640 
   3641     // UID of another application that user chose to grant the role to, instead of the requesting
   3642     // application
   3643     optional int32 granted_another_uid = 7;
   3644 
   3645     // Package name of another application that user chose to grant the role to, instead of the
   3646     // requesting application
   3647     optional string granted_another_package_name = 8;
   3648 
   3649     enum Result {
   3650         UNDEFINED = 0;
   3651         // role request was ignored
   3652         IGNORED = 1;
   3653         // role request was ignored because it's already granted
   3654         IGNORED_ALREADY_GRANTED = 2;
   3655         // role request was ignored because the application isn't qualified
   3656         IGNORED_NOT_QUALIFIED = 3;
   3657         // role request was ignored because user said it should be always denied
   3658         IGNORED_USER_ALWAYS_DENIED = 4;
   3659         // role was granted by user action
   3660         USER_GRANTED = 5;
   3661         // role was denied by user action
   3662         USER_DENIED = 6;
   3663         // role was denied by user granting another application the role
   3664         USER_DENIED_GRANTED_ANOTHER = 7;
   3665         // role was denied and set to be always denied by the user
   3666         USER_DENIED_WITH_ALWAYS = 8;
   3667     }
   3668     // The result of the role request
   3669     optional Result result = 9;
   3670 }
   3671 
   3672 //////////////////////////////////////////////////////////////////////
   3673 // Pulled atoms below this line //
   3674 //////////////////////////////////////////////////////////////////////
   3675 
   3676 /**
   3677  * Pulls bytes transferred via wifi (Sum of foreground and background usage).
   3678  *
   3679  * Pulled from:
   3680  *   StatsCompanionService (using BatteryStats to get which interfaces are wifi)
   3681  */
   3682 message WifiBytesTransfer {
   3683     optional int32 uid = 1 [(is_uid) = true];
   3684 
   3685     optional int64 rx_bytes = 2;
   3686 
   3687     optional int64 rx_packets = 3;
   3688 
   3689     optional int64 tx_bytes = 4;
   3690 
   3691     optional int64 tx_packets = 5;
   3692 }
   3693 
   3694 /**
   3695  * Pulls bytes transferred via wifi (separated by foreground and background usage).
   3696  *
   3697  * Pulled from:
   3698  *   StatsCompanionService (using BatteryStats to get which interfaces are wifi)
   3699  */
   3700 message WifiBytesTransferByFgBg {
   3701     optional int32 uid = 1 [(is_uid) = true];
   3702 
   3703     // 1 denotes foreground and 0 denotes background. This is called Set in NetworkStats.
   3704     optional bool is_foreground = 2;
   3705 
   3706     optional int64 rx_bytes = 3;
   3707 
   3708     optional int64 rx_packets = 4;
   3709 
   3710     optional int64 tx_bytes = 5;
   3711 
   3712     optional int64 tx_packets = 6;
   3713 }
   3714 
   3715 /**
   3716  * Pulls bytes transferred via mobile networks (Sum of foreground and background usage).
   3717  *
   3718  * Pulled from:
   3719  *   StatsCompanionService (using BatteryStats to get which interfaces are mobile data)
   3720  */
   3721 message MobileBytesTransfer {
   3722     optional int32 uid = 1 [(is_uid) = true];
   3723 
   3724     optional int64 rx_bytes = 2;
   3725 
   3726     optional int64 rx_packets = 3;
   3727 
   3728     optional int64 tx_bytes = 4;
   3729 
   3730     optional int64 tx_packets = 5;
   3731 }
   3732 
   3733 /**
   3734  * Pulls bytes transferred via mobile networks (separated by foreground and background usage).
   3735  *
   3736  * Pulled from:
   3737  *   StatsCompanionService (using BatteryStats to get which interfaces are mobile data)
   3738  */
   3739 message MobileBytesTransferByFgBg {
   3740     optional int32 uid = 1 [(is_uid) = true];
   3741 
   3742     // 1 denotes foreground and 0 denotes background. This is called Set in
   3743     // NetworkStats.
   3744     optional bool is_foreground = 2;
   3745 
   3746     optional int64 rx_bytes = 3;
   3747 
   3748     optional int64 rx_packets = 4;
   3749 
   3750     optional int64 tx_bytes = 5;
   3751 
   3752     optional int64 tx_packets = 6;
   3753 }
   3754 
   3755 /**
   3756  * Pulls bytes transferred via bluetooth. It is pulled from Bluetooth controller.
   3757  *
   3758  * Pulled from:
   3759  *   StatsCompanionService
   3760  */
   3761 message BluetoothBytesTransfer {
   3762     optional int32 uid = 1 [(is_uid) = true];
   3763 
   3764     optional int64 rx_bytes = 2;
   3765 
   3766     optional int64 tx_bytes = 3;
   3767 }
   3768 
   3769 /**
   3770  * Pulls the kernel wakelock durations. This atom is adapted from
   3771  * android/internal/os/KernelWakelockStats.java
   3772  *
   3773  * Pulled from:
   3774  *   StatsCompanionService using KernelWakelockReader.
   3775  */
   3776 message KernelWakelock {
   3777     optional string name = 1;
   3778 
   3779     optional int32 count = 2;
   3780 
   3781     optional int32 version = 3;
   3782 
   3783     optional int64 time_micros = 4;
   3784 }
   3785 
   3786 /**
   3787  * Pulls low power state information. If power.stats HAL is not available, this
   3788  * includes platform and subsystem sleep state information,
   3789  * PowerStatePlatformSleepState, PowerStateVoter or PowerStateSubsystemSleepState
   3790  * as defined in:
   3791  *   hardware/interfaces/power/1.0/types.hal
   3792  *   hardware/interfaces/power/1.1/types.hal
   3793  * If power.stats HAL is available, this includes PowerEntityStateResidencyResult
   3794  * as defined in:
   3795  *   hardware/interfaces/power/stats/1.0/types.hal
   3796  */
   3797 message SubsystemSleepState {
   3798     // Subsystem name
   3799     optional string subsystem_name = 1;
   3800     // For PlatformLowPowerStats (hal 1.0), this is the voter name, which could be empty.
   3801     // For SubsystemLowPowerStats (hal 1.1), this is the sleep state name.
   3802     // For PowerEntityStateResidencyResult (hal power/stats/1.0) this is the
   3803     //    powerEntityStateName from the corresponding PowerEntityStateInfo.
   3804     optional string subname = 2;
   3805     // The number of times it entered, or voted for entering the sleep state
   3806     optional uint64 count = 3;
   3807     // The length of time spent in, or spent voting for, the sleep state
   3808     optional uint64 time_millis = 4;
   3809 }
   3810 
   3811 /**
   3812  * Pulls on-device power measurement information.
   3813  * Data defined by hardware/interfaces/power/stats/1.0/types.hal.
   3814  * Pulled from:
   3815  *   frameworks/base/cmds/statsd/src/external/PowerStatsPuller.cpp
   3816  */
   3817 message OnDevicePowerMeasurement {
   3818     // Name of the subsystem (to which the rail belongs).
   3819     optional string subsystem_name = 1;
   3820 
   3821     // Rail name. The rail lies within the subsystem.
   3822     optional string rail_name = 2;
   3823 
   3824     // Time (in ms since boot) at which the rail energy value was measured.
   3825     // This may differ slightly from the time that statsd logs this information.
   3826     optional uint64 measurement_timestamp_millis = 3;
   3827 
   3828     // Accumulated energy used via the rail since device boot in uWs.
   3829     optional uint64 energy_microwatt_secs = 4;
   3830 }
   3831 
   3832 /**
   3833  * Pulls Cpu time per frequency.
   3834  * Pulls the time the cpu spend on the frequency index. Frequency index
   3835  * starts from highest to lowest. The value should be monotonically
   3836  * increasing since boot. However, if there is a cpu
   3837  * hotplug event, the value would be reset as well.
   3838  */
   3839 message CpuTimePerFreq {
   3840     optional uint32 cluster = 1;
   3841     optional uint32 freq_index = 2;
   3842     optional uint64 time_millis = 3;
   3843 }
   3844 
   3845 /**
   3846  * Pulls Cpu Time Per Uid.
   3847  * Note that isolated process uid time should be attributed to host uids.
   3848  */
   3849 message CpuTimePerUid {
   3850     optional int32 uid = 1 [(is_uid) = true];
   3851     optional uint64 user_time_micros = 2;
   3852     optional uint64 sys_time_micros = 3;
   3853 }
   3854 
   3855 /**
   3856  * Pulls Cpu Time Per Uid per frequency.
   3857  * Note that isolated process uid time should be attributed to host uids.
   3858  * For each uid, we order the time by descending frequencies.
   3859  */
   3860 message CpuTimePerUidFreq {
   3861     optional int32 uid = 1 [(is_uid) = true];
   3862     optional uint32 freq_index = 2;
   3863     optional uint64 time_millis = 3;
   3864 }
   3865 
   3866 /**
   3867  * Pulls Wifi Controller Activity Energy Info
   3868  */
   3869 message WifiActivityInfo {
   3870     // timestamp(wall clock) of record creation
   3871     optional uint64 timestamp_millis = 1;
   3872     // stack reported state
   3873     // TODO: replace this with proto enum
   3874     optional int32 stack_state = 2;
   3875     // tx time in millis
   3876     optional uint64 controller_tx_time_millis = 3;
   3877     // rx time in millis
   3878     optional uint64 controller_rx_time_millis = 4;
   3879     // idle time in millis
   3880     optional uint64 controller_idle_time_millis = 5;
   3881     // product of current(mA), voltage(V) and time(ms)
   3882     optional uint64 controller_energy_used = 6;
   3883 }
   3884 
   3885 /**
   3886  * Pulls Modem Activity Energy Info
   3887  */
   3888 message ModemActivityInfo {
   3889     // timestamp(wall clock) of record creation
   3890     optional uint64 timestamp_millis = 1;
   3891     // sleep time in millis.
   3892     optional uint64 sleep_time_millis = 2;
   3893     // idle time in millis
   3894     optional uint64 controller_idle_time_millis = 3;
   3895     /**
   3896      * Tx power index
   3897      * index 0 = tx_power < 0dBm
   3898      * index 1 = 0dBm < tx_power < 5dBm
   3899      * index 2 = 5dBm < tx_power < 15dBm
   3900      * index 3 = 15dBm < tx_power < 20dBm
   3901      * index 4 = tx_power > 20dBm
   3902      */
   3903     // tx time in ms at power level 0
   3904     optional uint64 controller_tx_time_pl0_millis = 4;
   3905     // tx time in ms at power level 1
   3906     optional uint64 controller_tx_time_pl1_millis = 5;
   3907     // tx time in ms at power level 2
   3908     optional uint64 controller_tx_time_pl2_millis = 6;
   3909     // tx time in ms at power level 3
   3910     optional uint64 controller_tx_time_pl3_millis = 7;
   3911     // tx time in ms at power level 4
   3912     optional uint64 controller_tx_time_pl4_millis = 8;
   3913     // rx time in ms at power level 5
   3914     optional uint64 controller_rx_time_millis = 9;
   3915     // product of current(mA), voltage(V) and time(ms)
   3916     optional uint64 energy_used = 10;
   3917 }
   3918 
   3919 /**
   3920  * Pulls Bluetooth Activity Energy Info
   3921  * Note: BluetoothBytesTransfer is pulled at the same time from the controller.
   3922  */
   3923 message BluetoothActivityInfo {
   3924     // timestamp(wall clock) of record creation
   3925     optional uint64 timestamp_millis = 1;
   3926     // bluetooth stack state
   3927     optional int32 bluetooth_stack_state = 2;
   3928     // tx time in millis
   3929     optional uint64 controller_tx_time_millis = 3;
   3930     // rx time in millis
   3931     optional uint64 controller_rx_time_millis = 4;
   3932     // idle time in millis
   3933     optional uint64 controller_idle_time_millis = 5;
   3934     // product of current(mA), voltage(V) and time(ms)
   3935     optional uint64 energy_used = 6;
   3936 }
   3937 
   3938 /*
   3939  * Logs the memory stats for a process.
   3940  *
   3941  * Pulled from StatsCompanionService for all managed processes (from ActivityManagerService).
   3942  */
   3943 message ProcessMemoryState {
   3944     // The uid if available. -1 means not available.
   3945     optional int32 uid = 1 [(is_uid) = true];
   3946 
   3947     // The process name.
   3948     // Usually package name, "system" for system server.
   3949     // Provided by ActivityManagerService.
   3950     optional string process_name = 2;
   3951 
   3952     // Current OOM score adjustment. Value read from ProcessRecord.
   3953     optional int32 oom_adj_score = 3;
   3954 
   3955     // # of page-faults
   3956     optional int64 page_fault = 4;
   3957 
   3958     // # of major page-faults
   3959     optional int64 page_major_fault = 5;
   3960 
   3961     // RSS
   3962     // Value is read from /proc/PID/status. Or from memory.stat, field
   3963     // total_rss if per-app memory cgroups are enabled.
   3964     optional int64 rss_in_bytes = 6;
   3965 
   3966     // CACHE
   3967     // Value is read from memory.stat, field total_cache if per-app memory
   3968     // cgroups are enabled. Otherwise, 0.
   3969     optional int64 cache_in_bytes = 7;
   3970 
   3971     // SWAP
   3972     // Value is read from memory.stat, field total_swap if per-app memory
   3973     // cgroups are enabled. Otherwise, VmSwap from /proc/PID/status.
   3974     optional int64 swap_in_bytes = 8;
   3975 
   3976     // Deprecated: use ProcessMemoryHighWaterMark atom instead. Always 0.
   3977     optional int64 rss_high_watermark_in_bytes = 9 [deprecated = true];
   3978 
   3979     // Elapsed real time when the process started.
   3980     // Value is read from /proc/PID/stat, field 22. 0 if read from per-app memory cgroups.
   3981     optional int64 start_time_nanos = 10;
   3982 
   3983     // Anonymous page size plus swap size. Values are read from /proc/PID/status.
   3984     optional int32 anon_rss_and_swap_in_kilobytes = 11;
   3985 }
   3986 
   3987 /*
   3988  * Logs the memory stats for a native process (from procfs).
   3989  *
   3990  * Pulled from StatsCompanionService for selected native processes.
   3991  */
   3992 message NativeProcessMemoryState {
   3993     // The uid if available. -1 means not available.
   3994     optional int32 uid = 1 [(is_uid) = true];
   3995 
   3996     // The process name.
   3997     // Value read from /proc/PID/cmdline.
   3998     optional string process_name = 2;
   3999 
   4000     // # of page-faults
   4001     optional int64 page_fault = 3;
   4002 
   4003     // # of major page-faults
   4004     optional int64 page_major_fault = 4;
   4005 
   4006     // RSS
   4007     // Value read from /proc/PID/status.
   4008     optional int64 rss_in_bytes = 5;
   4009 
   4010     // Deprecated: use ProcessMemoryHighWaterMark atom instead. Always 0.
   4011     optional int64 rss_high_watermark_in_bytes = 6 [deprecated = true];
   4012 
   4013     // Elapsed real time when the process started.
   4014     // Value is read from /proc/PID/stat, field 22.
   4015     optional int64 start_time_nanos = 7;
   4016 
   4017     // SWAP
   4018     // Value read from /proc/PID/status, field VmSwap.
   4019     optional int64 swap_in_bytes = 8;
   4020 
   4021     // Anonymous page size plus swap size. Values are read from /proc/PID/status.
   4022     optional int32 anon_rss_and_swap_in_kilobytes = 9;
   4023 }
   4024 
   4025 /*
   4026  * Logs the memory high-water mark for a process.
   4027  *
   4028  * Pulled from StatsCompanionService for all managed processes (from ActivityManagerServie)
   4029  * and for selected native processes.
   4030  *
   4031  * Pulling this atom resets high-water mark counters for all processes.
   4032  */
   4033 message ProcessMemoryHighWaterMark {
   4034     // The uid if available. -1 means not available.
   4035     optional int32 uid = 1 [(is_uid) = true];
   4036 
   4037     // The process name.
   4038     // Usually package name or process cmdline.
   4039     // Provided by ActivityManagerService or read from /proc/PID/cmdline.
   4040     optional string process_name = 2;
   4041 
   4042     // RSS high-water mark. Peak RSS usage of the process. Read from the VmHWM field in
   4043     // /proc/PID/status.
   4044     optional int64 rss_high_water_mark_in_bytes = 3;
   4045 }
   4046 
   4047 /*
   4048  * Elapsed real time from SystemClock.
   4049  */
   4050 message SystemElapsedRealtime {
   4051     optional uint64 time_millis = 1;
   4052 }
   4053 
   4054 /*
   4055  * Up time from SystemClock.
   4056  */
   4057 message SystemUptime {
   4058     // Milliseconds since the system was booted.
   4059     // This clock stops when the system enters deep sleep (CPU off, display dark, device waiting
   4060     // for external input).
   4061     // It is not affected by clock scaling, idle, or other power saving mechanisms.
   4062     optional uint64 uptime_millis = 1;
   4063 }
   4064 
   4065 /*
   4066  * Reads from /proc/uid_concurrent_active_time which has the format:
   4067  * active: X (X is # cores)
   4068  * [uid0]: [time-0] [time-1] [time-2] ... (# entries = # cores)
   4069  * [uid1]: [time-0] [time-1] [time-2] ... ...
   4070  * ...
   4071  * Time-N means the CPU time a UID spent running concurrently with N other processes.
   4072  * The file contains a monotonically increasing count of time for a single boot.
   4073  */
   4074 message CpuActiveTime {
   4075     optional int32 uid = 1 [(is_uid) = true];
   4076     optional uint64 time_millis = 2;
   4077 }
   4078 
   4079 /**
   4080  * Reads from /proc/uid_concurrent_policy_time which has the format:
   4081  * policy0: X policy4: Y (there are X cores on policy0, Y cores on policy4)
   4082  * [uid0]: [time-0-0] [time-0-1] ... [time-1-0] [time-1-1] ...
   4083  * [uid1]: [time-0-0] [time-0-1] ... [time-1-0] [time-1-1] ...
   4084  * ...
   4085  * Time-X-Y means the time a UID spent on clusterX running concurrently with Y other processes.
   4086  * The file contains a monotonically increasing count of time for a single boot.
   4087  */
   4088 message CpuClusterTime {
   4089     optional int32 uid = 1 [(is_uid) = true];
   4090     optional int32 cluster_index = 2;
   4091     optional uint64 time_millis = 3;
   4092 }
   4093 
   4094 /*
   4095  * Pulls free disk space, for data, system partition and temporary directory.
   4096  */
   4097 message DiskSpace {
   4098     // available bytes in data partition
   4099     optional uint64 data_available_bytes = 1;
   4100     // available bytes in system partition
   4101     optional uint64 system_available_bytes = 2;
   4102     // available bytes in download cache or temp directories
   4103     optional uint64 temp_available_bytes = 3;
   4104 }
   4105 
   4106 /**
   4107  * Pulls battery coulomb counter, which is the remaining battery charge in uAh.
   4108  *
   4109  * Pulled from StatsCompanionService.java
   4110  */
   4111 message RemainingBatteryCapacity {
   4112     optional int32 charge_micro_ampere_hour = 1;
   4113 }
   4114 
   4115 /**
   4116  * Pulls battery capacity, which is the battery capacity when full in uAh.
   4117  * Pulled from:
   4118  *   frameworks/base/cmds/statsd/src/external/ResourceHealthManagerPuller.cpp
   4119  */
   4120 message FullBatteryCapacity {
   4121     optional int32 capacity_micro_ampere_hour = 1;
   4122 }
   4123 
   4124 /**
   4125  * Pulls battery voltage.
   4126  * Pulled from:
   4127  *   frameworks/base/cmds/statsd/src/external/ResourceHealthManagerPuller.cpp
   4128  */
   4129 message BatteryVoltage {
   4130     // The voltage of the battery, in millivolts.
   4131     optional int32 voltage_millivolt = 1;
   4132 }
   4133 
   4134 /**
   4135  * Pulls battery level (percent full, from 0 to 100).
   4136  *
   4137  * Pulled from:
   4138  *   frameworks/base/cmds/statsd/src/external/ResourceHealthManagerPuller.cpp
   4139  */
   4140 message BatteryLevel {
   4141     // Battery level. Should be in [0, 100].
   4142     optional int32 battery_level = 1;
   4143 }
   4144 
   4145 /**
   4146  * Pulls the temperature of various parts of the device.
   4147  * The units are tenths of a degree Celsius. Eg: 30.3C is reported as 303.
   4148  *
   4149  * Pulled from StatsCompanionService.java
   4150  */
   4151 message Temperature {
   4152     // The type of temperature being reported. Eg. CPU, GPU, SKIN, BATTERY, BCL_.
   4153     optional android.os.TemperatureTypeEnum sensor_location = 1;
   4154 
   4155     // The name of the temperature source. Eg. CPU0
   4156     optional string sensor_name = 2;
   4157 
   4158     // Temperature in tenths of a degree C.
   4159     // For BCL, it is decimillivolt, decimilliamps, and percentage * 10.
   4160     optional int32 temperature_deci_celsius = 3;
   4161 
   4162     // Relative severity of the throttling, see enum definition.
   4163     optional android.os.ThrottlingSeverityEnum severity = 4;
   4164 }
   4165 
   4166 /**
   4167  * Pulls the statistics of calls to Binder.
   4168  *
   4169  * Binder stats will be reset every time the data is pulled. It means it can only be pulled by one
   4170  * config on the device.
   4171  *
   4172  * Next tag: 15
   4173  */
   4174 message BinderCalls {
   4175     // UID of the process responsible for the binder transaction. It will be set if the process
   4176     // executing the binder transaction attribute the transaction to another uid using
   4177     // Binder.setThreadWorkSource().
   4178     //
   4179     // If not set, the value will be -1.
   4180     optional int32 uid = 1 [(is_uid) = true];
   4181     // UID of the process executing the binder transaction.
   4182     optional int32 direct_caller_uid = 14;
   4183     // Fully qualified class name of the API call.
   4184     //
   4185     // This is a system server class name.
   4186     //
   4187     // TODO(gaillard): figure out if binder call stats includes data from isolated uids, if a uid
   4188     // gets recycled and we have isolated uids, we might attribute the data incorrectly.
   4189     // TODO(gaillard): there is a high dimensions cardinality, figure out if we should drop the less
   4190     // commonly used APIs.
   4191     optional string service_class_name = 2;
   4192     // Method name of the API call. It can also be a transaction code if we cannot
   4193     // resolve it to a name. See Binder#getTransactionName.
   4194     //
   4195     // This is a system server method name.
   4196     optional string service_method_name = 3;
   4197     // Total number of API calls.
   4198     optional int64 call_count = 4;
   4199     // True if the screen was interactive PowerManager#isInteractive at the end of the call.
   4200     optional bool screen_interactive = 13;
   4201     // Total number of API calls we have data recorded for. If we collected data for all the calls,
   4202     // call_count will be equal to recorded_call_count.
   4203     //
   4204     // If recorded_call_count is different than call_count, it means data collection has been
   4205     // sampled. All the fields below will be sampled in this case.
   4206     optional int64 recorded_call_count = 12;
   4207     // Number of exceptions thrown by the API.
   4208     optional int64 recorded_exception_count = 5;
   4209     // Total latency of all API calls.
   4210     // Average can be computed using total_latency_micros / recorded_call_count.
   4211     optional int64 recorded_total_latency_micros = 6;
   4212     // Maximum latency of one API call.
   4213     optional int64 recorded_max_latency_micros = 7;
   4214     // Total CPU usage of all API calls.
   4215     // Average can be computed using total_cpu_micros / recorded_call_count.
   4216     // Total can be computed using total_cpu_micros / recorded_call_count * call_count.
   4217     optional int64 recorded_total_cpu_micros = 8;
   4218     // Maximum CPU usage of one API call.
   4219     optional int64 recorded_max_cpu_micros = 9;
   4220     // Maximum parcel reply size of one API call.
   4221     optional int64 recorded_max_reply_size_bytes = 10;
   4222     // Maximum parcel request size of one API call.
   4223     optional int64 recorded_max_request_size_bytes = 11;
   4224 }
   4225 
   4226 /**
   4227  * Pulls the statistics of exceptions during calls to Binder.
   4228  *
   4229  * Binder stats are cumulative from boot unless somebody reset the data using
   4230  * > adb shell dumpsys binder_calls_stats --reset
   4231  */
   4232 message BinderCallsExceptions {
   4233     // Exception class name, e.g. java.lang.IllegalArgumentException.
   4234     //
   4235     // This is an exception class name thrown by the system server.
   4236     optional string exception_class_name = 1;
   4237     // Total number of exceptions.
   4238     optional int64 exception_count = 2;
   4239 }
   4240 
   4241 /**
   4242  * Pulls the statistics of message dispatching on HandlerThreads.
   4243  *
   4244  * Looper stats will be reset every time the data is pulled. It means it can only be pulled by one
   4245  * config on the device.
   4246  *
   4247  * Next tag: 11
   4248  */
   4249 message LooperStats {
   4250     // The uid that made a call to the System Server and caused the message to be enqueued.
   4251     optional int32 uid = 1 [(is_uid) = true];
   4252 
   4253     // Fully qualified class name of the handler target class.
   4254     //
   4255     // This field does not contain PII. This is a system server class name.
   4256     optional string handler_class_name = 2;
   4257 
   4258     // The name of the thread that runs the Looper.
   4259     //
   4260     // This field does not contain PII. This is a system server thread name.
   4261     optional string looper_thread_name = 3;
   4262 
   4263     // The name of the dispatched message.
   4264     //
   4265     // This field does not contain PII. This is a system server constant or class
   4266     // name.
   4267     optional string message_name = 4;
   4268 
   4269     // Total number of successfully dispatched messages.
   4270     optional int64 message_count = 5;
   4271 
   4272     // Total number of messages that failed dispatching.
   4273     optional int64 exception_count = 6;
   4274 
   4275     // Total number of processed messages we have data recorded for. If we
   4276     // collected data for all the messages, message_count will be equal to
   4277     // recorded_message_count.
   4278     //
   4279     // If recorded_message_count is different than message_count, it means data
   4280     // collection has been sampled. The fields below will be sampled in this case.
   4281     optional int64 recorded_message_count = 7;
   4282 
   4283     // Total latency of all processed messages.
   4284     // Average can be computed using recorded_total_latency_micros /
   4285     // recorded_message_count.
   4286     optional int64 recorded_total_latency_micros = 8;
   4287 
   4288     // Total CPU usage of all processed message.
   4289     // Average can be computed using recorded_total_cpu_micros /
   4290     // recorded_message_count. Total can be computed using
   4291     // recorded_total_cpu_micros / recorded_message_count * message_count.
   4292     optional int64 recorded_total_cpu_micros = 9;
   4293 
   4294     // True if the screen was interactive PowerManager#isInteractive at the end of the call.
   4295     optional bool screen_interactive = 10;
   4296 
   4297     // Max recorded CPU usage of all processed messages.
   4298     optional int64 recorded_max_cpu_micros = 11;
   4299 
   4300     // Max recorded latency of all processed messages.
   4301     optional int64 recorded_max_latency_micros = 12;
   4302 
   4303     // Total number of messages we tracked the dispatching delay for. If we
   4304     // collected data for all the messages, message_count will be equal to
   4305     // recorded_delay_message_count.
   4306     //
   4307     // If recorded_delay_message_count is different than message_count, it means data
   4308     // collection has been sampled or/and not all messages specified the target dispatch time.
   4309     // The fields below will be sampled in this case.
   4310     optional int64 recorded_delay_message_count = 13;
   4311 
   4312     // Total dispatching delay of all processed messages.
   4313     // Calculated as a difference between the target dispatching time (Message.when)
   4314     // and the actual dispatching time.
   4315     // Average can be computed using recorded_total_delay_millis / recorded_delay_message_count.
   4316     optional int64 recorded_total_delay_millis = 14;
   4317 
   4318     // Max dispatching delay of all processed messages.
   4319     // Calculated as a difference between the target dispatching time (Message.when)
   4320     // and the actual dispatching time.
   4321     optional int64 recorded_max_delay_millis = 15;
   4322 }
   4323 
   4324 /**
   4325  * Pulls disk information, such as write speed and latency.
   4326  */
   4327 message DiskStats {
   4328     // Time taken to open, write 512B to, and close a file.
   4329     // -1 if error performing the check.
   4330     optional int64 data_write_latency_millis = 1;
   4331 
   4332     optional bool file_based_encryption = 2;
   4333 
   4334     // Recent disk write speed in kB/s.
   4335     // -1 if error querying storageed.
   4336     // 0 if data is unavailable.
   4337     optional int32 recent_disk_write_speed = 3;
   4338 }
   4339 
   4340 
   4341 /**
   4342  * Free and total bytes of the Data, Cache, and System partition.
   4343  */
   4344 message DirectoryUsage {
   4345     enum Directory {
   4346         UNKNOWN = 0;
   4347         DATA = 1;
   4348         CACHE = 2;
   4349         SYSTEM = 3;
   4350     }
   4351     optional Directory directory = 1;
   4352     optional int64 free_bytes = 2;
   4353     optional int64 total_bytes = 3;
   4354 }
   4355 
   4356 
   4357 /**
   4358  * Size of an application: apk size, data size, and cache size.
   4359  * Reads from a cached file produced daily by DiskStatsLoggingService.java.
   4360  * Information is only reported for apps with the primary user (user 0).
   4361  * Sizes are aggregated by package name.
   4362  */
   4363 message AppSize {
   4364     // Including uids will involve modifying diskstats logic.
   4365     optional string package_name = 1;
   4366     // App size in bytes. -1 if unavailable.
   4367     optional int64 app_size_bytes = 2;
   4368     // App data size in bytes. -1 if unavailable.
   4369     optional int64 app_data_size_bytes = 3;
   4370     // App cache size in bytes. -1 if unavailable.
   4371     optional int64 app_cache_size_bytes = 4;
   4372     // Time that the cache file was produced.
   4373     // Uses System.currentTimeMillis(), which is wall clock time.
   4374     optional int64 cache_time_millis = 5;
   4375 }
   4376 
   4377 
   4378 /**
   4379  * Size of a particular category. Eg: photos, videos.
   4380  * Reads from a cached file produced daily by DiskStatsLoggingService.java.
   4381  */
   4382 message CategorySize {
   4383     enum Category {
   4384         UNKNOWN = 0;
   4385         APP_SIZE = 1;
   4386         APP_DATA_SIZE = 2;
   4387         APP_CACHE_SIZE = 3;
   4388         PHOTOS = 4;
   4389         VIDEOS = 5;
   4390         AUDIO = 6;
   4391         DOWNLOADS = 7;
   4392         SYSTEM = 8;
   4393         OTHER = 9;
   4394     }
   4395     optional Category category = 1;
   4396     // Category size in bytes.
   4397     optional int64 size_bytes = 2;
   4398     // Time that the cache file was produced.
   4399     // Uses System.currentTimeMillis(), which is wall clock time.
   4400     optional int64 cache_time_millis = 3;
   4401 }
   4402 
   4403 /**
   4404  * Pulls per uid I/O stats. The stats are cumulative since boot.
   4405  *
   4406  * Read/write bytes are I/O events from a storage device
   4407  * Read/write chars are data requested by read/write syscalls, and can be
   4408  *   satisfied by caching.
   4409  *
   4410  * Pulled from StatsCompanionService, which reads proc/uid_io/stats.
   4411  */
   4412 message DiskIo {
   4413     optional int32 uid = 1 [(is_uid) = true];
   4414     optional int64 fg_chars_read = 2;
   4415     optional int64 fg_chars_write = 3;
   4416     optional int64 fg_bytes_read = 4;
   4417     optional int64 fg_bytes_write = 5;
   4418     optional int64 bg_chars_read = 6;
   4419     optional int64 bg_chars_write = 7;
   4420     optional int64 bg_bytes_read = 8;
   4421     optional int64 bg_bytes_write = 9;
   4422     optional int64 fg_fsync = 10;
   4423     optional int64 bg_fsync= 11;
   4424 }
   4425 
   4426 
   4427 /**
   4428  * Pulls the number of fingerprints for each user.
   4429  *
   4430  * Pulled from StatsCompanionService, which queries <Biometric>Manager.
   4431  */
   4432 message NumFingerprintsEnrolled {
   4433     // The associated user. Eg: 0 for owners, 10+ for others.
   4434     // Defined in android/os/UserHandle.java
   4435     optional int32 user = 1;
   4436     // Number of fingerprints registered to that user.
   4437     optional int32 num_fingerprints_enrolled = 2;
   4438 }
   4439 
   4440 /**
   4441  * Pulls the number of faces for each user.
   4442  *
   4443  * Pulled from StatsCompanionService, which queries <Biometric>Manager.
   4444  */
   4445 message NumFacesEnrolled {
   4446     // The associated user. Eg: 0 for owners, 10+ for others.
   4447     // Defined in android/os/UserHandle.java
   4448     optional int32 user = 1;
   4449     // Number of faces registered to that user.
   4450     optional int32 num_faces_enrolled = 2;
   4451 }
   4452 /**
   4453  * A mapping of role holder -> role
   4454  */
   4455 message RoleHolder {
   4456     // uid of the role holder
   4457     optional int32 uid = 1 [(is_uid) = true];
   4458 
   4459     // package name of the role holder
   4460     optional string package_name = 2;
   4461 
   4462     // the role held
   4463     optional string role = 3;
   4464 }
   4465 
   4466 message AggStats {
   4467     optional int64 min = 1;
   4468 
   4469     optional int64 average = 2;
   4470 
   4471     optional int64 max = 3;
   4472 }
   4473 
   4474 message ProcessStatsStateProto {
   4475     optional android.service.procstats.ScreenState screen_state = 1;
   4476 
   4477     optional android.service.procstats.MemoryState memory_state = 2;
   4478 
   4479     // this enum list is from frameworks/base/core/java/com/android/internal/app/procstats/ProcessStats.java
   4480     // and not frameworks/base/core/java/android/app/ActivityManager.java
   4481     optional android.service.procstats.ProcessState process_state = 3;
   4482 
   4483     // Millisecond uptime duration spent in this state
   4484     optional int64 duration_millis = 4;
   4485 
   4486     // Millisecond elapsed realtime duration spent in this state
   4487     optional int64 realtime_duration_millis = 9;
   4488 
   4489     // # of samples taken
   4490     optional int32 sample_size = 5;
   4491 
   4492     // PSS is memory reserved for this process
   4493     optional AggStats pss = 6;
   4494 
   4495     // USS is memory shared between processes, divided evenly for accounting
   4496     optional AggStats uss = 7;
   4497 
   4498     // RSS is memory resident for this process
   4499     optional AggStats rss = 8;
   4500 }
   4501 
   4502 // Next Tag: 7
   4503 message ProcessStatsProto {
   4504     // Name of process.
   4505     optional string process = 1;
   4506 
   4507     // Uid of the process.
   4508     optional int32 uid = 2;
   4509 
   4510     // Information about how often kills occurred
   4511     message Kill {
   4512         // Count of excessive CPU kills
   4513         optional int32 cpu = 1;
   4514 
   4515         // Count of kills when cached
   4516         optional int32 cached = 2;
   4517 
   4518         // PSS stats during cached kill
   4519         optional AggStats cached_pss = 3;
   4520     }
   4521     optional Kill kill = 3;
   4522 
   4523     // Time and memory spent in various states.
   4524     repeated ProcessStatsStateProto states = 5;
   4525 
   4526     // Total time process has been running...  screen_state, memory_state, and process_state
   4527     // will not be set.
   4528     optional ProcessStatsStateProto total_running_state = 6;
   4529 }
   4530 
   4531 message PackageServiceOperationStatsProto {
   4532     // Operate enum: Started, Foreground, Bound, Executing
   4533     optional android.service.procstats.ServiceOperationState operation = 1;
   4534 
   4535     // Number of times the service was in this operation.
   4536     optional int32 count = 2;
   4537 
   4538     // Information about a state the service can be in.
   4539     message StateStats {
   4540         // Screen state enum.
   4541         optional android.service.procstats.ScreenState screen_state = 1;
   4542         // Memory state enum.
   4543         optional android.service.procstats.MemoryState memory_state = 2;
   4544 
   4545         // duration in milliseconds.
   4546         optional int64 duration_millis = 3;
   4547         // Millisecond elapsed realtime duration spent in this state
   4548         optional int64 realtime_duration_millis = 4;
   4549     }
   4550     repeated StateStats state_stats = 3;
   4551 }
   4552 
   4553 message PackageServiceStatsProto {
   4554     // Name of service component.
   4555     optional string service_name = 1;
   4556 
   4557     // The operation stats.
   4558     // The package_name, package_uid, package_version, service_name will not be set to save space.
   4559     repeated PackageServiceOperationStatsProto operation_stats = 2;
   4560 }
   4561 
   4562 message PackageAssociationSourceProcessStatsProto {
   4563     // Uid of the process.
   4564     optional int32 process_uid = 1;
   4565     // Process name.
   4566     optional string process_name = 2;
   4567     // Package name.
   4568     optional string package_name = 7;
   4569     // Total count of the times this association appeared.
   4570     optional int32 total_count = 3;
   4571 
   4572     // Millisecond uptime total duration this association was around.
   4573     optional int64 total_duration_millis = 4;
   4574 
   4575     // Total count of the times this association became actively impacting its target process.
   4576     optional int32 active_count = 5;
   4577 
   4578     // Information on one source in this association.
   4579     message StateStats {
   4580         // Process state enum.
   4581         optional android.service.procstats.ProcessState process_state = 1;
   4582         // Millisecond uptime duration spent in this state
   4583         optional int64 duration_millis = 2;
   4584         // Millisecond elapsed realtime duration spent in this state
   4585         optional int64 realtime_duration_mmillis = 3;
   4586     }
   4587     repeated StateStats active_state_stats = 6;
   4588 }
   4589 
   4590 message PackageAssociationProcessStatsProto {
   4591     // Name of the target component.
   4592     optional string component_name = 1;
   4593     // Information on one source in this association.
   4594     repeated PackageAssociationSourceProcessStatsProto sources = 2;
   4595 }
   4596 
   4597 
   4598 message ProcessStatsPackageProto {
   4599     // Name of package.
   4600     optional string package = 1;
   4601 
   4602     // Uid of the package.
   4603     optional int32 uid = 2;
   4604 
   4605     // Version of the package.
   4606     optional int64 version = 3;
   4607 
   4608     // Stats for each process running with the package loaded in to it.
   4609     repeated ProcessStatsProto process_stats = 4;
   4610 
   4611     // Stats for each of the package's services.
   4612     repeated PackageServiceStatsProto service_stats = 5;
   4613 
   4614     // Stats for each association with the package.
   4615     repeated PackageAssociationProcessStatsProto association_stats = 6;
   4616 }
   4617 
   4618 message ProcessStatsSectionProto {
   4619     // Elapsed realtime at start of report.
   4620     optional int64 start_realtime_millis = 1;
   4621 
   4622     // Elapsed realtime at end of report.
   4623     optional int64 end_realtime_millis = 2;
   4624 
   4625     // CPU uptime at start of report.
   4626     optional int64 start_uptime_millis = 3;
   4627 
   4628     // CPU uptime at end of report.
   4629     optional int64 end_uptime_millis = 4;
   4630 
   4631     // System runtime library. e.g. "libdvm.so", "libart.so".
   4632     optional string runtime = 5;
   4633 
   4634     // whether kernel reports swapped pss.
   4635     optional bool has_swapped_pss = 6;
   4636 
   4637     // Data completeness. e.g. "complete", "partial", shutdown", or "sysprops".
   4638     enum Status {
   4639         STATUS_UNKNOWN = 0;
   4640         STATUS_COMPLETE = 1;
   4641         STATUS_PARTIAL = 2;
   4642         STATUS_SHUTDOWN = 3;
   4643         STATUS_SYSPROPS = 4;
   4644     }
   4645     repeated Status status = 7;
   4646 
   4647     // Number of pages available of various types and sizes, representation fragmentation.
   4648     repeated ProcessStatsAvailablePagesProto available_pages = 10;
   4649 
   4650     // Stats for each process.
   4651     repeated ProcessStatsProto process_stats = 8;
   4652 
   4653     // Stats for each package.
   4654     repeated ProcessStatsPackageProto package_stats = 9;
   4655 }
   4656 
   4657 message ProcessStatsAvailablePagesProto {
   4658     // Node these pages are in (as per /proc/pagetypeinfo)
   4659     optional int32 node = 1;
   4660 
   4661     // Zone these pages are in (as per /proc/pagetypeinfo)
   4662     optional string zone = 2;
   4663 
   4664     // Label for the type of these pages (as per /proc/pagetypeinfo)
   4665     optional string label = 3;
   4666 
   4667     // Distribution of number of pages available by order size.  First entry in array is
   4668     // order 0, second is order 1, etc.  Each order increase is a doubling of page size.
   4669     repeated int32 pages_per_order = 4;
   4670 }
   4671 
   4672 /**
   4673  * Pulled from ProcessStatsService.java
   4674  */
   4675 message ProcStats {
   4676     optional ProcessStatsSectionProto proc_stats_section = 1;
   4677 }
   4678 
   4679 /**
   4680  * Pulled from ProcessStatsService.java
   4681  */
   4682 message ProcStatsPkgProc {
   4683     optional ProcessStatsSectionProto proc_stats_section = 1;
   4684 }
   4685 
   4686 message PowerProfileProto {
   4687     optional double cpu_suspend = 1;
   4688 
   4689     optional double cpu_idle = 2;
   4690 
   4691     optional double cpu_active = 3;
   4692 
   4693     message CpuCluster {
   4694         optional int32 id = 1;
   4695         optional double cluster_power = 2;
   4696         optional int32 cores = 3;
   4697         repeated int64 speed = 4;
   4698         repeated double core_power = 5;
   4699     }
   4700 
   4701     repeated CpuCluster cpu_cluster = 40;
   4702 
   4703     optional double wifi_scan = 4;
   4704 
   4705     optional double wifi_on = 5;
   4706 
   4707     optional double wifi_active = 6;
   4708 
   4709     optional double wifi_controller_idle = 7;
   4710 
   4711     optional double wifi_controller_rx = 8;
   4712 
   4713     optional double wifi_controller_tx = 9;
   4714 
   4715     repeated double wifi_controller_tx_levels = 10;
   4716 
   4717     optional double wifi_controller_operating_voltage = 11;
   4718 
   4719     optional double bluetooth_controller_idle = 12;
   4720 
   4721     optional double bluetooth_controller_rx = 13;
   4722 
   4723     optional double bluetooth_controller_tx = 14;
   4724 
   4725     optional double bluetooth_controller_operating_voltage = 15;
   4726 
   4727     optional double modem_controller_sleep = 16;
   4728 
   4729     optional double modem_controller_idle = 17;
   4730 
   4731     optional double modem_controller_rx = 18;
   4732 
   4733     repeated double modem_controller_tx = 19;
   4734 
   4735     optional double modem_controller_operating_voltage = 20;
   4736 
   4737     optional double gps_on = 21;
   4738 
   4739     repeated double gps_signal_quality_based = 22;
   4740 
   4741     optional double gps_operating_voltage = 23;
   4742 
   4743     optional double bluetooth_on = 24;
   4744 
   4745     optional double bluetooth_active = 25;
   4746 
   4747     optional double bluetooth_at_cmd = 26;
   4748 
   4749     optional double ambient_display = 27;
   4750 
   4751     optional double screen_on = 28;
   4752 
   4753     optional double radio_on = 29;
   4754 
   4755     optional double radio_scanning = 30;
   4756 
   4757     optional double radio_active = 31;
   4758 
   4759     optional double screen_full = 32;
   4760 
   4761     optional double audio = 33;
   4762 
   4763     optional double video = 34;
   4764 
   4765     optional double flashlight = 35;
   4766 
   4767     optional double memory = 36;
   4768 
   4769     optional double camera = 37;
   4770 
   4771     optional double wifi_batched_scan = 38;
   4772 
   4773     optional double battery_capacity = 39;
   4774 }
   4775 
   4776 /**
   4777  * power_profile.xml and other constants for power model calculations.
   4778  * Pulled from PowerProfile.java
   4779  */
   4780 message PowerProfile {
   4781     optional PowerProfileProto power_profile = 1;
   4782 }
   4783 
   4784 /**
   4785  * Logs when a user restriction was added or removed.
   4786  *
   4787  * Logged from:
   4788  *   frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
   4789  */
   4790 message UserRestrictionChanged {
   4791     // The raw string of the user restriction as defined in UserManager.
   4792     // Allowed values are defined in UserRestrictionsUtils#USER_RESTRICTIONS.
   4793     optional string restriction = 1;
   4794     // Whether the restriction is enabled or disabled.
   4795     optional bool enabled = 2;
   4796 }
   4797 
   4798 /**
   4799  * Pulls process user time and system time. Puller takes a snapshot of all pids
   4800  * in the system and returns cpu stats for those that are working at the time.
   4801  * Dead pids will be dropped. Kernel processes are excluded.
   4802  * Min cool-down is 5 sec.
   4803  */
   4804 message ProcessCpuTime {
   4805     optional int32 uid = 1 [(is_uid) = true];
   4806 
   4807     optional string process_name = 2;
   4808     // Process cpu time in user space, cumulative from boot/process start
   4809     optional int64 user_time_millis = 3;
   4810     // Process cpu time in system space, cumulative from boot/process start
   4811     optional int64 system_time_millis = 4;
   4812 }
   4813 
   4814 /**
   4815  * Pulls the CPU usage for each thread.
   4816  *
   4817  * Read from /proc/$PID/task/$TID/time_in_state files.
   4818  *
   4819  * TODO(mishaw): This is an experimental atom. Issues with big/little CPU frequencies, and
   4820  * time_in_state files not being present on some phones, have not been addressed. These should be
   4821  * considered before a public release.
   4822  */
   4823 message CpuTimePerThreadFreq {
   4824     // UID that owns the process.
   4825     optional int32 uid = 1 [(is_uid) = true];
   4826     // ID of the process.
   4827     optional int32 process_id = 2;
   4828     // ID of the thread.
   4829     optional int32 thread_id = 3;
   4830     // Name of the process taken from `/proc/$PID/cmdline`.
   4831     optional string process_name = 4;
   4832     // Name of the thread taken from `/proc/$PID/task/$TID/comm`
   4833     optional string thread_name = 5;
   4834 
   4835     // Report eight different frequencies, and how much time is spent in each frequency. Frequencies
   4836     // are given in KHz, and time is given in milliseconds since the thread started. All eight
   4837     // frequencies are given here as the alternative is sending eight separate atoms. This method
   4838     // significantly reduces the amount of data created
   4839     optional int32 frequency1_khz = 6;
   4840     optional int32 time1_millis = 7;
   4841     optional int32 frequency2_khz = 8;
   4842     optional int32 time2_millis = 9;
   4843     optional int32 frequency3_khz = 10;
   4844     optional int32 time3_millis = 11;
   4845     optional int32 frequency4_khz = 12;
   4846     optional int32 time4_millis = 13;
   4847     optional int32 frequency5_khz = 14;
   4848     optional int32 time5_millis = 15;
   4849     optional int32 frequency6_khz = 16;
   4850     optional int32 time6_millis = 17;
   4851     optional int32 frequency7_khz = 18;
   4852     optional int32 time7_millis = 19;
   4853     optional int32 frequency8_khz = 20;
   4854     optional int32 time8_millis = 21;
   4855 }
   4856 
   4857 /**
   4858  * Pulls information about the device's build.
   4859  */
   4860 message BuildInformation {
   4861     // Build.FINGERPRINT. A string that uniquely identifies this build. Do not parse.
   4862     // E.g. may be composed of the brand, product, device, release, id, incremental, type, and tags.
   4863     optional string fingerprint = 1;
   4864 
   4865     // Build.BRAND. The consumer-visible brand with which the product/hardware will be associated.
   4866     optional string brand = 2;
   4867 
   4868     // Build.PRODUCT. The name of the overall product.
   4869     optional string product = 3;
   4870 
   4871     // Build.DEVICE. The name of the industrial design.
   4872     optional string device = 4;
   4873 
   4874     // Build.VERSION.RELEASE. The user-visible version string.  E.g., "1.0" or "3.4b5" or "bananas".
   4875     optional string version_release = 5;
   4876 
   4877     // Build.ID. E.g. a label like "M4-rc20".
   4878     optional string id = 6;
   4879 
   4880     // Build.VERSION.INCREMENTAL. The internal value used by the underlying source control to
   4881     // represent this build.
   4882     optional string version_incremental = 7;
   4883 
   4884     // Build.TYPE. The type of build, like "user" or "eng".
   4885     optional string type = 8;
   4886 
   4887     // Build.TAGS. Comma-separated tags describing the build, like "unsigned,debug".
   4888     optional string tags = 9;
   4889 }
   4890 
   4891 /**
   4892  * Logs information about mismatched caller for content capture.
   4893  *
   4894  * Logged from:
   4895  *   frameworks/base/core/java/android/service/contentcapture/ContentCaptureService.java
   4896  */
   4897 message ContentCaptureCallerMismatchReported {
   4898     optional string intended_package = 1;
   4899     optional string calling_package = 2;
   4900 }
   4901 
   4902 /**
   4903  * Logs information about content capture service events.
   4904  *
   4905  * Logged from:
   4906  *   frameworks/base/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureMetricsLogger.java
   4907  */
   4908 message ContentCaptureServiceEvents {
   4909     // The type of event.
   4910     enum Event {
   4911         UNKNOWN = 0;
   4912         ON_CONNECTED = 1;
   4913         ON_DISCONNECTED = 2;
   4914         SET_WHITELIST = 3;
   4915         SET_DISABLED = 4;
   4916         ON_USER_DATA_REMOVED = 5;
   4917     }
   4918     optional Event event = 1;
   4919     // component/package of content capture service.
   4920     optional string service_info = 2;
   4921     // component/package of target.
   4922     // it's a concatenated list of component/package for SET_WHITELIST event
   4923     // separated by " ".
   4924     optional string target_info = 3;
   4925 }
   4926 
   4927 /**
   4928  * Logs information about content capture session events.
   4929  *
   4930  * Logged from:
   4931  *   frameworks/base/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureMetricsLogger.java
   4932  */
   4933 message ContentCaptureSessionEvents {
   4934     // The type of event.
   4935     enum Event {
   4936         UNKNOWN = 0;
   4937         ON_SESSION_STARTED = 1;
   4938         ON_SESSION_FINISHED = 2;
   4939         SESSION_NOT_CREATED = 3;
   4940     }
   4941     optional int32 session_id = 1;
   4942     optional Event event = 2;
   4943     // (n/a on session finished)
   4944     optional int32 state_flags = 3;
   4945     // component/package of content capture service.
   4946     optional string service_info = 4;
   4947     // component/package of app.
   4948     // (n/a on session finished)
   4949     optional string app_info = 5;
   4950     optional bool is_child_session = 6;
   4951 }
   4952 
   4953 /**
   4954  * Logs information about session being flushed.
   4955  *
   4956  * Logged from:
   4957  *   frameworks/base/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureMetricsLogger.java
   4958  */
   4959 message ContentCaptureFlushed {
   4960     optional int32 session_id = 1;
   4961     // component/package of content capture service.
   4962     optional string service_info = 2;
   4963     // component/package of app.
   4964     optional string app_info = 3;
   4965     // session start/finish events
   4966     optional int32 child_session_started = 4;
   4967     optional int32 child_session_finished = 5;
   4968     // count of view events.
   4969     optional int32 view_appeared_count = 6;
   4970     optional int32 view_disappeared_count = 7;
   4971     optional int32 view_text_changed_count = 8;
   4972 
   4973     // Flush stats.
   4974     optional int32 max_events = 9;
   4975     optional int32 idle_flush_freq = 10;
   4976     optional int32 text_flush_freq = 11;
   4977     optional int32 flush_reason = 12;
   4978 }
   4979 
   4980 /**
   4981  * Pulls on-device BatteryStats power use calculations for the overall device.
   4982  */
   4983 message DeviceCalculatedPowerUse {
   4984     // Power used by the device in nAs (i.e. nanocoulombs (nC)), as computed by BatteryStats, since
   4985     // BatteryStats last reset (i.e. roughly since device was last significantly charged).
   4986     // Currently, this is from BatteryStatsHelper.getComputedPower() (not getTotalPower()).
   4987     optional int64 computed_power_nano_amp_secs = 1;
   4988 }
   4989 
   4990 /**
   4991  * Pulls on-device BatteryStats power use calculations broken down by uid.
   4992  * This atom should be complemented by DeviceCalculatedPowerBlameOther, which contains the power use
   4993  * that is attributed to non-uid items. They must all be included to get the total power use.
   4994  */
   4995 message DeviceCalculatedPowerBlameUid {
   4996     // Uid being blamed. Note: isolated uids have already been mapped to host uid.
   4997     optional int32 uid = 1 [(is_uid) = true];
   4998 
   4999     // Power used by this uid in nAs (i.e. nanocoulombs (nC)), as computed by BatteryStats, since
   5000     // BatteryStats last reset (i.e. roughly since device was last significantly charged).
   5001     optional int64 power_nano_amp_secs = 2;
   5002 }
   5003 
   5004 /**
   5005  * Pulls on-device BatteryStats power use calculations that are not due to a uid, broken down by
   5006  * drain type.
   5007  * This atom should be complemented by DeviceCalculatedPowerBlameUid, which contains the blame that
   5008  * is attributed uids. They must all be included to get the total power use.
   5009  */
   5010 message DeviceCalculatedPowerBlameOther {
   5011     // The type of item whose power use is being reported.
   5012     enum DrainType {
   5013         AMBIENT_DISPLAY = 0;
   5014         // reserved 1; reserved "APP"; // Logged instead in DeviceCalculatedPowerBlameUid.
   5015         BLUETOOTH = 2;
   5016         CAMERA = 3;
   5017         // Cell-standby
   5018         CELL = 4;
   5019         FLASHLIGHT = 5;
   5020         IDLE = 6;
   5021         MEMORY = 7;
   5022         // Amount that total computed drain exceeded the drain estimated using the
   5023         // battery level changes and capacity.
   5024         OVERCOUNTED = 8;
   5025         PHONE = 9;
   5026         SCREEN = 10;
   5027         // Amount that total computed drain was below the drain estimated using the
   5028         // battery level changes and capacity.
   5029         UNACCOUNTED = 11;
   5030         // reserved 12; reserved "USER"; // Entire drain for a user. This is NOT supported.
   5031         WIFI = 13;
   5032     }
   5033     optional DrainType drain_type = 1;
   5034 
   5035     // Power used by this item in nAs (i.e. nanocoulombs (nC)), as computed by BatteryStats, since
   5036     // BatteryStats last reset (i.e. roughly since device was last significantly charged).
   5037     optional int64 power_nano_amp_secs = 2;
   5038 }
   5039 
   5040 /**
   5041  * Logs device policy features.
   5042  *
   5043  * Logged from:
   5044  *   frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
   5045  *   packages/apps/ManagedProvisioning/src/com/android/managedprovisioning/
   5046  */
   5047 message DevicePolicyEvent {
   5048     // The event id - unique for each event.
   5049     optional android.stats.devicepolicy.EventId event_id = 1;
   5050     // The admin package name.
   5051     optional string admin_package_name = 2;
   5052     // A generic integer parameter.
   5053     optional int32 integer_value = 3;
   5054     // A generic boolean parameter.
   5055     optional bool boolean_value = 4;
   5056     // A parameter specifying a time period in milliseconds.
   5057     optional uint64 time_period_millis = 5;
   5058     // A parameter specifying a list of package names, bundle extras or string parameters.
   5059     optional android.stats.devicepolicy.StringList string_list_value = 6 [(log_mode) = MODE_BYTES];
   5060 }
   5061 
   5062 /**
   5063  * Logs when DocumentsUI is started, and how. Call this when DocumentsUI first starts up.
   5064  *
   5065  * Logged from:
   5066  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5067  */
   5068 message DocsUILaunchReported {
   5069     optional android.stats.docsui.LaunchAction launch_action = 1;
   5070     optional bool has_initial_uri = 2;
   5071     optional android.stats.docsui.MimeType mime_type = 3;
   5072     optional android.stats.docsui.Root initial_root = 4;
   5073 }
   5074 
   5075 /**
   5076  * Logs root/app visited event in file managers/picker. Call this when the user
   5077  * taps on root/app in hamburger menu.
   5078  *
   5079  * Logged from:
   5080  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5081  */
   5082 message DocsUIRootVisitedReported {
   5083     optional android.stats.docsui.ContextScope scope = 1;
   5084     optional android.stats.docsui.Root root = 2;
   5085 }
   5086 
   5087 /**
   5088  * Logs file operation stats. Call this when a file operation has completed.
   5089  *
   5090  * Logged from:
   5091  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5092  */
   5093 message DocsUIFileOperationReported {
   5094     optional android.stats.docsui.Provider provider = 1;
   5095     optional android.stats.docsui.FileOperation file_op = 2;
   5096 }
   5097 
   5098 /**
   5099  * Logs file operation stats. Call this when a copy/move operation has completed with a specific
   5100  * mode.
   5101  *
   5102  * Logged from:
   5103  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5104  */
   5105 message DocsUIFileOperationCopyMoveModeReported {
   5106     optional android.stats.docsui.FileOperation file_op = 1;
   5107     optional android.stats.docsui.CopyMoveOpMode mode = 2;
   5108 }
   5109 
   5110 
   5111 /**
   5112  * Logs file sub operation stats. Call this when a file operation has failed.
   5113  *
   5114  * Logged from:
   5115  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5116  */
   5117 message DocsUIFileOperationFailureReported {
   5118     optional android.stats.docsui.Authority authority = 1;
   5119     optional android.stats.docsui.SubFileOperation sub_op = 2;
   5120 }
   5121 
   5122 /**
   5123 * Logs the cancellation of a file operation. Call this when a job is canceled
   5124 *
   5125 * Logged from:
   5126 *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5127 */
   5128 message DocsUIFileOperationCanceledReported {
   5129     optional android.stats.docsui.FileOperation file_op = 1;
   5130 }
   5131 
   5132 /**
   5133  * Logs startup time in milliseconds.
   5134  *
   5135  * Logged from:
   5136  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5137  */
   5138 message DocsUIStartupMsReported {
   5139     optional int32 startup_millis = 1;
   5140 }
   5141 
   5142 /**
   5143  * Logs the action that was started by user.
   5144  *
   5145  * Logged from:
   5146  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5147  */
   5148 message DocsUIUserActionReported {
   5149     optional android.stats.docsui.UserAction action = 1;
   5150 }
   5151 
   5152 /**
   5153  * Logs the invalid type when invalid scoped access is requested.
   5154  *
   5155  * Logged from:
   5156  *     package/app/DocumentsUI/src/com/android/documentsui/ScopedAccessMetrics.java
   5157  */
   5158 message DocsUIInvalidScopedAccessRequestReported {
   5159     optional android.stats.docsui.InvalidScopedAccess type = 1;
   5160 }
   5161 
   5162 /**
   5163  * Logs the package name that launches docsui picker mode.
   5164  *
   5165  * Logged from:
   5166  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5167  */
   5168 message DocsUIPickerLaunchedFromReported {
   5169     optional string package_name = 1;
   5170 }
   5171 
   5172 /**
   5173  * Logs the search type.
   5174  *
   5175  * Logged from:
   5176  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5177  */
   5178 message DocsUISearchTypeReported {
   5179     optional android.stats.docsui.SearchType search_type = 1;
   5180 }
   5181 
   5182 /**
   5183  * Logs the search mode.
   5184  *
   5185  * Logged from:
   5186  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5187  */
   5188 message DocsUISearchModeReported {
   5189     optional android.stats.docsui.SearchMode search_mode = 1;
   5190 }
   5191 
   5192 /**
   5193  * Logs the pick result information.
   5194  *
   5195  * Logged from:
   5196  *     package/app/DocumentsUI/src/com/android/documentsui/Metrics.java
   5197  */
   5198 message DocsUIPickResultReported {
   5199     optional int32 total_action_count = 1;
   5200     optional int64 duration_millis = 2;
   5201     optional int32 file_count= 3;
   5202     optional bool is_searching = 4;
   5203     optional android.stats.docsui.Root picked_from = 5;
   5204     optional android.stats.docsui.MimeType mime_type = 6;
   5205     optional int32 repeatedly_pick_times = 7;
   5206 }
   5207 
   5208 /**
   5209  * Logs when an app's memory is compacted.
   5210  *
   5211  * Logged from:
   5212  *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   5213  */
   5214 message AppCompacted {
   5215   // The pid of the process being compacted.
   5216   optional int32 pid = 1;
   5217 
   5218   // The name of the process being compacted.
   5219   optional string process_name = 2;
   5220 
   5221   // The type of compaction.
   5222   enum Action {
   5223     UNKNOWN = 0;
   5224     SOME = 1;
   5225     FULL = 2;
   5226     PERSISTENT = 3;
   5227     BFGS = 4;
   5228   }
   5229   optional Action action = 3;
   5230 
   5231   // Total RSS in kilobytes consumed by the process prior to compaction.
   5232   optional int64 before_rss_total_kilobytes = 4;
   5233 
   5234   // File RSS in kilobytes consumed by the process prior to compaction.
   5235   optional int64 before_rss_file_kilobytes = 5;
   5236 
   5237   // Anonymous RSS in kilobytes consumed by the process prior to compaction.
   5238   optional int64 before_rss_anon_kilobytes = 6;
   5239 
   5240   // Swap in kilobytes consumed by the process prior to compaction.
   5241   optional int64 before_swap_kilobytes = 7;
   5242 
   5243   // Total RSS in kilobytes consumed by the process after compaction.
   5244   optional int64 after_rss_total_kilobytes = 8;
   5245 
   5246   // File RSS in kilobytes consumed by the process after compaction.
   5247   optional int64 after_rss_file_kilobytes = 9;
   5248 
   5249   // Anonymous RSS in kilobytes consumed by the process after compaction.
   5250   optional int64 after_rss_anon_kilobytes = 10;
   5251 
   5252   // Swap in kilobytes consumed by the process after compaction.
   5253   optional int64 after_swap_kilobytes = 11;
   5254 
   5255   // The time taken to perform compaction in milliseconds.
   5256   optional int64 time_to_compact_millis = 12;
   5257 
   5258   // The last compaction action performed for this app.
   5259   optional Action last_action = 13;
   5260 
   5261   // The last time that compaction was attempted on this process in milliseconds
   5262   // since boot, not including sleep (see SystemClock.uptimeMillis()).
   5263   optional int64 last_compact_timestamp_ms_since_boot = 14;
   5264 
   5265   // The "setAdj" (i.e. previous) oom_score_adj at the time of compaction.
   5266   optional int32 oom_score_adj = 15;
   5267 
   5268   // The process state at the time of compaction.
   5269   optional android.app.ProcessStateEnum process_state = 16 [default = PROCESS_STATE_UNKNOWN];
   5270 
   5271   // Free ZRAM in kilobytes before compaction.
   5272   optional int64 before_zram_free_kilobytes = 17;
   5273 
   5274   // Free ZRAM in kilobytes after compaction.
   5275   optional int64 after_zram_free_kilobytes = 18;
   5276 }
   5277 
   5278 /**
   5279  * Logs a DNS lookup operation initiated by the system resolver on behalf of an application
   5280  * invoking native APIs such as getaddrinfo() or Java APIs such as Network#getAllByName().
   5281  *
   5282  * The NetworkDnsEventReported message represents the entire lookup operation, which may
   5283  * result one or more queries to the recursive DNS resolvers. Those are individually logged
   5284  * in DnsQueryEvents to enable computing error rates and network latency and timeouts
   5285  * broken up by query type, transport, network interface, etc.
   5286  */
   5287 message NetworkDnsEventReported {
   5288     optional android.stats.dnsresolver.EventType event_type = 1;
   5289 
   5290     optional android.stats.dnsresolver.ReturnCode return_code = 2;
   5291 
   5292     // The latency in microseconds of the entire DNS lookup operation.
   5293     optional int32 latency_micros = 3;
   5294 
   5295     // Only valid for event_type = EVENT_GETADDRINFO.
   5296     optional int32 hints_ai_flags = 4;
   5297 
   5298     // Flags passed to android_res_nsend() defined in multinetwork.h
   5299     // Only valid for event_type = EVENT_RESNSEND.
   5300     optional int32 res_nsend_flags = 5;
   5301 
   5302     optional android.stats.dnsresolver.Transport network_type = 6;
   5303 
   5304     // The DNS over TLS mode on a specific netId.
   5305     optional android.stats.dnsresolver.PrivateDnsModes private_dns_modes = 7;
   5306 
   5307     // Additional pass-through fields opaque to statsd.
   5308     // The DNS resolver Mainline module can add new fields here without requiring an OS update.
   5309     optional android.stats.dnsresolver.DnsQueryEvents dns_query_events = 8 [(log_mode) = MODE_BYTES];
   5310 }
   5311 
   5312 /**
   5313  * Logs when a data stall event occurs.
   5314  *
   5315  * Log from:
   5316  *     frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
   5317  */
   5318 message DataStallEvent {
   5319     // Data stall evaluation type.
   5320     // See frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
   5321     // Refer to the definition of DATA_STALL_EVALUATION_TYPE_*.
   5322     optional int32 evaluation_type = 1;
   5323     // See definition in data_stall_event.proto.
   5324     optional com.android.server.connectivity.ProbeResult validation_result = 2;
   5325     // See definition in data_stall_event.proto.
   5326     optional android.net.NetworkCapabilitiesProto.Transport network_type = 3;
   5327     // See definition in data_stall_event.proto.
   5328     optional com.android.server.connectivity.WifiData wifi_info = 4 [(log_mode) = MODE_BYTES];
   5329     // See definition in data_stall_event.proto.
   5330     optional com.android.server.connectivity.CellularData cell_info = 5 [(log_mode) = MODE_BYTES];
   5331     // See definition in data_stall_event.proto.
   5332     optional com.android.server.connectivity.DnsEvent dns_event = 6 [(log_mode) = MODE_BYTES];
   5333 }
   5334 
   5335 /*
   5336  * Logs when RescueParty resets some set of experiment flags.
   5337  *
   5338  * Logged from:
   5339  *     frameworks/base/services/core/java/com/android/server/RescueParty.java
   5340  */
   5341 message RescuePartyResetReported {
   5342     // The rescue level of this reset. A value of 0 indicates missing or unknown level information.
   5343     optional int32 rescue_level = 1;
   5344 }
   5345 
   5346 /**
   5347  * Logs when signed config is received from an APK, and if that config was applied successfully.
   5348  * Logged from:
   5349  *   frameworks/base/services/core/java/com/android/server/signedconfig/SignedConfigService.java
   5350  */
   5351 message SignedConfigReported {
   5352     enum Type {
   5353         UNKNOWN_TYPE = 0;
   5354         GLOBAL_SETTINGS = 1;
   5355     }
   5356     optional Type type = 1;
   5357 
   5358     // The final status of the signed config received.
   5359     enum Status {
   5360         UNKNOWN_STATUS = 0;
   5361         APPLIED = 1;
   5362         BASE64_FAILURE_CONFIG = 2;
   5363         BASE64_FAILURE_SIGNATURE = 3;
   5364         SECURITY_EXCEPTION = 4;
   5365         INVALID_CONFIG = 5;
   5366         OLD_CONFIG = 6;
   5367         SIGNATURE_CHECK_FAILED = 7;
   5368         NOT_APPLICABLE = 8;
   5369         SIGNATURE_CHECK_FAILED_PROD_KEY_ABSENT = 9;
   5370     }
   5371     optional Status status = 2;
   5372 
   5373     // The version of the signed config processed.
   5374     optional int32 version = 3;
   5375 
   5376     // The package name that the config was extracted from.
   5377     optional string from_package = 4;
   5378 
   5379     enum Key {
   5380         NO_KEY = 0;
   5381         DEBUG = 1;
   5382         PRODUCTION = 2;
   5383     }
   5384     // Which key was used to verify the config.
   5385     optional Key verified_with = 5;
   5386 }
   5387 
   5388 /*
   5389  * Logs GNSS Network-Initiated (NI) location events.
   5390  *
   5391  * Logged from:
   5392  *   frameworks/base/services/core/java/com/android/server/location/GnssLocationProvider.java
   5393  */
   5394 message GnssNiEventReported {
   5395     // The type of GnssNiEvent.
   5396     enum EventType {
   5397         UNKNOWN = 0;
   5398         NI_REQUEST = 1;
   5399         NI_RESPONSE = 2;
   5400     }
   5401     optional EventType event_type = 1;
   5402 
   5403     // An ID generated by HAL to associate NI notifications and UI responses.
   5404     optional int32 notification_id = 2;
   5405 
   5406     // A type which distinguishes different categories of NI request, such as VOICE, UMTS_SUPL etc.
   5407     optional android.server.location.GnssNiType ni_type = 3;
   5408 
   5409     // NI requires notification.
   5410     optional bool need_notify = 4;
   5411 
   5412     // NI requires verification.
   5413     optional bool need_verify = 5;
   5414 
   5415     // NI requires privacy override, no notification/minimal trace.
   5416     optional bool privacy_override = 6;
   5417 
   5418     // Timeout period to wait for user response. Set to 0 for no timeout limit. Specified in
   5419     // seconds.
   5420     optional int32 timeout = 7;
   5421 
   5422     // Default response when timeout.
   5423     optional android.server.location.GnssUserResponseType default_response = 8;
   5424 
   5425     // String representing the requester of the network inititated location request.
   5426     optional string requestor_id = 9;
   5427 
   5428     // Notification message text string representing the service(for eg. SUPL-service) who sent the
   5429     // network initiated location request.
   5430     optional string text = 10;
   5431 
   5432     // requestorId decoding scheme.
   5433     optional android.server.location.GnssNiEncodingType requestor_id_encoding = 11;
   5434 
   5435     // Notification message text decoding scheme.
   5436     optional android.server.location.GnssNiEncodingType text_encoding = 12;
   5437 
   5438     // True if SUPL ES is enabled.
   5439     optional bool is_supl_es_enabled = 13;
   5440 
   5441     // True if GNSS location is enabled.
   5442     optional bool is_location_enabled = 14;
   5443 
   5444     // GNSS NI responses which define the response in NI structures.
   5445     optional android.server.location.GnssUserResponseType user_response = 15;
   5446 }
   5447 
   5448 /**
   5449  * Logs GNSS non-framework (NFW) location notification.
   5450  *
   5451  * Logged from:
   5452  *   frameworks/base/services/core/java/com/android/server/location/GnssLocationProvider.java
   5453  */
   5454 message GnssNfwNotificationReported {
   5455     // Package name of the Android proxy application representing the non-framework entity that
   5456     // requested location. Set to empty string if unknown.
   5457     optional string proxy_app_package_name = 1;
   5458 
   5459     // Protocol stack that initiated the non-framework location request.
   5460     optional android.server.location.NfwProtocolStack protocol_stack = 2;
   5461 
   5462     // Name of the protocol stack if protocol_stack field is set to OTHER_PROTOCOL_STACK. Otherwise,
   5463     // set to empty string. This field is opaque to the framework and used for logging purposes.
   5464     optional string other_protocol_stack_name = 3;
   5465 
   5466     // Source initiating/receiving the location information.
   5467     optional android.server.location.NfwRequestor requestor = 4;
   5468 
   5469     // Identity of the endpoint receiving the location information. For example, carrier name, OEM
   5470     // name, SUPL SLP/E-SLP FQDN, chipset vendor name, etc. This field is opaque to the framework
   5471     // and used for logging purposes.
   5472     optional string requestor_id = 5;
   5473 
   5474     // Indicates whether location information was provided for this request.
   5475     optional android.server.location.NfwResponseType response_type = 6;
   5476 
   5477     // True if the device is in user initiated emergency session.
   5478     optional bool in_emergency_mode = 7;
   5479 
   5480     // True if cached location is provided.
   5481     optional bool is_cached_location = 8;
   5482 
   5483     // True if proxy app permission mismatch between framework and GNSS HAL.
   5484     optional bool is_permission_mismatched = 9;
   5485 }
   5486 
   5487 /**
   5488  * Logs GNSS configuration as defined in IGnssConfiguration.hal.
   5489  *
   5490  * Logged from:
   5491  *   frameworks/base/services/core/java/com/android/server/location/GnssConfiguration.java
   5492  */
   5493 message GnssConfigurationReported {
   5494     // SUPL host name.
   5495     optional string supl_host = 1;
   5496 
   5497     // SUPL port number.
   5498     optional int32 supl_port = 2;
   5499 
   5500     // C2K host name.
   5501     optional string c2k_host = 3;
   5502 
   5503     // C2K port number.
   5504     optional int32 c2k_port = 4;
   5505 
   5506     // The SUPL version requested by Carrier.
   5507     optional int32 supl_ver = 5;
   5508 
   5509     // The SUPL mode.
   5510     optional android.server.location.SuplMode supl_mode = 6;
   5511 
   5512     // True if NI emergency SUPL restrictions is enabled.
   5513     optional bool supl_es = 7;
   5514 
   5515     // LTE Positioning Profile settings
   5516     optional android.server.location.LppProfile lpp_profile = 8;
   5517 
   5518     // Positioning protocol on A-Glonass system.
   5519     optional android.server.location.GlonassPosProtocol a_glonass_pos_protocol_select = 9;
   5520 
   5521     // True if emergency PDN is used. Otherwise, regular PDN is used.
   5522     optional bool use_emergency_pdn_for_emergency_supl= 10;
   5523 
   5524     // Configurations of how GPS functionalities should be locked when user turns off GPS On setting.
   5525     optional android.server.location.GpsLock gps_lock = 11;
   5526 
   5527     // Number of seconds to extend the emergency session duration post emergency call.
   5528     optional int32 es_extension_sec = 12;
   5529 
   5530     // The full list of package names of proxy Android applications representing the non-framework
   5531     // location access entities (on/off the device) for which the framework user has granted
   5532     // non-framework location access permission. The package names are concatenated in one string
   5533     // with spaces as separators.
   5534     optional string enabled_proxy_app_package_name_list = 13;
   5535 }
   5536 
   5537 /**
   5538  * Logs when a NFC device's error occurred.
   5539  * Logged from:
   5540  *     system/nfc/src/nfc/nfc/nfc_ncif.cc
   5541  *     packages/apps/Nfc/src/com/android/nfc/cardemulation/AidRoutingManager.java
   5542  */
   5543 message NfcErrorOccurred {
   5544     enum Type {
   5545         UNKNOWN = 0;
   5546         CMD_TIMEOUT = 1;
   5547         ERROR_NOTIFICATION = 2;
   5548         AID_OVERFLOW = 3;
   5549     }
   5550     optional Type type = 1;
   5551     // If it's nci cmd timeout, log the timeout command.
   5552     optional uint32 nci_cmd = 2;
   5553 
   5554     optional uint32 error_ntf_status_code = 3;
   5555 }
   5556 
   5557 /**
   5558  * Logs when a NFC device's state changed event
   5559  * Logged from:
   5560  *     packages/apps/Nfc/src/com/android/nfc/NfcService.java
   5561  */
   5562 message NfcStateChanged {
   5563     enum State {
   5564         UNKNOWN = 0;
   5565         OFF = 1;
   5566         ON = 2;
   5567         ON_LOCKED = 3; // Secure Nfc enabled.
   5568         CRASH_RESTART = 4; // NfcService watchdog timeout restart.
   5569     }
   5570     optional State state = 1;
   5571 }
   5572 
   5573 /**
   5574  * Logs when a NFC Beam Transaction occurred.
   5575  * Logged from:
   5576  *     packages/apps/Nfc/src/com/android/nfc/P2pLinkManager.java
   5577  */
   5578 message NfcBeamOccurred {
   5579     enum Operation {
   5580         UNKNOWN = 0;
   5581         SEND = 1;
   5582         RECEIVE = 2;
   5583     }
   5584     optional Operation operation = 1;
   5585 }
   5586 
   5587 /**
   5588  * Logs when a NFC Card Emulation Transaction occurred.
   5589  * Logged from:
   5590  *     packages/apps/Nfc/src/com/android/nfc/cardemulation/HostEmulationManager.java
   5591  *     packages/apps/Nfc/src/com/android/nfc/cardemulation/HostNfcFEmulationManager.java
   5592  */
   5593 message NfcCardemulationOccurred {
   5594     enum Category {
   5595         UNKNOWN = 0;
   5596         HCE_PAYMENT = 1;
   5597         HCE_OTHER = 2;
   5598         OFFHOST = 3;
   5599     }
   5600     // Transaction belongs to HCE payment or HCE other category, or offhost.
   5601     optional Category category = 1;
   5602     // SeName from transaction: SIMx, eSEx, HCE, HCEF.
   5603     optional string se_name = 2;
   5604 }
   5605 
   5606 /**
   5607  * Logs when a NFC Tag event occurred.
   5608  * Logged from:
   5609  *     packages/apps/Nfc/src/com/android/nfc/NfcDispatcher.java
   5610  */
   5611 message NfcTagOccurred {
   5612     enum Type {
   5613         UNKNOWN = 0;
   5614         URL = 1;
   5615         BT_PAIRING = 2;
   5616         PROVISION = 3;
   5617         WIFI_CONNECT = 4;
   5618         APP_LAUNCH = 5;
   5619         OTHERS = 6;
   5620     }
   5621     optional Type type = 1;
   5622 }
   5623 
   5624 /**
   5625  * Logs when Hce transaction triggered
   5626  * Logged from:
   5627  *     system/nfc/src/nfc/nfc/nfc_ncif.cc
   5628  */
   5629 message NfcHceTransactionOccurred {
   5630     // The latency period(in microseconds) it took for the first HCE data
   5631     // exchange.
   5632     optional uint32 latency_micros = 1;
   5633 }
   5634 
   5635 /**
   5636  * Logs when SecureElement state event changed
   5637  * Logged from:
   5638  *     packages/apps/SecureElement/src/com/android/se/Terminal.java
   5639  */
   5640 message SeStateChanged {
   5641     enum State {
   5642         UNKNOWN = 0;
   5643         INITIALIZED = 1;
   5644         DISCONNECTED = 2;
   5645         CONNECTED = 3;
   5646         HALCRASH = 4;
   5647     }
   5648     optional State state = 1;
   5649 
   5650     optional string state_change_reason = 2;
   5651     // SIMx or eSEx.
   5652     optional string terminal = 3;
   5653 }
   5654 
   5655 /**
   5656  * Information about a permission grant request
   5657  */
   5658 message PermissionGrantRequestResultReported {
   5659     // unique value identifying an API call. A API call might result in multiple of these atoms
   5660     optional int64 request_id = 1;
   5661 
   5662     // UID of package requesting the permission grant
   5663     optional int32 requesting_uid = 2 [(is_uid) = true];
   5664 
   5665     // Name of package requesting the permission grant
   5666     optional string requesting_package_name = 3;
   5667 
   5668     // The permission to be granted
   5669     optional string permission_name = 4;
   5670 
   5671     // If the permission was explicitly requested via the API or added by the system
   5672     optional bool is_implicit = 5;
   5673 
   5674     enum Result {
   5675         UNDEFINED = 0;
   5676         // permission request was ignored
   5677         IGNORED = 1;
   5678         // permission request was ignored because it was user fixed
   5679         IGNORED_USER_FIXED = 2;
   5680         // permission request was ignored because it was policy fixed
   5681         IGNORED_POLICY_FIXED = 3;
   5682         // permission was granted by user action
   5683         USER_GRANTED = 4;
   5684         // permission was automatically granted
   5685         AUTO_GRANTED = 5;
   5686         // permission was denied by user action
   5687         USER_DENIED = 6;
   5688         // permission was denied with prejudice by the user
   5689         USER_DENIED_WITH_PREJUDICE = 7;
   5690         // permission was automatically denied
   5691         AUTO_DENIED = 8;
   5692         // permission request was ignored because permission is restricted
   5693         IGNORED_RESTRICTED_PERMISSION = 9;
   5694     }
   5695     // The result of the permission grant
   5696     optional Result result = 6;
   5697 }
   5698 
   5699 /**
   5700  * Logs when Omapi API used
   5701  * Logged from:
   5702  *     packages/apps/SecureElement/src/com/android/se/Terminal.java
   5703  */
   5704 message SeOmapiReported {
   5705     enum Operation {
   5706         UNKNOWN = 0;
   5707         OPEN_CHANNEL = 1;
   5708     }
   5709     optional Operation operation = 1;
   5710     // SIMx or eSEx.
   5711     optional string terminal = 2;
   5712 
   5713     optional string package_name = 3;
   5714 }
   5715 
   5716 /**
   5717   * Logs the dispatch latency of a broadcast during processing of BOOT_COMPLETED.
   5718   * The dispatch latency is the dispatchClockTime - enqueueClockTime.
   5719   * Logged from:
   5720   *   frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java
   5721   */
   5722 message BroadcastDispatchLatencyReported {
   5723     optional int64 dispatch_latency_millis = 1;
   5724 }
   5725 
   5726 /**
   5727    * Logs AttentionManagerService attention check result.
   5728    *
   5729    * Logged from:
   5730    *   frameworks/base/services/core/java/com/android/server/attention/AttentionManagerService.java
   5731    */
   5732 message AttentionManagerServiceResultReported {
   5733     // See core/java/android/service/attention/AttentionService.java
   5734     enum AttentionCheckResult {
   5735         UNKNOWN = 20;
   5736         ATTENTION_SUCCESS_ABSENT = 0;
   5737         ATTENTION_SUCCESS_PRESENT = 1;
   5738         ATTENTION_FAILURE_UNKNOWN = 2;
   5739         ATTENTION_FAILURE_CANCELLED = 3;
   5740         ATTENTION_FAILURE_PREEMPTED = 4;
   5741         ATTENTION_FAILURE_TIMED_OUT = 5;
   5742         ATTENTION_FAILURE_CAMERA_PERMISSION_ABSENT = 6;
   5743     }
   5744     optional AttentionCheckResult attention_check_result = 1 [default = UNKNOWN];
   5745 }
   5746 
   5747 /**
   5748  * Logs when an adb connection changes state.
   5749  *
   5750  * Logged from:
   5751  *     frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java
   5752  */
   5753 message AdbConnectionChanged {
   5754     // The last time this system connected via adb, or 0 if the 'always allow' option was not
   5755     // previously selected for this system.
   5756     optional int64 last_connection_time_millis = 1;
   5757 
   5758     // The time in ms within which a subsequent connection from an 'always allow' system is allowed
   5759     // to reconnect via adb without user interaction.
   5760     optional int64 auth_window_millis = 2;
   5761 
   5762     // The state of the adb connection from frameworks/base/core/proto/android/debug/enums.proto.
   5763     optional android.debug.AdbConnectionStateEnum state = 3;
   5764 
   5765     // True if the 'always allow' option was selected for this system.
   5766     optional bool always_allow = 4;
   5767 }
   5768 
   5769 /*
   5770  * Logs the reported speech DSP status.
   5771  *
   5772  * Logged from:
   5773  *  Vendor audio implementation.
   5774  */
   5775 message SpeechDspStatReported {
   5776     // The total Speech DSP uptime in milliseconds.
   5777     optional int32 total_uptime_millis = 1;
   5778     // The total Speech DSP downtime in milliseconds.
   5779     optional int32 total_downtime_millis = 2;
   5780     optional int32 total_crash_count = 3;
   5781     optional int32 total_recover_count = 4;
   5782 }
   5783 
   5784 /**
   5785  * Logs USB connector contaminant status.
   5786  *
   5787  * Logged from: USB Service.
   5788  */
   5789 message UsbContaminantReported {
   5790     optional string id = 1;
   5791     optional android.service.usb.ContaminantPresenceStatus status = 2;
   5792 }
   5793 
   5794 /**
   5795  * This atom is for debugging purpose.
   5796  */
   5797 message DebugElapsedClock {
   5798     // Monotically increasing value for each pull.
   5799     optional int64 pull_count = 1;
   5800     // Time from System.elapsedRealtime.
   5801     optional int64 elapsed_clock_millis = 2;
   5802     // Time from System.elapsedRealtime.
   5803     optional int64 same_elapsed_clock_millis = 3;
   5804     // Diff between current elapsed time and elapsed time from previous pull.
   5805     optional int64 elapsed_clock_diff_millis = 4;
   5806 
   5807     enum Type {
   5808       TYPE_UNKNOWN = 0;
   5809       ALWAYS_PRESENT = 1;
   5810       PRESENT_ON_ODD_PULLS = 2;
   5811     }
   5812     // Type of behavior for the pulled data.
   5813     optional Type type = 5;
   5814 }
   5815 
   5816 /**
   5817  * This atom is for debugging purpose.
   5818  */
   5819 message DebugFailingElapsedClock {
   5820     // Monotically increasing value for each pull.
   5821     optional int64 pull_count = 1;
   5822     // Time from System.elapsedRealtime.
   5823     optional int64 elapsed_clock_millis = 2;
   5824     // Time from System.elapsedRealtime.
   5825     optional int64 same_elapsed_clock_millis = 3;
   5826     // Diff between current elapsed time and elapsed time from previous pull.
   5827     optional int64 elapsed_clock_diff_millis = 4;
   5828 }
   5829 
   5830 /** Logs System UI bubbles event changed.
   5831  *
   5832  * Logged from:
   5833  *     frameworks/base/packages/SystemUI/src/com/android/systemui/bubbles
   5834  */
   5835 message BubbleUIChanged {
   5836 
   5837     // The app package that is posting the bubble.
   5838     optional string package_name = 1;
   5839 
   5840     // The notification channel that is posting the bubble.
   5841     optional string notification_channel = 2;
   5842 
   5843     // The notification id associated with the posted bubble.
   5844     optional int32 notification_id = 3;
   5845 
   5846     // The position of the bubble within the bubble stack.
   5847     optional int32 position = 4;
   5848 
   5849     // The total number of bubbles within the bubble stack.
   5850     optional int32 total_number = 5;
   5851 
   5852     // User interactions with the bubble.
   5853     enum Action {
   5854         UNKNOWN = 0;
   5855         POSTED = 1;
   5856         UPDATED = 2;
   5857         EXPANDED = 3;
   5858         COLLAPSED = 4;
   5859         DISMISSED = 5;
   5860         STACK_DISMISSED = 6;
   5861         STACK_MOVED = 7;
   5862         HEADER_GO_TO_APP = 8;
   5863         HEADER_GO_TO_SETTINGS = 9;
   5864         PERMISSION_OPT_IN = 10;
   5865         PERMISSION_OPT_OUT = 11;
   5866         PERMISSION_DIALOG_SHOWN = 12;
   5867         SWIPE_LEFT = 13;
   5868         SWIPE_RIGHT = 14;
   5869         STACK_EXPANDED = 15;
   5870         FLYOUT = 16;
   5871     }
   5872     optional Action action = 6;
   5873 
   5874     // Normalized screen position of the bubble stack. The range is between 0 and 1.
   5875     optional float normalized_x_position = 7;
   5876     optional float normalized_y_position = 8;
   5877 
   5878     // Whether the bubble is unread. If it is unread, a dot is shown in the bubble stack icon.
   5879     optional bool is_unread = 9;
   5880 
   5881     // Whether the bubble is an on-going one.
   5882     optional bool is_ongoing = 10;
   5883 
   5884     // Whether the bubble is produced by an app running in foreground.
   5885     optional bool is_foreground = 11;
   5886 }
   5887 
   5888 /**
   5889   * Logs System UI bubbles developer errors.
   5890   *
   5891   * Logged from:
   5892   *   frameworks/base/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
   5893   */
   5894 message BubbleDeveloperErrorReported {
   5895 
   5896     // The app package that is posting the bubble.
   5897     optional string package_name = 1;
   5898 
   5899     // Bubble developer error type enums.
   5900     enum Error {
   5901         UNKNOWN = 0;
   5902         ACTIVITY_INFO_MISSING = 1;
   5903         ACTIVITY_INFO_NOT_RESIZABLE = 2;
   5904         DOCUMENT_LAUNCH_NOT_ALWAYS = 3;
   5905     }
   5906     optional Error error = 2 [default = UNKNOWN];
   5907 }
   5908 
   5909 /**
   5910  * Logs that a constraint for a scheduled job has changed.
   5911  *
   5912  * Logged from:
   5913  *     frameworks/base/services/core/java/com/android/server/job/controllers/JobStatus.java
   5914  */
   5915 message ScheduledJobConstraintChanged {
   5916     repeated AttributionNode attribution_node = 1;
   5917 
   5918     // Name of the job.
   5919     optional string job_name = 2;
   5920 
   5921     optional com.android.server.job.ConstraintEnum constraint = 3;
   5922 
   5923     enum State {
   5924         UNKNOWN = 0;
   5925         UNSATISFIED = 1;
   5926         SATISFIED = 2;
   5927     }
   5928     optional State state = 4;
   5929 }
   5930 
   5931 /**
   5932  * Logs PowerManagerService screen timeout resets (extensions) that happen when an attention check
   5933  * returns true.
   5934  *
   5935  * Logged from:
   5936  *   frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
   5937  */
   5938 message ScreenTimeoutExtensionReported {
   5939     // Describes how many times in a row did the power manager reset the screen off timeout.
   5940     optional uint32 consecutive_timeout_extended_count = 1;
   5941 }
   5942 
   5943 /*
   5944 * Logs number of milliseconds it takes to start a process.
   5945 * The definition of app process start time is from the app launch time to
   5946 * the time that Zygote finished forking the app process and loaded the
   5947 * application package's java classes.
   5948 
   5949 * This metric is different from AppStartOccurred which is for foreground
   5950 * activity only.
   5951 
   5952 * ProcessStartTime can report all processes (both foreground and background)
   5953 * start time.
   5954 *
   5955 * Logged from:
   5956 *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
   5957 */
   5958 message ProcessStartTime {
   5959     // The uid of the ProcessRecord.
   5960     optional int32 uid = 1 [(is_uid) = true];
   5961 
   5962     // The process pid.
   5963     optional int32 pid = 2;
   5964 
   5965     // The process name.
   5966     // Usually package name, "system" for system server.
   5967     // Provided by ActivityManagerService.
   5968     optional string process_name = 3;
   5969 
   5970     enum StartType {
   5971         UNKNOWN = 0;
   5972         WARM = 1;
   5973         HOT = 2;
   5974         COLD = 3;
   5975     }
   5976 
   5977     // The start type.
   5978     optional StartType type = 4;
   5979 
   5980     // The elapsed realtime at the start of the process.
   5981     optional int64 process_start_time_millis = 5;
   5982 
   5983     // Number of milliseconds it takes to reach bind application.
   5984     optional int32 bind_application_delay_millis = 6;
   5985 
   5986     // Number of milliseconds it takes to finish start of the process.
   5987     optional int32 process_start_delay_millis = 7;
   5988 
   5989     // hostingType field in ProcessRecord, the component type such as "activity",
   5990     // "service", "content provider", "broadcast" or other strings.
   5991     optional string hosting_type = 8;
   5992 
   5993     // hostingNameStr field in ProcessRecord. The component class name that runs
   5994     // in this process.
   5995     optional string hosting_name = 9;
   5996 }
   5997 
   5998 /**
   5999  * Track Media Codec usage
   6000  * Logged from:
   6001  *   frameworks/av/media/libstagefright/MediaCodec.cpp
   6002  *   frameworks/av/services/mediaanalytics/statsd_codec.cpp
   6003  */
   6004 message MediametricsCodecReported {
   6005     optional int64 timestamp_nanos = 1;
   6006     optional string package_name = 2;
   6007     optional int64 package_version_code = 3;
   6008     optional int64 media_apex_version = 4;
   6009 
   6010     optional android.stats.mediametrics.CodecData codec_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6011 }
   6012 
   6013 /**
   6014  * Track Media Extractor (pulling video/audio streams out of containers) usage
   6015  * Logged from:
   6016  *   frameworks/av/media/libstagefright/RemoteMediaExtractor.cpp
   6017  *   frameworks/av/services/mediaanalytics/statsd_extractor.cpp
   6018  */
   6019 message MediametricsExtractorReported {
   6020     optional int64 timestamp_nanos = 1;
   6021     optional string package_name = 2;
   6022     optional int64 package_version_code = 3;
   6023     optional int64 media_apex_version = 4;
   6024 
   6025     optional android.stats.mediametrics.ExtractorData extractor_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6026 }
   6027 
   6028 /**
   6029  * Track how we arbitrate between microphone/input requests.
   6030  * Logged from
   6031  *   frameworks/av/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
   6032  *   frameworks/av/services/mediaanalytics/statsd_audiopolicy.cpp
   6033  */
   6034 message MediametricsAudiopolicyReported {
   6035     optional int64 timestamp_nanos = 1;
   6036     optional string package_name = 2;
   6037     optional int64 package_version_code = 3;
   6038     optional int64 media_apex_version = 4;
   6039 
   6040     optional android.stats.mediametrics.AudioPolicyData audiopolicy_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6041 }
   6042 
   6043 /**
   6044  * Track how we arbitrate between microphone requests.
   6045  * Logged from
   6046  *   frameworks/av/media/libaudioclient/AudioRecord.cpp
   6047  *   frameworks/av/services/mediaanalytics/statsd_audiorecord.cpp
   6048  */
   6049 message MediametricsAudiorecordReported {
   6050     optional int64 timestamp_nanos = 1;
   6051     optional string package_name = 2;
   6052     optional int64 package_version_code = 3;
   6053     optional int64 media_apex_version = 4;
   6054 
   6055     optional android.stats.mediametrics.AudioRecordData audiorecord_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6056 }
   6057 
   6058 /**
   6059  * Track how we arbitrate between microphone/input requests.
   6060  * Logged from
   6061  *   frameworks/av/media/libnblog/ReportPerformance.cpp
   6062  *   frameworks/av/services/mediaanalytics/statsd_audiothread.cpp
   6063  */
   6064 message MediametricsAudiothreadReported {
   6065     optional int64 timestamp_nanos = 1;
   6066     optional string package_name = 2;
   6067     optional int64 package_version_code = 3;
   6068     optional int64 media_apex_version = 4;
   6069 
   6070     optional android.stats.mediametrics.AudioThreadData audiothread_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6071 }
   6072 
   6073 /**
   6074  * Track how we arbitrate between microphone/input requests.
   6075  * Logged from
   6076  *   frameworks/av/media/libaudioclient/AudioTrack.cpp
   6077  *   frameworks/av/services/mediaanalytics/statsd_audiotrack.cpp
   6078  */
   6079 message MediametricsAudiotrackReported {
   6080     optional int64 timestamp_nanos = 1;
   6081     optional string package_name = 2;
   6082     optional int64 package_version_code = 3;
   6083     optional int64 media_apex_version = 4;
   6084 
   6085     optional android.stats.mediametrics.AudioTrackData audiotrack_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6086 }
   6087 
   6088 /**
   6089  * Track information about DRM framework performance
   6090  * Logged from
   6091  *   frameworks/av/drm/libmediadrm/DrmHal.cpp
   6092  *   frameworks/av/services/mediaanalytics/statsd_drm.cpp
   6093  */
   6094 message MediametricsMediadrmReported {
   6095     optional int64 timestamp_nanos = 1;
   6096     optional string package_name = 2;
   6097     optional int64 package_version_code = 3;
   6098     optional int64 media_apex_version = 4;
   6099 
   6100     // vendor+description tell about which DRM plugin is in use on this device
   6101     optional string vendor = 5;
   6102     optional string description = 6;
   6103     // from frameworks/av/drm/libmediadrm/protos/metrics.proto
   6104     optional bytes framework_stats = 7 [(android.os.statsd.log_mode) = MODE_BYTES];
   6105 }
   6106 
   6107 /**
   6108  * Track information about the widevine DRM plugin performance
   6109  * Logged from
   6110  *   vendor/widevine/libwvdrmengine/cdm/metrics
   6111  *   frameworks/av/services/mediaanalytics/statsd_drm.cpp
   6112  */
   6113 message MediametricsDrmWidevineReported {
   6114     optional int64 timestamp_nanos = 1;
   6115     optional string package_name = 2;
   6116     optional int64 package_version_code = 3;
   6117     optional int64 media_apex_version = 4;
   6118 
   6119     optional bytes vendor_specific_stats = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6120 }
   6121 
   6122 /**
   6123  * Track information about recordings (e.g. camcorder)
   6124  * Logged from
   6125  *   frameworks/av/media/libmediaplayerservice/StagefrightRecorder.cpp
   6126  *   frameworks/av/services/mediaanalytics/statsd_recorder.cpp
   6127  */
   6128 message MediametricsRecorderReported {
   6129     optional int64 timestamp_nanos = 1;
   6130     optional string package_name = 2;
   6131     optional int64 package_version_code = 3;
   6132     optional int64 media_apex_version = 4;
   6133 
   6134     optional android.stats.mediametrics.RecorderData recorder_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6135 }
   6136 
   6137 /**
   6138  * Track Media Player usage
   6139  * Logged from:
   6140  *   frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
   6141  *   frameworks/av/services/mediaanalytics/statsd_nuplayer.cpp
   6142  */
   6143 message MediametricsNuPlayerReported {
   6144     optional int64 timestamp_nanos = 1;
   6145     optional string package_name = 2;
   6146     optional int64 package_version_code = 3;
   6147     optional int64 media_apex_version = 4;
   6148 
   6149     optional android.stats.mediametrics.NuPlayerData nuplayer_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES];
   6150 }
   6151 
   6152 /**
   6153  * State of a dangerous permission requested by a package
   6154  */
   6155 message DangerousPermissionState {
   6156     // Name of the permission
   6157     optional string permission_name = 1;
   6158 
   6159     // Uid of the package
   6160     optional int32 uid = 2 [(is_uid) = true];
   6161 
   6162     // Package requesting the permission
   6163     optional string package_name = 3;
   6164 
   6165     // If the permission is granted to the uid
   6166     optional bool is_granted = 4;
   6167 
   6168     // Permission flags as per android.content.pm.PermissionFlags
   6169     optional int32 permission_flags = 5;
   6170 }
   6171 
   6172 /**
   6173  * Logs when a package is denied access to a device identifier based on the new access requirements.
   6174  *
   6175  * Logged from:
   6176  *     frameworks/base/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
   6177  */
   6178 message DeviceIdentifierAccessDenied {
   6179     // The name of the package denied access to the requested device identifier.
   6180     optional string package_name = 1;
   6181 
   6182     // The name of the device identifier method the package attempted to invoke.
   6183     optional string method_name = 2;
   6184 
   6185     // True if the package is preinstalled.
   6186     optional bool is_preinstalled = 3;
   6187 
   6188     // True if the package is privileged.
   6189     optional bool is_priv_app = 4;
   6190 }
   6191 
   6192 /**
   6193  * Pulls the ongoing mainline install train version code.
   6194  * Pulled from StatsCompanionService
   6195  */
   6196 message TrainInfo {
   6197     optional int64 train_version_code = 1;
   6198 
   6199     optional TrainExperimentIds train_experiment_id = 2;
   6200 
   6201     optional string train_name = 3;
   6202 
   6203     enum Status {
   6204         UNKNOWN = 0;
   6205         INSTALL_REQUESTED = 1;
   6206         INSTALL_STARTED = 2;
   6207         INSTALL_STAGED_NOT_READY = 3;
   6208         INSTALL_STAGED_READY = 4;
   6209         INSTALL_SUCCESS = 5;
   6210         // Replaced by INSTALL_FAILURE_DOWNLOAD, INSTALL_FAILURE_STATE_MISMATCH,
   6211         // and INSTALL_FAILURE_COMMIT.
   6212         INSTALL_FAILURE = 6  [deprecated = true];
   6213         // This enum is for installs that are manually cancelled via the Manual Update UI.
   6214         INSTALL_CANCELLED = 7;
   6215         INSTALLER_ROLLBACK_REQUESTED = 8;
   6216         INSTALLER_ROLLBACK_INITIATED = 9;
   6217         INSTALLER_ROLLBACK_INITIATED_FAILURE = 10;
   6218         INSTALLER_ROLLBACK_STAGED = 11;
   6219         INSTALLER_ROLLBACK_STAGED_FAILURE = 12;
   6220         INSTALLER_ROLLBACK_BOOT_TRIGGERED = 13;
   6221         INSTALLER_ROLLBACK_BOOT_TRIGGERED_FAILURE = 14;
   6222         INSTALLER_ROLLBACK_SUCCESS = 15;
   6223         INSTALLER_ROLLBACK_FAILURE = 16;
   6224         INSTALLER_ROLLBACK_STAGED_CANCEL_REQUESTED = 17;
   6225         INSTALLER_ROLLBACK_STAGED_CANCEL_SUCCESS = 18;
   6226         INSTALLER_ROLLBACK_STAGED_CANCEL_FAILURE = 19;
   6227         INSTALL_STAGED_CANCEL_REQUESTED = 20;
   6228         INSTALL_STAGED_CANCEL_SUCCESS = 21;
   6229         INSTALL_STAGED_CANCEL_FAILURE = 22;
   6230         INSTALL_FAILURE_DOWNLOAD = 23;
   6231         INSTALL_FAILURE_STATE_MISMATCH = 24;
   6232         INSTALL_FAILURE_COMMIT = 25;
   6233     }
   6234     optional Status status = 4;
   6235 }
   6236 
   6237 /**
   6238  * Logs the gesture stage changed event.
   6239  *
   6240  * Logged from:
   6241  *   frameworks/base/packages/SystemUI/
   6242  */
   6243 message AssistGestureStageReported {
   6244     optional android.hardware.sensor.assist.AssistGestureStageEnum gesture_stage = 1;
   6245 }
   6246 
   6247 /**
   6248  * Logs the feedback type.
   6249  *
   6250  * Logged from:
   6251  *   frameworks/base/packages/SystemUI/
   6252  */
   6253 message AssistGestureFeedbackReported {
   6254     // Whether or not the gesture was used.
   6255     optional android.hardware.sensor.assist.AssistGestureFeedbackEnum feedback_type = 1;
   6256 }
   6257 
   6258 /**
   6259  * Logs the progress.
   6260  *
   6261  * Logged from:
   6262  *   frameworks/base/packages/SystemUI/
   6263  */
   6264 message AssistGestureProgressReported {
   6265     // [0,100] progress for the assist gesture.
   6266     optional int32 progress = 1;
   6267 }
   6268 
   6269 /*
   6270  * Information about the time zone data on a device.
   6271  */
   6272 message TimeZoneDataInfo {
   6273     // A version identifier for the data set on device. e.g. "2018i"
   6274     optional string tzdb_version = 1;
   6275 }
   6276 
   6277 /**
   6278  * Logs the GPU stats global health information.
   6279  *
   6280  * Logged from:
   6281  *   frameworks/native/services/gpuservice/gpustats/
   6282  */
   6283 message GpuStatsGlobalInfo {
   6284     // Package name of the gpu driver.
   6285     optional string driver_package_name = 1;
   6286 
   6287     // Version name of the gpu driver.
   6288     optional string driver_version_name = 2;
   6289 
   6290     // Version code of the gpu driver.
   6291     optional int64 driver_version_code = 3;
   6292 
   6293     // Build time of the gpu driver in UTC as seconds since January 1, 1970.
   6294     optional int64 driver_build_time = 4;
   6295 
   6296     // Total count of the gl driver gets loaded.
   6297     optional int64 gl_loading_count = 5;
   6298 
   6299     // Total count of the gl driver fails to be loaded.
   6300     optional int64 gl_loading_failure_count = 6;
   6301 
   6302     // Total count of the Vulkan driver gets loaded.
   6303     optional int64 vk_loading_count = 7;
   6304 
   6305     // Total count of the Vulkan driver fails to be loaded.
   6306     optional int64 vk_loading_failure_count = 8;
   6307 
   6308     // Api version of the system Vulkan driver.
   6309     optional int32 vulkan_version = 9;
   6310 
   6311     // Api version of the system CPU Vulkan driver.
   6312     optional int32 cpu_vulkan_version = 10;
   6313 
   6314     // Api version of the system GLES driver.
   6315     optional int32 gles_version = 11;
   6316 
   6317     // Total count of the angle driver gets loaded.
   6318     optional int64 angle_loading_count = 12;
   6319 
   6320     // Total count of the angle driver fails to be loaded.
   6321     optional int64 angle_loading_failure_count = 13;
   6322 }
   6323 
   6324 /**
   6325  * GPU driver loading time info.
   6326  */
   6327 message GpuDriverLoadingTime {
   6328     // List of all the driver loading times for this app. The list size is
   6329     // capped at 50.
   6330     repeated int64 driver_loading_time = 1;
   6331 }
   6332 
   6333 /**
   6334  * Logs the GPU stats per app health information.
   6335  *
   6336  * Logged from:
   6337  *   frameworks/native/services/gpuservice/gpustats/
   6338  */
   6339 message GpuStatsAppInfo {
   6340     // Package name of the application that loads the gpu driver. Total number
   6341     // of different packages is capped at 100.
   6342     optional string app_package_name = 1;
   6343 
   6344     // Version code of the gpu driver this app loads.
   6345     optional int64 driver_version_code = 2;
   6346 
   6347     // gl driver loading time info.
   6348     optional GpuDriverLoadingTime gl_driver_loading_time = 3
   6349             [(android.os.statsd.log_mode) = MODE_BYTES];
   6350 
   6351     // Vulkan driver loading time info.
   6352     optional GpuDriverLoadingTime vk_driver_loading_time = 4
   6353             [(android.os.statsd.log_mode) = MODE_BYTES];
   6354 
   6355     // Angle driver loading time info.
   6356     optional GpuDriverLoadingTime angle_driver_loading_time = 5
   6357             [(android.os.statsd.log_mode) = MODE_BYTES];
   6358 
   6359     // CPU Vulkan implementation is in use.
   6360     optional bool cpu_vulkan_in_use = 6;
   6361 }
   6362 
   6363 /*
   6364  * Logs the size of the system ion heap.
   6365  *
   6366  * Pulled from StatsCompanionService.
   6367  */
   6368 message SystemIonHeapSize {
   6369     // Size of the system ion heap in bytes.
   6370     optional int64 size_in_bytes = 1;
   6371 }
   6372 
   6373 /*
   6374  * Logs the per-process size of the system ion heap.
   6375  *
   6376  * Pulled from StatsCompanionService.
   6377  */
   6378 message ProcessSystemIonHeapSize {
   6379     // The uid if available. -1 means not available.
   6380     optional int32 uid = 1 [(is_uid) = true];
   6381 
   6382     // The process name (from /proc/PID/cmdline).
   6383     optional string process_name = 2;
   6384 
   6385     // Sum of sizes of all allocations.
   6386     optional int32 total_size_in_kilobytes = 3;
   6387 
   6388     // Number of allocations.
   6389     optional int32 allocation_count = 4;
   6390 
   6391     // Size of the largest allocation.
   6392     optional int32 max_size_in_kilobytes = 5;
   6393 }
   6394 
   6395 /**
   6396  * Push network stack events.
   6397  *
   6398  * Log from:
   6399  *     frameworks/base/packages/NetworkStack/
   6400  */
   6401 message NetworkStackReported {
   6402     // The id that indicates the event reported from NetworkStack.
   6403     optional int32 event_id = 1;
   6404     // The data for the reported events.
   6405     optional android.stats.connectivity.NetworkStackEventData network_stack_event = 2 [(log_mode) = MODE_BYTES];
   6406 }
   6407 
   6408 /**
   6409  * Logs the apps that are installed on the external storage.
   6410  * Pulled from:
   6411  *   StatsCompanionService
   6412  */
   6413 message AppsOnExternalStorageInfo {
   6414     // The type of the external storage.
   6415     optional android.stats.storage.ExternalStorageType external_storage_type = 1;
   6416     // The name of the package that is installed on the external storage.
   6417     optional string package_name = 2;
   6418 }
   6419 
   6420 /**
   6421  * Logs the settings related to Face.
   6422  * Logged from:
   6423  *   frameworks/base/services/core/java/com/android/server/stats
   6424  */
   6425 message FaceSettings {
   6426     // Whether or not face unlock is allowed on Keyguard.
   6427     optional bool unlock_keyguard_enabled = 1;
   6428     // Whether or not face unlock dismisses the Keyguard.
   6429     optional bool unlock_dismisses_keyguard = 2;
   6430     // Whether or not face unlock requires attention.
   6431     optional bool unlock_attention_required = 3;
   6432     // Whether or not face unlock is allowed for apps (through BiometricPrompt).
   6433     optional bool unlock_app_enabled = 4;
   6434     // Whether or not face unlock always requires user confirmation.
   6435     optional bool unlock_always_require_confirmation = 5;
   6436     // Whether or not a diverse set of poses are required during enrollment.
   6437     optional bool unlock_diversity_required = 6;
   6438 }
   6439 
   6440 /**
   6441  * Logs cooling devices maintained by the kernel.
   6442  *
   6443  * Pulled from StatsCompanionService.java
   6444  */
   6445 message CoolingDevice {
   6446     // The type of cooling device being reported. Eg. CPU, GPU...
   6447     optional android.os.CoolingTypeEnum device_location = 1;
   6448     // The name of the cooling device source. Eg. CPU0
   6449     optional string device_name = 2;
   6450     // Current throttle state of the cooling device. The value can any unsigned
   6451     // integer between 0 and max_state defined in its driver. 0 means device is
   6452     // not in throttling, higher value means deeper throttling.
   6453     optional int32 state = 3;
   6454 }
   6455 
   6456 /**
   6457  * Intelligence has several counter-type events that don't warrant a
   6458  * full separate atom. These are primarily API call counters but also include
   6459  * counters for feature usage and specific failure modes.
   6460  *
   6461  * Logged from the Intelligence mainline module.
   6462  */
   6463 message IntelligenceEventReported {
   6464   optional android.stats.intelligence.EventType event_id = 1;
   6465   optional android.stats.intelligence.Status status = 2;
   6466 }
   6467 
   6468 /**
   6469  * Logs when Car Power state changed.
   6470  *
   6471  * Logged from:
   6472  *   packages/services/Car/service/src/com/android/car/CarStatsLog.java
   6473  */
   6474 message CarPowerStateChanged {
   6475     // States come from CpmsState in CarPowerManagementService.java.
   6476     enum State {
   6477        WAIT_FOR_VHAL = 0;
   6478        ON = 1;
   6479        SHUTDOWN_PREPARE = 2;
   6480        WAIT_FOR_FINISH = 3;
   6481        SUSPEND = 4;
   6482        SIMULATE_SLEEP = 5;
   6483     }
   6484     optional State state = 1;
   6485 }
   6486 
   6487 /**
   6488  * Logs whether GarageMode is entered.
   6489  *
   6490  * Logged from:
   6491  *   packages/services/Car/service/src/com/android/car/CarStatsLog.java
   6492  */
   6493 message GarageModeInfo {
   6494     // Whether GarageMode is entered.
   6495     optional bool is_garage_mode = 1;
   6496 }
   6497 
   6498 /**
   6499  * Historical app ops data per package.
   6500  */
   6501 message AppOps {
   6502     // Uid of the package requesting the op
   6503     optional int32 uid = 1 [(is_uid) = true];
   6504 
   6505     // Nmae of the package performing the op
   6506     optional string package_name = 2;
   6507 
   6508     // operation id; maps to the OP_* constants in AppOpsManager.java
   6509     optional int32 op_id = 3;
   6510 
   6511     // The number of times the op was granted while the app was in the
   6512     // foreground (only for trusted requests)
   6513     optional int64 trusted_foreground_granted_count = 4;
   6514 
   6515     // The number of times the op was granted while the app was in the
   6516     // background (only for trusted requests)
   6517     optional int64 trusted_background_granted_count = 5;
   6518 
   6519     // The number of times the op was rejected while the app was in the
   6520     // foreground (only for trusted requests)
   6521     optional int64 trusted_foreground_rejected_count = 6;
   6522 
   6523     // The number of times the op was rejected while the app was in the
   6524     // background (only for trusted requests)
   6525     optional int64 trusted_background_rejected_count = 7;
   6526 
   6527     // For long-running operations, total duration of the operation
   6528     // while the app was in the foreground (only for trusted requests)
   6529     optional int64 trusted_foreground_duration_millis = 8;
   6530 
   6531     // For long-running operations, total duration of the operation
   6532     // while the app was in the background (only for trusted requests)
   6533     optional int64 trusted_background_duration_millis = 9;
   6534 }
   6535 
   6536 /**
   6537  * Location Manager API Usage information(e.g. API under usage,
   6538  * API call's parameters).
   6539  * Logged from:
   6540  *  frameworks/base/services/core/java/com/android/server/LocationManagerService.java
   6541  */
   6542 message LocationManagerApiUsageReported {
   6543 
   6544     // Indicating if usage starts or usage ends.
   6545     optional android.stats.location.UsageState state = 1;
   6546 
   6547     // LocationManagerService's API in use.
   6548     // We can identify which API from LocationManager is
   6549     // invoking current LMS API by the combination of
   6550     // API parameter(e.g. is_listener_null, is_intent_null,
   6551     // is_location_request_null)
   6552     optional android.stats.location.LocationManagerServiceApi api_in_use = 2;
   6553 
   6554     // Name of the package calling the API.
   6555     optional string calling_package_name = 3;
   6556 
   6557     // Type of the location provider.
   6558     optional android.stats.location.ProviderType provider = 4;
   6559 
   6560     // Quality of the location request
   6561     optional android.stats.location.LocationRequestQuality quality = 5;
   6562 
   6563     // The desired interval for active location updates, in milliseconds.
   6564     // Bucketized to reduce cardinality.
   6565     optional android.stats.location.LocationRequestIntervalBucket bucketized_interval = 6;
   6566 
   6567     // Minimum distance between location updates, in meters.
   6568     // Bucketized to reduce cardinality.
   6569     optional android.stats.location.SmallestDisplacementBucket
   6570             bucketized_smallest_displacement = 7;
   6571 
   6572     // The number of location updates.
   6573     optional int64 num_updates = 8;
   6574 
   6575     // The request expiration time, in millisecond since boot.
   6576     // Bucketized to reduce cardinality.
   6577     optional android.stats.location.ExpirationBucket
   6578             bucketized_expire_in = 9;
   6579 
   6580     // Type of Callback passed in for this API.
   6581     optional android.stats.location.CallbackType callback_type = 10;
   6582 
   6583     // The radius of the central point of the alert
   6584     // region, in meters. Only for API REQUEST_GEOFENCE.
   6585     // Bucketized to reduce cardinality.
   6586     optional android.stats.location.GeofenceRadiusBucket bucketized_radius = 11;
   6587 
   6588     // Activity Importance of API caller.
   6589     // Categorized to 3 types that are interesting from location's perspective.
   6590     optional android.stats.location.ActivityImportance activiy_importance = 12;
   6591 }
   6592 
   6593 /**
   6594  * Information about a permission grant or denial made by user inside ReviewPermissionsFragment
   6595  */
   6596 message ReviewPermissionsFragmentResultReported {
   6597     // unique value identifying a permission group change. A permission group change might result
   6598     // in multiple of these atoms
   6599     optional int64 change_id = 1;
   6600 
   6601     // UID of package the permission belongs to
   6602     optional int32 uid = 2 [(is_uid) = true];
   6603 
   6604     // Name of package the permission belongs to
   6605     optional string package_name = 3;
   6606 
   6607     // The permission to be granted
   6608     optional string permission_name = 4;
   6609 
   6610     // The result of the permission grant
   6611     optional bool permission_granted = 5;
   6612 }
   6613 
   6614 /**
   6615 * Information about results of permission upgrade by RuntimePermissionsUpgradeController
   6616 * Logged from: RuntimePermissionUpdgradeController
   6617 */
   6618 message RuntimePermissionsUpgradeResult {
   6619     // Permission granted as result of upgrade
   6620     optional string permission_name = 1;
   6621 
   6622     // UID of package granted permission
   6623     optional int32 uid = 2 [(is_uid) = true];
   6624 
   6625     // Name of package granted permission
   6626     optional string package_name = 3;
   6627 }
   6628 
   6629 /**
   6630 * Information about a buttons presented in GrantPermissionsActivty and choice made by user
   6631 */
   6632 message GrantPermissionsActivityButtonActions {
   6633     // Permission granted as result of upgrade
   6634     optional string permission_group_name = 1;
   6635 
   6636     // UID of package granted permission
   6637     optional int32 uid = 2 [(is_uid) = true];
   6638 
   6639     // Name of package requesting permission
   6640     optional string package_name = 3;
   6641 
   6642     // Buttons presented in the dialog - bit flags, bit numbers are in accordance with
   6643     // LABEL_ constants in GrantPermissionActivity.java
   6644     optional int32 buttons_presented = 4;
   6645 
   6646     // Button clicked by user - same as bit flags in buttons_presented with only single bit set
   6647     optional int32 button_clicked = 5;
   6648 }
   6649 
   6650 /**
   6651  * Information about LocationAccessCheck notification presented to user
   6652  */
   6653 message LocationAccessCheckNotificationAction {
   6654 
   6655     // id which identifies single session of user interacting with permission controller
   6656     optional int64 session_id = 1;
   6657 
   6658     // Uid of package for which location access check is presented
   6659     optional int32 package_uid = 2;
   6660 
   6661     // Name of package for which location access check is presented
   6662     optional string package_name = 3;
   6663 
   6664     enum Result {
   6665         UNDEFINED = 0;
   6666         // notification was presented to the user
   6667         NOTIFICATION_PRESENTED = 1;
   6668         // notification was declined by the user
   6669         NOTIFICATION_DECLINED = 2;
   6670         // notification was clicked by the user
   6671         NOTIFICATION_CLICKED = 3;
   6672     }
   6673 
   6674     // View / interaction recorded
   6675     optional Result result = 4;
   6676 }
   6677 
   6678 /**
   6679  * Information about a permission grant or revoke made by user inside AppPermissionFragment
   6680  */
   6681 message AppPermissionFragmentActionReported {
   6682     // id which identifies single session of user interacting with permission controller
   6683     optional int64 session_id = 1;
   6684 
   6685     // unique value identifying a permission group change. A permission group change might result
   6686     // in multiple of these atoms
   6687     optional int64 change_id = 2;
   6688 
   6689     // UID of package the permission belongs to
   6690     optional int32 uid = 3 [(is_uid) = true];
   6691 
   6692     // Name of package the permission belongs to
   6693     optional string package_name = 4;
   6694 
   6695     // The permission to be granted
   6696     optional string permission_name = 5;
   6697 
   6698     // The result of the permission grant
   6699     optional bool permission_granted = 6;
   6700 }
   6701 
   6702 /**
   6703 * Information about a AppPermissionFragment viewed by user
   6704 */
   6705 message AppPermissionFragmentViewed {
   6706     // id which identifies single session of user interacting with permission controller
   6707     optional int64 session_id = 1;
   6708 
   6709     // UID of package for which permissions are viewed
   6710     optional int32 uid = 2 [(is_uid) = true];
   6711 
   6712     // Name of package for which permissions are viewed
   6713     optional string package_name = 3;
   6714 
   6715     // Permission group viewed
   6716     optional string permission_group_name = 4;
   6717 }
   6718 
   6719 /**
   6720 * Information about a AppPermissionsFragment viewed by user
   6721 */
   6722 message AppPermissionsFragmentViewed {
   6723     // id which identifies single session of user interacting with permission controller
   6724     optional int64 session_id = 1;
   6725 
   6726     // id which identifies single view as every view might have several logging records
   6727     // with different package information attached
   6728     optional int64 view_id = 2;
   6729 
   6730     // Permission group viewed
   6731     optional string permission_group_name = 3;
   6732 
   6733     // UID of package for which permissions are viewed
   6734     optional int32 uid = 4 [(is_uid) = true];
   6735 
   6736     // Name of package for which permissions are viewed
   6737     optional string package_name = 5;
   6738 
   6739     // Category in which permission is included
   6740     enum Category {
   6741       UNDEFINED = 0;
   6742       ALLOWED = 1;
   6743       ALLOWED_FOREGROUND = 2;
   6744       DENIED = 3;
   6745     }
   6746     optional Category category = 6;
   6747 }
   6748 
   6749 /**
   6750 * Information about a PermissionAppsFragment viewed by user.
   6751 * Logged from ui/handheld/PermissionAppsFragment.java
   6752 */
   6753 message PermissionAppsFragmentViewed {
   6754     // id which identifies single session of user interacting with permission controller
   6755     optional int64 session_id = 1;
   6756 
   6757     // id which identifies single view as every view might have several logging records
   6758     // with different package information attached
   6759     optional int64 view_id = 2;
   6760 
   6761     // Permission group viewed
   6762     optional string permission_group_name = 3;
   6763 
   6764     // UID of package for which permissions are viewed
   6765     optional int32 uid = 4 [(is_uid) = true];
   6766 
   6767     // Name of package for which permissions are viewed
   6768     optional string package_name = 5;
   6769 
   6770     // Category in which app is included
   6771     enum Category {
   6772         UNDEFINED = 0;
   6773         ALLOWED = 1;
   6774         ALLOWED_FOREGROUND = 2;
   6775         DENIED = 3;
   6776     }
   6777     optional Category category = 6;
   6778 }
   6779