Skip to content

P2/P5 指标自校准与产品闭环结果

结论

  • 搜索筛选后选中 App 的代码闭环已修复:UI 传递完整 DeviceAppRecord,基座校验记录仍属于当前设备快照后才选中;过期搜索结果 fail-closed。
  • 开始测试默认为 controlled-launch:发送一次 launch,不强杀已运行进程,再用 Bundle ID → PID → process list 核验身份;失败时会显式报错。
  • P2 的 11 个指标已全部进入自校准器;USB iOS 17 受控启动真机 Session 为 11/11 internally-calibrated
  • P5 的 13 个指标已全部进入自校准器;公式 invariant 13/13 通过,真机源 13/13 observed,其中 9/13 取得有效数值。剩余四项不写 0:Battery Current / Voltage / Power 受外供电物理条件阻塞,ThermalStatus 缺稳定当前值源。
  • 自校准只证明 Perfowl raw → Metric 的公式、单位、scope 和质量语义;按用户决定,本批不执行 PerfDog 同窗对照,L4 保持 not-tested

产品修复

应用搜索与选中

AppPickerPopover 不再只回传 Bundle ID,而是回传当前可见列表中的完整记录。DeviceFoundation.selectApp(_:) 先对当前 apps 快照做包含校验,选中成功才收起弹层。Swift 测试覆盖:

  1. 筛选结果能选中精确 App。
  2. selectedApp 与用户点击记录一致。
  3. 列表刷新后的过期记录被拒绝,已选 App 不被覆盖。

最终打包工具的后端读取也已验证:USB iOS 17 为 73 个 User App,Wi-Fi iOS 18 为 31 个 User App(E4)。原生 UI 人工点击回归按用户要求留待后续。

开始即尝试启动目标 App

Mac App 将 controlled-launch 显式传入 Collector Core。启动请求的 host monotonic 起点在 DTX launch 调用前保存,Lifecycle 以 0.5 秒轮询寻找同 generation 第一个 running / foreground 终点。

USB iOS 17 上选择一个测试前未运行的匿名银行 App:

证据结果
launch 请求1
identity verified attach1
sample / raw18 / 427
drop / error / pending-task warning0 / 0 / 0
observed running / foreground ready1,292.645 ms / 1,292.645 ms
轮询误差上界500 ms

因此产品行为是:点击开始后会尝试启动选中 App,启动与身份核验成功才进入指标采集。USB iOS 17 已通过 E4;USB iOS 18 的一个匿名目标由设备返回 launch failure,链路按预期 fail-closed,不扩大为“iOS 18 所有 App 都可启动”。

P2 指标自校准

P2 共 11 个 metricID:APPCpu、TotalCPU raw / normalized、分核 CPU、AvailableMemory、整机 Send / Recv、进程 Send / Recv、两项 StartupTiming。受控启动 Session 全部 11/11 通过 L1 与 L2。

本批另外发现并修正 Debug Gauge 进程网络源时钟问题:某 iOS 18 Wi-Fi 回包的首两个源时间相差约 19 分钟,而 host 收包仅相差约 2 秒;旧公式生成约 2.46 GB/s 人工峰值。转用 NSDate 源时钟的 source-interval-rate.candidate.v2 后,同类 Wi-Fi 复测 Recv 最大值为 7,445,571.45 bytes/s,无人工 GB/s 峰值。完整口径见 Network Send / Recv v2

P5 指标自校准

已取得有效数值(9/13)

组别iOS 17 Wi-FiiOS 18 Wi-Fi证据
Battery Temperature29.00–29.29 ℃30.79–31.00 ℃2 / 3 个条件快照
Energy Total416.612–659.6934.450–1,047.33424 / 23 个有效回包
CPU Energy0–243.0824.450–106.088非负有限值
GPU Energy00–0.913真实 0 保留
Network Energy00–504.406值响应已观察
Location Energy00稳定 0 是有效观测
Display Energy426.6120–440非负有限值
Energy Overhead该场景为 source-sentinel0–500不将哨兵写成 0

仍未取得可发布数值(4/13)

指标本批真机事实结论
Battery CurrentiOS 17/18 Wi-Fi 条件快照均 ExternalConnected=truenull / external-power-connected
Battery Voltage同上null / external-power-connected
Battery Power同上null / external-power-connected
ThermalStatus两系统快照均无稳定 0–3 字段null / source-missing

Battery 三项的计算和门禁已用确定性 Fixture 完成 L1,且真机原始源已观察;数值 L2/L3 需设备物理断开 USB 与充电器,同时保持 Wi-Fi 配对连接,再运行长于 40 秒的 Session。ThermalStatus 已审计 Battery IORegistry、完整 IOService 平面、MobileGestalt 与当前 DVT/Diagnostics,未发现可靠当前值源;不用温度或 Energy thermal cost 推断。

连接和收口修正

  • iOS 17+ Network 使用 wifi-userspace;iOS 15/16 Network 使用新增 wifi-lockdown,不再错误追加 --userspace
  • USB 物理断开后,同一逻辑设备如被 Network 记录接管,保留已选 App 并重做 DVT 路由核验,不沿用旧 USB snapshot。
  • Pmd3Subscription.__anext__ 在外层消费者取消时同步取消并等待内层 Queue.get task。iOS 17/18 Wi-Fi 和 iOS 17 USB 本批复测 pending-task warning 均为 0。

自动化与产物验收

项目结果证据层级
Python 系统环境116/116E2
Python 冻结 CPython 3.12116/116E2
Swift79/79E2
iOS 17 USB controlled launch18 sample / 427 raw / identity verified / drop 0E4
iOS 17 Wi-Fi passive36 sample / 616 raw / identity verified / drop 0E4
iOS 18 Wi-Fi passive42 sample / 773 raw / identity verified / drop 0E4
iOS 18 USB controlled launch设备侧 launch failure,fail-closedE4 失败边界
原生 UI 搜索→选中→开始未执行由用户后续验收

每个 Session 生成 metric-self-calibration.json,并由 foundation-delivery.json 记录哈希;报告保存公式版本、scope/unit、质量分布、最小/最大值、invariant 和 L1–L4 状态。

未关门与下一阶段

  1. 完成 Battery 三项的 battery-only E4 数值;需要物理断开外供电条件。
  2. ThermalStatus 保持 source research;在取得可跨 iOS 验证的稳定 0–3 当前值源前不发布。
  3. 由用户完成原生 UI 的搜索、选中、开始、停止、截图时间线与 Review 回归。
  4. 上述三项不阻塞 P2 公式/链路代码收口,但 P5 数值门禁仍保持 partial;下一个产品阶段是 P4 人工 UI 关门后,再决定是补 P5 物理场景,还是进入 P6 xctrace 增强研究。

2026-09-06 update:最终测试包构建与签名

本批在代码、公式和真机采集结果冻结后完成最终内部测试包构建,新增证据不回改前述验收数字:

项目结果证据层级
Mac AppPerfowl.app1.0.0 (22),x86_64E2
Foundationcollector-foundation.1.3-betaE2
内置 pymobiledevice311.3.1E2
内置 Core compatibility probeready;9/9 capability;missing 0E2
App 签名ad-hoc;codesign --verify --deep --strict 通过E2
ZIP 独立解包签名通过;13,091 个普通文件与 34 个符号链接和构建目录一致;包内 probe 通过E2
Foundation 独立解包281/281 文件哈希通过;内置 probe readyE2

最终内部测试包:MacApp/dist/Perfowl-1.0.0-beta22-x86_64.zip,SHA-256 1de200facb6206da1e5799232bb99fa063df82e61a2e5c35a9f6c51e58d4d9e5

Foundation 归档:MacApp/dist/collector-core/perfowl-collector-foundation-1.3-beta-x86_64.tar.gz,SHA-256 6d9e8de91012335ac2bc59d2af9a1071d5b7547e94271dc268576ae919aa4a69

该产物是内部 x86_64、ad-hoc 签名测试版本,未提交公证;arm64 / universal2、Developer ID、公证和 GPL-3.0 法务结论仍属于正式分发门禁。

Perfowl · Performance Observer