赞
踩
Systrace 是谷歌提供的一款工具,用于记录短期内的设备活动,是性能分析的利器。本文主要介绍 systrace 文件的抓取和简单的解析 systrace 图。
首先我们要下载 platform-tools 工具包,这个是可以单独下载的。下载好后,在其中会有一个 systrace 目录,就是我们需要用到的。此外,python2.7 也是需要下载并配置的好的。工具准备好后,我们就正式进入 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
,其他类似)。
第一步完成后,我们在 systrace 目录下得到了 camera.html 这个文件,下面是解析文件。
在浏览器地址栏中输入 chrome://tracing/
并回车,将生产的 camera.html 拖动到浏览器页面上,则出现如下界面。
这个玩意怎么看呢,简单说一下。首先是左边栏,最前面的是 cpu 信息,随后就是各个进程了。对于图形界面,从左往右时间是时间增长的过程。常用的快捷键有:
W:放大画面,S:缩小画面
A:画面左移,D:画面右移
下面这个悬浮窗就是选择模式工具栏,最上面的黑箭头常用来单击选中某个阶段或者框选出某些阶段,最下面的用于统计时间长度
简单介绍完了,我们找到刚刚启动的相机进程,如下:
重点看看它的 UI 线程。
从这个图里,我们能看到什么信息呢?
这是最基本作用,我们能直观的看到启动相机过程中各个阶段的耗时情况,比如 bindApplication、activityStart 等阶段,这些阶段的抓取是通过在源码中添加 trace_tag 实现的。上图显示的是从点击桌面图标到启动后绘制完第一帧耗时共 922 ms。
通常来说,各流程的起始时间比较好确定,一般就是点击、按键、滑动等事件输入时,但结束时间点却往往在不同公司或团队有不同的约定。比如启动相机这个过程,结束点可能会选择绘制完一帧、绘制完三帧,或者在画面上出现某个图标。
我们发现这个相机启动有点慢了,想知道时间究竟花在哪里了,此时可以框选整个过程的 cpu 状态条,红框里的部分就是 cpu 状态条,它总共有 5 中颜色代表不同的 cpu 状态。
Running(绿色):运行中,该状态的线程正在 cpu 上运行,点击 绿色的片段会显示正运行在哪个 cpu 上。
Runnable(蓝色):可运行,线程可以运行但当前没有安排,在等待 cpu 调度。
Sleep(白色):休眠中,线程没有工作要做,也有可能是线程在互斥锁上被阻塞。
Uninterruptible Sleep - Block I/O(橙色):不可中断的睡眠态,线程被 I / O 阻塞了或正在等待磁盘操作完成。
Uninterruptible Sleep(紫色):不可中断的睡眠态,线程在另一个内核操作上被阻塞,个人几乎没有碰见过。
框选完后,在最下方会统计出 Running、Sleep、Uninterruptible Sleep - IO Block、Runnable、Uninterruptible Sleep 五种状态累计消耗的时间。
假设我们觉得这个 Running 时间太长了,可以先看看这个 UI 线程主要跑着哪个 cpu 上,然后去查看对于 cpu 的信息。
比如我这个相机 UI 线程,一直跑在 cpu7 上,频率被限制到 2.4 MHz,应该已经是最高频跑了,居然还是不够快。这一方面说明 cpu 不够好,二也说明相机这个软件启动时做的事情有点多,也许还有优化的空间。
如果过程中出现长短的 sleep,我们肯定想知道它为啥 Sleep,这个时候可以点击 sleep 的 cpu 条,按键盘上的右键后移动到了 runnable 状态,会显示该线程是被谁唤醒的,据此找到唤醒者,看看它之前在做什么,帮助我们定位问题。
以上,应该就是 Systrace 最基本的使用了,感谢大家阅读。
转载:https://blog.csdn.net/hejnhong/article/details/123961046
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。