返回

Systrace 流畅性实战 2 :MIUI 桌面滑动卡顿分析

Android

前言

Systrace 是一款协助分析 Android 系统性能及流畅性的工具,是排查卡顿问题的利器。

在前面的文章中,我们介绍了Systrace 基本用法,通过简单的几个步骤,可以生成系统启动、安装 apk 或者某些操作的耗时数据,协助我们进行性能分析。

今天,我们就从一个实际的案例,来带领大家使用 Systrace 初步分析一个卡顿问题。

案例介绍

本案例中,我们遇到的问题是 MIUI 桌面滑动卡顿,用户在桌面上下滑动时,会感觉到有明显的卡顿掉帧现象。

现象

  • 在 MIUI 桌面上下滑动时,会感觉到明显的卡顿掉帧现象。
  • 卡顿现象在 MIUI 系统中较为普遍,在不同的手机上都有可能遇到。
  • 卡顿现象与手机硬件配置无关,无论高端机还是低端机,都有可能遇到卡顿问题。

问题定位

为了定位问题,我们首先使用 Systrace 对 MIUI 桌面滑动操作进行性能分析。

  1. 打开 Systrace,选择「手动启动」,设置采样时间为 10 秒。
  2. 在 MIUI 桌面上下滑动,模拟用户使用场景。
  3. 停止采样,保存生成的 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 来分析一下。

拓展阅读