/*
 * 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/jobparameters.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;
}

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;

    enum Name {
      NONE = 0;
      GPRS = 1;
      EDGE = 2;
      UMTS = 3;
      CDMA = 4;
      EVDO_0 = 5;
      EVDO_A = 6;
      ONE_X_RTT = 7; // 1xRTT.
      HSDPA = 8;
      HSUPA = 9;
      HSPA = 10;
      IDEN = 11;
      EVDO_B = 12;
      LTE = 13;
      EHRPD = 14;
      HSPAP = 15;
      OTHER = 16;
    };
    optional Name name = 1;
    optional TimerProto total = 2;
  };
  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;
    };
    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 [
        (android.privacy).dest = DEST_EXPLICIT
    ];
    // 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 [
        (android.privacy).dest = DEST_EXPLICIT
    ];

    message ReasonCount {
      option (android.msg_privacy).dest = DEST_AUTOMATIC;

      optional android.app.JobParametersProto.CancelReason 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 [
        (android.privacy).dest = DEST_EXPLICIT
    ];
    // 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 android.os.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 [
        (android.privacy).dest = DEST_EXPLICIT
    ];

    // 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 [
        (android.privacy).dest = DEST_EXPLICIT
    ];
    // 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;
}
