器件功耗模型原理
谷歌提供了一套通用的器件耗电模型和配置方案,先对器件进行耗电因子拆解,建立器件功耗模型,得到一个器件耗电的计算公式。通过运行时统计器件的使用数据,代入功耗模型,就可以计算出器件的功耗。例如CPU功耗建模基本思路是在每个CPU频点的运行时长乘以该频点对应的功耗或电流值,累加所有频点的功耗,得到 CPU 的总功耗
测试出器件电流
由于每个型号的产品器件组成不一样,为了精准建模,一般OEM厂商都是会对自家机型进行参数测试和校准后更新到 power_profile.xml
场景 | 步骤 | xxx机型 | 备注 | ||
A1 | A2 | 结果 | power_profile.xml 填写记录 | ||
screen,full | 1.打开飞行模式,灭屏时间最长,其他的基础功能关 2.进入到日历应用界面 3.将亮度设置至最大(4095),待电流稳定后,测试5分钟,记录电流值A1(echo 4095 > /sys/class/backlight/panel0-backlight/brightness) 4.将亮度调整至为0,待电流稳定后,测试5分钟,记录电流值A2 (echo 0 > /sys/class/backlight/panel0-backlight/brightness) 5.A1-A2 | 1820.33 | 38.97 | 1781.36 | 已填写 |
screen,on | 1.打开飞行模式,灭屏时间最长,其他的基础功能关 2.进入到日历应用界面 3.将亮度调整至为0,待电流稳定后,测试5分钟,记录电流值A1 4.输入命令 adb shell"echo test > /sys/power/wake_lock 5.灭屏待机,待电流稳定后,测试5分钟,记录电流值A2 6.A1-A2 | 38.97 | 12.7 | 26.27 | 已填写 |
Bluetooth.on | 1.打开飞行模式 2.单独打开蓝牙,不连接任何设备,处于idle状态 3.灭屏待机 4.待电流稳定后,测试5分钟,记录电流值A2 5.A2-CPU.idle | 8.88 | 9.68 | 0.8 | 已填写 |
Bluetooth.active | 1.打开飞行模式,音量7格。 2.单独打开蓝牙,连接蓝牙耳机 3.播放音乐 4.灭屏 5.待电流稳定后,测试5分钟,记录电流值A1 6.亮屏,停止音乐,关闭蓝牙 7.插入模拟耳机,播放音乐 8.灭屏 9.待电流稳定后,测试5分钟,记录电流值A2 6.A1-A2 | 58.02 | 44.8 | 13.22 | 已填写 |
WiFi.on | 1.打开飞行模式 2.单独打开WiFi,不连接任何设备,处于idle状态 3.灭屏待机 4.待电流稳定后,测试5分钟,记录电流值A2 5.A2-CPU.idle | 8.88 | 9.91 | 1.03 | 已填写 |
WiFi.active | 1.打开飞行模式,中等亮度 2.单独打开WiFi,连接2.4G网络 分别做WLAN发送/接收信号 (下载:应用商店下载王者荣耀,电流取5min平均值 网速按已下载完的进度进行计算 上传:百度网盘上传文件 ) 3.待电流稳定后,测试5分钟,记录电流值A2、A1 4.(A2+A1)/2 | 403.4 (上传) | 447.44 (下载) | 425.42 | 已填写 |
WiFi.scan | 1.打开飞行模式,中等亮度 2.单独打开WiFi,不连接任何设备,处于idle状态 3.停留在WiFi设置界面 4.待电流稳定后,测试5分钟,记录电流值A1 5.按返回键,退回到设置界面 6.待电流稳定后,测试5分钟,记录电流值A2 5.A1-A2 | 199.64 | 153.56 | 46.08 | 已填写 |
Dsp.audio | 1.打开飞行模式,灭屏时间最长,其他的基础功能关 2.输入命令 adb shell"echo test > /sys/power/wake_lock 3.灭屏待机,待电流稳定后,测试5分钟,记录电流值A1 4.输入命令 adb shell"echo test > /sys/power/wake_unlock 5.插入模拟耳机 6.播放音乐 5.待电流稳定后,测试5分钟,记录电流值A2 6.A2-A1 | 12.7 | 44.8 | 32.1 | 已填写 |
Dsp.video | 1.打开飞行模式,灭屏时间最长,中等亮度,其他的基础功能关 2.插入模拟耳机 3.播放720p视频 4.待电流稳定后,测试5分钟,记录电流值A1 5.暂停播放 6.待电流稳定后,测试5分钟,记录电流值A2 7.A1-A2 | 194.44 | 135.31 | 59.13 | 已填写 |
camera.avg | 1.打开飞行模式,灭屏时间最长,最低亮度,其他的基础功能关 2.打开相机 3.默认拍照模式下预览 4.待电流稳定后,测试1分钟,记录电流值A1 5.手动6秒拍摄一次照片,测试一分钟,记录电流值A2 6.A2-A1 | 784.42 | 1054.59 | 270.17 | 已填写 |
camera.flashlight | 1.打开飞行模式,灭屏时间最长,最低亮度,其他的基础功能关 2.打开相机 3.默认拍照模式下预览 4.待电流稳定后,测试1分钟,记录电流值A1 5.打开闪光灯,测试一分钟,记录电流值A2 6.A2-A1 | 784.42 | 852.53 | 68.11 | 已填写 |
GPS.on | 1.打开飞行模式,中等亮度,关闭位置服务 2.进入到工模 3.进入到工模界面,进行搜星 4.待电流稳定后,测试5分钟,记录电流值A1 5.打开位置服务,进入到工模界面,进行搜星 6.待电流稳定后,测试5分钟,记录电流值A2 5.A2-A1 | 58.03 | 118.62 | 60.59 | 已填写 |
radio.active | 1.插卡,选择4G网络,中等亮度 2.做数据下载(浏览器下载王者荣耀,下载界面观察下载速率) 下载:应用商店下载王者荣耀,电流取5min平均值 网速按已下载完的进度进行计算 上传:百度网盘上传文件 ) 3.待电流稳定后,测试5分钟,记录电流值A1 4.做数据数据上传(百度云盘上传文件) 5.待电流稳定后,测试5分钟,记录电流值A2 6.(A2+A1)/2 | 646.42 (上传) | 541.86 (下载) | 594.14 | 已填写 |
radio.scanning | 1.插卡,选择4G网络 2.进入到屏蔽信号环境,让手机处于搜网状态 3.灭屏待机 4.出现持续大电流是开始记录,记录电流值A1 5.A1-CPU.idle | 暂无测试环境 | 等待测试数据或评估是否同小米14 pro | ||
radio.on | 1.插入4G单卡 2.成功注册上4G网络,且信号良好 3.灭屏待机 4.待电流稳定后,测试5分钟,记录电流值A1 5.A1-CPU.idle | 11.39 | 8.88 | 2.51 | 待对比小米14 pro 源码需要2个不同信号的数值 1. 无信号或弱网下电流值 2. 信号良好 |
battery.capacity | 电池规格书 | / | / | 5020 | 已填写 |
CPU.idle | 1.打开飞行模式 2.确保没有连接充电线及USB 3.灭屏待机 4.待电流稳定后,测试5分钟,记录电流值A1 | 8.88 | / | 8.88 | 已填写 |
cpu.awake | 1.打开飞行模式,其他的基础功能关 2.输入命令 adb shell"echo test > /sys/power/wake_lock 3.灭屏待机,待电流稳定后,测试5分钟,记录电流值A1 4.A1 | / | / | 12.7 | N/A 毕加索源码不使用了 |
功耗模型计算
Wifi示例计算
谷歌提供的功耗建模方案对 Wi-Fi 的功耗进行了分状态计算,不同状态下的功耗差异非常显著。具体来说,Wi-Fi 的功耗模型分为以下几个状态:
wifi.on:对应 Wi-Fi 打开时的基准电流。
wifi.active:对应 Wi-Fi 传输数据时的基准电流。
wifi.scan:对应 Wi-Fi 单次扫描的基准功耗。
Wi-Fi 数据传输的功耗:包括 controller.rx(接收数据)、controller.tx(发送数据)和 controller.idle(空闲状态)。
通过统计这些状态的持续时间或发生次数,乘以对应的电流值,就可以计算出 Wi-Fi 器件的总功耗。也可以基于收发的数据大小*单位耗电量得到总功耗
例如:adb shell dumpsys batterystats
以 Wi-Fi 为例,OEM 厂商可以进一步细化功耗模型,例如:
按频段建模:分别对 2.4GHz 和 5GHz Wi-Fi 进行独立建模。
信号强度影响:引入天线信号强度变化对基准电流的影响。
频点统计:统计 Wi-Fi 芯片在不同工作频点的时长,并按频点细化功耗模型。
通过这些优化,OEM 厂商可以设计出更符合自身设备特性的精准功耗模型,从而更准确地计算 Wi-Fi 的功耗。这种精细化的功耗建模需要根据具体产品的硬件方案进行定制化设计,以实现更高的精度和可靠性。