第二轮内部试用改进:方案与E2实现快照

---
type: devlog
title: 第二轮对照试用:统计口径统一与采集覆盖改进
date: 2026-10-28
status: approved
kind: plan
stage: P4
evidence: E1
metric: cpu-memory-display-startup-network
---

# 第二轮对照试用改进方案

## Owner授权、基线与边界

Owner于2026-10-28明确要求同一AI推进两个批次、完成开发后打包同址覆盖,由Owner做第二轮真机测试。当前AI按方案、实现、纯软件测试、分离复核四个顺序工作面执行,不创建子代理。本文为本批正式执行合同,先落盘再修改产品代码。

基线为GitHub main `b66daed265aa`,已确认包含换机交接`138b7353`,2026-10-28 fetch无新增提交。使用独立干净分支,不修改原main的27项修改/1004个未跟踪项,也不带入既有部署工作树中的未提交交接记录。当前本机安装内部228,Intel x86_64;三次第一轮用户Session已终态,作为引用证据保留。

正式55/66、11项暂停不变。不启动手机采集或旧验收队列、不作新增E4/指标PASS判断;不修改被测App、不注入。公证按Owner既有决定继续暂缓,安全机制不变。安装只覆盖`/Applications/Perfowl.app`,仅在确认空闲并正常退出后执行。

## 批次一:统一用户可见合同

1. 应用CPU默认采用整机容量100%刻度:`capacityPercent = rawProcessPercent / explicitCPUCoreCount`。分母必须为样本携带的正整数核数,缺失/非法即空,不推测、不写死、不把原始多核值截断到100。保留原字段及单核100%原始序列。派生展示不是第67项正式Registry指标,使用独立presentation ID与版本,不改变既有66项和源公式。
2. 整机CPU默认使用既有显式normalized序列,不回退到原始多核值;原值注明多核尺度。逐核保持源顺序,不宣称物理核心身份。
3. 默认摘要统一`session-report-summary.v2`:规范化1Hz产品序列有效点算术平均;选区先筛点再聚合,缺失不补0,候选单独计数。不把高频源统计替代产品均值。实时图、结果窗、历史摘要、CSV/PDF共享展示转换与命名。内存默认均值,不再仅在首页改用峰值。
4. Memory明确Footprint;Resident/Virtual分列;bytes转MiB除以1048576。速率bytes/s转KiB/s除以1024,不再把二进制换算标为KB/s。GPU/网络明确process/device/foreground-device。
5. Collector标量不再标成统一“全程”:帧统计带真实已记录帧区间/时长、来源与片段限制;其余源统计注明原始采样基数。端点未知不推测起止时间。选区不重用原窗口标量。
6. 从哈希已核同的封存`report-final.json`读取启动Total/阶段事件,导出为事件,不重复铺为每秒CPU样本。保留端点、候选/not-applicable与阶段不完整标记,不以observed-running/foreground-ready替代Core Total。未知时间事件不伪造落入选区。

## 批次二:有界采集与可诊断性

1. 启动后全程帧覆盖沿用现有单tap串行`rotate-to-frame-only`实现,检查既有超时、Stop竞争、资源释放与负控;不启用反复重启/并行tap。将原“启动后不继续帧采集”的策略修正为显式持续采集合同,并同步captureMode与终态元数据。所有新行为仍为候选,实际帧覆盖由Owner第二轮验证;失效时保留missing而非合成帧。
2. Graphics FPS原始兼容观测使用真实Graphics来源/公式版本,真实FrameLifetime来源单独保留;逐点原始source/adapter/formula与报告标签一致,不将静态页刷新回调约60当作必达目标。
3. 对照采集配置提供关闭截图预览的显式开关;普通工作台既有预览默认不变。配置在Session plan记录,不在采集中途暗改。检查首个有效点、warmup/缺口、帧continuation状态,提供下一轮诊断证据。
4. GPU与网络不乘经验校正系数。核既有源字段/scope/单位和有效区间,在报告保留候选与实际覆盖;对整机高发送值保留调查提示,不宣称其属于目标业务,也不把平均速率乘墙钟时长当精确累计流量。

## 公式、版本与兼容

新增容量展示版本`process-cpu-device-capacity.presentation.v1`,单位percent、scope process;保留`ios.process.cpu.non_normalized`的raw值与质量。仅在源CPU和显式coreCount均合法时发布派生展示;数值与统计先计算、显示最后取小数,不改源精度。超范围值不静默截断,交由源质量处理。旧会话缺核数时默认展示为空并注明原因,仍可查看原值。

FPS Graphics兼容版本使用`graphics-core-animation-fps.candidate.v1`,不借用FrameLifetime公式标签;该版本不表示已校准。帧汇总的有效时长取已封存frameSummary.durationMs,不等于Session墙钟时长;缺时长标未知。事件型启动采用封存startupReport自身算法版本和totalQuality,not-applicable保持空值而非0。

历史事件、旧CSV、已发布测试数字不重写。新导出显式标版本、范围及统计基数,旧原始字段保留。新增展示层不更改正式66项计数。

## 效率预算与验证

关键路径:单次O(指标数×样本数)建索引、O(样本数)容量展示;前缀均值查询O(log N),不在鼠标移动重读Raw;最多256向量维。封存JSON沿用16MiB输入上限,不再扫描海量Raw。持续帧沿用现有有界ingress/Writer与Stop/drain超时,不引入常驻任务或无限重试。CPU/显示转换每点O(1)、零额外设备请求。

使用60秒用户规模和1小时/4小时合成规模做变更前后报告耗时、首响应、RSS、CPU和进程I/O对比;不把进程I/O冒充物理磁盘峰值。首屏和导出不出现明显回退(目标不超过基线1.2倍或小输入额外50ms),记录实际值与环境限制;无法满足时说明遗留,不报完整资源门关闭。Swift构建最多4jobs,纯软件用例只覆盖本批受影响合同/集成与现有fake源,不重跑历史55项正式验收。

验证覆盖:6/8核及缺核数、合法0/非有限数、质量拒绝、选区边界、单次启动/阶段空值、标量帧片段与源统计分离、哈希错绑、CSV/PDF/UI默认一致、截图开关、continuation及Stop竞争。分离复核使用独立扫描/导出读取,检查原Session输入SHA不变;构建/安装E2/E3不称手机E4。

## 交付

分批窄范围提交;同一最终分支提交尝试推送GitHub/GitLab,不强推,GitLab一次失败不重试。知识页/时间线/归档追加本次说明,55/66不变;站点构建及通知按实际收据报告。重建本机Python3.12、完整lock、PyInstaller6.22.3及native组件,内部build号从228递增。验签/独立包和安装树核同后覆盖标准App,保留必要回滚但不并行注册另一App。最终列开发、软件测试、打包安装、远端同步和剩余E4分别状态。

## Implementation Update · 2026-10-28

方案已落盘,开始批次一。后续在此追加实际实现、偏差、验证与遗留,不提前填写测试数字或完成结论。

### 决策补充 · 2026-10-28 · 报告导出效率

同配置debug基线原生窗口基准已产生60s/1h/4h收据;本机既有绝对门槛(首屏3s/10s、游标50ms)未达标,保留失败证据,不冒充通过。新增来源说明令短CSV/PDF导出开销增加,因此在不改统计值的前提下,CSV采用64KiB有界缓冲批量落盘(仍120s/取消/原子替换),PDF以CoreText typesetter线性断行替代逐字符重建整行的平方开销。元数据口径说明保留在摘要,逐点保留真实source/algorithm,避免每行重复大段人类说明。旧版逐事件CSV追加容量CPU/核数/原值刻度与来源字典,版本升v4,不覆盖旧导出。

## Implementation Update · 2026-10-28 · 两批代码与分离复核

- 批次一代码提交`68476537`:共享容量CPU展示(原始值保留)、概览/历史/CSV/PDF均值v2、Footprint/MiB/KiB/s命名、源窗口标量与封存启动事件、逐点来源/算法兼容字段、旧逐事件CSV v4追加列。未增加Registry指标或修改CPU源公式。覆盖查询使用一次建索引+二分端点,CSV 64KiB缓冲,PDF typesetter断行。
- 批次二:既有单tap有界`rotate-to-frame-only`恢复为默认候选策略;终态记录策略及实际startup/continuation模式(frame-only选择不虚报CoreProfile tap);Graphics/FrameLifetime逐点来源与公式分列。截图预览设置冻结进Session storagePolicy,预览和保存均关闭才不连接截图worker;明确选择保存时仍采集保存,关闭预览不解码缩略图。两条Collector运行入口均门控,Stop及代际隔离沿用原合同。
- 构建修复:锁定cryptography 50.0.1在本机x86_64源码构建,Rust依赖从Cargo.lock逐项校SHA取回缓存后离线编译,未改版本或复制旧venv。freeze staging的OpenSSL原生副本归一化为相对加载路径并重签,防止带入本机Homebrew绝对依赖;原始输入保持不变。Python3.12.3、完整101项lock和PyInstaller6.22.3逐项检查。
- GPU/网络未加校正系数;未更改帧、启动Total、能耗等源公式。CoreProfile续采不等于FrameLifetime激活,新的帧实际覆盖仍待Owner第二轮实测。

### Validation Update · 2026-10-28 · E2软件与既有文件核对

Swift聚焦53项(1项opt-in跳过,0失败,4.791s),随后单独启用既有会话导出用例1项通过(3.599s);包括CPU6/8核、缺核数/0/非法输入、旧数据兼容、选区、事件/片段导出、截图OFF零连接、正常Stop自动结果通知等。Python聚焦116项通过:Display6、MetricEngine20、continuation15、capturePlan6、Realtime60、FrameReport9;freeze负控16项通过。初次旧列数/旧显示名称断言和frame-only元数据失败均已修正后重跑,失败日志保留。

同一AI切换到独立读取面,以源事件重算三场CPU原值/容量值、FPS、Footprint共12组均值及有效点数,与新CSV逐项核同;另核3个启动Total和3个帧片段时长、所有23列完整性。PDFKit读回中文CPU标题与Core Total,选区不导出未映射事件/源窗口。所有输入文件前后SHA核对,不写回旧Session。此为E2软件一致性,不是跨工具精度/E4验收。

### Resource Update · 2026-10-28 · 同配置debug主机测量

复用相同合成输入、同debug配置,60s/1h/4h,零截图;先测原基线,再测最终实现。中间并发依赖编译导致的超时/退化另保留,不用作最终无竞争比较;不把OS暖缓存结果称为冷读。鼠标指标只到Canvas提交,不是屏幕compositor呈现。

|规模|加载前→后(s)|首绘前→后(s)|CPU前→后(s)|峰RSS前→后(MiB)|CSV前→后(s)|PDF前→后(s)|游标P95前→后(ms)|
|---|---|---|---|---|---|---|---|
|60s|0.816→0.359|4.850→2.400|6.612→5.615|72.48→73.95|0.251→0.195|0.375→0.128|169.21→182.40|
|1h|12.677→14.032|14.322→15.408|16.632→15.924|118.35→125.95|13.808→12.235|0.237→0.329|100.86→65.27|
|4h|56.036→46.532|57.428→47.617|52.528→44.335|248.69→289.30|60.822→48.389|0.287→0.132|102.39→59.25|

采样资源收据另含进程读写字节与20ms采样峰速率;采样间隙存在,峰值不等于物理磁盘峰值且资源采样未覆盖导出全部阶段。RSS最大增加约16.3%,其余关键CPU/长场加载/CSV无明显回退;1h PDF增加92ms,超过预设短输入额外50ms目标。既有绝对debug门(1h首绘3s、4h10s、游标50ms)基线与本版均未全满足,资源门保持partial,不把所有benchmark标通过;当前约一分钟第二轮试用不被此解释为手机性能通过。完整冷读/多窗与导出阶段I/O峰值仍开放,不扩成历史指标重测。

### 当前交付状态

两批功能与聚焦软件验证完成;此刻签名构建、独立验包、同址安装、远端同步和通知待完成。正式55/66、11项暂停。最终安装结果另追加带日期增量,不提前宣称交付成功。