| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| syntax = "proto2"; |
| option java_multiple_files = true; |
| |
| package android.os; |
| |
| import "frameworks/base/core/proto/android/app/job/enums.proto"; |
| import "frameworks/base/core/proto/android/os/powermanager.proto"; |
| import "frameworks/base/core/proto/android/telephony/enums.proto"; |
| import "frameworks/base/libs/incident/proto/android/privacy.proto"; |
| |
| message BatteryStatsProto { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional int32 report_version = 1; |
| optional int64 parcel_version = 2; |
| optional string start_platform_version = 3; |
| optional string end_platform_version = 4; |
| repeated UidProto uids = 5; |
| optional SystemProto system = 6; |
| } |
| |
| message ControllerActivityProto { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Time (milliseconds) spent in the idle state. |
| optional int64 idle_duration_ms = 1; |
| // Time (milliseconds) spent in the receive state. |
| optional int64 rx_duration_ms = 2; |
| // Total power (mAh) consumed by the controller in all states. The value may |
| // always be 0 if the device doesn't support power calculations. |
| optional int64 power_mah = 3; |
| |
| // Represents a transmit level, where each level may draw a different amount |
| // of power. The levels themselves are controller-specific (and may possibly |
| // be device specific...yet to be confirmed). |
| message TxLevel { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Transmit level. Higher levels draw more power. |
| optional int32 level = 1; |
| // Time spent in this specific transmit level state. |
| optional int64 duration_ms = 2; |
| } |
| repeated TxLevel tx = 4; |
| |
| // Total rail charge consumed by the monitored rails by the controller. The value may |
| // always be 0 if the device doesn't support monitored rail calculations. |
| optional double monitored_rail_charge_mah = 5; |
| } |
| |
| message SystemProto { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| message Battery { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Wall clock time when the data collection started. |
| // In case of device time manually reset by users: |
| // start_clock_time_ms keeps the same value in the current collection |
| // period and changes for later collection periods. |
| optional int64 start_clock_time_ms = 1; |
| // #times the device has been started since start_clock_time_millis. |
| optional int64 start_count = 2; |
| // Total realtime duration (= SINCE_UNPLUGGED battery_realtime_millis.) |
| optional int64 total_realtime_ms = 3; |
| optional int64 total_uptime_ms = 4; |
| // Realtime duration on battery. |
| optional int64 battery_realtime_ms = 5; |
| // Uptime duration (i.e., not suspend). |
| // Uptime is anytime the CPUs were on. The radio and Wifi chip |
| // can be running while the CPUs are off. |
| optional int64 battery_uptime_ms = 6; |
| // Total realtime duration measured with screen off or dozing. |
| optional int64 screen_off_realtime_ms = 7; |
| // Total uptime duration measured with screen off or dozing. |
| optional int64 screen_off_uptime_ms = 8; |
| // Total time the screen was dozing while the device was running on battery. |
| // For historical reasons, screen_doze_duration_msec is a subset of |
| // screen_off_realtime_msec. |
| optional int64 screen_doze_duration_ms = 9; |
| // The estimated real battery capacity, which may be less than the declared |
| // battery capacity (for example, because of battery aging). This field is |
| // less reliable than min(max)_learned_battery_capacity_uah, use those two |
| // fields whenever possible. |
| optional int64 estimated_battery_capacity_mah = 10; |
| // The minimum learned battery capacity in uAh. |
| optional int64 min_learned_battery_capacity_uah = 11; |
| // The maximum learned battery capacity in uAh. |
| optional int64 max_learned_battery_capacity_uah = 12; |
| }; |
| optional Battery battery = 1; |
| |
| message BatteryDischarge { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Discharged battery percentage points since the stats were last reset |
| // after charging (lower bound approximation). |
| optional int32 lower_bound_since_charge = 1; |
| // Upper bound approximation. |
| optional int32 upper_bound_since_charge = 2; |
| // Discharged points while screen is on. |
| optional int32 screen_on_since_charge = 3; |
| // Discharged points while screen is off. |
| optional int32 screen_off_since_charge = 4; |
| // Discharged points while screen was dozing. For historical reasons, |
| // screen_doze_since_charge is a subset of screen_off_since_charge. |
| optional int32 screen_doze_since_charge = 5; |
| // Total amount of battery discharged in mAh. This will only be non-zero for |
| // devices that report battery discharge via a coulomb counter. |
| optional int64 total_mah = 6; |
| // Total amount of battery discharged while the screen was off in mAh. |
| // This will only be non-zero for devices that report battery discharge |
| // via a coulomb counter. |
| optional int64 total_mah_screen_off = 7; |
| // Total amount of battery discharged while the screen was dozing in mAh. |
| // This will only be non-zero for devices that report battery discharge |
| // via a coulomb counter. For historical reasons, total_mah_screen_doze is |
| // a subset of total_mah_screen_off. |
| optional int64 total_mah_screen_doze = 8; |
| // Total amount of battery discharged in mAh while the device was in light doze mode. |
| // This will only be non-zero for devices that report battery discharge |
| // via a coulomb counter. |
| optional int64 total_mah_light_doze = 9; |
| // Total amount of battery discharged in mAh while the device was in deep doze mode. |
| // This will only be non-zero for devices that report battery discharge |
| // via a coulomb counter. |
| optional int64 total_mah_deep_doze = 10; |
| }; |
| optional BatteryDischarge battery_discharge = 2; |
| |
| oneof time_remaining { |
| // Approximation for how much time remains until the battery is fully |
| // charged. The device will print -1 if there wasn't enough data to |
| // calculate an estimate, or if the battery is currently discharging. |
| int64 charge_time_remaining_ms = 3; |
| // Approximation for how much time remains until the battery is fully |
| // discharged. The device will print -1 if there wasn't enough data to |
| // calculate an estimate, or if the battery is currently charging. |
| int64 discharge_time_remaining_ms = 4; |
| } |
| |
| // BatteryLevelStep tracks data for which conditions were continuously held for |
| // the entire duration. Field for which the conditions were not consistent |
| // for the entire duration should be marked MIXED. |
| message BatteryLevelStep { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // How long the battery was at the current level. |
| optional int64 duration_ms = 1; |
| // Battery level |
| optional int32 level = 2; |
| |
| // State of the display. A special enum is used rather than |
| // DisplayProto.State because a MIXED value needs to be in the enum, and |
| // batterystats doesn't care about all of the different display states. |
| enum DisplayState { |
| DS_MIXED = 0; |
| DS_ON = 1; |
| DS_OFF = 2; |
| DS_DOZE = 3; |
| DS_DOZE_SUSPEND = 4; |
| // Any display state error that comes through should be sent to hackbod@. |
| DS_ERROR = 5; |
| } |
| // The state of the display for the entire battery level step. MIXED is used |
| // if there were multiple states for this step. |
| optional DisplayState display_state = 3; |
| |
| // Indicates status in power save mode. |
| enum PowerSaveMode { |
| PSM_MIXED = 0; |
| PSM_ON = 1; |
| PSM_OFF = 2; |
| } |
| // Battery Saver mode for the entire battery level step. MIXED is used |
| // if there were multiple states for this step. |
| optional PowerSaveMode power_save_mode = 4; |
| |
| // Indicates status in idle mode. |
| enum IdleMode { |
| IM_MIXED = 0; |
| IM_ON = 2; |
| IM_OFF = 3; |
| } |
| // Doze mode for the entire battery level step. MIXED is used if there were |
| // multiple states for this step. |
| optional IdleMode idle_mode = 5; |
| }; |
| // Battery level steps when the device was charging. |
| repeated BatteryLevelStep charge_step = 5; |
| // Battery level steps when the device was discharging. |
| repeated BatteryLevelStep discharge_step = 6; |
| |
| // All CPU frequencies of the device. |
| repeated int64 cpu_frequency = 7; |
| |
| message DataConnection { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| oneof type { |
| android.telephony.NetworkTypeEnum name = 1; |
| // If is_none is not set, then the name is a valid network type. |
| bool is_none = 2; |
| } |
| optional TimerProto total = 3; |
| }; |
| repeated DataConnection data_connection = 8; |
| |
| optional ControllerActivityProto global_bluetooth_controller = 9; |
| optional ControllerActivityProto global_modem_controller = 10; |
| optional ControllerActivityProto global_wifi_controller = 11; |
| |
| message GlobalNetwork { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Total Bytes received on mobile connections. |
| optional int64 mobile_bytes_rx = 1; |
| // Total Bytes transmitted on mobile connections. |
| optional int64 mobile_bytes_tx = 2; |
| // Total Bytes received on wifi connections. |
| optional int64 wifi_bytes_rx = 3; |
| // Total Bytes transmitted on wifi connections. |
| optional int64 wifi_bytes_tx = 4; |
| // Total Packets received on mobile connections. |
| optional int64 mobile_packets_rx = 5; |
| // Total Packets transmitted on mobile connections. |
| optional int64 mobile_packets_tx = 6; |
| // Total Packets received on wifi connections. |
| optional int64 wifi_packets_rx = 7; |
| // Total Packets transmitted on wifi connections. |
| optional int64 wifi_packets_tx = 8; |
| // Total Bytes received on bluetooth connections. |
| optional int64 bt_bytes_rx = 9; |
| // Total Bytes transmitted on bluetooth connections. |
| optional int64 bt_bytes_tx = 10; |
| }; |
| optional GlobalNetwork global_network = 12; |
| |
| message GlobalWifi { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // The amount of time that wifi has been on while the device was running on |
| // battery. |
| optional int64 on_duration_ms = 1; |
| // The amount of time that wifi has been on and the driver has been in the |
| // running state while the device was running on battery. |
| optional int64 running_duration_ms = 2; |
| } |
| optional GlobalWifi global_wifi = 13; |
| |
| // Kernel wakelock metrics are only recorded when the device is unplugged |
| // *and* the screen is off. |
| message KernelWakelock { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| // Kernel wakelock stats aren't apportioned across all kernel wakelocks (as |
| // app wakelocks stats are). |
| optional TimerProto total = 2; |
| // The kernel doesn't have the data to enable printing out current and max |
| // durations. |
| }; |
| repeated KernelWakelock kernel_wakelock = 14; |
| |
| message Misc { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional int64 screen_on_duration_ms = 1; |
| optional int64 phone_on_duration_ms = 2; |
| optional int64 full_wakelock_total_duration_ms = 3; |
| // The total elapsed time that a partial wakelock was held. This duration |
| // does not double count wakelocks held at the same time. |
| optional int64 partial_wakelock_total_duration_ms = 4; |
| optional int64 mobile_radio_active_duration_ms = 5; |
| // The time that is the difference between the mobile radio time we saw |
| // based on the elapsed timestamp when going down vs. the given time stamp |
| // from the radio. |
| optional int64 mobile_radio_active_adjusted_time_ms = 6; |
| optional int32 mobile_radio_active_count = 7; |
| // The amount of time that the mobile network has been active (in a high |
| // power state) but not being able to blame on an app. |
| optional int32 mobile_radio_active_unknown_duration_ms = 8; |
| // Total amount of time the device was in the interactive state. |
| optional int64 interactive_duration_ms = 9; |
| optional int64 battery_saver_mode_enabled_duration_ms = 10; |
| optional int32 num_connectivity_changes = 11; |
| // Amount of time the device was in deep Doze. |
| optional int64 deep_doze_enabled_duration_ms = 12; |
| // How many times the device went into deep Doze mode. |
| optional int32 deep_doze_count = 13; |
| // Amount of time the device was idling in deep Doze. Idling time |
| // encompasses "doze" time and the maintenance windows that allow apps to |
| // operate. |
| optional int64 deep_doze_idling_duration_ms = 14; |
| // How many times the device idling for deep Doze mode. |
| optional int32 deep_doze_idling_count = 15; |
| optional int64 longest_deep_doze_duration_ms = 16; |
| // Amount of time the device was in Doze Light. |
| optional int64 light_doze_enabled_duration_ms = 17; |
| // How many times the device went into Doze Light mode. |
| optional int32 light_doze_count = 18; |
| // Amount of time the device was idling in Doze Light. Idling time |
| // encompasses "doze" time and the maintenance windows that allow apps to |
| // operate. |
| optional int64 light_doze_idling_duration_ms = 19; |
| // How many times the device idling for Doze Light mode. |
| optional int32 light_doze_idling_count = 20; |
| optional int64 longest_light_doze_duration_ms = 21; |
| } |
| optional Misc misc = 15; |
| |
| message PhoneSignalStrength { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional android.telephony.SignalStrengthEnum name = 1; |
| optional TimerProto total = 2; |
| }; |
| repeated PhoneSignalStrength phone_signal_strength = 16; |
| |
| message PowerUseItem { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| enum Sipper { |
| UNKNOWN_SIPPER = 0; |
| IDLE = 1; |
| CELL = 2; |
| PHONE = 3; |
| WIFI = 4; |
| BLUETOOTH = 5; |
| FLASHLIGHT = 6; |
| SCREEN = 7; |
| USER = 8; |
| UNACCOUNTED = 9; |
| OVERCOUNTED = 10; |
| CAMERA = 11; |
| MEMORY = 12; |
| AMBIENT_DISPLAY = 13; |
| }; |
| optional Sipper name = 1; |
| // UID, only valid for the USER sipper. |
| optional int32 uid = 2; |
| // Estimated power use in mAh. |
| optional double computed_power_mah = 3; |
| // Starting in Oreo, Battery Settings has two modes to display the battery |
| // info. The first is "app usage list". In this mode, items with should_hide |
| // enabled are hidden. |
| optional bool should_hide = 4; |
| // Smeared power from screen usage. Screen usage power is split and smeared |
| // among apps, based on activity time. |
| optional double screen_power_mah = 5; |
| // Smeared power using proportional method. Power usage from hidden sippers |
| // is smeared to all apps proportionally (except for screen usage). |
| optional double proportional_smear_mah = 6; |
| }; |
| repeated PowerUseItem power_use_item = 17; |
| |
| message PowerUseSummary { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional double battery_capacity_mah = 1; |
| optional double computed_power_mah = 2; |
| // Lower bound of actual power drained. |
| optional double min_drained_power_mah = 3; |
| // Upper bound of actual power drained. |
| optional double max_drained_power_mah = 4; |
| }; |
| optional PowerUseSummary power_use_summary = 18; |
| |
| message ResourcePowerManager { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Either StateName or StateName.VoterName. |
| optional string name = 1; |
| optional TimerProto total = 2; |
| optional TimerProto screen_off = 3; |
| } |
| repeated ResourcePowerManager resource_power_manager = 19; |
| |
| message ScreenBrightness { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| enum Name { |
| DARK = 0; // Not screen-off. |
| DIM = 1; |
| MEDIUM = 2; |
| LIGHT = 3; |
| BRIGHT = 4; |
| }; |
| optional Name name = 1; |
| optional TimerProto total = 2; |
| }; |
| repeated ScreenBrightness screen_brightness = 20; |
| |
| // Duration and number of times trying to acquire a signal |
| optional TimerProto signal_scanning = 21; |
| |
| message WakeupReason { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| optional TimerProto total = 2; |
| }; |
| repeated WakeupReason wakeup_reason = 22; |
| |
| message WifiMulticastWakelockTotal { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional int64 duration_ms = 1; |
| optional int32 count = 2; |
| } |
| optional WifiMulticastWakelockTotal wifi_multicast_wakelock_total = 23; |
| |
| message WifiSignalStrength { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| enum Name { |
| NONE = 0; |
| POOR = 1; |
| MODERATE = 2; |
| GOOD = 3; |
| GREAT = 4; |
| }; |
| optional Name name = 1; |
| optional TimerProto total = 2; |
| }; |
| repeated WifiSignalStrength wifi_signal_strength = 24; |
| |
| message WifiState { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| enum Name { |
| OFF = 0; |
| OFF_SCANNING = 1; |
| ON_NO_NETWORKS = 2; |
| ON_DISCONNECTED = 3; |
| ON_CONNECTED_STA = 4; |
| ON_CONNECTED_P2P = 5; |
| ON_CONNECTED_STA_P2P = 6; |
| SOFT_AP = 7; |
| }; |
| optional Name name = 1; |
| optional TimerProto total = 2; |
| }; |
| repeated WifiState wifi_state = 25; |
| |
| message WifiSupplicantState { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| enum Name { |
| INVALID = 0; |
| DISCONNECTED = 1; |
| INTERFACE_DISABLED = 2; |
| INACTIVE = 3; |
| SCANNING = 4; |
| AUTHENTICATING = 5; |
| ASSOCIATING = 6; |
| ASSOCIATED = 7; |
| FOUR_WAY_HANDSHAKE = 8; |
| GROUP_HANDSHAKE = 9; |
| COMPLETED = 10; |
| DORMANT = 11; |
| UNINITIALIZED = 12; |
| }; |
| optional Name name = 1; |
| optional TimerProto total = 2; |
| }; |
| repeated WifiSupplicantState wifi_supplicant_state = 26; |
| } |
| |
| message TimerProto { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // This may be an apportioned time. |
| optional int64 duration_ms = 1; |
| optional int64 count = 2; |
| // The max duration if it is being tracked. Not all Timer subclasses |
| // track the max duration. |
| optional int64 max_duration_ms = 3; |
| // The current time the timer has been active, if it is being tracked. |
| // Not all Timer subclasses track the current duration. |
| optional int64 current_duration_ms = 4; |
| // The total cumulative duration (i.e. sum of past durations) that this timer |
| // has been on since reset. This may differ from duration_ms since, depending |
| // on the Timer, getTotalTimeLocked may represent the total 'blamed' or |
| // 'pooled' time, rather than the actual time. By contrast, total_duration_ms |
| // always gives the actual total time. Not all Timer subclasses track the |
| // total duration. |
| optional int64 total_duration_ms = 5; |
| } |
| |
| message UidProto { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Combination of app ID and user ID. |
| optional int32 uid = 1; |
| |
| // The statistics associated with a particular package. |
| message Package { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| |
| message Service { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| // Time spent started. |
| optional int64 start_duration_ms = 2; |
| optional int32 start_count = 3; |
| optional int32 launch_count = 4; |
| } |
| repeated Service services = 2; |
| } |
| repeated Package packages = 2; |
| |
| optional ControllerActivityProto bluetooth_controller = 3; |
| optional ControllerActivityProto modem_controller = 4; |
| optional ControllerActivityProto wifi_controller = 5; |
| |
| // Bluetooth misc data. |
| message BluetoothMisc { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Duration spent BLE scanning blamed on this App (i.e. apportioned to this |
| // app amongst all apps doing BLE scanning; see explanation of 'apportioned' |
| // in App's comment). |
| optional TimerProto apportioned_ble_scan = 1; |
| // Background times aren't apportioned. |
| optional TimerProto background_ble_scan = 2; |
| // Running unoptimized BLE scanning, as defined by Bluetooth's |
| // AppScanStats.recordScanStart. As of May 2017, these are unfiltered, |
| // non-opportunistic, non-first-match scans. Durations are not |
| // pooled/apportioned. |
| optional TimerProto unoptimized_ble_scan = 3; |
| // Running unoptimized BLE scanning when app is in background. Durations are |
| // not pooled/apportioned. |
| optional TimerProto background_unoptimized_ble_scan = 4; |
| // Count of results returned by BLE scanning. |
| optional int32 ble_scan_result_count = 5; |
| // Count of results returned by BLE scans when app is in background. |
| // (Included in ble_scan_result_count.) |
| optional int32 background_ble_scan_result_count = 6; |
| } |
| optional BluetoothMisc bluetooth_misc = 6; |
| |
| message Cpu { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Total CPU time with processes executing in userspace. Summed up across |
| // multiple cores. |
| optional int64 user_duration_ms = 1; |
| // Total CPU time with processes executing kernel syscalls. Summed up across |
| // multiple cores. |
| optional int64 system_duration_ms = 2; |
| |
| // CPU time broken down by CPU frequency (go/cpu-battery-metrics). |
| // |
| // These are real CPU time measurement from the kernel, so their sum can |
| // be different from the sum of user_duration_millis and |
| // system_duration_millis, which are just approximations. Data is not |
| // tracked when device is charging. |
| message ByFrequency { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Index of the frequency in system.cpu_frequency. It starts from 1, to |
| // make it easier to analyze. |
| optional int32 frequency_index = 1; |
| // CPU time in milliseconds. |
| optional int64 total_duration_ms = 2; |
| // Screen-off CPU time in milliseconds. |
| optional int64 screen_off_duration_ms = 3; |
| } |
| // CPU times accumulated across all process states. |
| repeated ByFrequency by_frequency = 3; |
| |
| enum ProcessState { |
| TOP = 0; |
| FOREGROUND_SERVICE = 1; |
| FOREGROUND = 2; |
| BACKGROUND = 3; |
| TOP_SLEEPING = 4; |
| HEAVY_WEIGHT = 5; |
| CACHED = 6; |
| } |
| // CPU times at different process states. |
| message ByProcessState { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional ProcessState process_state = 1; |
| repeated ByFrequency by_frequency = 2; |
| } |
| repeated ByProcessState by_process_state = 4; |
| } |
| optional Cpu cpu = 7; |
| |
| // Duration is pooled/apportioned. |
| optional TimerProto audio = 8; |
| // Duration is pooled/apportioned. |
| optional TimerProto camera = 9; |
| // Duration is pooled/apportioned. |
| optional TimerProto flashlight = 10; |
| // Duration is not pooled/apportioned. |
| optional TimerProto foreground_activity = 11; |
| // Duration is not pooled/apportioned. |
| optional TimerProto foreground_service = 12; |
| // Duration is not pooled/apportioned. |
| optional TimerProto vibrator = 13; |
| // Duration is pooled/apportioned. |
| optional TimerProto video = 14; |
| |
| message Job { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| // Job times aren't apportioned. |
| optional TimerProto total = 2; |
| optional TimerProto background = 3; |
| } |
| repeated Job jobs = 15; |
| |
| message JobCompletion { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Job name. |
| optional string name = 1; |
| |
| message ReasonCount { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional android.app.job.StopReasonEnum name = 1; |
| optional int32 count = 2; |
| } |
| repeated ReasonCount reason_count = 2; |
| }; |
| repeated JobCompletion job_completion = 16; |
| |
| message Network { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Mobile data traffic (total, background + foreground). |
| optional int64 mobile_bytes_rx = 1; |
| optional int64 mobile_bytes_tx = 2; |
| // Wifi data traffic (total, background + foreground). |
| optional int64 wifi_bytes_rx = 3; |
| optional int64 wifi_bytes_tx = 4; |
| // Bluetooth data traffic (total, background + foreground). |
| optional int64 bt_bytes_rx = 5; |
| optional int64 bt_bytes_tx = 6; |
| // In packets (total, background + foreground). |
| optional int64 mobile_packets_rx = 7; |
| optional int64 mobile_packets_tx = 8; |
| optional int64 wifi_packets_rx = 9; |
| optional int64 wifi_packets_tx = 10; |
| // Radio active duration. |
| optional int64 mobile_active_duration_ms = 11; |
| optional int32 mobile_active_count = 12; |
| // Number of times the app woke up the mobile radio. |
| optional int32 mobile_wakeup_count = 13; |
| // Number of times the app woke up the wifi radio. |
| optional int32 wifi_wakeup_count = 14; |
| // Mobile data traffic in the background only, included in total above. |
| optional int64 mobile_bytes_bg_rx = 15; |
| optional int64 mobile_bytes_bg_tx = 16; |
| // Wifi data traffic in the background only, included in total above. |
| optional int64 wifi_bytes_bg_rx = 17; |
| optional int64 wifi_bytes_bg_tx = 18; |
| // In packets (background only, included in total packets above). |
| optional int64 mobile_packets_bg_rx = 19; |
| optional int64 mobile_packets_bg_tx = 20; |
| optional int64 wifi_packets_bg_rx = 21; |
| optional int64 wifi_packets_bg_tx = 22; |
| }; |
| optional Network network = 17; |
| |
| // TODO: combine System and App messages? |
| message PowerUseItem { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Estimated power use in mAh. |
| optional double computed_power_mah = 1; |
| // Starting in Oreo, Battery Settings has two modes to display the battery |
| // info. The first is "app usage list". In this mode, items with should_hide |
| // enabled are hidden. |
| optional bool should_hide = 2; |
| // Smeared power from screen usage. Screen usage power is split and smeared |
| // among apps, based on activity time. |
| optional double screen_power_mah = 3; |
| // Smeared power using proportional method. Power usage from hidden sippers |
| // is smeared to all apps proportionally (except for screen usage). |
| optional double proportional_smear_mah = 4; |
| }; |
| optional PowerUseItem power_use_item = 18; |
| |
| // Durations are not pooled/apportioned. |
| message Process { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| // Time spent executing in user code. |
| optional int64 user_duration_ms = 2; |
| // Time spent executing in kernel code. |
| optional int64 system_duration_ms = 3; |
| // Time the process was running in the foreground. |
| optional int64 foreground_duration_ms = 4; |
| // Number of times the process has been started. |
| optional int32 start_count = 5; |
| // Number of times the process has had an ANR. |
| optional int32 anr_count = 6; |
| // Number of times the process has crashed. |
| optional int32 crash_count = 7; |
| }; |
| repeated Process process = 19; |
| |
| message StateTime { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // All of these (non-deprecated) states are mutually exclusive and can be |
| // added together to find the total time a uid has had any processes running |
| // at all. |
| |
| // In approximate order or priority (top being what the framework considers |
| // most important and is thus least likely to kill when resources are |
| // needed: |
| // top > foreground service > foreground > background > top sleeping > heavy weight > cache |
| enum State { |
| // Time this uid has any processes in the top state. |
| PROCESS_STATE_TOP = 0; |
| // Time this uid has any process with a started foreground service, but |
| // none in the "top" state. |
| PROCESS_STATE_FOREGROUND_SERVICE = 1; |
| // Time this uid has any process in an active foreground state, but none in the |
| // "foreground service" or better state. Persistent and other foreground states go here. |
| PROCESS_STATE_FOREGROUND = 2; |
| // Time this uid has any process in an active background state, but none |
| // in the "foreground" or better state. |
| PROCESS_STATE_BACKGROUND = 3; |
| // Time this uid has any process that is top while the device is sleeping, |
| // but not active for any other reason. We consider is a kind of cached |
| // process for execution restrictions. Sleeping is mostly screen off, but |
| // also includes the time when the screen is on but the device has not yet |
| // been unlocked. |
| PROCESS_STATE_TOP_SLEEPING = 4; |
| // Time this uid has any process that is in the background but it has an |
| // activity marked as "can't save state". This is essentially a cached |
| // process, though the system will try much harder than normal to avoid |
| // killing it. |
| PROCESS_STATE_HEAVY_WEIGHT = 5; |
| // Time this uid has any processes that are sitting around cached, not in |
| // one of the other active states. |
| PROCESS_STATE_CACHED = 6; |
| } |
| optional State state = 1; |
| optional int64 duration_ms = 2; |
| } |
| repeated StateTime states = 20; |
| |
| message Sensor { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional int32 id = 1; |
| optional TimerProto apportioned = 2; |
| // Background times aren't apportioned. |
| optional TimerProto background = 3; |
| } |
| repeated Sensor sensors = 21; |
| |
| message Sync { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| // Sync times aren't apportioned. |
| optional TimerProto total = 2; |
| optional TimerProto background = 3; |
| } |
| repeated Sync syncs = 22; |
| |
| message UserActivity { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional PowerManagerProto.UserActivityEvent name = 1; |
| optional int32 count = 2; |
| }; |
| repeated UserActivity user_activity = 23; |
| |
| // Aggregated wakelock data for an app overall, across all of its wakelocks. |
| // The Wakelock message holds data about each *individual* wakelock, but it |
| // cannot be used to ascertain the aggregated time the app spent holding |
| // wakelocks, since merely summing Wakelock data will either underestimate (in |
| // the case of wakelock.partial.duration_ms) or overestimate (in the case of |
| // wakelock.partial.total_duration_ms) the total time, due to overlapping |
| // wakelocks. AggregatedWakelock, on the other hand, holds overall per-app |
| // wakelock data. |
| message AggregatedWakelock { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // The total duration that the app spent holding partial wakelocks. |
| // It includes both foreground + background use. |
| optional int64 partial_duration_ms = 1; |
| // The total duration that the app spent holding partial wakelocks while the |
| // app was in the background. Subtracting from partial_duration_ms will |
| // yield foreground usage. |
| optional int64 background_partial_duration_ms = 2; |
| }; |
| optional AggregatedWakelock aggregated_wakelock = 24; |
| |
| message Wakelock { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| optional string name = 1; |
| |
| // Full wakelocks keep the screen on. Based on |
| // PowerManager.SCREEN_BRIGHT_WAKE_LOCK (deprecated in API 13) and |
| // PowerManager.SCREEN_DIM_WAKE_LOCK (deprecated in API 17). Current, max, |
| // and total durations are not tracked for full wakelocks. |
| optional TimerProto full = 2; |
| |
| // Partial wakelocks ensure the CPU is running while allowing the screen |
| // to turn off. Based on PowerManager.PARTIAL_WAKE_LOCK. |
| // Partial wakelock metrics are only recorded when the device is unplugged |
| // *and* the screen is off. Current, max, and total durations are tracked |
| // for partial wakelocks. |
| optional TimerProto partial = 3; |
| |
| // These fields are for tracking partial wakelocks (see above), but only |
| // the time the wakelock was held while the app was in a background state. |
| // Since all background tracking is 'actual', not 'apportioned', |
| // background_partial.duration_ms is identical to |
| // background_partial.total_duration_ms. |
| optional TimerProto background_partial = 4; |
| |
| // Window wakelocks keep the screen on. Current, max, and total durations |
| // are not tracked for window wakelocks. |
| optional TimerProto window = 5; |
| }; |
| repeated Wakelock wakelocks = 25; |
| |
| message WakeupAlarm { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Wakeup alarm name. |
| optional string name = 1; |
| // Only includes counts when screen-off (& on battery). |
| optional int32 count = 2; |
| } |
| repeated WakeupAlarm wakeup_alarm = 26; |
| |
| message Wifi { |
| option (android.msg_privacy).dest = DEST_AUTOMATIC; |
| |
| // Duration holding Wifi-lock. This time is apportioned. |
| optional int64 full_wifi_lock_duration_ms = 1; |
| // Duration running Wifi. This time is apportioned. |
| optional int64 running_duration_ms = 2; |
| // Duration performing Wifi-scan blamed on this App (i.e. apportioned to |
| // this app amongst all apps doing Wifi-scanning; see explanation of |
| // 'apportioned' in App's comment). |
| optional TimerProto apportioned_scan = 3; |
| // Scans performed when app is in background. (Included in |
| // apportioned_scan). This value is not apportioned. Subtracting |
| // background_scan.total_duration_ms from apportioned_scan.total_duration_ms |
| // will yield foreground usage. |
| optional TimerProto background_scan = 4; |
| }; |
| optional Wifi wifi = 27; |
| |
| // WiFi Multicast Wakelock |
| // This timer tracks the duration and count for the app to request the |
| // wakelock for wifi multicast traffic. |
| // This wakelock disables the filtering of multicast packets to reach the host |
| // processor, and results in a power penalty. |
| // It is useful to monitor the applications resulting in that |
| optional TimerProto wifi_multicast_wakelock = 28; |
| } |