外观
P3 Frame Quality 长窗口校准门禁阶段结果
本批结论
- Foundation 新增独立
frame-calibrate命令和perfowl.frame-quality-calibration/1机器可读报告。 - 门禁固定审核四场景、每场景三轮、每轮 600 秒,并验证 frame event → source manifest → frame report 的 SHA-256 完整链。
- 合格运行输出 TinyJank 与 Smooth 的 minimum / p10 / median / p90 / maximum 分布,但不会自动生成或发布产品阈值。
- 报告固定保留
foreground-device / targetProcessExclusive=false / attributionStatus=not-proven;当前逐帧来源没有被错误提升成目标 App 独占指标。 - 本批实现和确定性 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/194 | E2 |
| Swift | 83/83 | E2 |
| Foundation | collector-foundation.2.1-beta x86_64;290 个清单文件;SHA-256 9b7584db…6c3d1697 | E2 |
| 包内命令 | frame-calibrate --help 和 12-run Fixture 执行通过 | E2 |
| Mac App | 1.0.0 (30) x86_64;内置 Foundation 2.1 Beta | E2 |
| 签名 | ad-hoc codesign --verify --deep --strict 通过 | E2 |
未关门门禁
- 真实四场景 × 每场景三轮 × 600 秒尚未采集,不能建立 Smooth/TinyJank 真机分布。
- iOS 17 与 iOS 18 均需独立执行同一套长窗口矩阵;iOS 15 与 17.4–17.x 兼容覆盖仍开放。
- scroll / animation / heavy-load 需要稳定、可重复的场景操作;用户 App 的人工操作或后续无侵入场景编排需要单独安排。
- 逐帧事件尚无可信 PID 绑定,目标 App 独占归因继续保持 not-proven。
下一阶段工作与整体进度
- 下一阶段:准备真实长 Session 执行清单,在 iOS 17/18 上分别完成四场景三轮;没有可重复场景操作时,先进入 P6 Hitches / Time Profiler 方案与能力验证,不把 Fixture 分布当作真机阈值。
- 整体进度:P0/P1 完成;P2 Startup 官方链完成;P3 指标实现与长窗口校准工具完成,真实长窗/归因仍开放;P4 人工 UI、P5 放电与 ThermalStatus、P6 其余增强、P7 云端仍待推进。