安卓性能测试(四):耗电量(功耗计算)

这里说的是通过cpu,wifi,屏幕之类的功耗来

计算公式:

功耗的计算=CPU消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗+Wi-Fi连接消耗+Wake lock消耗+屏幕亮度的功耗

首先说CPU的耗电:

1 获取power_profile.xml文件:

每台android手机都在power_profile.xml中定义了各个硬件的单位时间的耗电量,单位mAh,意思是一个小时,能耗电多少mAh:

(1)power_profile.xml 存放在 /system/framework/framework-res.apk 包里;

(2)使用apktool将apk反编译,然后在 $output/res/xml 文件夹下找到该文件

power_profile.xml文件如下:

2 获取app的cpu时间(jiffies,1jiffies = 10ms):

(1)获取app的pid:adb shell ps | grep packagename

(2)获取pid执行时间:adb shell cat /proc/${pid}/stat

这个文件中的第14列到17列相加得到的就是从开机到此刻,app一共占用多少cpu时间,这里的单位是jiffies(记为systime)

(3)在测试场景下,两次systime相减得到的时间即为app的进程占用的cpu的时间,注意jiffies转换成s(app_total_time);

3 计算cpu的耗电量:

(1)获得测试时间内在各个频率下的占用时间,这个是整个系统占用时间:

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

(2)计算测试时间内每个频率的占用时间:

如:频率a占用了3s,频率b占用了2s,

则频率a的占用时间为 3 / 5 * app_total_time 

(3)在power_profile.xml中定义该频率下的耗电,将对应时间转换成h,相乘即可得到该频率下的耗电;

(4)将各频率下的耗电相加就得到了该进程的耗电;

接下来计算network,screen,sensor的耗电,相加就是app的耗电。

ps:这种方法可以直接插着usb线来计算,(可能有人会说连usb线的话,会不会cpu的频率一直会高速运行就不准了,这里试验过在连接usb和不连usb线进行对比,发现cpu的功耗差别很低,可以忽略,所以插usb线对cpu的耗电测试没有影响)

发布了102 篇原创文章 · 获赞 6 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/tt75281920/article/details/105284862