You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.1 KiB
154 lines
5.1 KiB
# Power data sources
|
|
|
|
On Android Perfetto bundles data sources to retrieve power
|
|
counters from the device power management units (where supported).
|
|
|
|
## Battery counters
|
|
|
|
_This data source has been introduced in Android 10 (Q) and requires the
|
|
presence of power-management hardware on the device. This is available on
|
|
most Google Pixel smartphones._
|
|
|
|
Modern smartphones are equipped with a power monitoring IC which is able to
|
|
measure the charge flowing in and out of the battery. This allows Perfetto to
|
|
observe the total and instantaneous charge drained from the battery by the
|
|
overall device (the union of SoC, display, radios and all other hardware
|
|
units).
|
|
|
|
A simplified block diagram:
|
|
|
|

|
|
|
|
These counters report:
|
|
|
|
* The remaining battery capacity in %.
|
|
* The remaining battery charge in microampere-hours (µAh).
|
|
* The instantaneous (typically the average over a small window of time) current
|
|
in microampere (µA)
|
|
|
|
The presence and the resolution of these counters depends on the device
|
|
manufacturer. At the platform level this data is obtained polling the
|
|
Android [IHealth HAL][health-hal].
|
|
For more details on HW specs and resolution see
|
|
[Measuring Device Power](https://source.android.com/devices/tech/power/device).
|
|
|
|
[health-hal]: https://cs.android.com/android/platform/superproject/+/master:hardware/interfaces/health/2.0/IHealth.hal?q=IHealth
|
|
|
|
#### Measuring charge while plugged on USB
|
|
|
|
Battery counters measure the charge flowing *in* and *out* of
|
|
the battery. If the device is plugged to a USB cable, you will likely observe
|
|
a negative instantaneous current and an increase of the total charge, denoting
|
|
the fact that charge is flowing in the battery (i.e. charging it) rather
|
|
than out.
|
|
|
|
This can make measurements in lab settings problematic. The known workarounds
|
|
for this are:
|
|
|
|
* Using specialized USB hubs that allow to electrically disconnect the USB ports
|
|
from the host side. This allows to effectively disconnect the phone while the
|
|
tests are running.
|
|
|
|
* On rooted phones the power management IC driver allows to disconnect the USB
|
|
charging while keeping the USB data link active. This feature is
|
|
SoC-specific, is undocumented and not exposed through any HAL.
|
|
For instance on a Pixel 2 this can be achieved running, as root:
|
|
`echo 1 > /sys/devices/soc/800f000.qcom,spmi/spmi-0/spmi0-02/800f000.qcom,spmi:qcom,pmi8998@2:qcom,qpnp-smb2/power_supply/battery/input_suspend`.
|
|
Note that in most devices the kernel USB driver holds a wakelock to keep the
|
|
USB data link active, so the device will never fully suspend even when turning
|
|
the screen off.
|
|
|
|
### UI
|
|
|
|

|
|
|
|
### SQL
|
|
|
|
```sql
|
|
select ts, t.name, value from counter as c left join counter_track t on c.track_id = t.id
|
|
```
|
|
|
|
ts | name | value
|
|
---|------|------
|
|
338297039804951 | batt.charge_uah | 2085000
|
|
338297039804951 | batt.capacity_pct | 75
|
|
338297039804951 | batt.current_ua | -1469687
|
|
338297145212097 | batt.charge_uah | 2085000
|
|
338297145212097 | batt.capacity_pct | 75
|
|
338297145212097 | batt.current_ua | -1434062
|
|
|
|
### TraceConfig
|
|
|
|
Trace proto:
|
|
[BatteryCounters](/docs/reference/trace-packet-proto.autogen#BatteryCounters)
|
|
|
|
Config proto:
|
|
[AndroidPowerConfig](/docs/reference/trace-config-proto.autogen#AndroidPowerConfig)
|
|
|
|
Sample config:
|
|
|
|
```protobuf
|
|
data_sources: {
|
|
config {
|
|
name: "android.power"
|
|
android_power_config {
|
|
battery_poll_ms: 250
|
|
battery_counters: BATTERY_COUNTER_CAPACITY_PERCENT
|
|
battery_counters: BATTERY_COUNTER_CHARGE
|
|
battery_counters: BATTERY_COUNTER_CURRENT
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Power rails
|
|
|
|
_This data source has been introduced in Android 10 (Q) and requires the
|
|
dedicated hardware on the device. This hardware is not yet available on
|
|
most production phones._
|
|
|
|
Recent version of Android introduced the support for more advanced power
|
|
monitoring at the hardware subsystem level, known as "Power rail counters".
|
|
These counters measure the energy drained by (groups of) hardware units.
|
|
|
|
Unlike the battery counters, they are not affected by the charging/discharging
|
|
state of the battery, because they measure power downstream of the battery.
|
|
|
|
The presence and the resolution of power rail counters depends on the device
|
|
manufacturer. At the platform level this data is obtained polling the
|
|
Android [IPowerStats HAL][power-hal].
|
|
|
|
[power-hal]: https://cs.android.com/android/platform/superproject/+/master:hardware/interfaces/power/stats/1.0/IPowerStats.hal
|
|
|
|
Simplified block diagram:
|
|
|
|

|
|
|
|
### TraceConfig
|
|
|
|
Trace proto:
|
|
[PowerRails](/docs/reference/trace-packet-proto.autogen#PowerRails)
|
|
|
|
Config proto:
|
|
[AndroidPowerConfig](/docs/reference/trace-config-proto.autogen#AndroidPowerConfig)
|
|
|
|
Sample config:
|
|
|
|
```protobuf
|
|
data_sources: {
|
|
config {
|
|
name: "android.power"
|
|
android_power_config {
|
|
battery_poll_ms: 250
|
|
collect_power_rails: true
|
|
# Note: it is possible to specify both rails and battery counters
|
|
# in this section.
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Related data sources
|
|
|
|
See also the [CPU -> Frequency scaling](cpu-freq.md) data source.
|