原文:https://source.android.com/devices/tech/power/values
设备制造商必须提供组件功耗配置文件/frameworks/base/core/res/res/xml/power_profile.xml
。
要测定电源配置文件的值,请使用测量设备使用功耗的硬件,并执行所需信息的各种操作。测量这些操作期间的所用功耗并计算值(根据需要从其他基线所用功耗中获得差异)。
由于功耗曲线的目标是适当地估计电池消耗,因此功率曲线值以电流(安培)给出。Android Framework 将电流乘以子系统处于活动状态的时间并计算mAh值,然后用于估计应用程序/子系统耗尽的电池量。
具有运行Android 7.0及更高版本的蓝牙,modem和Wi-Fi控制器的设备可以提供从芯片组数据获得的额外功耗值。
具有异构CPU的设备
具有异构体系结构CPU核心的设备的电源配置文件必须包含以下附加字段:
- 每个群集的CPU总数(以cpu.clusters.cores表示)。
- 每个群集支持的CPU速度。
- 每个群集的活动CPU功耗。
要区分群集的活动CPU功耗和支持的CPU速度,请将群集编号附加到阵列的名称中。群集编号按内核设备树中CPU核的顺序分配。例如,在具有两(2)个具有四(4)个核的集群的异构体系结构中:
- cluster0由cpu0-3组成
- cluster1由cpu4-7组成
Android Framework从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。
名称 | 描述 | 示例值 | 备注 |
---|---|---|---|
none | 无 | 0 | - |
screen.on | 屏幕以最小亮度打开时使用的额外功率。 | 200mA | 含触控和显示背光。在0亮度,而不是Android最小值(接近10或20%)。 |
screen.full | 与最小亮度的屏幕相比,屏幕处于最大亮度时使用的额外功率。 | 100mA-300mA | 将该值的一小部分(基于屏幕亮度)被添加到screen.on值以计算屏幕的使用功耗。 |
wifi.on | 打开Wi-Fi但未接收、传输或扫描时使用的额外功耗。 | 2mA | - |
wifi.active | 使用Wi-Fi发送或接收时的额外功耗。 | 31mA | - |
wifi.scan | 使用Wi-Fi扫描接入点时的额外功耗。 | 100mA | - |
dsp.audio | 使用DSP进行音频解码/编码时的额外功率。 | 14.1mA | 保留供将来使用。 |
dsp.video | 使用DSP进行视频解码时的额外功率。 | 54mA | 保留供将来使用。 |
camera.avg | 使用经典相机应用的相机子系统的平均功耗。 | 600mA | 运行预览的应用程序的粗略估计,每分钟捕获大约10个全分辨率图片。 |
camera.flashlight | 打开相机闪光灯模块时的平均功耗。 | 200mA | - |
gps.on | 使用GPS获取信号时的额外功耗。 | 50mA | - |
radio.active | 使用蜂窝无线电发送/接收时的额外功耗。 | 100mA-300mA | - |
radio.scanning | 使用蜂窝无线电寻呼塔时的额外功耗。 | 1.2mA | - |
radio.on | 开启蜂窝无线电时的额外功率。多值输入,每个信号强度一个(无信号,弱,中等,强)。 | 1.2mA | 一些无线电设备在搜索蜂窝塔并且没有检测到信号时会增加功率。值可以相同或随着信号强度的增加而减小。如果只提供一个值,则所有强度都使用相同的值。如果提供两个值,第一个用于无信号,第二个值用于所有其他强度,依此类推。 |
bluetooth.controller.idle | 空闲时蓝牙控制器的平均电流消耗(mA)。 | - | 这些值不是估算的,而是取自控制器的数据表。如果存在多个接收或发送状态,则采用这些状态的平均值。此外,系统现在为 低能耗(LE)和蓝牙扫描收集数据。Android N及更高版本不再为bluetooth.active(通过蓝牙A2DP播放音频时使用)和bluetooth.on(蓝牙开启但空闲时使用)使用蓝牙功耗值。 |
bluetooth.controller.rx | 接收时蓝牙控制器的平均电流消耗(mA)。 | - | - |
bluetooth.controller.tx | 发送时蓝牙控制器的平均电流消耗(mA)。 | - | - |
bluetooth.controller.voltage | 蓝牙控制器的平均工作电压(mV)。 | - | - |
modem.controller.idle | 空闲时modem控制器的平均电流消耗(mA)。 | - | 这些值不是估算的,而是取自控制器的数据表。如果存在多个接收或发送状态,则采用这些状态的平均值。 |
modem.controller.rx | 接收时modem控制器的平均电流消耗(mA)。 | - | - |
modem.controller.tx | 发送时modem控制器的平均电流消耗(mA)。 | - | - |
modem.controller.voltage | modem控制器的平均工作电压(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 | 多值输入,以KHz列出每个可能的CPU速度。 | 125000KHz,250000KHz,500000KHz,1000000KHz,1500000KHz | 条目的数量和顺序必须与cpu.active中的mA条目相对应。 |
cpu.idle | 当CPU(和SoC)处于系统休眠状态时系统汲取的总功耗。 | 3mA | - |
cpu.awake | CPU处于调度空闲状态时的额外功耗(内核空闲循环); 系统未处于系统休眠状态。 | 50mA | 您的平台可能有多个闲置状态,使用不同的功耗水平; 为较长时间的调度程序空闲(几毫秒)选择代表性空闲状态。检查测量设备上的功率图并选择CPU处于最低功耗的样本,丢弃CPU退出空闲时的较高样本。 |
cpu.active | CPU以不同速度运行时的额外功耗。 | 100mA,120mA,140mA,160mA,200mA | 值表示以不同速度运行时CPU轨道使用的功耗。将内核中的最大速度设置为允许的每个速度,并以该速度将CPU固定。条目的数量和顺序对应于cpu.speeds中条目的数量和顺序。 |
cpu.clusters.cores | 每个CPU群集包含的核数。 | 4,2 | 仅适用于具有异构CPU架构的设备。条目数和顺序应与cpu.active和cpu.speeds的集群条目数相匹配。第一个条目表示cluster0中的CPU核心数,第二个条目表示cluster1中的CPU核心数,依此类推。 |
电池容量 | 总电池容量,单位为mAh。 | 3000mAh的 | - |
低能耗(LE)和蓝牙扫描
对于运行Android 7.0的设备,系统会收集低能耗(LE)扫描和蓝牙网络流量(如RFCOMM和L2CAP)的数据,并将这些活动与启动应用程序相关联。蓝牙扫描与启动扫描的应用程序相关联,但批量扫描不是(与蓝牙应用程序相关联)。对于扫描N毫秒的应用程序,扫描的成本是n毫秒的rx时间和N毫秒的tx时间; 所有剩余控制器时间都分配给网络流量或蓝牙应用程序。