Batterystats & Battery Historian Walkthrough
This walkthrough shows the basic usage and workflow for the Batterystats tool and the Battery Historian script.
Batterystats collects battery data from your device, and Battery Historian converts that data into an HTML visualization that you can view in your Browser. Batterystats is part of the Android framework, and Battery Historian is open-sourced and available on GitHub at https://github.com/google/battery-historian.
Battery Historian 用来把收集到的数据转换成html，它是个开源项目，请看：https://github.com/google/battery-historian
What it's good for:
- Showing you where and how processes are drawing current from the battery.
- Identifying tasks in your app that could be deferred or even removed to improve battery life.
- A mobile device with Developer Options enabled running Android 5.0 or higher.
- Download the open-source Battery Historion Python script from GitHub (https://github.com/google/battery-historian).
下载 Battery Historion Python
- Unzip the file to extract the Battery Historian folder. Inside the folder, find the
historian.pyfile and move it to the Desktop or another writable directory.
解压后，拷贝 scripts/historian.py 到一个有写权限的目录，如~/Android/batterystats
- Connect your mobile device to your computer.
- On your computer, open a Terminal window.
- Change to the directory where you've saved
进入到 historian.py 所在目录。
- Shut down your running adb server.
- Restart adb and check for connected devices.
查看连接的设备,如下图：注意设备要打开调试模式。 $adb devices
If you don't see any devices, make sure your phone is connected, and USB Debugging is turned on, and then kill and restart adb.
- Reset battery data gathering.
运行截取电量命令,其中--reset选项清空原有的数据，这样只记录你的应用消耗的电量数据。 $adb shell dumpsys batterystats --reset
Resetting erases old battery collection data; otherewise, the output will be huge.
- Disconnect your device from your computer so that you are only drawing current from the device's battery.
- Play with your app for a short time.
- Reconnect your phone.
- Make sure your phone is recognized:
> adb devices
- Dump all battery data. This can take a while:
把电量数据输出到一个文本文件。 $adb shell dumpsys batterystats > ~/Android/batterystats/batterystats.txt
- Create a HTML version of the data dump for Battery Historian:
$python historian.py batterystats.txt > batterystats.html
- Open the
batterystats.htmfile in your browser.
- Continue with Battery Historian Charts.
Summary https://github.com/google/battery-historian > cd ~/Android/batterystats > adb kill-server > adb devices > adb shell dumpsys batterystats --reset <disconnect and play with app>...<reconnect> > adb devices >adb shell dumpsys batterystats > ~/Android/batterystats/batterystats.txt > python historian.py batterystats.txt > batterystats.html
You should also read
The Battery Historian chart graphs power-relevant events over time.
Each row shows a colored bar segment when a system component is active and thus drawing current from the battery. The chart does not show how much battery was used by the component, only that the app was active. Charts are organized by category.
- battery_level: When the battery level was recorded and logged. Reported in percent, where 093 is 93%. Provides an overall measure of how fast the battery is draining.
- top: The application running at the top; usually, the application that is visible to the user. If you want to measure battery drain while your app is active, make sure it's the top app. If you want to measure battery drain while your app is in the background, make sure it's not the top app.
- wifi_running: Shows that the Wi-Fi network connection was active.
- screen: Screen is turned on.
- phone_in_call: Recorded when the phone is in a call.
- wake_lock: App wakes up, grabs a lock, does small work, then goes back to sleep. This is one of the most important pieces of information. Waking up the phone is expensive, so if you see lots of short bars here, that might be a problem.
- running: Shows when the CPU is awake. Check whether it is awake and asleep when you expect it to be.
- wake_reason: The last thing that caused the kernel to wake up. If it's your app, determine whether it was necessary.
- mobile_radio: Shows when the radio was on. Starting the radio is battery expensive. Many narrow bars close to each other can indicate opportunities for batching and other optimizations.
- gps: Indicates when the GPS was on. Make sure this is what you expect.
- sync: Shows when an app was syncing with a backend. The sync bar also shows which app did the syncing. For users, this can show apps where they might turn syncing off to save battery. Developers should sync as little as possible and only as often as necessary.
Note: Not every chart will show every category.
You can gather additional information from the
batterystats.txt file where you saved the output from the batterystats command.
Open the file in a text editor and search for:
Battery History: A time series of power-relevant events, such as screen, Wi-Fi, and app launch. These are also visible through Battery Historian.
Per-PID Stats: How long each process ran.
Statistics since last charge: System-wide statistics, such as cell signal levels and screen brightness. Provides an overall picture of what's happening with the device. This information is especially useful to make sure no external events are affecting your experiment.
Estimated power use (mAh)by UID and peripheral: This is currently an extremely rough estimate and should not be considered experiment data.
Per-app mobile ms per packet: Radio-awake-time divided by packets sent. An efficient app will transfer all its traffic in batches, so the lower this number the better.
All partial wake locks: All app-held wakelocks, by aggregate duration and count.