Skip to content

FPS

FPS(Frames Per Second)指前台设备每秒屏幕真实画面的刷新次数,口径对齐 PerfDog 的 FPS 定义。它反映的是设备前台呈现链路的流畅程度,而不是目标进程的渲染负载。

指标标识

metricIDios.foreground.fps
显示名Foreground FPS(界面简称 fps
scopeforeground-device(前台设备,非目标进程专属)
unitframes-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.12026-09-06补全底层 Graphics 服务标识符、PMD3 调用命令与精确换算公式
v12026-09-04首次发布;依据 Metric Registry 与 Batch A / UI-1 验收口径

来源批次:Batch A 实施结果 · 0 值复核 · FRAME-1

Perfowl · Performance Observer