Android耗電分析之Battery Historian工具使用

xiangzhihong發表於2023-02-08

Battery-Historian是谷歌推出的一款專門分析Bugreport的工具,是谷歌在2015年I/O大會上推出的一款檢測執行在android5.0(Lollipop)及以後版本的裝置上電池的相關資訊和事件的工具,是一款對於分析手機狀態,歷史執行情況很好的視覺化分析工具。

當裝置在使用電池的時候,它可以使開發者們看到系統級和應用級事件圖表,在圖表時間軸上可以縮放和平移,能夠直觀的看到自上一次充滿電到現在裝置電池的統計彙總資訊,它可以選中一個應用程式來檢查該應用影響電池電量的一些引數,並且可以對比兩個bugreport檔案資訊分析,並對其電池關鍵區別點做高亮顯示。

不過,需要注意的是,battery historian在使用時候不能在充電,同時確保裝置執行在Android 5.0及以上版本。而對於Android8.0及其以上版本,我們更推薦使用Android Studio自帶的Energy Profiler工具。

一、Battery Historian環境

battery historian分析需要安裝Docker,其安裝和執行方法官方有詳細的說明:Battery Historian安裝。可能在本地安裝Battery Historian環境還比較繁瑣,此次推薦一個別人搭建好的地址:https://bathist.ef.lc/
image.png

二、生成耗電報告

耗電統計是系統元件,伴隨系統執行的整個過程,也就是說只要系統在執行它就會一直統計耗電資料。這個統計是基於軟體層面實現的,不同的硬體模組配置了不同的引數,然後使用演算法進行估算,power_profile檔案的引數值OEM廠商必須測量並提供前實際值,所以不同的廠商是不一樣的。

另外,獲取統計報告的時候需要將重置統計,並斷開usb連線,並且不能處於充電狀態,否則會大大影響統計的結果。下面是使用步驟:

  1. 連線手機,開啟開發者模式,然後連線adb。
  2. 重置batterystats 資料, 手機始終在後臺收集batterystats和其他除錯資訊,重置的命令:
adb shell dumpsys batterystats –reset
  1. 持續使用我們需要測試的應用,然後匯出原始bugreport資料,匯出的命令:
//Android 7.0及以上版本
adb bugreport bugreport.zip


//Android 5.0及以上版本
adb bugreport > bugreport.txt

等待報告生成,會生成一個bugreport.zip或bugreport.txt檔案,如下圖。
image.png

三、Battery Historian 指標分析

開啟https://bathist.ef.lc/網站,選擇bugreport.zip檔案並上傳。
image.png
等待分析結果,分析完成之後,系統會生成如下的圖表。
image.png
圖表按類別進行組織,隨著時間的推移顯示每個類別的欄,如圖表的X軸上所示。不同顏色代表指標的不同狀態:比如Screen 紅色代表亮屏,白色代表關屏,具體滑鼠放在最左側的️上就會自動提示。

預設情況下,統計資訊是在執行基礎上維護的,Android也不記錄特定於應用程式的使用者空間wakelock轉換的時間戳。如果您希望Historian在時間線上顯示關於每個單獨喚醒鎖的詳細資訊,則應在開始實驗之前使用以下命令啟用完整喚醒鎖報告。

adb shell dumpsys batterystats --enable full-wake-history

然後,我們來看一下具體的指標,分析前我們需要選擇某個具體的應用:
image.png
頁面的右下角有幾個選項卡,可以用來檢視一些具體的效能資料:

  • System Stats:包含系統範圍的統計資訊,如單元訊號級別和螢幕亮度。這些資訊提供了裝置發生情況的整體情況。這對確保沒有外部事件影響特別有用。
  • App Stats :包含有關特定應用程式的資訊。使用左側的應用程式選擇窗格中排序應用程式下拉選單對應用程式列表進行排序。可以選擇一個特定的應用程式來檢視應用程式下拉選單的統計資訊。

同時,在選擇應用程式後,我們還可以選擇某個具體的場景進行分析,如下圖。
image.png

四、案例分析

使用battery historian進行電量分析時,通常有如下一些套路:

  1. 透過system stats 中screenon/off rate 平均亮滅屏耗電熟讀可以初步確認亮屏或者滅屏耗電是否有異常。
  2. 透過選取電量值觀察每格電量的消耗速度,確認耗電異常時間段和當前前臺應用,網路狀態,後臺job等資訊。
  3. 綜合當前亮度,網路狀態,後臺job ,前臺應用估算是否符合預期,確認是否當前配置環境問題,還是應用耗電異常。 

下面看幾個具體的案例場景:

1,充電慢問題:檢視充電電流值,確認充電電流是否符合預期。檢視充電過程是否有異常job在長時間執行,如果有異常job耗電也會降低充電電流。檢視對應電池溫度是否有高溫現象,電池溫度過高會限制充電電流。
image.png

2,發熱問題:透過batterystats檢視當前發熱情況,找到溫度最高區間,綜合當前網路,亮度,應用確認耗電情況是否符合預期。如耗電電流不大,但是溫度確持續增加,大機率環境無法散熱導致,比如太陽光直射,物品覆蓋無法散熱。
image.png

3,亮屏耗電問題:當出現亮屏耗電時,先檢查網路狀態,亮度狀態,是否高耗電應用。不同網路耗電排行5G>4G>wifi,高亮下耗電會急劇增加,遊戲相機場景會耗電大。
比如,下面的場景是使用者反饋白天耗電快場景(4G下,高亮,加上後臺GPS長時間定位)。
image.png

4,息頻耗電問題:息屏場景,部分app會透過音訊持鎖來給自己保活。透過檢視audio和wakelock狀態可以確認此類問題。app頻繁網路包喚醒系統(應用喚醒頻次低於1min),同樣也會引起耗電快。
比如,下面的場景使用者反饋息屏耗電快場景:從batteryhistorian可以看到xfPlay,一直持有音訊鎖給自己保活,導致系統無法休眠從而息屏耗電。
image.png

5,息屏異常耗電問題:所有資訊都符合預期,但是還是耗電快,此種情況可能是有異常器件漏電問題。
比如,下面的場景息屏耗電場景,喚醒週期超過2min,休眠比良好,但是耗電依舊很大。有可能是器件漏電,需要專業功耗工程師進一步分析。
image.png

  1. 電量追趕問題:當發現耗電電流超過理論值,並且無異常發熱,大機率是出現了電量追趕問題。當計算出來的真實電量和實際電量有差異時,實際電量就會快速下降追趕至真實電量,表現就是30s或者60s一格電的速度去追趕。
    比如,息屏耗電場景平均耗電電流5466ma,理論手機不會出現這麼大電流(。此時溫度正常,大機率是出現了虛電,電量追趕問題,需要從kernel 日誌進一步分析確認。
    image.png

Battery Historian圖形化工具,可以非常直觀檢視歷史耗電資訊,追溯到耗電場景。對於一般使用者,Battery Historian分析簡單耗電問題已經足夠。不過,對於更深的耗電問題,則需要更多的輔助日誌或者dump 由更專業工程師進一步分析。

相關文章