Skip to content

iOS 卡顿诊断与渲染瓶颈归因 ​

本页只回答一个问题:已经确认画面不流畅以后,应该往哪里查?

流畅度事实与体验指标分别由 Display Performance 和 Jank、Stutter 与稳帧体验 定义。本页不重新定义 FPS、FrameTime 或 Jank 公式,而是把它们与 CPU、GPU、I/O、截图时间线组合起来做根因排查。

1. 从现象进入,而不是从单一资源指标进入 ​

推荐诊断链:

text
Display Performance 异常
        ↓
FrameTime / P95 / Jitter / FPS 定位时间窗
        ↓
Jank / Stutter 判断体验损害程度
        ↓
同一时间窗对齐 CPU / GPU / I/O / Screenshot
        ↓
形成“优先怀疑方向”,再用更深证据确认根因

相关不等于因果

同一时刻 CPU、GPU 或 I/O 升高只能用于缩小排查范围。没有线程栈、系统 Trace、业务日志或可复现实验时,不把“同时发生”写成“已经确诊”。

2. 快速诊断矩阵 ​

画面现象同窗 CPU同窗 GPU优先排查方向
FrameTime / P95 明显升高高低或中主线程计算、布局、序列化、锁竞争、过量并发
FrameTime / P95 明显升高低或中高Overdraw、复杂特效、纹理/合成压力、GPU 瓶颈
FrameTime 很高低低同步 I/O、锁等待、IPC、系统调度等待
FPS 较低但 FrameTime 无异常尖刺正常正常内容更新率、静态页面、系统刷新策略;先不要判掉帧
Pacing Jitter 高波动波动workload 不稳定、间歇任务、后台干扰或资源竞争
Refresh Rate 主动下降正常正常ProMotion / 系统显示策略;先确认是否存在持续动画需求

3. CPU-Bound 排查 ​

出现“长帧 + APP CPU/单核明显升高”时,优先检查:

  • 主线程 JSON / Proto / 图片解码等同步计算;
  • Auto Layout、文本排版、深层视图树遍历;
  • 大量同步数据转换;
  • 自旋、错误重试或高频定时器;
  • 多线程任务过量导致主线程争抢调度时间。

推荐同时查看 APP CPU、CPU Core Usage、Context Switch 与 Thread Count。CPU 高并不能自动证明主线程高,必要时升级到 Time Profiler / System Trace 等更深证据。

4. GPU-Bound 排查 ​

出现“长帧 + Renderer/Tiler/Device GPU 利用率同步升高”时,优先检查:

  • 大面积透明混合与 Overdraw;
  • 模糊、阴影、实时滤镜;
  • 高分辨率纹理或频繁纹理更新;
  • 复杂 3D 几何与顶点处理;
  • 大量离屏渲染或合成层级。

GPU Gauge 仍属于前台设备级信号,不应直接写成“目标 PID 独占 GPU”。

5. CPU/GPU 都不高时 ​

如果画面出现明显长帧,但 CPU 与 GPU 都较低,优先排查:

  • 主线程同步文件或数据库 I/O;
  • 锁、信号量、条件变量等待;
  • 同步 IPC;
  • 网络结果被同步等待;
  • 系统级调度/热状态/内存压力。

此时 Network、Disk、ThermalStatus、Available/Free Memory 都属于辅助证据,不应单独作为根因结论。

6. Screenshot Timeline 的价值 ​

截图时间线用于回答“异常发生时用户正在看什么页面、做什么操作”。推荐流程:

  1. 在 FrameTime / P95 / Jank 时间线上定位尖刺;
  2. 对齐最近截图;
  3. 记录页面、交互与资源加载状态;
  4. 再对齐 CPU / GPU / I/O;
  5. 导出 Session 证据给研发复现。

截图是上下文证据,不是 FrameTime 数据源。

7. 不要混淆的几个概念 ​

  • FPS 低不一定是掉帧,静态页面可能没有新 presentation ;
  • Refresh Rate 低不一定是性能问题,ProMotion 会动态变化;
  • FrameTime 尖刺描述 presentation 间隔,不等价于 GPU Render Time;
  • Presentation Interval 跨多个 refresh interval 不自动等于物理 Dropped Frames;
  • Perfowl 现有 Jank 算法不是 Apple Hitch 的同义词。

8. 何时升级证据等级 ​

当基础指标只能提示方向时,建议升级:

text
Display/Frame 指标
→ CPU/GPU/IO 同窗
→ Screenshot / Session Replay
→ Time Profiler / System Trace / 专项日志
→ 可重复实验

只有更深证据与复现实验形成闭环后,才把“相关现象”升级为“根因结论”。

9. 继续阅读 ​

Perfowl · Performance Observer