Battery Historian工具

来源:互联网 发布:中国科学技术大学 知乎 编辑:程序博客网 时间:2024/05/16 14:01

手机耗电与统计
耗电量计算:
W(电功率)=UI*T
由于在一部机器中,电压值U是恒定不变的(一般如此),因此可以忽略掉参数U,用电流及时间即可表示电量,即:
Q(电容量,单位: mAh)= I * t 表示电量

手机耗电= 硬件(屏幕,CPU,WIFI,蓝牙…)+ 软件(APP)

Android耗电数据统计

Framework记录各个部件(Wi-Fi chipset, cellular radio, Bluetooth, GPS, display, CPU)在不同状态的运行时间
OEM维护power_profile.xml文件,提供电池数据容量和各个部件的各种情况下的电流数据(google官网提供测量方法:
https://source.android.com/devices/tech/power/component.html
https://source.android.com/devices/tech/power/values.html)
计算后得到电池耗电曲线图

系统关键类:
电量计算:
frameworks\base\core\java\com\android\internal\os\BatteryStatsHelper.java
frameworks\base\core\java\com\android\internal\os\PowerProfile.java
frameworks\base\core\java\com\android\internal\os\CpuPowerCalculator.java
frameworks\base\core\java\com\android\internal\os\BluetoothPowerCalculator.java
frameworks\base\core\java\com\android\internal\os\CameraPowerCalculator.java
frameworks\base\core\java\com\android\internal\os\FlashlightPowerCalculator.java
frameworks\base\core\java\com\android\internal\os\MobileRadioPowerCalculator.java
frameworks\base\core\java\com\android\internal\os\WakelockPowerCalculator.java
frameworks\base\core\java\com\android\internal\os\WifiPowerCalculator.java

电量统计:
frameworks\base\core\java\android\os\BatteryStats.java
frameworks\base\core\java\com\android\internal\os\BatteryStatsImpl.java
frameworks\base\core\java\com\android\internal\os\BatterySipper.java

系统性能优化大牛Brendan D. Gregg说过:一个性能问题当你找不到解决方法的时候,最后用图形表示出来
BatteryHistorian工具就是Google为帮助解决Android系统功耗问题而产生。
它的特点:
一款由Google提供的Android系统电量分析工具
Android 5.0 Lollipop (API level 21) and later
分析上次充满电到当前的电量使用数据
项目地址:https://github.com/google/battery-historian
2016 Google IO视频
《Android battery and memory optimizations》
https://events.google.com/io2016/schedule#day1/

安装环境:
GO语言
http://golang.org/doc/install
设置环境变量(Linux)
export GOPATH=HOME/workexportGOBIN=GOPATH/bin
export PATH=PATH:GOBIN
Python
https://python.org/downloads
JAVA
http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Git-下载source code,并加入到系统环境变量PATH
$ go get -d -u github.com/google/battery-historian/…
详见:https://github.com/google/battery-historian
注意:设置GOPATH和环境变量
翻墙工具:https://github.com/getlantern/lantern

使用方法:
1.运行工具
cd $GOPATH/src/github.com/google/battery-historian
go run setup.go
go run cmd/battery-historian/battery-historian.go

2.导出bugreport
$ adb bugreport > bugreport.txt

3.在google chrome中输入: http://localhost:9999 ,然后导入bugreport.txt
4.开始分析

各个参数的意义:
CPU runing: cpu运行的状态
Kernel only uptime: 只有kernell运行?
Userspace wakelock: 用户空间申请的锁
Screen: 屏幕是否点亮
Top app: 当前在内存中的应用,按内存占用率排序
Activity Manager Proc: 活跃的用户进程
Crashes(logcat): 某个时间点出现crash的应用
Doze: 是否进入doze模式
Device active: 和Doze相反
JobScheduler: 异步作业调度
SyncManager: 同步操作
Temp White List: 电量优化白名单
Phone call: 是否打电话
GPS: 是否使用GPS
Network connectivity: 网络连接状态(wifi、mobile是否连接)
Mobile signal strength: 移动信号强度(great\good\moderate\poor)
Wifi scan: 是否在扫描wifi信号
Wifi supplicant: 是否有wifi请求
Wifi radio: 是否正在通过wifi传输数据
Wifi signal strength: wifi信号强度
Wifi running: wifi组件是否在工作(未传输数据)
Wifi on: 同上
Audio: 音频子系统?
Camera: 相机是否在工作
Video:是否在播放视频
Foreground process: 前台进程
Package install: 是否在进行包安装
Package active: 包管理在工作
Battery level: 电池当前电量
Temperature: 电池温度
Plugged: 连接usb或者充电
Charging on: 在充电
Logcat misc: 是否在导出日志

根据不同的角度进行分析
比如:对单个应用进行耗电优化时,主要分析App Stat中相关数据

分析系统整体的功耗:结合History Stats和System Stats分析

高级功能:
重置耗电数据
adb shell dumpsys batterystats –reset
获得详细的唤醒锁数据
adb shell dumpsys batterystats –enable full-wake-history
注意:由于记录所有唤醒锁数据会导致日志数量超过上限(50M),因此最好在分析具体应用时使用上述操作,并在完成后执行
adb shell dumpsys batterystats –disable full-wake-history,否则,导出的bugreport由于太大而无法解析。
Kernel trace analysis (用于分析Kenel唤醒源和waklock activities
在此不详细介绍)
Powermonitor analysis

0 0
原创粉丝点击