设备制造商必须在 /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 毫安 | - |
音频 | 通过 DSP 进行音频解码/编码时消耗的额外电量。 | 大约 10 毫安 | 用于 DSP 音频。 |
视频 | 通过 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 | 总电池容量(以毫安时为单位)。 | 3000 毫安时 | - |
低功耗 (LE) 和蓝牙扫描
对于运行 Android 7.0 的设备,系统会为低功耗 (LE) 扫描和蓝牙网络流量(例如 RFCOMM 和 L2CAP)收集数据并将这些活动与发起应用关联。蓝牙扫描会与发起扫描的应用关联,但批量扫描未与后者关联(而是与蓝牙应用关联)。对于扫描了 N 毫秒的应用,扫描耗时为 N 毫秒接收时间和 N 毫秒发射时间;所有剩余的控制器时间则会被分配至网络流量或蓝牙应用。