两轮真机非启动数据缺口修复
事实与方案 · 2026-10-03
同一测试包、同一指标计划的两轮短会话(设备 A / 目标 App A)均已封存,但 complete 只证明 Raw 与报告边界,不代表 26 项非启动请求指标全有值。两轮设备网络发送/接收各 0 个有效值;能力事件逐字记录 AttributeError: 'DeviceNetworkAggregateStream' object has no attribute '__aenter__'。聚合包装流实现了异步迭代,却未实现 Pmd3Session.open_channel() 所需的异步上下文协议,导致在 NetworkMonitor.startMonitoring 之前失败。不得把同轮进程网络值替代为整机网络。
同两轮逐帧原始记录分别有 165 / 258 个刷新率观测,产品实时样本也有刷新率、10 秒滚动 FrameTime P95 与 P95−P50 抖动值;然而最终 coverage 的三项均为 missing/0,产品 metrics.csv 缺相应列。报告消费者只接收 Raw/派生帧,未接收已发布的产品样本,CSV 列表亦未列这三个已有的 PerformanceSample 字段。这里是输出链路断层,不改采集源、公式或默认开关。
最小修法:①聚合流实现 __aenter__/__aexit__,仅委托固定上游服务且返回同一包装流,保留既有 stop-drain 与窗口 flush;②产品样本已发送后,在线报告以该样本的有限值与质量标签更新三项覆盖计数,缺值绝不补零,现有 report-state 恢复沿用覆盖账本;③在 CSV 末尾追加三个数值及其质量列,保留既有列的名称、次序与旧 Session。产品实时数值的现有公式、单位、scope 与 10 秒窗口不变:P95=nearest-rank 第 ceil(0.95n) 位(n≥5),Jitter=P95−P50,刷新率来自有效 refreshRateHz/refresh interval。质量证据仍为 candidate/valid,不是 E4 通过。
验收门:包装流预热→进入→迭代→stop-drain→退出的顺序和一次性关闭;网络来源失败时仍保持 missing-source、来源 receipt 不得伪造;显示三项有效样本出现在最终覆盖与 CSV,warmup/缺值/非有限值保持空值且不计数;旧 CSV 前缀和旧 Session 不变;匹配 Python/Swift 测试、全量回归、知识门禁和站点构建通过。实现后做同规模 19/22 样本与高量级网络聚合性能对照,测首响应、总耗时、CPU/RSS/I/O 能测项并如实登记 unknown。单源消费有界,记录/报告更新 O(1),CSV 每行增加常数列;网络聚合原有 O(n) 流式内存上界和 500 ms Stop 消费者窗口不放宽。测试以单进程、显式超时执行;上游 ActivityTrace 的 0.9–2.2 秒间隙另列,不能由本补丁宣称消除。
Implementation Update · 2026-10-03
实际修改:DeviceNetworkAggregateStream 现在委托固定上游 NetworkMonitor 的异步进入与退出,返回包装流自身,现有网络聚合、Stop drain 与末窗 flush 未改;OnlineReportSession.observe_live_display_sample() 只对已请求的 P95/Refresh/Jitter 计入已发布样本的有限、非负且质量为 valid/candidate 的值,Refresh 额外要求正值;realtime.py 在发布产品 sample 后交给报告账本;PerformanceSessionStore.swift 仅在 CSV 末尾追加三对值/质量列,不重排旧列。与方案无架构偏差,旧 Session、旧报告和原始值未改。
匹配验证:Python 聚焦 26/26;Sidecar 全量 1333/1333;Swift 存储聚焦 1/1、全量 217 项、3 skipped、0 failed。覆盖了网络包装流进入/退出各一次与异常传播、显示三项有效样本/缺值/非有限值、报告 checkpoint 恢复到 final、CSV 新列与实际数值。E2 程序测试不替代真机网络来源与显示持久化 E4。额外微基准(单进程、9 次中位):报告观察 19/22/10000 条分别约 0.071/0.080/46.274 ms,10000 条吞吐约 216104 条/s、进程峰值 RSS 27.43 MiB;空循环仅是控制开销,不当作旧产品的可比功能基线。该操作 O(1) 每样本,未见新增随 Session 长度增长的容器。构建/签名、同源码测试包及真机验证另记;CPU 与 I/O 峰值在此微基准中为 unknown。
当前状态:产品代码与离线测试 E2 修复已完成,完整交付待新包验证;旧两轮仍是设备网络 missing-source,三项旧最终覆盖仍为 missing/0,不得回填。新包 E4 需要实际 UI 复测:设备网络出现可核来源、合法非零正控/守恒;三项显示的最终覆盖计数与 CSV 和实时样本对应;上游 ActivityTrace 间隙单列,不能由本次输出链路修复推断已经消失。Startup 总时间与稳定性改善仍未证明。
Validation Update · 2026-10-03
本批同源码测试包版本 101 / x86_64 已构建。Developer ID 签名后,对 App 内全部可执行与扩展做安全时间戳复核:372 件、缺失 0;App 与交付 DMG 分别公证 Accepted、staple/validate 成功,codesign --verify --deep --strict 与 Gatekeeper 均通过。独立挂载 DMG 后再次核 App 版本 101、签名、公证票据与 Gatekeeper;旧版先正常退出并留私有回滚压缩包,再覆盖安装到本机,安装后启动冒烟通过。dist/ 只保留这一份测试 DMG,旧本地未公证测试 ZIP 已清理。交付 DMG 163409853 B、SHA-256 65582bbc1cf5d6d6e6e19b98095fedc9f156088c3ec3b54638b08c4acaa21987。
包装脚本当前仍对嵌套模块使用无安全时间戳签名;本批在提交公证前逐件补签并复核,不把临时操作称为脚本永久修复。包和安装验证是 E3;未在新包上采新真机 Session。下一步由使用者按真实 App UI 执行短轮:同一指标选择下观测设备网络双方向的来源/非零正控/字节守恒,检查三项显示的实时样本、CSV 非空数量与最终覆盖是否一致;保留缺值、质量标签和原始来源,不用进程网络代替整机网络。上游 FrameLifetime 约 0.9–2.2 秒接收间隙及少量 FrameTime 缺点继续独立观察。E4、Gate C/D/E 和完整 Beta 均未因本次 E2/E3 结果自动关闭。