Android帧的产生(1)——Systrace上

Systrace简介

Systrace是Android4.1中新增的数据采样和分析工具。它可帮助开发者收集系统的I/O操作、内核工作队列、CPU负载以及Android关键子系统: SurfaceFlinger、SystemServer、Kernel、Input、Display 等 Framework 部分关键模块、服务、View系统等的运行信息,从而帮助开发者更直观的分析系统问题,是分析功耗性能问题的利器。

Systrace由三部分组成:

  • 内核部分:Systrace利用了Linux Kernel中的ftrace功能。必须开启kernel中和ftrace相关的模块。
  • 数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
  • 数据分析工具:Android提供一个systrace.py(python 脚本文件,位于Android SDK目录/platform-tools/systrace中,其内部将调用 atrace 程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集 ftrace 统计数据并生成一个结果网页文件供用户查看。 从本质上说,Systrace是对Linux Kernel中ftrace的封装。应用进程需要利用Android提供的Trace类来使用Systrace。

Systrace基本原理

  1. 首先systrace指定抓取trace的类别等参数,然后触发手机端的/system/bin/atrace 开启对应文件节点的信息记录,接着atrace会读取 ftrace 的缓存,生成只包含ftrace信息的atrace_raw。
  2. Systrace会进一步收集系统的ps、task等信息,这些信息是为了协助解析atrace_raw中的ftrace信息,比如ps信息可以得到进程的名称,而不是难记的pid号。处理后的ftrace信息将和systrace目录下的prefix.html、systrace_trace_viewer.html、suffix.html整合为一体,成为单个的html文件。
  3. 当浏览systrace信息时,Chrome浏览器借助systrace解析器(通过chrome://tracing访问),解析上面生成的trace.html文件,把其中原始的ftrace信息分门别类,再按照时间轴聚合排列,绘制出不同色块,简洁可观的显示在html页面上。
    在这里插入图片描述

Systrace使用

1. 生成HTML报告

根据Google官方文档:

如需运行 systrace,请完成以下步骤:

  1. 从 Android Studio 下载并安装最新的 Android SDK 工具
  2. 安装 Python 并将其添加到工作站的 PATH 环境变量中。
  3. android-sdk/platform-tools/ 添加到 PATH 环境变量。此目录包含由 systrace 程序调用的 Android 调试桥二进制文件 (adb)。
  4. 使用 USB 调试连接将搭载 Android 4.3(API 级别 18)或更高版本的设备连接到开发系统。

systrace 命令在 Android SDK 工具软件包中提供,并且可以在 android-sdk/platform-tools/systrace/ 中找到。

备注:奇怪的是,在arch linux的环境下,不论我是下载android-ndkandroid-sdk还是android-studio都没有配套的systrace.py文件,于是我放在这里以供下载。

我们通过以下命令来为应用生成HTML报告

 python systrace.py [options] [categories]

例如,以下命令会调用 systrace 来记录设备活动,并生成一个名为 mynewtrace.html 的 HTML 报告。此类别列表是大多数设备的合理默认列表。

$ python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \\
        binder_driver hal dalvik camera input res

如需查看已连接设备支持的类别列表,请运行以下命令:

$ python systrace.py --list-categories

or

$ adb shell atrace --list_categories

如果未指定任何类别或选项,systrace 会生成包含所有可用类别的报告,并使用默认设置。可用类别取决于所使用的已连接设备。

命令和命令选项
命令和选项说明
-o file将 HTML 跟踪报告写入指定的文件。如果未指定此选项,systrace 会将报告保存到 systrace.py所在的目录中,并将其命名为 trace.html。
-t N–time=N,追踪时间
-b N–buf-size=N,缓冲区大小
-k functions–ktrace=functions
-a app-name–app=app-name
–from-file=file-path根据文件(例如包含原始跟踪数据的 TXT 文件)创建交互式 HTML 报告,而不是运行实时跟踪。
-e device-serial–serial=device-serial,设备号
categories包含指定的系统进程的跟踪信息,如 gfx 表示用于渲染图形的系统进程。您可以使用 -l 命令运行 systrace,以查看已连接设备可用的服务列表。

2. 分析HTML报告

当我们生成了xxx.html文件后,可以通过三种方式分析html文件

  1. 在谷歌浏览器中输入chrome://tracing,然后选择左上角的load按钮,加载刚生成的html文件。
    在这里插入图片描述

  2. 使用谷歌最新的perfetto工具,点击左边的“Open trace file”加载html文件即可

    在这里插入图片描述

  3. 直接打开html文本文件,你会看到类似这样的一行行log,这是ftrace打印的log,上面两个通过网站进行了可视化,一般前两个即可满足我们的分析需求。

    在这里插入图片描述

我们以chrome://tracing为例,其可视化的结果类似下面。

在这里插入图片描述

快捷键使用

快捷键的使用可以加快查看 Systrace 的速度,下面是一些常用的快捷键

  • W : 放大 Systrace , 放大可以更好地看清局部细节

  • S : 缩小 Systrace, 缩小以查看整体

  • A : 左移

  • D : 右移

  • M : 高亮选中当前鼠标点击的段(这个比较常用,可以快速标识出这个方法的左右边界和执行时间,方便上下查看)

    在这里插入图片描述

鼠标模式快捷切换 : 主要是针对鼠标的工作模式进行切换 , 默认是 1 ,也就是选择模式,查看 Systrace 的时候,需要经常在各个模式之间切换 , 所以点击切换模式效率比较低,直接用快捷键切换效率要高很多

在这里插入图片描述

数字键1 : 切换到 Selection 模式 , 这个模式下鼠标可以点击某一个段查看其详细信息, 一般打开 Systrace 默认就是这个模式 , 也是最常用的一个模式 , 配合 M 和 ASDW 可以做基本的操作

数字键2 : 切换到 Pan 模式 , 这个模式下长按鼠标可以左右拖动, 有时候会用到

数字键3 : 切换到 Zoom 模式 , 这个模式下长按鼠标可以放大和缩小, 有时候会用到

数字键4 : 切换到 Timing 模式 , 这个模式下主要是用来衡量时间的,比如选择一个起点, 选择一个终点, 查看起点和终点这中间的操作所花费的时间.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武汉大学计算机学院智能计算系统实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值