FRAME-1 候选引擎 · 源待验证2026-09-04

Implementation Result · FRAME-1

帧体验分析引擎已建立,实时逐帧源保持待验证

本批次先把 PerfDog 帧体验主体公式实现为可回放、可版本化的 Swift 分析层。它接收 Display Frame 事件并输出候选结果;当前 DVT Graphics 仍只有秒级 FPS,实时 UI 的 FrameTime/Jank 继续保持 Unsupported,避免把秒级趋势冒充逐帧真值。

Swift 41/41纯函数分析原始事件可回放逐帧源待验证PerfDog 同场待校准

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.swiftJank 三档、Drop/MedRange、缺帧与乱序质量测试。3 项新增
WorkbenchMetricCatalogFrameTime 及高阶项仍显示为 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 前的顺序

  1. B-VAL:完成 CPU/Network 前台五场景与 PerfDog 三轮文件。
  2. FRAME-SOURCE:在当前链接设备和至少一台 120Hz 设备上确认逐帧源、时间戳和开销。
  3. FRAME-CAL:把同场导出送入本分析层,冻结算法版本与边界规则。
  4. FRAME-UI:校准通过后再将 FrameTime、Drop、Jank、1% Low 接入实时图和报告。