外观
Perfetto 里怎样判断是 App 卡顿 还是 SurfaceFlinger 卡顿?
标准回答
我会先从 FrameTimeline 找到未满足预期时序的帧,再把应用 Surface 帧与 Display 帧关联。应用侧检查主线程是否及时进入 doFrame、measure 和 draw 是否过长、RenderThread 和 GPU 是否按时完成,以及是否存在锁或 Binder 等待;系统侧检查 SurfaceFlinger 合成、事务与缓冲区等待、HWC 和呈现时序。如果应用按时产出内容而 Display 帧仍然延后,就进一步检查合成和显示路径;若应用自身晚提交,就回到应用关键路径。
延伸追问
判断 Running 和 Runnable 可以区分自身计算过重与未及时获得 CPU;不同帧类型和轨道必须按 Trace 的实际定义解读。
内容来源
- Android Framework 知识手册 · 原条目
7-3