systrace 基本使用

Systrace 是谷歌提供的一款工具,用于记录短期内的设备活动,是性能分析的利器。本文主要介绍 systrace 文件的抓取和简单的解析 systrace 图。

首先我们要下载 platform-tools 工具包,这个是可以单独下载的。下载好后,在其中会有一个 systrace 目录,就是我们需要用到的。此外,python2.7 也是需要下载并配置的好的。工具准备好后,我们就正式进入 systrace 的使用介绍。

systrace 基本使用

  • 1. 生成 systrace 文件
  • 2. 解析 systrace
    • 2.1 耗时统计
    • 2.2 线程各类型时间片统计
    • 2.3 cpu 状态查看
    • 2.4 线程唤醒信息查看

1. 生成 systrace 文件

进入 cmd 命令行,切换到 systrace 目录下,比如我笔记本上 systrace 的目录是 E:\tools\platform-tools\systrace>,那我就切换到这个目录。
在这里插入图片描述
连接手机和电脑后,输入 python systrace.py -o camera.html并回车,随后命令栏出现 Starting tracing (stop with enter) ... 的提示。

这个时候就在手机上进行目标动作,比如我这里启动了相机,等相机启动完成后,按回车键结束抓取 systrace。

(温馨提示,如果执行抓取命令时报错 ImportError: No module named six,那么就执行 python -m pip install six,其他类似)。

2. 解析 systrace

第一步完成后,我们在 systrace 目录下得到了 camera.html 这个文件,下面是解析文件。

在浏览器地址栏中输入 chrome://tracing/并回车,将生产的 camera.html 拖动到浏览器页面上,则出现如下界面。
systrace 基本使用_第1张图片
这个玩意怎么看呢,简单说一下。首先是左边栏,最前面的是 cpu 信息,随后就是各个进程了。对于图形界面,从左往右时间是时间增长的过程。常用的快捷键有:

W:放大画面,S:缩小画面
A:画面左移,D:画面右移

下面这个悬浮窗就是选择模式工具栏,最上面的黑箭头常用来单击选中某个阶段或者框选出某些阶段,最下面的用于统计时间长度
在这里插入图片描述

简单介绍完了,我们找到刚刚启动的相机进程,如下:
systrace 基本使用_第2张图片
重点看看它的 UI 线程。
systrace 基本使用_第3张图片
从这个图里,我们能看到什么信息呢?

2.1 耗时统计

这是最基本作用,我们能直观的看到启动相机过程中各个阶段的耗时情况,比如 bindApplication、activityStart 等阶段,这些阶段的抓取是通过在源码中添加 trace_tag 实现的。上图显示的是从点击桌面图标到启动后绘制完第一帧耗时共 922 ms。

通常来说,各流程的起始时间比较好确定,一般就是点击、按键、滑动等事件输入时,但结束时间点却往往在不同公司或团队有不同的约定。比如启动相机这个过程,结束点可能会选择绘制完一帧、绘制完三帧,或者在画面上出现某个图标。

2.2 线程各类型时间片统计

我们发现这个相机启动有点慢了,想知道时间究竟花在哪里了,此时可以框选整个过程的 cpu 状态条,红框里的部分就是 cpu 状态条,它总共有 5 中颜色代表不同的 cpu 状态。
systrace 基本使用_第4张图片
Running(绿色):运行中,该状态的线程正在 cpu 上运行,点击 绿色的片段会显示正运行在哪个 cpu 上。
Runnable(蓝色):可运行,线程可以运行但当前没有安排,在等待 cpu 调度。
Sleep(白色):休眠中,线程没有工作要做,也有可能是线程在互斥锁上被阻塞。
Uninterruptible Sleep - Block I/O(橙色):不可中断的睡眠态,线程被 I / O 阻塞了或正在等待磁盘操作完成。
Uninterruptible Sleep(紫色):不可中断的睡眠态,线程在另一个内核操作上被阻塞,个人几乎没有碰见过。

框选完后,在最下方会统计出 Running、Sleep、Uninterruptible Sleep - IO Block、Runnable、Uninterruptible Sleep 五种状态累计消耗的时间。
systrace 基本使用_第5张图片

2.3 cpu 状态查看

假设我们觉得这个 Running 时间太长了,可以先看看这个 UI 线程主要跑着哪个 cpu 上,然后去查看对于 cpu 的信息。
比如我这个相机 UI 线程,一直跑在 cpu7 上,频率被限制到 2.4 MHz,应该已经是最高频跑了,居然还是不够快。这一方面说明 cpu 不够好,二也说明相机这个软件启动时做的事情有点多,也许还有优化的空间。
systrace 基本使用_第6张图片

2.4 线程唤醒信息查看

如果过程中出现长短的 sleep,我们肯定想知道它为啥 Sleep,这个时候可以点击 sleep 的 cpu 条,按键盘上的右键后移动到了 runnable 状态,会显示该线程是被谁唤醒的,据此找到唤醒者,看看它之前在做什么,帮助我们定位问题。

以上,应该就是 Systrace 最基本的使用了,感谢大家阅读。

你可能感兴趣的:(Android开发,环境及工具,android,性能优化,Systrace)