Android性能分析---bugreport & Ba

作者: sunnyaxin | 来源:发表于2018-07-24 16:08 被阅读15次

    随着Mobile App应用的不断演进,我们已经不能满足于仅仅实现功能,同时还要追求更高的质量和性能,因此耗电量、CPU占有率等性能问题显得越来越重要。而以耗电量来举例,其性能问题是与硬件离不开的,即要排查识别高耗能硬件,通过软件的方式,来排查,是哪些操作或者代码使得硬件在疯狂耗能,并定位问题后进行解决。

    Bug Report

    Bug Report 包含各种能够帮助我们修复Bug的设备日志,堆栈跟踪和其他一些诊断信息。可以通过命令adb bugreport来获取bugreport文件信息:

    1. 生成bugreport文件到指定目录
    adb bugreport <bug_report_path>
    

    若不指定路径,则会生成到local目录

    1. 为指定设备生成bugreport
    adb devices
    adb -s <device_serial_number> bugreport
    

    bugreport 目录文件

    bugreport 目录结构

    通过adb命令生成的通常是一个ZIP文件,且该文件命名为bugreport-<BUILD_ID>-<DATE>.zip,解压缩后,该文件夹中包含多个文件:

    1. bugreport-<BUILD_ID>-<DATE>.txt: 最重要的文件,输出的诊断信息,包含:系统服务(dumpsys),错误日志(dumpstate),和系统日志信息(logcat)
    2. version.txt: Android 的发布号
    3. systrace.txt: 如果系统systrace是可用的,则会包含这个文件,关于Systrace tool的介绍见官网
    4. FS 文件夹dumpstate工具会将设备文件系统下的文件拷贝到FS文件夹下

    Battery Historian

    根据上面的内容可知,bugreport的生成非常简单,目录结构也很好理解,但问题是,这个生成的文件非常庞大,包含的信息量也很大,关于具体解析bug report的文件见官网,可以感受到其中的痛苦,因此Google针对Android5.0(API21)以上的系统开发了一个分析工具Battery Historian来解析bugreport文件,并用web图形的形式展示出来。

    Battery Historian工具需要使用bugreport中的 Battery History数据,我们可以在bugreport.txt中找到Battery History 数据拦的信息:

    DUMP OF SERVICE batterystats:
    Battery History (0% used, 192 used of 256KB, 6 strings using 280):
                        0 (10) RESET:TIME: 2018-07-24-15-58-31
                        0 (2) 100 c41000e1 status=discharging health=good plug=none temp=300 volt=4326 charge=0 +running +wake_lock +wifi_radio +screen phone_state=off phone_signal_strength=great brightness=dim +wifi_running +wifi wifi_signal_strength=3 wifi_suppl=completed top=u0a1404:"com.thoughtworks.zion.host.demo"
                        0 (2) 100 c41000e1 user=0:"0"
                        0 (2) 100 c41000e1 userfg=0:"0"
                 +1s605ms (1) 100 c41000e1 wifi_signal_strength=2
                 +4s617ms (1) 100 c41000e1 wifi_signal_strength=3
                +15s166ms (2) 100 c41000e1 -top=u0a1404:"com.thoughtworks.zion.host.demo"
                +15s166ms (2) 100 cc1000e1 +wifi_scan +top=u0a58:"com.huawei.android.launcher"
                +16s417ms (2) 100 c41000e1 -wifi_scan -top=u0a58:"com.huawei.android.launcher"
                +16s660ms (2) 100 c41000e1 +top=u0a1403:"com.huawei.works"
                +16s794ms (2) 100 c41000e1 pkgactive=u0a1403:"com.huawei.works"
                +37s742ms (1) 100 cc1000e1 +wifi_scan
                +38s275ms (1) 100 c41000e1 -wifi_scan
                +52s773ms (1) 100 c41000e1 wifi_signal_strength=2
                +57s744ms (1) 100 cc1000e1 +wifi_scan
                +58s283ms (1) 100 c41000e1 -wifi_scan
                +59s405ms (2) 100 c41000e1 stats=0:"remove-uid"
                +59s990ms (2) 100 c41000e1 temp=310 volt=4280
              +1m01s804ms (1) 100 c41000e1 wifi_signal_strength=3
              +1m30s293ms (2) 100 c41000e1 stats=0:"battery-state"
              +1m30s310ms (3) 100 c41800e1 status=full plug=usb temp=320 volt=4286 +plugged
    
    

    使用Battery Historian

    这里主要针对Mac系统,并使用Docker,具体步骤如下:

    1. 安装Docker
      直接在官网安装或者通过在terminal中输入brew cask install docker直接安装
    2. 在docker中运行Battery Historian的镜像,如果没有运行过这个镜像,则会自动下载并安装,可以更改<port>端口,该端口指的是映射到本地的端口
    docker run -p <port>:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999
    
    1. 在浏览器中访问http://localhost:<port>,能看到如下页面,则安装成功
    2. 让系统记录所有的的WakeLock信息
    adb shell dumpsys batterystats --enable full-wake-history
    

    一般情况下,设备空闲,屏幕关闭,最后CPU停止运行,wake_lock可以阻止CPU休眠,比如后台持续下载.该维度只记录第一个使用wake_lock的app,如果需要记录所有的,使用上面命令

    1. 重置电池统计信息和历史记录
    adb shell dumpsys batterystats --reset
    
    1. 拔出USB,对手机进行操作想要统计的应用,耗电记录会在后台统计手机的耗电情况
    2. 操作完毕后,连接USB,并通过adb bugreport命令生成bugreport文件,将该文件上传到localhost:<port>界面中,就可以开始分析了,生成的图片类似如下:

    相关文章

      网友评论

        本文标题:Android性能分析---bugreport & Ba

        本文链接:https://www.haomeiwen.com/subject/xdqemftx.html