Implementation Result · FRAME-1
帧体验分析引擎已建立,实时逐帧源保持待验证
本批次先把 PerfDog 帧体验主体公式实现为可回放、可版本化的 Swift 分析层。它接收 Display Frame 事件并输出候选结果;当前 DVT Graphics 仍只有秒级 FPS,实时 UI 的 FrameTime/Jank 继续保持 Unsupported,避免把秒级趋势冒充逐帧真值。
Delivered scope
本批次交付内容
INPUT
DisplayFrameEvent
timestampNs、refreshRateHz、presented、source;不绑定单一采集工具。
TIME
FrameTime / FPS
相邻已呈现帧间隔与瞬时 FPS,首帧明确 warmup。
JANK
三档卡顿候选
SmallJank、Jank、BigJank 标记允许重叠,保留逐帧证据。
STATS
窗口统计
平均/中位/方差/标准差、MedRange、Drop、1% Low。
QUALITY
质量状态
warmup、valid、not-presented、out-of-order、candidate/degraded。
HOLD
实时接入边界
未取得稳定逐帧 Display/Hitches 源前,UI 与 Collector 不发布同名 Jank。
Data contract
原始事件到候选指标
DisplayFrameEvent(timestampNs, refreshRateHz, presented, source)
│
├─ 相邻 timestampNs ─────────► FrameTime(ms) = Δns / 1,000,000
│ FPS = 1000 / FrameTime(ms)
├─ 最近三帧 FrameTime ─────────► dynamic = current > mean(previous3) × 2
│ Small > 41.66ms / Jank > 83.33ms / Big > 125ms
├─ FPS 序列 ──────────────────► Drop:相邻 FPS 下降 > 8;MedRange:中位数 ±20%
├─ 最慢 1% FrameTime ─────────► 1% Low = 1000 / mean(slowest 1%)
└─ Jank 超出基线 ─────────────► Stutter candidate = Σ(current - baseline) / duration
常量集中在 FramePipelineConfiguration,算法标识为 perfdog-compatible-candidate.v1。所有边界(首三帧、等号、动态刷新率、事件重叠、缺值)都通过配置与质量字段显式保留。
Code location
实现与测试
| 文件 | 责任 | 状态 |
|---|---|---|
MacApp/Sources/PerfowlCore/FramePipeline.swift | 事件模型、候选公式、逐帧样本、窗口汇总和质量状态。 | 已实现 |
MacApp/Tests/PerfowlCoreTests/PerformanceFoundationTests.swift | Jank 三档、Drop/MedRange、缺帧与乱序质量测试。 | 3 项新增 |
WorkbenchMetricCatalog | FrameTime 及高阶项仍显示为 Unsupported/待源。 | 保持边界 |
验证结果:
Swift 全量测试 41/41 通过;分析层不访问设备、不启动 xctrace、不修改目标 App,可直接用于离线 golden fixture。
Evidence boundary
当前可用与待补齐
现在可以确认
- 给定一组单调的 Display Frame 时间戳,FrameTime/FPS 和主体候选公式可确定性重算。
- 首帧、乱序、未呈现事件不会被伪造为 0;质量计数可追溯。
- 算法常量、原始事件、逐帧派生样本和汇总结果可序列化。
仍需真机资料
- 从 DVT Graphics、xctrace Display/Frame Lifetimes/Hitches 取得稳定逐帧源。
- 60/120Hz、滚动/动画/人工卡顿与 PerfDog 同时间窗对照。
- 确认 Drop、Jank 重叠、Stutter 基线和短 Session 的取整规则。
产品状态:
当前引擎是 candidate,不会把它升级成已校准指标;实时面板继续按 capability 显示 Unsupported,直到源和同场误差门禁完成。
Next gate
进入实时 FramePipeline 前的顺序
- B-VAL:完成 CPU/Network 前台五场景与 PerfDog 三轮文件。
- FRAME-SOURCE:在当前链接设备和至少一台 120Hz 设备上确认逐帧源、时间戳和开销。
- FRAME-CAL:把同场导出送入本分析层,冻结算法版本与边界规则。
- FRAME-UI:校准通过后再将 FrameTime、Drop、Jank、1% Low 接入实时图和报告。