Systrace的用法小结

简介: 通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长、CPU的使用情况、ANR、布局情况等;相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只能通过代码的方式,这样会导致整个应用比较卡顿,测试出的方法时间,不是真正的执行时间,只能看下时间长短的相对占比。

通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长、CPU的使用情况、ANR、布局情况等;相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只能通过代码的方式,这样会导致整个应用比较卡顿,测试出的方法时间,不是真正的执行时间,只能看下时间长短的相对占比。而SysTrace工具,能帮助我们解决抓取的方法时间不真实问题。

一般,抓取SysTrace在User Debug的ROM版本,抓取的信息会非常详细;如果不是User Debug版本,可以通过自定义Tag的方式来丰富信息。

自定义TAG

Trace.java的对应的自定义TAG方法如下:

img_d34a4abef9418bd4bc81f36be05f8742.png
Trace.java

traceBegin开始抓取,traceEnd结束抓取(可以嵌套调用,但是一定是要成对出现;另外注意下如果某个方法节点出现异常,会导致顺序错乱,

注意:traceTag一定是在Trace类中定义的常量,而且在抓取的SysTrace的,该TAG有勾选。

Trace.java中定义了如下TAG。

img_1d16da4b2fd79394f61320e7f3ddb923.png
Trace TAG

下面代码为自定义TAG的帮助类:

img_efc5d162ddfcb6df6c86eb181c90d52f.png
自定义TAG

在Activity的onCreate的开始和结束位置调用即可:

img_70f4920b0fb014d53f25006984fc2812.png
使用自定义TAG

这样当启动systrace的时候就会使用自定义的TAG了。如下所示:

img_19f6cdd2626502a6b4235ff193651560.png
自定义TAG结果

打开systrace文件后有如下常用快捷键:

W: 放大页面

S:缩小页面

A:左平移页面

D:右平移页面

M:快速选中区域或者取消选中区域

->: 向右移动一个事件

<-:向左移动一个事件

介绍了自定义TAG,快捷键,那么到底该如何分析trace文件呢?

查找耗时操作:

Systrace可以查看方法的执行时间,方便找出耗时操作,也可以观察出帧的绘制时间。

img_bb089c7d39c1a4ea176d46280db6febb.png
耗时操作

上图可以看出activityStart的执行时间较长,也就是app的冷启动时间较长。红色的F代表帧的绘制时间过长。

查询UI线程的等待

除了UI线程本身耗时外,有时候,我们自身业务中多线程已经执行任务,会存在同步锁问题,此时UI线程就处于Sleeping状态。

img_eaaeca40a9388e1b8c212152f992ac56.png
UI线程等待

Step1: 选中红色区域(CPU执行状态),可以看到如下统计信息:

Sleeping:表示线程处于睡眠态,显示白色

Runnable:表示线程处于可执行态显示蓝色

Running:表示线程处于运行态显示绿色

Uninterruptible Sleep: 一般表示IO操作

 从统计的信息可以看出Sleeping的时长99多ms

Step2:在CPU轴找出“白条较长”的区域,光标点击,并按M键选中,可以详细的看到该Sleeping的时长,线程信息等。

img_970ead48405e076c41571bafe6cb6c99.png

Step3:继续放到区域,可以看到在“白条区域”后面,紧接着一个“蓝条区域”,代表当前的UI线程从Sleeping态变化到了Runnable态(红色标注区域)

img_0042ae1545e5437cdb0d504e403edbff.png

Step4:点击Runnable区域,可以看到其详细信息(由于Runnable区域比较小,可以使用快捷键->,快速从Sleeping事件移动到Runnable事件);关键信息时:{wakeup from tid: 20704},可以知道UI线程被20704线程所唤醒。

img_d2d081458339a9e545bb9f17b7839175.png

Step5:搜索该线程信息:Comm:线程名称;Tid:线程id;Prio:线程优先级

img_6cb408614b11308c8ef9abdaa23af707.png
目录
相关文章
|
5月前
|
SQL 安全 数据库
关于QUOTENAME的用法
关于QUOTENAME的用法
|
测试技术 API
harfbuzz 的用法
HarfBuzz 整形 API 的核心是函数。此函数采用一种字体,即 包含一串 Unicode 代码点的缓冲区和 (可选)字体功能列表作为其输入。它取代了 缓冲区中的代码点,其中包含来自 字体,正确排序和定位,以及任何 应用的可选字体功能。hb_shape()
454 0
|
数据安全/隐私保护