Battery Historian

本贴最后更新于 2510 天前,其中的信息可能已经时移世异

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:wakeup_source_activate" >> /d/tracing/set_event
$ echo "power:wakeup_source_deactivate" >> /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/buffer_size_kb

$ 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

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

  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Thomas

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

    TIM20180516104325png