外观
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 的价值
截图时间线用于回答“异常发生时用户正在看什么页面、做什么操作”。推荐流程:
- 在 FrameTime / P95 / Jank 时间线上定位尖刺;
- 对齐最近截图;
- 记录页面、交互与资源加载状态;
- 再对齐 CPU / GPU / I/O;
- 导出 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 / 专项日志
→ 可重复实验只有更深证据与复现实验形成闭环后,才把“相关现象”升级为“根因结论”。