Skip to content

全量采集与流式报告改造——实现结果 ​

本批按已批准的 D0–D8 任务书完成实现。采集计划、显示偏好、能力账本与报告封存已经拆开;产品侧仍保留旧 Session 字段用于历史读取。当前结论为 E2 implemented · gate-open:代码、协议、离线回归和合成资源基准已完成,真实设备两轮、原生 UI、Developer ID/公证和 GPL 法务门禁继续单独计账。

实现范围 ​

任务实现关键位置
D0/D1 计划与显示解耦CapturePlan.allSupported 固定取 Registry 全部 64 个 metricID;DisplayPreferences 只保存可见图表组;Swift/Python 共享规范化 JSON 与 SHA-256MacApp/Sources/PerfowlCore/CapturePlan.swift、MacApp/Sidecar/perfowl_collector_core/capture_plan.py
D2 全源准备选择应用后发送一次全量准备请求;预热进程按设备复用,应用切换采用 request/app/device generation;USB 能耗由能力账本标为 not-applicablePerformanceSessionController.swift、source_preparation.py、realtime.py
D3 覆盖账本每个 metricID 持有 preparation/collection/value quality、原因、样本序号、source epoch、重连窗口;显示选择不会改变采集集合capture_plan.py、CollectorReadiness.swift
D4 在线聚合单 writer 消费 Raw、MetricFrame、decoder 输出;Welford 统计、网络精确时间戳 join、FPS/FrameTime 精确序列索引和 64 项快照均在采集期间更新online_report.py、streaming_stats.py、exact_order_index.py、session_writer.py
D5 启动与帧实时发布startup revision、frame JSONL 明细和历史兼容投影即时落盘;启动结果不再等待 Stop 才首次展示realtime.py、online_report.py
D6 检查点与恢复report-state、report-checkpoint、Frame JSONL digest、SQLite 逻辑边界和 network pending 状态可恢复;检查点后的未提交帧尾会截断online_report.py、checkpoint_policy.py
D7 双层封存writer-seal.v1 绑定 Raw/Metric/report 同一序号;产品层 foundation-delivery/2 只读取已封存小清单;旧全量 finalizer 保留作独立审计live_seal.py、delivery.py
D8 客户端状态Stop 先反馈采集停止,再等待有界封存;封存序号和完整性模式回传至原生 UIPerformanceSessionController.swift、PerformanceSessionStore.swift

关键语义 ​

  • 新会话永远以全量 64 项 Registry 为采集合同;+ 和隐藏图表只改显示投影。
  • 64 项账本的 sampleCount=0、value=null、quality=missing 表示尚未取得观测,不以数字 0 填充。
  • USB 只影响明确的物理电池功率适用性;CPU、GPU、网络和系统能耗仍按各自源合同记录。
  • sourceEpoch 或重连代次变化会开启新的 coverage window,差分、帧间隔和网络 join 不跨静默间隙计算。
  • 正常 Stop 走同一有序 writer 的在线 seal,不调用完整 Raw/Metric 回读链;历史 finalizer 仍可由独立审计命令显式运行。

兼容与故障边界 ​

旧 PerformanceSessionPlan、旧 capture-plan.json 和缺少 online seal 字段的报告仍可读取。新报告对序号缺口、重复回包、写入失败、digest 不一致、检查点边界不一致和 poison writer 均保持 fail-closed;产品层不会把旧缓存或部分 source 结果升级成完整证据。

验证结果(E2) ​

  • Python sidecar:355 项通过。
  • Swift Package:135 项执行,0 失败,3 项显式资源基准按合同跳过。
  • CapturePlan 跨语言 hash:60af7f3ea9c97fd87543c84e62cc701db90885ae38d901ae945cab445f7f5c63。
  • 新增覆盖账本、在线 snapshot 节流、非连续序号、旧计划兼容、双层 seal、失败注入和恢复测试;Stop 测试通过对 Raw/Metric/Report 回读函数做断言,确认在线路径不触发完整重算。
  • 合成全 Registry 资源基准见验收记录。

未关闭门禁与下一阶段 ​

当前实现还没有将 E2 合成资源结果升级为 E4。下一阶段执行两轮真实设备/目标 App 启动与完整采集,核验九阶段实时值、停止响应、报告落盘和原生 UI;随后完成 arm64/universal2、Developer ID、Notary、staple、Gatekeeper、独立安装与 GPL-3.0 法务门禁。旧启动、Frame 长窗口、Battery 物理放电和 GPU Counter 数值门禁保持原有状态。

Perfowl · Performance Observer