Battery-Historian是谷歌推出的一款專門分析Bugreport的工具,是谷歌2015年I/O大會上推出的一款檢測運行在android5.0(Lollipop)及以后版本的設備上電池的相關信息和事件的工具,是一款對于分析手機狀態,歷史運行情況很好的可視化分析工具。
當設備在使用電池的時候,它可以使開發者們看到系統級和應用級事件圖表,在圖表時間軸上可以縮放和平移,能夠直觀的看到自上一次充滿電到現在設備電池的統計匯總信息,它可以選中一個應用程序來檢查該應用影響電池電量的一些參數,并且可以對比兩個bugreport文件信息分析,并對其電池關鍵區別點做高亮顯示。
一、Battery Historian安裝:
Github上有本地安裝和使用方法:https://github.com/google/battery-historian/
逃課教程:直接使用網絡搭建共享網站https://bathist.ef.lc/
二、生成bugreport
1. 接手機,打開開發者模式(設置->關于手機->版本信息->連續點擊版本號),連接adb。
2. 重置batterystats 數據, 手機始終在后臺收集batterystats和其他調試信息。重置會清除舊電池采集數據.
adbshell dumpsys batterystats –reset
3. 使用你的應用程序,正常使用手機耗電。
4. 導出原始bugreport數據(bugreport導出會持續2-5min,期間勿斷開連接)
adbbugreport > bugreport.txt
有的會直接生成在當前路徑下執行 start . 查看當前路徑是否有對應bugreport
三、Battery Historian 指標詳解
SystemStats選項卡:包含系統范圍的統計信息,如單元信號級別和屏幕亮度。這些信息提供了設備發生情況的整體情況。這對確保沒有外部事件影響特別有用。
AppStats選項卡:包含有關特定應用程序的信息。使用左側的應用程序選擇窗格中排序應用程序下拉列表對應用程序列表進行排序??梢赃x擇一個特定的應用程序來查看應用程序下拉列表的統計信息。
要查找特定應用程序的數據:將其包名稱輸入位于可視化左側下方應用程序選擇下的兩個下拉菜單中的較低位置
選擇特定的應用程序時,以下數據可視化類別將更改為顯示應用程序特定的數據而不是系統范圍的數據:
SyncManager.
Foreground process.
Userspace Wakelock.
Top app.
JobScheduler.
Activity Manager Proc.
四、通用分析思路
1、通過system stats 中screenon/off rate 平均亮滅屏耗電熟讀可以初步確認亮屏或者滅屏耗電是否有異常。 2、通過選取電量值觀察每格電量的消耗速度,確認耗電異常時間段和當前前臺應用,網絡狀態,后臺job等信息。 3、綜合當前亮度,網絡狀態,后臺job ,前臺應用估算是否符合預期,確認是否當前配置環境問題,還是應用耗電異常。
五、常見場景案例
- 充電慢問題:查看充電電流值,確認充電電流是否符合預期。查看充電過程是否有異常job在長時間執行,如果有異常job耗電也會降低充電電流。查看對應電池溫度是否有高溫現象,電池溫度過高會限制充電電流。
2. 發熱問題:通過batterystats查看當前發熱情況,找到溫度最高區間,綜合當前網絡,亮度,應用確認耗電情況是否符合預期。如耗電電流不大,但是溫度確持續增加,大概率環境無法散熱導致,比如太陽光直射,物品覆蓋無法散熱。
3. 亮屏耗電問題:當出現亮屏耗電時,先檢查網絡狀態,亮度狀態,是否高耗電應用。不同網絡耗電排行5G>4G>wifi,高亮下耗電會急劇增加,游戲相機場景會耗電大。
如下場景是用戶反饋白天耗電快場景,4G下,高亮,加上后臺GPS長時間定位,引起亮屏使用耗電大。
4. 息頻耗電問題:息屏場景,部分app會通過音頻持鎖來給自己?;?。通過查看audio和wakelock狀態可以確認此類問題。app頻繁網絡包喚醒系統(應用喚醒頻次低于1min),同樣也會引起耗電快。
如下場景就是用戶反饋息屏耗電快場景,從batteryhistorian可以看到xfPlay,一直持有音頻鎖給自己?;?,導致系統無法休眠從而息屏耗電。
5. 息屏異常耗電問題:所有信息都符合預期,但是還是耗電快,此種情況可能是有異常器件漏電問題。
如下場景息屏耗電場景,喚醒周期超過2min,休眠比良好,但是耗電依舊很大。有可能是器件漏電,需要專業功耗工程師進一步分析。
6. 電量追趕問題:當發現耗電電流超過理論值,并且無異常發熱,大概率是出現了電量追趕問題。當計算出來的真實電量和實際電量有差異時,實際電量就會快速下降追趕至真實電量,表現就是30s或者60s一格電的速度去追趕(各家參數會有差異)。
如下息屏耗電場景,平均耗電電流5466ma,理論手機不會出現這么大電流(手機平均電流極限2A左右,如是真實耗電會伴隨大量發熱)。此時溫度正常,大概率是出現了虛電,電量追趕問題,需要從kernel 日志進一步分析確認。
六、小結
Batteryhistorian圖形化工具,可以非常直觀查看歷史耗電信息,追溯到耗電場景。對于一般用戶,Batteryhistorian分析簡單耗電問題已經足夠。對于更深的耗電問題,則需要更多的輔助日志或者dump 由更專業工程師進一步分析。
參考文獻:https://developer.android.google.cn/topic/performance/power/setup-battery-historian