Android CPU耗電量測試
在測試Android app時,不僅僅要關注app的功能,也好關注app的性能指標,cpu、內存、流量、電量等。簡單介紹下電量測試中的cpu耗電。
影響耗電的因素
- CPU
- Screen
- Network (3G/wifi)
- sensor & gps
- WakeLock
- …
電量測試方法
- 安裝電池管理的軟件,管家、衛士一類的軟件。
- 自己讀取Android的內核日志,電量變化廣播等。
- 物理設備,安培輪等
這里主要介紹讀取內核文件,計算出cpu的電量消耗。
步驟主要如下:
- 抓取指定app占用的cpu時間
- 獲取cpu在各個頻率下的運行時間
- 根據不同頻率下的不同耗電功率,計算出總的耗電消耗。
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執行時間
- 獲取pid,
adb shell ps | grep {appName}
或者adb shell top -n 1 | grep ${appName}
- 獲取pid執行時間,
cat /proc/${pid}/stat
, 這個文件中的第14列到17列相加得到的就是從開機到此刻,app一共占用多少cpu時間(設這里值為T1),這里的單位是jiffies, 這個單位的意思是cpu的運算次數,如果cpu的頻率為1G,那么1 jiffies = 1/1G 秒。 - 不斷去
cat /proc/${pid}/stat
,獲取cpu占用時間,減去第二步的T1,就是這段時間app的cpu占用時間。 - 獲取cpu在不同頻率下的工作幾率。android的cpu會在不同主頻下工作,/sys/devices/system/cpu/cpu0/cpufreq/stats/time_instate
放了cpu在各個頻段的占用時間,注意是整個系統占用時間,根據這個幾率,計算出cpu的每個頻率下的工作時間,然后再乘以power_profile.xml中定義的單位耗電,累加得到cpu消耗。 - http://www.yeetrack.com/?p=1045