Build49 启动完成实时展示验收

日期:2026-09-12 · 状态:implemented · partial · 证据:E4 命令链 + E2 回放/测试

结论:启动结果已与停止采集、最终报告解耦。设备 A / 目标 App A 在性能采集仍运行时收到 App Launch Total 1832.309 ms candidate 和六个完整阶段,随后继续收到常规样本才发送停止。

根因

Build48 只在停止后的九阶段 finalizer 中生成并发送 launch trace。最新失败会话中 drain、Raw 校验和帧分析先消耗约 8.64 秒,10 秒客户端收尾预算在启动回放完成前终止进程;同源离线仍可恢复 1838.117 ms,说明数据存在而实时编排缺失。

实现

  1. Decoder v5 在 Initial Frame END 与 5 ms 乱序宽限满足后发布 launch_trace(final=false)。
  2. Frame Time 与生命周期复用一次 RAW v2 扫描,避免实时双扫描。
  3. Total 与阶段按各自边界保存;其他阶段缺失不清空完整结果。
  4. 客户端将 launch trace 保存为 startup 事件,工作台立即更新;停止后 final 结果只做校验。
  5. 实时结果发布后立即释放启动语义缓存,后续同一扫描只继续投影 Frame Time,避免长时采集累积生命周期记录。

真机结果

项目结果
发布顺序launch trace 在 stop 前出现
Total1832.309 ms · candidate
阶段6 个 candidate;3 个 missing;整体 partial
停止前后连续性实时结果后继续收到 2 个常规样本
源质量liveQueueDropCount=0
用户操作到结果10.658 s;1 s 产品目标仍开放

效率

最新失败真机 Raw 在第 43/127 个 CoreProfile chunk 即形成结果,该源事件比停止早 9443.669 ms。一次流式回放中,共享扫描处理 2,475,195 条记录耗时 4.382 s,低于 6.629 s 源到达窗口,同时投影 73 个帧事件。3 轮交错资源基准的双扫描/共享扫描中位耗时为 8.086/7.327 s(下降 9.4%),CPU 时间为 7.380/6.338 s(下降 14.1%),吞吐量提升 10.4%,最差耗时为 10.347/7.458 s;峰值 RSS 为 231.49/231.73 MiB,块 I/O 均为 0。继续处理发布后的 84 个 chunk 时总计投影 295 个帧事件,live 启动记录缓存保持为 0,不再随常规采集时长增长。

验证与开放门禁

Python 302/302;Swift 127/127,另 3 项显式资源基准跳过。Build49 x86_64 App 已通过 Developer ID Application + hardened runtime 重签、严格验签、独立解包、主程序启动和随包工具探针;由于本机未配置公证凭据,Gatekeeper 返回 Unnotarized Developer ID,该 ZIP 仅为内部测试包。原生 UI 像素级展示、终端事件到界面 1 s 延迟、完整九阶段覆盖、CoreProfile drain、完整报告 ≤2 s、公证与 stapling 继续保持开放,缺失值没有补零。