• Android CPU耗电量测试


    Android CPU耗电量测试

    在测试Android app时,不仅仅要关注app的功能,也好关注app的性能指标,cpu、内存、流量、电量等。简单介绍下电量测试中的cpu耗电。

    影响耗电的因素

    • CPU
    • Screen
    • Network (3G/wifi)
    • sensor & gps
    • WakeLock

    电量测试方法

    1. 安装电池管理的软件,管家、卫士一类的软件。
    2. 自己读取Android的内核日志,电量变化广播等。
    3. 物理设备,安培轮等

    这里主要介绍读取内核文件,计算出cpu的电量消耗。

    步骤主要如下:

    1. 抓取指定app占用的cpu时间
    2. 获取cpu在各个频率下的运行时间
    3. 根据不同频率下的不同耗电功率,计算出总的耗电消耗。

    POWER_PROFILE.XML

    每个Android设备都存在这样的一个文件,这个文件定义了各个硬件的功率。不同的手机,内容不同。我的如下(单位mAh,意思是一个小时,能耗电多少mAh):

        <?xml version="1.0" encoding="utf-8"?>     <device name="Android">         <item name="none">0</item>         <item name="screen.on">71</item>         <item name="bluetooth.active">17</item>         <item name="bluetooth.on">0.3</item>         <item name="screen.full">380</item>         <item name="wifi.on">0.3</item>         <item name="wifi.active">96</item>         <item name="wifi.scan">70</item>         <item name="dsp.audio">44</item>         <item name="dsp.video">280</item>         <item name="radio.active">250</item>         <item name="radio.scanning">82</item>         <item name="gps.on">1</item>         <array name="radio.on">             <value>3.4</value>             <value>3.4</value>         </array>         <array name="cpu.speeds">             <value>12000000</value>             <value>10000000</value>             <value>800000</value>             <value>500000</value>             <value>200000</value>         </array>         <item name="cpu.idle">4</item>             <array name="cpu.active">             <value>577</value>             <value>408</value>             <value>249</value>             <value>148</value>             <value>55</value>         </array>         <item name="battery.capacity">2100</item>     </device> 

    如何得到power_profile.xml文件

    该文件存在手机的/system/framework/framework-res.apk包里,需要使用apk-tool对apk进行反编译,反编译后,在$output/res/xml文件夹中。

    获取APP执行时间

    1. 获取pid, adb shell ps | grep {appName}或者adb shell top -n 1 | grep ${appName}
    2. 获取pid执行时间,cat /proc/${pid}/stat, 这个文件中的第14列到17列相加得到的就是从开机到此刻,app一共占用多少cpu时间(设这里值为T1),这里的单位是jiffies, 这个单位的意思是cpu的运算次数,如果cpu的频率为1G,那么1 jiffies = 1/1G 秒。
    3. 不断去cat /proc/${pid}/stat,获取cpu占用时间,减去第二步的T1,就是这段时间app的cpu占用时间。
    4. 获取cpu在不同频率下的工作几率。android的cpu会在不同主频下工作,/sys/devices/system/cpu/cpu0/cpufreq/stats/time_instate
      放了cpu在各个频段的占用时间,注意是整个系统占用时间,根据这个几率,计算出cpu的每个频率下的工作时间,然后再乘以power_profile.xml中定义的单位耗电,累加得到cpu消耗。
    5. http://www.yeetrack.com/?p=1045
  • 相关阅读:
    Java的String类
    Java基本数据类型
    Java历史简介
    Java常量,变量,作用域!强转类型
    JAVA特性与JDK,JRE,JVM!
    JAVA历史简介
    JAVA多线程
    开博了
    quartz学习笔记(一)简单入门
    CentOS-64位安装mysql5.7
  • 原文地址:https://www.cnblogs.com/ITniu/p/7380414.html
Copyright © 2020-2023  润新知