设备制造商必须在 /frameworks/base/core/res/res/xml/power_profile.xml
中提供组件功耗配置文件。
要确定功耗配置文件的值,请使用可测量设备功耗的硬件,并执行需要信息的各种操作。测量这些操作期间的功耗,并计算值(根据需要推导出与其他基准功耗用量的差异)。
由于功耗配置文件的目标是恰当估算电池耗电量,因此功耗配置文件值以电流(安培)为单位给出。Android 框架将电流乘以子系统处于活动状态的时间,并计算 mAh 值,然后使用该值来估算应用或子系统消耗的电量。
运行 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 框架从 sysfs
文件(位于:/sys/devices/system/cpu/cpu<number>/cpufreq/stats
中)读取统计信息时,会使用这些 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 | 当 Wi-Fi 开启但未接收、传输或扫描时使用的额外功耗。 | 2 毫安 | - |
wifi.active | 通过 Wi-Fi 传输或接收时使用的额外功耗。 | 31 毫安 | - |
wifi.scan | 当 Wi-Fi 扫描接入点时使用的额外功耗。 | 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 | 蓝牙控制器空闲时的平均电流消耗 (mA)。 | - | 这些值不是估计值,而是取自控制器的规格书。如果存在多个接收或发射状态,则取这些状态的平均值。此外,系统现在收集 低功耗 (LE) 蓝牙扫描 的数据。 Android 7.0 及更高版本不再使用蓝牙功耗值 bluetooth.active(通过蓝牙 A2DP 播放音频时使用)和 bluetooth.on(蓝牙开启但空闲时使用)。 |
bluetooth.controller.rx | 蓝牙控制器接收时的平均电流消耗 (mA)。 | - | |
bluetooth.controller.tx | 蓝牙控制器发射时的平均电流消耗 (mA)。 | - | |
bluetooth.controller.voltage | 蓝牙控制器的平均工作电压 (mV)。 | - | |
modem.controller.sleep | 调制解调器控制器睡眠时的平均电流消耗 (mA)。 | 0 毫安 | 这些值不是估计值,而是取自控制器的规格书。如果存在多个接收状态,则取这些状态的平均值。如果存在多个发射状态,则从 Android 9 开始支持为每个发射状态指定一个值。 |
modem.controller.idle | 调制解调器控制器空闲时的平均电流消耗 (mA)。 | - | |
modem.controller.rx | 调制解调器控制器接收时的平均电流消耗 (mA)。 | - | |
modem.controller.tx | 调制解调器控制器在不同射频功率级别发射时的平均电流消耗 (mA)。这是一个多值条目,每个发射功率级别一个值。 | 100 毫安, 200 毫安, 300 毫安, 400 毫安, 500 毫安 | |
modem.controller.voltage | 调制解调器控制器的平均工作电压 (mV)。 | - | |
wifi.controller.idle | Wi-Fi 控制器空闲时的平均电流消耗 (mA)。 | - | 这些值不是估计值,而是取自控制器的规格书。如果存在多个接收或发射状态,则取这些状态的平均值。 |
wifi.controller.rx | Wi-Fi 控制器接收时的平均电流消耗 (mA)。 | - | |
wifi.controller.tx | Wi-Fi 控制器发射时的平均电流消耗 (mA)。 | - | |
wifi.controller.voltage | Wi-Fi 控制器的平均工作电压 (mV)。 | - | |
cpu.speeds | 这是一个多值条目,列出了每种可能的 CPU 速度,单位为 KHz。 | 125000 KHz, 250000 KHz, 500000 KHz, 1000000 KHz, 1500000 KHz | 条目的数量和顺序必须与 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 | 电池总容量,单位为 mAh。 | 3000 毫安时 | - |
低功耗 (LE) 蓝牙扫描
对于运行 Android 7.0 的设备,系统会收集低功耗 (LE) 扫描和蓝牙网络流量(例如 RFCOMM 和 L2CAP)的数据,并将这些活动与启动应用程序关联起来。蓝牙扫描与启动扫描的应用程序关联,但批量扫描则不关联(而是与蓝牙应用程序关联)。对于扫描 N 毫秒的应用程序,扫描的成本为 N 毫秒的接收时间和 N 毫秒的发射时间;所有剩余的控制器时间都分配给网络流量或蓝牙应用程序。