Systrace 流畅性实战 2 :MIUI 桌面滑动卡顿分析
2023-12-01 19:49:19
前言
Systrace 是一款协助分析 Android 系统性能及流畅性的工具,是排查卡顿问题的利器。
在前面的文章中,我们介绍了Systrace 基本用法,通过简单的几个步骤,可以生成系统启动、安装 apk 或者某些操作的耗时数据,协助我们进行性能分析。
今天,我们就从一个实际的案例,来带领大家使用 Systrace 初步分析一个卡顿问题。
案例介绍
本案例中,我们遇到的问题是 MIUI 桌面滑动卡顿,用户在桌面上下滑动时,会感觉到有明显的卡顿掉帧现象。
现象
- 在 MIUI 桌面上下滑动时,会感觉到明显的卡顿掉帧现象。
- 卡顿现象在 MIUI 系统中较为普遍,在不同的手机上都有可能遇到。
- 卡顿现象与手机硬件配置无关,无论高端机还是低端机,都有可能遇到卡顿问题。
问题定位
为了定位问题,我们首先使用 Systrace 对 MIUI 桌面滑动操作进行性能分析。
- 打开 Systrace,选择「手动启动」,设置采样时间为 10 秒。
- 在 MIUI 桌面上下滑动,模拟用户使用场景。
- 停止采样,保存生成的 trace 文件。
分析思路
- 首先,我们可以通过查看 Systrace 中的帧率曲线,来确定卡顿是否是由帧率下降造成的。
- 其次,我们可以通过查看 Systrace 中的系统调用情况,来确定卡顿是否是由系统调用引起的。
- 最后,我们可以通过查看 Systrace 中的线程情况,来确定卡顿是否是由线程阻塞引起的。
分析过程
帧率分析
在 Systrace 中,我们可以通过查看「gfx」和「vsync」两条曲线,来分析帧率情况。
- 「gfx」曲线表示 GPU 渲染帧率。
- 「vsync」曲线表示屏幕刷新率。
如果帧率低于屏幕刷新率,就会出现卡顿现象。
从 Systrace 中可以看出,在 MIUI 桌面滑动操作过程中,帧率明显下降,最低帧率只有 20 fps 左右,远远低于屏幕刷新率 60 fps。这说明卡顿现象是由帧率下降造成的。
系统调用分析
在 Systrace 中,我们可以通过查看「syscalls」曲线,来分析系统调用情况。
- 「syscalls」曲线表示系统调用数量。
如果系统调用数量过多,就会导致卡顿现象。
从 Systrace 中可以看出,在 MIUI 桌面滑动操作过程中,系统调用数量明显增加,峰值达到 1000 次左右。这说明卡顿现象可能由系统调用过多引起的。
线程分析
在 Systrace 中,我们可以通过查看「threads」曲线,来分析线程情况。
- 「threads」曲线表示线程数量。
如果线程数量过多,就会导致线程阻塞,进而导致卡顿现象。
从 Systrace 中可以看出,在 MIUI 桌面滑动操作过程中,线程数量明显增加,峰值达到 100 个左右。这说明卡顿现象可能由线程阻塞引起的。
解决方案
根据以上的分析,我们可以得出以下解决方案:
- 优化 GPU 渲染性能,提高帧率。
- 减少系统调用数量,降低系统开销。
- 优化线程调度算法,减少线程阻塞。
总结
通过本案例,我们学习了如何使用 Systrace 分析卡顿问题。
Systrace 是一款非常强大的工具,可以帮助我们快速定位和解决卡顿问题。
如果您在开发过程中遇到卡顿问题,不妨尝试使用 Systrace 来分析一下。