B 开发已进入 · 校准待资料2026-09-03

Implementation Result · B / P2 foundation

系统 CPU 候选、分核原始值与校准链已落地

本批次在 DATA-1 的原始数据链之上,补齐了多核 CPU 的可追溯候选值、PerCPUUsage 向量、iOS 17+ 路由审计字段、Session generation 质量统计,以及不依赖第三方库的 PerfDog 同时间窗校准工具。当前值仍保持 raw / candidate 双轨,不以候选值替换正式指标口径。

Python 22/22Swift 38/38B 代码已实现PerfDog CSV 待提供前台场景待执行

Approved scope

本批开发内容

RAW
TotalCPU 原值

SystemCPUUsage.CPU_TotalLoad 原样保留,兼容旧字段。

N-CAND
核心数候选

raw / enabledCPUCount 单独输出并标记 candidate。

PER-CORE
分核向量

保留 PerCPUUsage 原始数组和可解析的逐核负载。

ROUTE
iOS 17+ 审计

Host 选择的 route 与实际 provider route 同时进入事件。

RE-BIND
重绑质量

Session 记录 generation 数量与切换次数,差分不跨代。

COMPARE
校准工具

JSONL + PerfDog CSV 对齐后生成 JSON 误差报告。

Data contract

新增字段与责任边界

DVT System ├─ CPUCount / EnabledCPUs ├─ SystemCPUUsage.CPU_TotalLoad ───────► metrics.totalCPU (raw) └─ PerCPUUsage[*].CPU_TotalLoad ───────► metrics.perCoreCPUUsage │ └─ raw / enabledCPUCount ► metrics.totalCPUNormalized (candidate) Host route ──► --connection-route ──► provider event.requestedRoute Actual provider ─────────────────────► provider event.route Sample generation ──► quality.generationCount / generationTransitionCount └─ previous counter baseline resets at every rebind

候选归一化不裁剪到 0–100,也不覆盖 totalCPU。只有同一设备、同一场景、同一时间窗的 PerfDog/Xcode 对照完成后,才可以改变 UI 的展示口径。

Calibration utility

PerfDog 同时间窗校准入口

新增 MacApp/scripts/analyze-b-batch.py,只读解析 Perfowl Collector JSONL 和用户导出的 PerfDog CSV,按时间戳最近邻匹配(默认 ±0.75 秒),输出 AppCPU、TotalCPU raw、TotalCPU 核数候选、Send、Recv 五组比较。CSV 解析支持中英文时间/CPU/收发列名,并且只在表头明确标注 KB/sMB/sGB/s 时转换为 bytes/s;报告额外记录每个 quality 状态的样本数。

python3 MacApp/scripts/analyze-b-batch.py \
  --collector /path/to/collector-000001.jsonl \
  --perfdog /path/to/perfdog.csv \
  --scenario scroll \
  --output /path/to/b-batch-report.json
比较项候选门槛工具行为
AppCPU / TotalCPU平均绝对误差 ≤5 个百分点,且相对误差 ≤10%输出 candidate-pass 或 needs-review
Send / Recv相对误差 ≤10%按 bytes/s 比较,不把 KB/s 展示值当原始值
无 PerfDog 文件不作推断所有比较明确为 not-tested
报告状态不是产品承诺。
candidate-pass 只说明这一批输入满足候选阈值;产品 Registry 仍保留 Experimental,直到三轮同场数据和场景记录齐全。

Real-device evidence

当前链接设备 · iOS 16.6.1 · 只读短采集

本轮使用当前连接的 iOS 16 真机和两个已安装银行类测试 App,目标身份均由 Bundle ID → PID 校验。由于两个进程均处于后台/挂起,本轮只用于验证 System/Network/身份/质量链,不作为前台 FPS/GPU 或 PerfDog 数值校准。

匿名目标样本CPUTotalCPU raw核心候选Network身份/前台
目标 App A290(后台/挂起)88.1–176.7%14.7–29.4%(6 核有效样本)device scope;valid 及合法 0verified / 非前台
目标 App B290(后台/挂起)79.1–588.7%13.2–98.1%(6 核有效样本)device scope;valid/missing/warmupverified / 非前台

两轮首个 System 回包均为 warmup,没有将缺值写成 0。原始 Collector JSONL 仅保留在本机临时目录,公开文档不写入设备标识、Bundle ID 和 PID。

Verification ledger

代码与兼容性验证

层级结果结论边界
Python Collector + calibration22/22拓扑解析、分核数组、raw/candidate、缺核数不猜测、PerfDog 中英文列与显式 KB/s 转换、重复时间戳匹配、既有 Network/身份测试。
Swift Core/UI36/36Codable、CSV 新列、路由参数、generation 质量、旧版 quality.json 解码和既有 UI/Session 链。
Sidecar 构建通过内置 Collector 0.5.0,x86_64 PyInstaller 产物可生成。
iOS 版本路由静态矩阵通过16→legacy-usb;17.0–3.x→usb;17.4+ / 18.x→usbmux route 选择逻辑已覆盖。
当前真机2 目标通过iOS 16.6.1、后台短采集;未覆盖 iOS 17+ 真机和前台场景。

Gate status

B 批次仍待完成的验收输入

需要用户提供/操作

  1. 把目标 App 保持在前台,依次执行静止、匀速滚动、持续动画、纯上传、纯下载。
  2. 同一时间窗导出 PerfDog CSV;文件至少含时间戳、AppCPU、TotalCPU、Send、Recv。
  3. 在同一设备重复三轮,记录 USB/Wi-Fi、刷新率、低电量模式和 PerfDog 客户端版本。

当前明确保持 Hold

  • 没有 PerfDog CSV 时,不升级任何指标为 Validated。
  • 没有前台证据时,不把 FPS/GPU 归因给目标 App。
  • 没有 iOS 17+ 真机 route/隧道回包时,不宣称跨版本兼容。
  • Network 继续只发布 device scope;进程归属尚未证明。
本批开发停止点:
代码和校准入口已完成;下一次输入是 PerfDog 同场文件与前台场景。拿到资料后可直接运行校准脚本并补充本页结果,不需要改动原始采集链。

Next stage

后续顺序

  1. B-VAL:完成前台五场景 + PerfDog 三轮对照,决定 TotalCPU 展示口径。
  2. FRAME-1:确认逐帧 Display/Hitches 源,再实现 FrameTime、Drop、Jank 和 1% Low;没有逐帧源就保持 Unsupported。
  3. SHOT-1:接入低频截图与统一时钟,截图默认关闭并记录开销。
  4. C:在 P0–P2 稳定后再接 Energy/Thermal、云端上传和 Web 报告。