文集目录
ps:喜欢的点赞哦 android性能跟踪分析工具系列 - 目录
systrace 案例参考:
systrace 这个工具和 GPU 呈现模式分析工具是一个类型的,都是查看 app 每帧的渲染情况的,不过2个工具还是有很大不同的
优点:
- systrace 不仅仅可以看不同计算任务的好事,可以自动分析出存在的耗时问题
缺点:
- 缺点和他的有点同样突出,使用上比GPU 呈现模式分析工具要麻烦的多,观看上也不是那么直观
- systrace 对英文要求很高,这个工具可以分析出耗时问题所在,但是都是英文提醒,对于我来说......
先来看看效果图:
systrace 如何使用
systrace 是 Android SDK 自带的工具,获取的是指定时间内android 统计进程手机的系统数据 。
在 android studio 中点击: tools - android - android devices monitors,启动 DDMS 界面
然后在 DDMS 界面坐上部分的工具栏中,点击 capture system 工具
现在就进入了 systrace 的设置界面,我们设置下截取时间,注意时间以秒为单位的,还可以设置生成文件的保存位置
然后我们开始自己的操作,操作完后,再点击 DDMS 上相同的位置,就会生成一个 .html 的文件,我们在前面的设计界面里可以设置保存位置,最后我们就可以使用 chrome浏览器打开这个文件了
如何获取信息
再来看看 systrace 给我获取到的系统信息图
看最小面是不是有一排 F ,蓝色的 F 表示不丢帧,黄色的 F 表示有轻微丢帧,红色的 F 表示严重丢帧。我们点击一个具体的 F 看下
卧槽,都是英文,纳尼,没办法翻译工具走起吧,这里我是使用 lottie库跑了一个全屏宽的动画效果,看看这一溜的大红色,丢帧严重啊,说明lottie库展示尺寸大的动画是很卡的,软研效率好低啊。我们点击了期中一个 红色的 F,看看下面提示了3个问题:
- Expensive Bitmap uploads
说明有大的位图上传给 gpu,这里耗时 - Long View#draw()
说明view 的 onDraw 方法耗时严重,lottie 是在 canves 中进行了大量 path 绘制,并且有时会有 bitmap 生成。 - Scheduling delay
调度延迟,可能是 UI 线程延迟,或是 GPU 工作量大,CPU 等待 GPU 通知造成延迟。结合具体,这里是 GPU 任务量大,通知 CPU 延迟了。
每个 F 都有4个色块,点击每个色块都有详细的说明,包括耗时,问题,那么每个色块代表什么含义呢:
- 浅绿色 performTraversals :
这个应该是表示视图计算部分的任务,包括有变化的 view 的 measu,layout - 紫色 draw :
这个应该是view 的 onDraw 计算部分 - 深绿色 Record View#draw() :
这部分应该是CPU 计算数据,生成每帧的纹理的计算部分 - 深绿色 buildDrawingCache :
这个应该是上传纹理数据给 GPU 的任务部分
官方文档
以上的色块表示什么计算任务是我个人猜测的,没找到具体的资料,有兴趣的去翻下官方文档,我的英文实在是上不了台面
- https://developer.android.com/studio/profile/systrace-commandline.html
- https://developer.android.com/studio/profile/systrace.html
快捷键
一般我们都会获得很多帧,这样下面的 F 就会很挤,看着不方便,我们使用一下快捷键可以放大,缩小,选择上一个/下一个 F
代码方式使用
另外 systrace 还可以使用以代码的方式使用,获取指定方法的渲染帧,我是没这样用过,下面我抄了一段过来
通过Trace类来实现这个功能。它能够让你在任何时候跟踪应用的一举一动。在你获取trace的过程中,Trace.beginSection()与Trace.endSection()之间代码工作会一直被追踪。
ps: 最后我想说,这个 systrace 工具我也只是能够粗浅的使用,你看其中哟很多数据的,这个还需大家自己没事都研究,有跟好的研究成果要及时通知我哦,另外喜欢的大家点个赞哦!
*** 参考文档: