外观
FPS
FPS(Frames Per Second)指前台设备每秒屏幕真实画面的刷新次数,口径对齐 PerfDog 的 FPS 定义。它反映的是设备前台呈现链路的流畅程度,而不是目标进程的渲染负载。
指标标识
| 项 | 值 |
|---|---|
| metricID | ios.foreground.fps |
| 显示名 | Foreground FPS(界面简称 fps) |
| scope | foreground-device(前台设备,非目标进程专属) |
| unit | frames-per-second |
| 底层系统服务 | com.apple.instruments.server.services.graphics.opengl (DTX 传输通道) |
| 采集命令/实现 | pymobiledevice3.services.dvt.instruments.graphics.Graphics(provider) 轮询 |
| 来源字段 | CoreAnimationFramesPerSecond |
| 当前可用性 | available · Experimental |
底层采集与计算公式
1. 秒级前台设备 FPS (Gauge)
Graphics 服务以 1 秒间隔推送 CoreAnimation 状态。Perfowl 在 metric_engine.py 中直接读取: $$\text{FPS} = \text{CoreAnimationFramesPerSecond}$$
- 作用域约束:属于
foreground-device。当目标 App 处于后台时,系统仍可能存在其它前台刷新,但 Perfowl 会在数据派生层严格打标quality = "not-target-foreground"并将输出置为null,绝不将系统其它界面的刷新误算给目标 App。
2. 毫秒级逐帧瞬时 FPS 对应关系
在开启 Frame Time 监听时,基于内核 CoreProfileSessionTap 解码出的每一帧呈现耗时($FT$),瞬时 FPS 的精确数学换算为: $$\text{Instant FPS} = \frac{1000}{FT \text{ (ms)}}$$ 详细算法参见 Frame Time 实时采集与流畅度报告。
质量语义
- 目标非前台时不输出:FPS 属于前台设备范围。当绑定目标处于后台时,Perfowl 保留原始 Graphics 数据但不输出派生 FPS(quality =
not-target-foreground),也不会沿用旧前台值。 - 静态画面低值合法:画面静止时没有新的 CoreAnimation 帧,FPS 可以是低值或 0,属于真实结果。
- 不伪造 0:缺源或门禁未过时显示空值与原因,不画 0。
当前校准状态
Experimental。 当前来源是 DVT Graphics 的秒级 CoreAnimation FPS,尚未与 PerfDog / Xcode 同场校准。
逐帧口径(基于 Display FrameTime 的瞬时 FPS、1% Low 等)已由 FRAME-1 / CORE-17 分析引擎以候选算法落地,真机 CoreProfile RAW v2 已接通 iOS 16/17/18。参见开发记录 · CORE-17。
边界说明
- 60 Hz 设备上 FPS 上限约 60;120 Hz 高刷设备的动态刷新率行为在逐帧源验证前不做承诺。
- Wi-Fi 高帧率模式(PerfDog 需开发者签名 + 系统 HUD 的能力)不在 Perfowl 当前承诺范围,参见连接与系统路由。
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.1 | 2026-09-06 | 补全底层 Graphics 服务标识符、PMD3 调用命令与精确换算公式 |
| v1 | 2026-09-04 | 首次发布;依据 Metric Registry 与 Batch A / UI-1 验收口径 |
来源批次:Batch A 实施结果 · 0 值复核 · FRAME-1