测量电量值

设备制造商必须在 /frameworks/base/core/res/res/xml/power_profile.xml 中提供组件的电源配置文件。

如需确定电源配置文件的有关数值,请使用测量设备耗电量的硬件,并执行需要其耗电量信息的各种操作。测量执行这些操作时的电量使用情况并计算各项值(在适当情况下与其他基准操作的电量消耗做对比所得的差异值)。

电源配置文件的目的在于适当地估算电量消耗情况,电源配置文件的有关数值以电流(安培)表示。Android 框架用电流乘以子系统处于激活状态的时间,并计算毫安时值,然后将此值用于评估应用/子系统消耗的电池电量。

运行 Android 7.0 及更高版本且配备蓝牙、调制解调器和 Wi-Fi 控制器的设备可以提供从芯片组数据获得的更多电量值。

采用异构 CPU 的设备

如果设备具有异构架构的 CPU 核心,则其电源配置文件必须包含以下额外字段:

  • 每个集群的 CPU 总数(以 cpu.clusters.cores 表示)。
  • 每个集群支持的 CPU 速率。
  • 每个集群处于激活状态时的 CPU 耗电情况。

为了区分集群激活时的 CPU 耗电量和所支持的 CPU 速率耗电量,您需要将集群编号附加到数组名称上。集群编号按照 CPU 核心在内核设备树中的顺序分配。例如,在具备两 (2) 个集群,每个集群拥有四 (4) 个核心的异构架构中:

  • cluster0 由 cpu0-3 组成
  • cluster1 由 cpu4-7 组成

当 Android 框架从位于 /sys/devices/system/cpu/cpu<number>/cpufreq/stats 中的 sysfs 文件读取统计信息时,将使用以上 CPU 核心编号。

集群中的 CPU 以及速率示例:

<array name="cpu.active.cluster0">
<value>200</value>
<value>300</value>
<value>400</value>
</array>
<array name="cpu.speeds.cluster0">
<value>600000</value>
<value>800000</value>
<value>1200000</value>
</array>

<array name="cpu.active.cluster1">
<value>400</value>
<value>500</value>
<value>600</value>
</array>
<array name="cpu.speeds.cluster1">
<value>800000</value>
<value>1200000</value>
<value>1400000</value>
</array>

电量值

下表列出可供使用的电量值设置。要查看 AOSP 中的示例文件,请参阅 power_profile.xml

名称 说明 示例值 备注
ambient.on 屏幕在低电耗/微光/始终开启模式(而非关闭模式)下消耗的额外电量。 大约 100 毫安 -
screen.on 屏幕以最低亮度开启时消耗的额外电量。 200 毫安 包括触摸控制器和显示屏背光。亮度为 0,而非 Android 通常所设的最低值 10% 或 20%。
screen.full 与处于最低亮度的屏幕相比,当屏幕处于最高亮度时消耗的额外电量。 100-300 毫安 将此值乘以一定比例(基于屏幕亮度)后与 screen.on 值相加,用来计算屏幕耗电量。
wifi.on 当 WLAN 打开,但未接收、发送信号或执行扫描时消耗的额外电量。 2 毫安 -
wifi.active 通过 WLAN 发送或接收信号时消耗的额外电量。 31 毫安 -
wifi.scan WLAN 正在扫描无线接入点时消耗的额外电量。 100 毫安 -
audio 通过 DSP 进行音频解码/编码时消耗的额外电量。 大约 10 毫安 用于 DSP 音频。
video 通过 DSP 进行视频解码时消耗的额外电量。 大约 50 毫安 用于 DSP 视频。
camera.avg 针对典型相机应用,相机子系统的平均电量消耗。 600 毫安 当应用运行预览且每分钟捕获大约 10 张全分辨率照片时的粗略估算值。
camera.flashlight 相机闪光灯模块开启时消耗的平均电量。 200 毫安 -
gps.signalqualitybased GPS 消耗的额外电量(具体取决于信号强度)。这是一个多值条目,每个信号强度(从最弱到最强)各有一个值。 30 毫安、10 毫安 -
gps.on GPS 获取信号时消耗的额外电量。 50 毫安 -
radio.active 蜂窝无线电发送/接收信号时消耗的额外电量。 100-300 毫安 -
radio.scanning 移动网络无线装置寻呼发射塔时消耗的额外电量。 1.2 毫安 -
radio.on 蜂窝无线电开启时消耗的额外电量。多值条目,每个信号强度(无信号、弱、良好、强)各有一个值。 1.2 毫安 某些无线装置在搜索手机信号塔但未能检测到信号时会增加耗电量。随着信号强度的增加,这些值可能保持不变或变小。如果您只提供一个值,则所有强度都使用同一个值。如果您提供两个值,则第一个值在无信号时使用,第二个值用于所有其他信号强度,以此类推。
bluetooth.controller.idle 蓝牙控制器在空闲时的平均电流消耗量(毫安)。 - 这些值并不是估算值,而是从控制器的数据表中提取出来的。如果有多种接收或发送状态,则采用这些状态的平均值。此外,系统现在将收集低功耗 (LE) 和蓝牙扫描的数据。

Android 7.0 及更高版本不再将蓝牙电量值用于 bluetooth.active(通过蓝牙 A2DP 播放音频时使用)和 bluetooth.on(在蓝牙开启但处于空闲状态时使用)。
bluetooth.controller.rx 蓝牙控制器在接收信号时的平均电流消耗量(毫安)。 -
bluetooth.controller.tx 蓝牙控制器在发送信号时的平均电流消耗量(毫安)。 -
bluetooth.controller.voltage 蓝牙控制器的平均工作电压(毫伏)。 -
modem.controller.sleep 调制解调控制器在休眠时的平均电流消耗量(毫安)。 0 毫安 这些值并不是估算值,而是从控制器的数据表中提取出来的。如果有多种接收状态,则采用这些状态的平均值。如果有多种发送状态,则从 Android 9 开始支持为每种发送状态指定一个值。
modem.controller.idle 调制解调控制器在空闲时的平均电流消耗量(毫安)。 -
modem.controller.rx 调制解调控制器在接收信号时的平均电流消耗量(毫安)。 -
modem.controller.tx 调制解调控制器在以不同的 RF 发送信号时的平均电流消耗量(毫安)。这是一个多值条目,每个发射能级有一个值。 100 毫安、200 毫安、300 毫安、400 毫安、500 毫安
modem.controller.voltage 调制解调控制器的平均工作电压(毫伏)。 -
wifi.controller.idle Wi-Fi 控制器在空闲时的平均电流消耗量(毫安)。 - 这些值并不是估算值,而是从控制器的数据表中提取出来的。如果有多种接收或发送状态,则采用这些状态的平均值。
wifi.controller.rx Wi-Fi 控制器在接收信号时的平均电流消耗量(毫安)。 -
wifi.controller.tx Wi-Fi 控制器在发送信号时的平均电流消耗量(毫安)。 -
wifi.controller.voltage Wi-Fi 控制器的平均工作电压(毫伏)。 -
cpu.speeds 这是一个多值条目,以千赫 (KHz) 为单位列出 CPU 可能支持的每个速率。 125000 千赫、250000 千赫、500000 千赫、1000000 千赫、1500000 千赫 条目的数量和顺序必须与 cpu.active 中的毫安条目相一致。
cpu.idle CPU(和 SoC)处于系统挂起状态时系统消耗的总电量。 3 毫安 -
cpu.awake CPU 处于调度空闲状态(内核空闲循环)时消耗的额外电量;系统没有处于系统挂起状态。 50 毫安 您的平台可能在不同的耗电水平上存在多种空闲状态;针对时间较长的调度空闲(几毫秒)可以选择一种有代表性的空闲状态。检查您的测量设备上的电量图,并选择 CPU 耗电量最低时的样本,丢弃当 CPU 退出空闲状态时的较高耗电量样本。
cpu.active CPU 以不同速度运行时消耗的额外电量。 100 毫安、120 毫安、140 毫安、160 毫安、200 毫安 此值代表 CPU 供电通道以不同速率运行时消耗的电量。在内核中设定每个耗电量所允许的最大速率并限制 CPU 以该速率运行。条目的数量和顺序应与 cpu.speeds 中的条目的数量和顺序相一致。
cpu.clusters.cores 每个 CPU 集群所包含的核心数。 4、2 仅适用于具有异构 CPU 架构的设备。条目的数量和顺序应与适用于 cpu.active 和 cpu.speeds 的集群的条目的数量相一致。第一个条目表示 cluster0 中的 CPU 核心数,第二个条目表示 cluster1 中的 CPU 核心数,依此类推。
battery.capacity 总电池容量(以毫安时为单位)。 3,000 毫安时 -

低功耗 (LE) 和蓝牙扫描

对于运行 Android 7.0 的设备,系统为低功耗 (LE) 扫描和蓝牙网络流量(例如:RFCOMM 和 L2CAP)收集数据并将这些活动与初始化应用相关联。蓝牙扫描与初始化扫描的应用有关,但批量扫描与后者无关(而是与蓝牙应用有关)。对于扫描 N 毫秒的应用,扫描耗时为 N 毫秒接收时间和 N 毫秒发射时间;所有剩余的控制器时间被分配至网络流量或蓝牙应用。