Systrace 分析卡顿问题的套路

Systrace 分析卡顿问题的套路

分析卡顿问题一般的思路为下:

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

使用 Systrace 分析卡顿问题的案例

分析一段滑动界面的trace

滑动的input比较容易定位,滑动的事件主要是由Input Down事件+若干个Input Move事件+一个Input Up事件构成。

其中,SystemServer中的InputDistpatcher和InputReader线程都有体现。

posted @ 2025-04-16 10:52  屈家全  阅读(195)  评论(0)    收藏  举报