1. 程式人生 > >Android-APP-CPU 耗電測試的例子

Android-APP-CPU 耗電測試的例子

轉載地址:http://testerhome.com/topics/2673

對比測試APP彈幕硬解和軟解的耗電量。
主要使用 CPU ,所以只考慮 CPU 的耗電。
因為耗時較長,用 UIautomator 自動修改設定和播放。
需要 Root。

資料來源:

/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
記錄了 CPU 從開機到讀取檔案時,在各個頻率下的執行時間,單位:10 mS
說明

PowerProfile
獲取 CPU 在各個頻率下執行時的平均電流,單位 mA。
說明 
第三方 ROM 一般是錯的。

/proc/[pid]/stat
程序已執行時間 utime + stime + cutime + cstime,pid 是程序號(adb shell ps)。

說明

ActivityManager
通過 PackageName 獲得 APP 下的程序號。
說明

測試場景:

準備工作:離線下載好待測視訊,開飛航模式,清理後臺。
1、記錄 APP 已經執行的時間 targetAppTimeBefor ,所有 APP 已經執行時間 totalTimeBefor ,CPU 在各個頻率的執行時間 timeInStateBefor[1] 、timeInStateBefor[2] 、……
2、播放有彈幕的視訊。
3、結束播放,記錄 APP 已經執行的時間 targetAppTimeAfter ,所有 APP 已經執行時間totalTimeAfter,CPU 在各個頻率的執行時間 timeInStateAfter[1] 、 timeInStateAfter[2] 、……
4、讀取 CPU 在各個頻率下執行時的平均電流 powerUsedOnDiffSpeeds[1] 、powerUsedOnDiffSpeeds[2] 、……

計算公式:

目標 APP 佔總 CPU 時間的比例:
ratio = (targetAppTimeAfter - targetAppTimeBefor) / (totalTimeAfter - totalTimeBefor)

CPU 總耗電:
totalPower = ((timeInStateAfter[1] - timeInStateBefor[1]) / 100 * powerUsedOnDiffSpeeds[1]) + ((timeInStateAfter[2] - timeInStateBefor[2]) / 100 * powerUsedOnDiffSpeeds[2]) + ……

目標 APP 的 CPU 耗電(單位:mAh):


appCpuTotalPower = cpuTotalPower * ratio / 3600