专业报告与衍生统计实施快照

E2软件与成品核对 / E3内部安装;partial,非手机E4。

---
type: devlog
title: 报告层级、双列详情与衍生统计导出补全
date: 2026-10-28
status: partial
kind: plan
stage: P6
evidence: E3
metric: session-report-derived-export
---

# 报告与衍生统计补全

Owner四项反馈直接进入本批开发;同一AI顺序方案、实现、软件测试与分离复核,无子代理。基线41923d4d;正式55/66、11项暂停,保留现存会话与失败证据,不操作手机,不恢复历史验收。只覆盖标准App,公证暂缓、安全机制不变。

## 诊断与决策(先于代码)

1. 概览直接遍历全部启动事件,导致阶段默认铺开。保留启动总耗时,阶段放入默认关闭的DisclosureGroup;启动页同样可展开,不删除事件。
2. 右侧按visibleSeries单列,既长又依赖当前分类。改为有界宽度双列卡片,按左栏启动、CPU与调度、内存、画面表现、GPU、网络与磁盘、能耗分组;单次启动值明确标注,不冒充游标时刻采样。滚动惰性布局,已有游标/缺值/截图逻辑不变。
3. sealed report含完整statReport与frameSummary,Repository已读入scalarResults,但普通UI隐藏全部scalar,Excel也仅填9个统计槽。这是展示/映射遗漏,不是全部采集缺失。普通报告概览/画面表现增加帧统计卡,无内部质量/可靠性标签;用“已记录帧区间”说明统计分母。缺失源仍留空,未知逐秒Jank不能拿全程/10分钟率填入。
4. Excel新增默认打开的“概览”工作表,纵向指标/结果/单位/统计范围/最低/峰值,分组、冻结、适配打印,解决29/44列超宽首屏。保留all的29统计列、44逐秒列及原行位,保留@FrameInfo,不改变兼容明细列序;all只冻结前两列与12行,清晰组色与列宽,避免五个文本列挤满视口。新增概览是本次明确样式偏差,不承诺竞品导入兼容。

## 固定口径与映射

沿用session-report-summary.v2的产品有效点等权平均;CPU整机容量100%,内存Excel十进制MB、网络十进制KB/s(普通界面仍MiB/KiB/s)。合法0保留,missing/非法/非有限值不作0,暂停源不启用。

- Avg(FPS)、≥18/25比例、Std/Var(FPS)、Median(FPS)、MedRange(FPS)均以选区内产品1Hz FPS有效点为同一总体:均值Σx/n,方差Σ(x-mean)^2/n,标准差sqrt(var),排序中位数(偶数取中间两值均值),MedRange=100×count(0.8median≤x≤1.2median)/n。方差用Welford防消减误差;只在导出时排序,不在游标路径计算。版本product-fps-distribution.v1。**不填Drop(FPS)**:既有frameSummary的droppedFramesPerHour是逐帧算法,不能冒充产品逐秒FPS下降次数;留空待统一具体定义。
- Smooth、1%Low、Tiny/Small/Jank/Big每10分钟、Stutter、FTime≥100、正ΔFTime>100每小时、Avg/Std/Var(FTime):全程导出直接复用已封存scalar,准入沿用Repository accepts,版本与底层公式不改。Registry映射分别为ios.frame.smooth / one_percent_low_fps / tiny_jank_per_10min / small_jank_per_10min / jank_per_10min / big_jank_per_10min / stutter_percent / ftime_ge_100_percent / ftime_positive_delta_gt_100_per_hour / time;Std/Var为现存报表分布统计,非新增Registry指标。
- UI另展示帧区间平均FPS、阈值比例及中位帧率等既有帧标量,与产品1Hz平均FPS明确分开;帧统计窗口取frameSummary.durationMs/1000,非Session墙钟,未映射Session端点,不用于选区。选区时帧标量不借用全程;提示可切回全程查看,不伪造区间重算。
- 网络同一时刻send/recv均有效的点配对;均值/1000为KB/s;×600得到KB/10min(平均速率归一化,不是实际累计传输字节);单向使用同一配对总体。CPU/内存均值沿用已有索引。逐秒Smooth/Jank等缺乏已绑定逐帧时间窗输入时保持空白;暂停能耗/温度、未知XcodeMemory及磁盘字节与速率不混填。
- @FrameInfo保持真实输入边界,本轮不从1Hz FPS构造逐帧,不把设备Mach时间硬对齐host时间;无已闭合对应时保留空表。概览说明“空白表示本次未记录;逐秒卡顿与帧记录不由全程统计反填”,不是可靠性标签。

## 效率与验证预算

不新增采集、进程或Raw全量扫描;复用一次加载的sealed scalars及Series索引,导出O(NM)+O(F log F)(FPS有效点F排序),额外O(F)空间;截图与流式ZIP原64KiB缓冲不变。单窗口卡片与双列详情使用Lazy布局,游标不排序/重算统计。60s/1h/4h同fixture前后对照导出wall/CPU/RSS/I/O,目标≤1.2倍原耗时/峰RSS;新纵向概览固定O(M),不复制逐秒数据。UI首次渲染与游标响应另核;既有4h长报告门不借此关闭。

验证:默认阶段折叠、分类双列顺序、无内部词、合法零/缺值/选区不偷用全程、20个统计槽/单位/配对网络/数值稳定、ZIP与Excel XML结构。只读最新与旧会话独立复算及SHA保全,真实Excel样式检查。软件E2、安装E3,手机复测由Owner。产品开发结束打包232、严格签名/独立验包/空闲同址覆盖;双远程/通知/站点分列记录,未关门保持partial。

## Owner补充 · 2026-10-28 · 专业版成品及导出共用

Owner提供自动化平台与PD两份Excel作为参考,明确选择“最新Perfowl单次报告,同时改进应用导出”。参考前者任务/指标清晰组织和后者统计/采样/帧表层级,不复制私有身份字段或竞品品牌;成品使用Owner最新封存会话,原始输入只读。

增加独立“趋势”页,三张原生Excel图(FPS、应用CPU、物理占用内存),全部引用all已导出的真实数据行,横轴沿用time毫秒;缺值以gap显示,不插值、不将缺失当0。没有数据不生成空图。原生图可随明细单元格更新;仅缓存绘图数值,不增加第二套统计。工作表顺序为概览、趋势、all、@FrameInfo。有界流式输出图表数据O(N),本轮导出超时仍600秒,曲线不代替1Hz或逐帧定义。成品输出与应用导出使用同一Writer,不另造手工美化版本。

### 逐帧表补充决策(先于实现)

最新会话已有封存frame-events-live.jsonl,决定导出其真实记录,不再保留空壳。Repository仅在report-seal.files的SHA核同后读取,沿用16MiB安全界限,最多100,000条;超限或哈希/字段异常时整表不采用,不悄悄截断。frame记录提供设备timestampNs、已有frameTimeMs、epoch,**不重算间隔或跨epoch补帧**。@FrameInfo的time=(timestampNs-首个已记录timestampNs)/1e6毫秒,FTime为原ms,label标明帧片段/epoch;该时间轴相对首个帧记录,明确区别于all的Session host起点,不能跨页直接配对。选区缺少桥接时不借全程记录。全部记录纳入报告digest,原Session保持只读。导出仍为三列time/FTime/label,缺少/首帧warmup的FTime留空,负/非有限不改0;准入沿用既有帧质量列表,不改变统计计算或以逐秒FPS造帧。


## Implementation / Validation Update · 2026-10-28

实际修改:`SessionReportView`与`ReportWindowModel`默认折叠启动阶段、360px双列分类检查器;`ReportDerivedStatistics`按固定映射呈现封存帧统计、统一计算导出分布与配对网络;`PerfDogLayoutWorkbookWriter`新增纵向概览与专业样式,保留all列位;`ReportWorkbookCharts`流式写三张原生图,引用all真实数值及缺口;Repository在seal SHA匹配后读取有界逐帧记录,不改变原有digest协议或旧标注绑定。普通阶段、线程/调度/磁盘文案补为中文,无内部可靠性标签。

偏差均先文档化:Owner追加专业Excel成品,扩展为四页而非原两页;真实逐帧表采用独立首帧设备时间起点,不谎称与host轴闭合;未知逐秒衍生仍留空。概览与all共用一次统计计算,不重复排序。测试首次有两处旧冻结位置/空帧表断言失败,按已批准的新布局更新;首次临时基准复制旧Writer引入同名类型冲突,改为独立命名,不修改产品来让测试通过。失败材料保留。

### 软件与分离核对(E2)

- 全量Swift437项、11skip、0失败(81.081s),skip均为显式基准/指定外部fixture,不删除失败用例;本批最新会话只读导出与原生渲染opt-in已实际执行。另有匹配前后基准1项、0失败(96.407s),临时基准源码留私有证据,不混入产品/提交。
- Python独立解析Excel并从原会话重算28个统计槽:FPS均值/分布、CPU、物理占用、配对网络及sealed帧统计全同;66行原有CPU/内存/FPS/网络/GPU/截图引用等列与Owner上次导出逐格相同,未改测量值。Drop(FPS)仅缺口按既定定义保留,不用另一种丢帧率冒充。
- 545条真实逐帧记录逐条数值/相对设备时间核同,首点warmup为空,不跨epoch补值。3张图的缓存逐点等于all单元格,缺值不入缓存、gap保留;65张JPEG均完成ZIP CRC和图像解码核对;277个用户会话文件SHA保持不变。
- 通过openpyxl独立结构读取及Artifact Tool工作表/范围渲染检查,概览、衍生段、三图趋势、all及帧表无截断/坏图。原生报告渲染显示默认阶段关闭、分组双列和帧统计卡。该主机检查不等于Office实开或手机E4,当前主机无Excel/Numbers/LibreOffice可供实开,兼容门继续开放。

### 同配置前后资源对照(E2)

同进程、同现存零截图fixture,以HEAD旧Writer重命名隔离作为前版;60s/1h/4h各交替顺序重复三次,耗时/CPU取中位、RSS取实采峰值。包含完整xlsx写入;不是新手机采集、物理I/O或屏幕响应基准。

| 点数 | 导出wall前→后(s) | CPU前→后(s) | 峰RSS前→后(MiB) |
| --- | --- | --- | --- |
| 60 | 0.0421→0.0683 | 0.0360→0.0421 | 16.99→17.01 |
| 3600 | 1.5621→1.9317 | 1.4328→1.6837 | 92.17→92.19 |
| 14400 | 5.1424→5.8117 | 4.8406→5.4666 | 322.98→322.95 |

新增原生图/概览带来额外成本:60点1.62倍、1小时1.24倍,超过方案1.2倍耗时目标,尽管绝对值分别68ms/1.93s,**资源门仍partial,不描述为完整交付**;4小时1.13倍达相对目标,RSS均未显著增加。进程峰写速率前→后约5.6→9.7、284.6→739.5、376.1→384.5 MB/s,来自短时采样/文件缓存,不代表物理磁盘吞吐;I/O/CPU/RSS完整收据保留,缓存未受控。既有长报告加载/游标/RSS缺口不由本导出基准关闭;未做本批完整最坏16MiB帧文件/UI响应资源矩阵。

当前437项软件与成品核对完成,232正在构建;内部安装、公证暂缓、网站、双推/通知最终状态继续追加。正式55/66、11项暂停;Owner负责手机试用,无新采集或新精度结论。

## Internal Installation Update · 2026-10-28

Build232已替换231,同址安装于标准路径,未安装并行版本。App/DMG均为Developer ID签名,严格验签、独立只读挂载、安装树核同、x86_64原生依赖及冻结Collector源码核同完成;旧客户端在会话非活动时正常退出,231必要回滚ZIP独立还原核同。已注销并删除本批核同的私有App副本,保留一个当前DMG和SHA文件,用户会话及参考输入未删改。此为E3本机安装证据,不是手机采集验收。

内部包为`MacApp/dist/Perfowl-232-macos-x86_64-internal.dmg`,148,265,069 bytes,SHA-256 `ce9521146aa11b519e99456cd0365a5e0f662166c194e6eb9ee970dcf915ff02`。公证按Owner要求暂缓,Gatekeeper执行评估退出码3,公证门未关闭;系统安全设置不变,不称正式分发包。

最新单次成品由同一产品Writer生成,复制到Owner下载目录后逐件SHA核同;四页Excel、3张原生图、545帧和65张JPEG截图包与此前独立收据一致。已安装源文件SHA和构建记录一致,未在构建后更改产品源码。后续由Owner做手机试用;软件/保存数据核同不等于采集准确性结论。

### 交付状态与下一阶段

整体仍为partial:导出短场景/1小时相对耗时目标、既有长报告资源门、最坏帧输入/UI资源矩阵、Office实开及公证/GPL法务未关闭。正式55/66,11项暂停。下一阶段先收集Owner新会话与实际Excel打开反馈,再按具体缺口处理,不恢复历史指标队列;本批网站构建/生产发布、双远程与通知以最终收据分列。