外观
Jitter r4 未配对帧事件诊断与独立参考用例
当前决定
Jitter仍为正式 3/5,整体 37/66。r4固定窗合同仍为6/7,长尾方向门失败,因此r4不计轮次。新诊断解释了失配事件相对于Fixture请求/提交的时序,但没有证明事件的显示语义,也没有把原因归因于硬件或产品故障。referenceUnavailableConfirmed=false 保持;不按“无参考”政策提前验收。
E4 时序复核
对r4的FrameLifetime Raw、Fixture requests/presented、summary、Metal审计及资格收据做了独立只读时钟复算。输入哈希在复核期间前后相同,原件未修改。私有复核收据为 gap-diagnosis-independent-a01.json,权限0600。
| 观察 | 复算结果 |
|---|---|
| 两钟offset区间宽度 | 583.333 ns |
| 前一条Raw FrameLifetime到未配对事件 | 16.639708 ms |
| 未配对事件到后一条Raw FrameLifetime | 66.553125 ms |
| 对应Fixture回调的显式主线程延迟 | 81.015125 ms |
| 未配对事件相对延迟开始 | 约33.177 ms |
| 未配对事件到下一drawable提交 | 约47.953 ms |
| 前后Metal presentedTime间隔 | 83.192833 ms |
固定失败窗中的未配对FrameLifetime发生在Fixture故意延迟的回调期间:前一drawable已上屏,下一drawable尚未提交;其时间落在前后两个drawable的 presentedTime 之间。Metal记录只针对已提交drawable,因此该事件没有可一对一配对的新drawable记录。这确认了该用例中两种记录覆盖范围不同,但没有证明FrameLifetime事件代表重复扫描、另一个Surface,或其他具体系统行为。
Apple把 MTLDrawable.presentedTime 定义为对应drawable显示于屏幕的host time;Apple的Hitches说明则将实际frame lifetime与vsync关联,并说明延迟帧会使先前内容留屏更久。这些定义支持调查一个覆盖frame-lifetime/vsync事件的独立候选,但不能单独解释本次事件。MTLDrawable.presentedTime · Understanding hitches in your app
独立参考候选
本机 xctrace list instruments 可见 Frame Lifetimes 与 Display 仪器,xctrace list templates 可见 Animation Hitches 与 Metal System Trace。这只证明工具组件存在,不证明其能在本目标设备上导出逐帧时间、目标/显示身份或可用时钟。
完整 Animation Hitches 配置已有5秒探测峰值 933,773,312 B RSS,超过 805,306,368 B 硬门;相应导出失败并产生0字节文件。该配置拒绝,不重试相同设置,也不放宽上限。Metal System Trace 的显示/vsync记录及独立 Frame Lifetimes 仪器仍是待验证候选;必须从新trace证明其逐帧事件、身份与导出合同,不能用图形轨道或hitch汇总值代替。
后续用例设计
A. 短时仪器准入
为 Frame Lifetimes 建立只含该仪器的最小可执行trace配置;如命令行要求基础模板,则选择最轻模板并记录其附带仪器。使用新私有输出目录做短时目标App烟测,检查设备可达性、启动/停止、trace可读、导出事件字段、峰值RSS与文件增量。RSS必须低于805,306,368 B,主机空闲空间须至少10 GiB且不少于预计新增量两倍;任一超限即拒绝该配置并保留trace。此烟测只证明工具准入,不计Jitter轮次。
B. 同场逐帧覆盖资格
短测通过后,以新独占attempt、新Session与新run并行采集Perfowl Raw、既有 LabP95 p95-tail-v1 与该仪器trace;不重用或拼接r4。140秒配方、四阶段长度、每12次80 ms延迟、七个冻结参考cut、100 µs端点界及0.400002 ms Jitter差值界全部沿用现有合同。重点复现long-callback +25秒处于回调阻塞、下一drawable尚未提交的帧事件,同时保留其前后完整时间窗。
对导出记录要求:可以稳定区分目标与主显示、获得可重算的逐帧实际时间或对应vsync事实,并能将固定窗内所有FrameLifetime端点与前驱唯一配对;不能有缺失、额外或含糊事件。按独立时钟桥对完整不确定区间复算,端点界仍为100 µs,并从独立时间序列重算FrameTime、P50、nearest-rank P95及Jitter。所有七窗、阶段方向、产品数据、资源门均通过后,候选才可用于正式r4判定;只要一项不满足,本attempt按不合格保全。
在该候选实验前,需对当前工作台新产生的203张未保存预览取得明确处理决定;本次独立离线复核没有操作手机、启动新Session或清理预览。
范围与来源
本记录是参考候选调查,不修改Jitter公式、质量门、r4结论或五轮计数。复用价值:当按drawable上报的呈现事件不能覆盖“回调阻塞且新drawable尚未提交”的时刻时,应检查其与系统frame-lifetime/vsync事件的覆盖差异;不能插值或用请求时刻补齐。E4原始证据保存在私有attempt-04,公开内容不含设备身份、应用标识或进程标识。
本地验证:Node v24.19.0完整站点client/server/render构建通过;知识门66项通过、归档同步774个HTML。43条既有内容风险提示和大chunk advisory保留。生产网站未发布。
Decision Update · 2026-10-23 · 测试数据处理授权与 Display 候选
Owner明确授权由我自主判断和清理测试数据,不再为清除测试数据重复请求。当前203张未保存预览仍留在工作台;先用不启动Workbench Session的资格用例,不触发清除。原始、失败、待分析及封存证据继续保留。
Frame Lifetimes attempt-04和既有Animation Hitches配置均不重试。改为仅测Instruments Display 仪器;Apple文档把它列为显示/垂直同步事件来源。先执行35秒、独占新run前缀的资格用例并检查可导出时间行、显示身份、时间基准及Fixture presented关联;只有新鲜通道、容量、历史SHA与run冲突守卫通过才启动。方案已落在Display候选准入方案。此步仅候选调查,不更改3/5或37/66,不将失败解释为参考不可用。
来源:Canonical方案及r4结果 · Frame Pacing Jitter知识页
Validation Update · 2026-10-23 · Instruments GUI attempt-04
GUI短测可以读取Frame Lifetimes表的16字段schema,但未导出逐帧行;录制界面显示No Graphs/No Data。观察器在准备过程中超过45秒墙钟门,attempt-04不准入且不重试。完整结论、资源边界、容量差异和预览处理状态见attempt-04结果与独立复核。这不确认参考不可用,也不改变Jitter正式3/5、整体37/66。
Frame Lifetimes 短时准入 a01 执行结果与后续方案 · 2026-10-23
结论:全进程 Blank + Frame Lifetimes 配置未通过准入;Jitter 状态不变。 在一次性 2 秒设备录制中,xctrace 启动 Blank 模板与 Frame Lifetimes 仪器后 0.891658 秒以 SIGABRT 退出,留下 53,248 B 不完整 trace。独立只读 TOC 导出返回 Document Missing Template Error。系统崩溃报告的故障栈经过 XRTapAgent 的 owners waiting-room / stop itinerary 处理;没有证据归因具体根因。
本次观测进程树峰 RSS 为117,817,344 B,wait4退出峰RSS为104,349,696 B,输出峰57,794 B;均未超过冻结上限。设备旧run 22/22终态且workload释放,Mac活动Session为0,手机写入和新Lab run均为0。尝试及分离复核收据保存在私有目录 20261023-jitter-frame-lifetimes-qualification-01/。a01失败trace与日志保留,不重试相同的全进程配置。
崩溃说明当前执行配置不合格,不能据此判定硬件故障、产品指标失败或参考源不可用。下一候选另建独占attempt,使用新输出前缀,把 Instruments 限定到 DVT 两读确认的单一目标App进程,通过 xctrace --attach <PID> 做一次2秒准入;PID、trace及进程信息留在私有收据。若仍不能启动、停止、导出或提供可检查的逐帧行,则该配置继续不准入。此测试不启动Workbench Session、不发Fixture请求,也不计Jitter正式轮次。
当前工作台203张未保存预览保持原样。后续正式同场参考采集仍等待Owner对这203张预览的明确处理决定;本a01准入及新单进程短测均不需要清除它们。
单进程 PID attach a01 结果与进程名方案 · 2026-10-23
结论:PID attach没有产出trace,资源门未能认证;不重跑该配置。 新鲜DVT守卫确认同一个目标App进程PID在尝试前后保持稳定,但xctrace返回“Cannot find process for provided pid”。独立复核再次核验前后22个受管Lab run目录摘要一致、run全部终态且workload释放、Mac活动Session为0、设备容量门通过;未出现新的受管run或Session。
本地资源监视器在xctrace创建/移除临时trace目录时遇到FileNotFoundError并退出,因此没有可用trace,也无法认证这次尝试的wall、RSS和输出峰值。设备全文件系统写入记为unknown;没有把“受管Lab数据不变”外推为全设备零写入。独立复核收据位于私有 20261023-jitter-frame-lifetimes-qualification-02/independent-review-a02.json。此结果不能归因于硬件、Perfowl产品,或认定参考不可用。
下一个候选单独建立新attempt,修复监视器对瞬态trace路径的竞态,并用Xcode CLI支持的进程名 --attach 形式绑定安装清单中的目标App可执行文件名。它使用新的2秒trace输出、同一资源界与新鲜设备守卫;不重试PID配置、不清理203张预览、不启动Workbench Session或Fixture。若该配置仍无法录制或导出,即停止并记录,不改变Jitter验收门。
Frame Lifetimes 进程名 attach a01 执行与独立复核 · 2026-10-23
结论:按进程名的短时工具配置未准入;Jitter状态不变。 新鲜只读守卫通过:Lockdown、DVT与签名身份读取可用,目标进程在设备上存在且生命稳定;旧22个受管run均终态、workload已释放,Mac活动Session为0,容量门通过。xctrace record --help确认本机CLI支持--attach <pid|name>。实际2秒配置以进程名attach后,xctrace在0.651478秒退出,exit code 19,stderr为Cannot find process matching name;未生成trace或可导出TOC/逐帧行。
分离复核a03通过:前后守卫收据SHA与selection摘要匹配;录制进程树峰RSS为103,383,040 B、退出峰RSS为90,947,584 B、输出峰为4,487 B,均低于冻结资源界;wall低于45秒,监视器无竞态或失败。没有新Workbench Session、Lab run或预览变更。受管手机写入计数为0,但全手机文件系统写入状态仍为unknown,不外推为零。复核输入哈希在审查期间不变,独立收据independent-review-a03.json权限0600。
设备在xcdevice枚举中可用,但本次xctrace状态为connecting。因此失败范围仅是此次按进程名attach配置;原因仍未确认,不能归因于设备硬件、Perfowl产品,也不证明参考源不可用。不得重复该命令或拼接部分trace。当前工作台203张未保存预览仍完整保留;同步正式采集前仍需Owner处理决定和新鲜守卫。后续先做只读的进程解析/设备通道诊断;只有出现区别于本次的新证据,才另建attempt评估不同配置。Jitter仍正式3/5、整体37/66,不进入r5、下一指标或磁盘读取率。