外观
CORE-20 Battery 模式门禁、20 秒采样与 Thermal 来源审计结果
交付结论
CORE-20 已交付 collector-foundation.1.2-beta 与 Mac App 1.0.0 (20) internal beta。Device Condition 改为“首次立即 + monotonic 固定 deadline 20 秒”采样;Battery Current / Voltage / Power 仅在同一快照明确处于 battery-only 放电模式时生成。USB 外部供电场景下三项值保持空值,不再把 0 或符号不明的电流发布为电池功耗。
批次状态为 implemented · partial:iOS 17/18 最终打包 Collector 已证明 20 秒节拍和 USB fail-closed 规则(E4);尚无 Wi-Fi / ExternalConnected=false 的 battery-only 真机证据,也没有 PerfDog 同时间窗校准。Battery 产品入口因此继续 Unsupported,ThermalStatus 保持 Partial。
冻结公式与产品落点
| 范围 | 规则 | 质量语义 | 产品状态 |
|---|---|---|---|
| Device Condition 节拍 | 首次立即;之后 start + N×20s;超时跳过已错过窗口 | 不累积读取漂移,不追赶式连发 | 已进入打包 Collector |
| Battery Current | ExternalConnected=false 且 IsCharging=false 且 InstantAmperage<=0 时取绝对值 | 外供电、充电、状态缺失、正电流均 fail-closed | Unsupported |
| Battery Voltage | 同一 battery-only 快照内只接受有限正值 | 不跨快照补值 | Unsupported |
| Battery Power | abs(InstantAmperage) × Voltage / 1000 | Current / Voltage 任一无效则 value=null | Unsupported |
| Temperature | Temperature / 100,原值范围 0–8000 | 独立于 Battery 电学门禁 | Partial |
| ThermalStatus | 稳定当前值来源的 0–3 | 通知名称、温度、Energy thermal cost 均不代替 | Partial |
全量原始字段、单位、窗口、缺失与取整规则见 Energy、Battery 与 Thermal 指标 v3。
自动化与确定性重放(E2)
| 范围 | 结果 |
|---|---|
| Python 系统环境 | 105/105 |
| Python 冻结 CPython 3.12.3 | 105/105 |
| Swift | 70/70 |
| Metric 双重重放 | 237 raw / 34 metric frame / 36 observed metricID / 29 Stat;全部产物哈希一致 |
| Frame 双重重放 | iOS 16=21/20、iOS 17=9/8、iOS 18=35/34 accepted/interval;unknown chunk/byte 均为 0;全部哈希一致 |
最终打包 Collector 真机验收(E4)
| 项目 | iOS 17 · 设备 A / 目标 App A | iOS 18 · 设备 B / 目标 App B |
|---|---|---|
| 运行时长 | 约 23 s | 约 23 s |
| sample / raw event / Stat | 22 / 462 / 29 | 22 / 474 / 29 |
| Device Condition raw | 2 | 2 |
| 两次条件采样间隔 | 19.983423547 s | 19.987156217 s |
| 观察到的电源状态 | ExternalConnected=true、IsCharging=false | ExternalConnected=true、IsCharging=false |
| Current / Voltage / Power | 均 value=null / external-power-connected | 均 value=null / external-power-connected |
| Temperature | 33.09、33.29 °C candidate | 34.29、34.39 °C candidate |
| ThermalStatus | 2 组均 missing | 2 组均 missing |
| identity / drop / wire error | verified / 0 / 0 | verified / 0 / 0 |
| delivery SHA-256 | fe2e7f7e5641ead2bd6cf47f0b4117379352fca43d93a78c0c6280134912bd03 | f4867f8c39f2b4a7afb5833abdc4bad925e6ad739b6b2c057c4e1675b58ee91d |
两组验收只证明 USB 供电下的可信拒绝、20 秒节拍与 Temperature 独立性,不证明 Battery 放电数值已可用或已与 PerfDog 对齐。真实设备、应用、Bundle ID、PID、账号与证书标识均未进入仓库证据。
当前能力矩阵
Registry 保持 53 项:36 项默认实时结构、13 项离线 Frame candidate、2 项 controlled-launch candidate、2 项 Unsupported。Battery 三项虽已接通 raw → Metric → wire → Swift 的结构,但产品选择器仍为 Unsupported;结构存在不等于数值可用。
对比 PerfDog 仍未具备:
- Battery 的 Wi-Fi 设备发现、真正 battery-only 放电样本和同窗校准。
- ThermalStatus 稳定的 0–3 当前值来源。
- TinyJank、Smooth 的可信定义。
- 目标进程专属逐帧与 GPU 归因。
- main、首帧等精确启动分阶段。
- Energy 负载响应、GPU Counter 跨设备 schema、长时稳定性、iOS 15 与 iOS 17.4–17.x 覆盖。
详见 Collector Foundation 1.2 Beta 能力矩阵 v6。
内部测试产物
| 产物 | SHA-256 |
|---|---|
Perfowl.app 主程序 | 4d098dc43b71302b0ef7a31eeeed2a0bb78cc68548dd8228ddd05ab151252d23 |
Perfowl-1.0.0-beta20-x86_64.zip | e63372071cd381e556a95a9226d199477a7c66b4053cca68dc3f8b27eabb0e59 |
perfowl-collector-foundation-1.2-beta-x86_64.tar.gz | 92c0fdee30f145577552952839c85207fff7d5e8498468e4e6ad51aeac541021 |
App plist、x86_64 架构、ad-hoc 深度签名、ZIP 完整性及主程序哈希一致性、内置 Collector probe ready=true / 9 capabilities、pymobiledevice3 11.3.1 与五组命令入口已检查。聚合匿名证据见 CORE-20 E4 JSON。
仍未关门
- Battery 继续 Unsupported:需先实现 Wi-Fi 设备发现,再于断开 USB 后取得
ExternalConnected=false的 20 秒真机样本,最后与 PerfDog 同窗对照。 - ThermalStatus 继续 Partial:当前 iOS 17/18 payload 未观察到稳定枚举字段。
- Energy 负载响应与 PerfDog 同窗、iOS 15、iOS 17.4–17.x、长时稳定性、arm64/universal2、Developer ID、公证与 GPL-3.0 法务结论继续开放。
- 当前产物是 x86_64 ad-hoc 内部测试版;真机 E4 针对最终打包 Collector,Battery 选择器未点亮。