Skip to content

P3 Frame Quality 长窗口校准门禁阶段结果 ​

本批结论 ​

  1. Foundation 新增独立 frame-calibrate 命令和 perfowl.frame-quality-calibration/1 机器可读报告。
  2. 门禁固定审核四场景、每场景三轮、每轮 600 秒,并验证 frame event → source manifest → frame report 的 SHA-256 完整链。
  3. 合格运行输出 TinyJank 与 Smooth 的 minimum / p10 / median / p90 / maximum 分布,但不会自动生成或发布产品阈值。
  4. 报告固定保留 foreground-device / targetProcessExclusive=false / attributionStatus=not-proven;当前逐帧来源没有被错误提升成目标 App 独占指标。
  5. 本批实现和确定性 Fixture 已达到 E2;真实四场景长 Session 尚未执行,因此阶段状态为 implemented · partial,阈值仍为 withheld。

实现范围 ​

层结果
Core新增 frame_calibration.py,审核不可变 Session、公式身份、质量与时长
CLI新增 frame-calibrate SPEC --output RESULT;eligible 返回 0,partial 返回 2
完整性校验 event/report SHA-256、记录数、严格递增时间戳与 frozen decoder/report/formula 版本
长窗口默认 600 s、60 intervals、3 runs/scenario、四个固定场景
分布线性插值分位数:minimum / p10 / median / p90 / maximum,保留 Double
隐私输出只保留匿名 runAlias 和内容哈希,不回写本地 Session 路径
归因明确记录 PID 独占归因未证明,不接受 scope 自动升级

Fail-closed 覆盖 ​

下列任一条件都会使运行不具备校准资格:

  • Session 少于 600 秒或有效 FrameTime 少于 60。
  • 缺少四场景中的任一场景,或某场景合格运行少于三轮。
  • frame event 或 frame report 哈希不一致。
  • decoder、Frame Report、TinyJank、Smooth 公式版本不匹配。
  • source/report 非 candidate,scope 不是 foreground-device。
  • 出现 unknown chunk、unknown byte、乱序或记录数不一致。
  • TinyJank 与 SmallJank 兼容别名不同值。
  • Smooth 缺失、非有限或小于 0。

确定性 Fixture 验收 ​

Foundation 2.1 Beta 最终包实际执行 frame-calibrate:

项目结果
固定场景static / scroll / animation / heavy-load
运行数量12(每场景 3)
时长门禁12/12 达到 600 秒
场景资格4/4 eligible
总体状态eligible
阈值状态eligible-for-review
PID 独占归因false / not-proven
路径泄漏0

Fixture 的 Smooth 全局分布为 minimum 0、p10 0、median 0.38729833462074165、p90/maximum 0.7745966692414834。这些数字只验证聚合算法,不是产品阈值,也不代表真机体验分布。

匿名机器可读 Fixture:下载 JSON。

最终回归与产物 ​

项目最终结果证据
Python冻结 CPython 3.12 环境 194/194E2
Swift83/83E2
Foundationcollector-foundation.2.1-beta x86_64;290 个清单文件;SHA-256 9b7584db…6c3d1697E2
包内命令frame-calibrate --help 和 12-run Fixture 执行通过E2
Mac App1.0.0 (30) x86_64;内置 Foundation 2.1 BetaE2
签名ad-hoc codesign --verify --deep --strict 通过E2

未关门门禁 ​

  1. 真实四场景 × 每场景三轮 × 600 秒尚未采集,不能建立 Smooth/TinyJank 真机分布。
  2. iOS 17 与 iOS 18 均需独立执行同一套长窗口矩阵;iOS 15 与 17.4–17.x 兼容覆盖仍开放。
  3. scroll / animation / heavy-load 需要稳定、可重复的场景操作;用户 App 的人工操作或后续无侵入场景编排需要单独安排。
  4. 逐帧事件尚无可信 PID 绑定,目标 App 独占归因继续保持 not-proven。

下一阶段工作与整体进度 ​

  • 下一阶段:准备真实长 Session 执行清单,在 iOS 17/18 上分别完成四场景三轮;没有可重复场景操作时,先进入 P6 Hitches / Time Profiler 方案与能力验证,不把 Fixture 分布当作真机阈值。
  • 整体进度:P0/P1 完成;P2 Startup 官方链完成;P3 指标实现与长窗口校准工具完成,真实长窗/归因仍开放;P4 人工 UI、P5 放电与 ThermalStatus、P6 其余增强、P7 云端仍待推进。

Perfowl · Performance Observer