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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM