Battery Historian

  |   1 评论   |   868 浏览

Battery Historian是一款工具,用于检查运行Android 5.0 Lollipop(API级别21)及更高版本的Android设备上与电池相关的信息和事件,而该设备未插入。它允许应用程序开发人员在时间线上可视化系统和应用程序级事件通过平移和缩放功能,可轻松查看自设备上次充满电以来的各种汇总统计信息,并选择一个应用程序并检查影响所选应用程序特定电池的指标。它还允许两个错误报告的A / B比较,突出显示关键电池相关指标的差异。

入门

使用Docker

安装Docker

运行Battery Historian图像。选择一个端口号,并用``下面的命令替换该号码:

docker -- run -p <port>:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999

对于Linux和Mac OS X:

  • 就是这样,你完成了!历史学家将在 http://localhost:

对于Windows:

  • 您可能必须在BIOS中启用虚拟化

  • 一旦你启动Docker,它应该告诉你它正在使用的机器的IP地址。例如,如果IP地址是123.456.78.90,Historian将在http://123.456.78.90:

有关端口转发的更多信息,请参阅Docker文档

从源代码构建

确保你至少有Golang版本1.8.1:

  • 按照http://golang.org/doc/install上的说明下载和安装Go编译器,工具和库。
  • 根据http://golang.org/doc/code.html#Organization中的说明创建一个工作空间目录 。
  • 确保GOPATHGOBIN环境变量的设置适当并且添加到您的$PATH 环境变量。$GOBIN should be set to $GOPATH/bin
    • 对于Windows,您可以通过“系统”控制面板的“高级”选项卡上的“环境变量”按钮来设置环境变量。某些版本的Windows通过“系统”控制面板中的“高级系统设置”选项提供此控制面板。

    • 对于Linux和Mac OS X,可以将以下行添加到〜/ .bashrc或〜/ .profile文件(假设您的工作区是$ HOME / work):

      export GOPATH=$HOME/work
      export GOBIN=$GOPATH/bin
      export PATH=$PATH:$GOBIN
      
      

接下来,如果尚未安装,请从https://git-scm.com/downloads安装Git 。

接下来,确保安装了Python 2.7(不是Python 3!)。 如果不是,请查看https://python.org/downloads,并确保python被添加到你的$PATH环境变量中。

接下来,从http://www.oracle.com/technetwork/java/javase/downloads/index.html安装Java 。

接下来,下载Battery Historian代码及其依赖项:

$ go get -d -u github.com/google/battery-historian/...

最后,运行Battery Historian!

$ cd $GOPATH/src/github.com/google/battery-historian

# Compile Javascript files using the Closure compiler
$ go run setup.go

# Run Historian on your machine (make sure $PATH contains $GOBIN)
$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

请记住,您必须始终从$GOPATH/src/github.com/google/battery-historian目录中运行电池历史记录:

cd $GOPATH/src/github.com/google/battery-historian
go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

如何采取错误报告

要从Android设备上获取错误报告,您需要启用USB下的调试Settings > System > Developer Options。在Android 4.2及更高版本中,开发者选项屏幕默认为隐藏。您可以按照此处的说明启用此功能。

要从运行Android 7.0和更高版本的开发设备获取错误报告:

$ adb bugreport bugreport.zip

对于6.0及更低版本的设备:

$ adb bugreport > bugreport.txt

开始分析!

你现在都准备好了 运行historian并访问http:// localhost:9999并上传bugreport.txt文件以开始分析。

截图

时间线:

系统统计:

应用统计信息:

高级

重置聚合电池统计信息和历史记录:

adb shell dumpsys batterystats --reset

Wakelock分析

默认情况下,即使在运行的基础上维护汇总统计信息,Android也不会为特定于应用程序的用户空间wakelock转换记录时间戳。如果您希望Historian在时间线上显示每个单独的唤醒锁的详细信息,则应在开始实验之前使用以下命令启用完整的唤醒锁报告:

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

请注意,通过启用完全唤醒锁定报告,电池历史记录将在几个小时内溢出。短期试运行(3-4小时)使用此选项。

内核跟踪分析

生成一个记录内核唤醒源和内核唤醒锁活动的跟踪文件:

首先,将设备连接到台式机/笔记本电脑并启用内核跟踪日志记录:

$ adb root
$ adb shell

# Set the events to trace.
$ echo "power:wakeupsourceactivate" >> /d/tracing/set_event
$ echo "power:wakeupsourcedeactivate" >> /d/tracing/set_event

# The default trace size for most devices is 1MB, which is relatively low and might cause the logs to overflow.
# 8MB to 10MB should be a decent size for 5-6 hours of logging.

$ echo 8192 > /d/tracing/buffersizekb

$ echo 1 > /d/tracing/tracing_on

然后,将该设备用于预期的测试用例。

最后,提取日志:

$ echo 0 > /d/tracing/tracing_on
$ adb pull /d/tracing/trace <some path>

# Take a bug report at this time.
$ adb bugreport > bugreport.txt

注意:

历史学家绘制并实时关联事件(PST或UTC),而内核跟踪文件以jiffies(自引导时间以来的秒)记录事件。为了把这些事件联系起来,有一个脚本可以用来近似jiffies。当系统挂起并恢复时,脚本读取dmesg中记录的UTC时间。脚本的范围仅限于dmesg中存在的时间戳的数量。由于脚本在系统挂起时使用dmesg日志,因此每个设备都有不同的脚本,唯一的区别是它试图找到的设备特定的dmesg日志。这些脚本已经集成到Battery Historian工具本身中。

电力监测分析

电源监视器文件中的行应具有以下格式之一,并且格式在整个文件中应该是一致的:

<timestamp in epoch seconds, with a fractional component> <amps> <optional_volts>

要么

<timestamp in epoch milliseconds> <milliamps> <optional_millivolts>

来自电源监视器文件的条目将被覆盖在时间线图的顶部。

为确保电源监视器和错误报告时间表有所对应,请在运行任何电源监视器记录之前重置电池状态:

adb shell dumpsys batterystats --reset

停止电源监视器记录后,马上收到错误报告。

如果使用季风:

https://android.googlesource.com/platform/cts/+/master/tools/utils/monsoon.py下载AOSP季风Python脚本

# Run the script.
$ monsoon.py --serialno 2294 --hz 1 --samples 100000 -timestamp | tee monsoon.out

# ...let device run a while...

$ stop monsoon.py

修改原始文件

如果你想修改原始文件(pb / * / *。proto),首先下载需要的附加工具:

https://github.com/google/protobuf/blob/master/src/README.md安装协议缓冲区的标准C ++实现

下载Go proto编译器:

$ go get -u github.com/golang/protobuf/protoc-gen-go

编译器插件protoc-gen-go将安装在$ GOBIN中,它必须位于你的$ PATH协议编译器protoc中才能找到它。

对原始文件进行更改。

最后,使用重新生成已编译的Go原型输出文件regen_proto.sh

其他命令行工具
# System stats
$ go run cmd/checkin-parse/local_checkin_parse.go --input=bugreport.txt

# Timeline analysis
$ go run cmd/history-parse/local_history_parse.go --summary=totalTime --input=bugreport.txt

# Diff two bug reports
$ go run cmd/checkin-delta/local_checkin_delta.go --input=bugreport_1.txt,bugreport_2.txt

支持

如果您在此项目中发现错误,请提交问题:https//github.com/google/battery-historian/issues

执照

版权所有2016 Google,Inc.

根据Apache许可证2.0版(“许可证”)获得许可; 除遵守许可证外,不得使用此文件。您可以在获得许可证副本

http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不附有任何明示或暗示的保证或条件。请参阅许可证以获取有关许可证下的权限和限制的特定语言。

Read The Fucking Source

评论

  • Thomas 回复»

    请教,在运行go run setup.o的是出现了错误,是什么原因导致的,应该怎么解决啊

    TIM20180516104325png

发表评论

validate