Systrace 分析卡顿问题的套路
Systrace 分析卡顿问题的套路
分析卡顿问题一般的思路为下:
- 使用抓取工具抓取trace 。
- 将抓取的trace使用浏览器页面打开。
- 了解问题发生的背景:用户/测试的操作流程、卡顿复现概率、竞品机器是否有同样的问题。
- 分析问题之前或分析过程中可以检查Systrace来了解一些基本信息
- CPU的频率、架构、Boost信息等。
- 是否触发温控:表现为cpu 频率被压低
- 是否是高负载场景:表现为 cpu 区域任务非常满
- 是否是低内存场景:表现为 lmkd 进程繁忙,App 进程的 HeapTaskDeamon 耗时,有很多的 Block io。
- 定位 App 进程在 Systrace 中的位置:
- 首先主要看的是App的进程,主要是App的主线程和渲染线程,找到其中每一帧耗时的部分。
- 所有超过一个Vsync周期的doFrame耗时(即可以看到的黄帧和红帧)都需要去看一下是否真的掉帧,就算没有掉帧,也需要查看其原因。
- Vsync 周期与刷新率的对照
- 60fps 对应的 Vsync 周期是 16.6ms
- 90fps 对应的 Vsync 周期是 11.1ms
- 120fps 对应的 Vsync 周期是 8.3ms
- 分析 SurfaceFlinger 进程的主线程和 Binder 线程:
- 由于多个Buffer的存在,App主线程和渲染线程,有时候超过一个Vsync周期,也不一定会出现卡顿,所以需要通过看SurfaceFlinger进程的主线程来确认是否真的发生了卡顿。
使用 Systrace 分析卡顿问题的案例
分析一段滑动界面的trace
滑动的input比较容易定位,滑动的事件主要是由Input Down事件+若干个Input Move事件+一个Input Up事件构成。
其中,SystemServer中的InputDistpatcher和InputReader线程都有体现。