refactor(panels): 删除 rowPoints/rowIterations 死列 + 提取 PaintPanelResampleRows
对应 Code_Review_Report §14.5 第 1 项与第 3 项。
第 1 项:删除 EdgePanelLayout::rowPoints / rowIterations(行数组 18 → 16)
- 写入方只有 AppendRow(推空矩形),读取方只有调试框 AddAll 与 PanelSlotKey 的 mix 循环,
绘制方零(旧式“点数 / 迭代次数”输入框早被滑块版 rowLevelTracks / rowIterTracks 取代)。
- 连带同步:AppendRow、调试框、缓存键、rowgeom 导出、panels/panelscroll 长度不变式、
文档里的列数(18/14 → 16/12)。
等价性由基线证伪,而不是靠人工 grep:
old lines = 983, new lines = 919
only in OLD = 64, only in NEW = 0
only-in-OLD lines NOT belonging to rowPoints/rowIterations = 0
即除被删两列外,其余 919 条键逐字节相同。
第 3 项(前半):提取 PlotView::PaintPanelResampleRows
- PaintPanelListRows 里 `if (resamplePanel) { …; continue; }` 共 132 行整块提取,
签名 (g, layout, rowIndex, laneIndex, ref, item);两个局部 lambda
(paintInfoRow 只读统计行 / paintInputRow 联动输入框)随之迁移。
- maxInterval / minInterval 两个纯拷贝局部量直接用 item.maxInterval / item.minInterval。
- 通用参数行(中心轴统计 + 两行滑块)未提取:需 9 个参数,签名比函数体更难读。
§14.5 第 2 项(完整结构合并)本轮不做,方案已定并写入文档:
- 列视图(PanelColumn<T>)方案否决:拷贝忘重绑 = 静默悬垂,需额外自检兜住;
- 若要做就做“vector<PanelRow> + 具名成员访问(无视图)”,242 处读点(127 处命中判定),
必须单独一轮。它属整洁性收益(漏推一列已被 AppendRow + 长度不变式挡住),不是紧急项。
验证
- make release:零 warning;785,408 → 784,896 B(−512);make debug 同样零 warning
- make -C Tools:零 warning
- UnitTests:checks=260 failed=0 cases=19
- OffscreenChecks -all:7 检查 / 127 断言全 PASS
- panels -mode compare:7 面板像素哈希 + 几何逐项不变(resample=2BFC74B3D9B3239C)
- rowgeom -mode compare:919 + 7 键,0 差异(基线已按 16 列重录)
- PlotViewPaint.cpp 5575 → 5565;PlotViewPanelPaint.cpp 1016 → 1020
文档:Plan §十、Progress 第 38 轮、Report §15、agent_mem 第 38 轮、Tools/README §4.4
This commit is contained in:
1 parent
353c553721
commit
f07ac74988
9 files changed
+384
-150
No files matched your search
@@ -610,3 +610,76 @@ Tools/README.md 目录结构、作用、测试项、验收标准、A/B
|
||||
否则不建议动。
|
||||
3. `PaintPanelListRows` 再拆三段(纯可读性)。
|
||||
|
||||
---
|
||||
|
||||
## 十五、第 38 轮:§14.5 第 1 / 第 3 项
|
||||
|
||||
### 15.1 结论
|
||||
|
||||
| §14.5 建议 | 结果 |
|
||||
| --- | --- |
|
||||
| 1. `rowPoints` / `rowIterations` 清理 | ✅ 删除(`EdgePanelLayout` 16 列),产物 −512 B,基线证明等价 |
|
||||
| 2. 完整结构合并(`vector<PanelRow>` + 列视图) | ⏸ **未做**,闸门仍关闭(理由见 §15.3) |
|
||||
| 3. `PaintPanelListRows` 再拆 | ◑ 重采样行已提取(132 行),参数行未提取(理由见 §15.4) |
|
||||
|
||||
### 15.2 "删掉一列"的等价性怎么证明
|
||||
|
||||
`rowgeom` 让"删除死列"从"我看过没人用"变成**可验证**:
|
||||
|
||||
```text
|
||||
old lines = 983, new lines = 919
|
||||
only in OLD = 64, only in NEW = 0
|
||||
only-in-OLD lines NOT belonging to rowPoints/rowIterations = 0
|
||||
```
|
||||
|
||||
* 唯一差异就是被删两列的 64 条键;其余 919 条**逐字节相同**;
|
||||
* 因为 `rowgeom` 导出的是**每个矩形的每个字段**,"这两列恒为空"这一前提被直接证伪/证实,
|
||||
不依赖人工 grep 的完整性。
|
||||
|
||||
这给出一条可复用的方法:**先有全字段基线,再删字段**;否则"删掉的东西没人用"永远只是断言。
|
||||
|
||||
### 15.3 为什么 §14.5 第 2 项仍然不做
|
||||
|
||||
报告本人的判据是"若要做,必须同时给 `EdgePanelLayout` 加视图自检,否则不建议动"。
|
||||
本轮把这一步的门槛量化了:
|
||||
|
||||
| 方案 | 改动面 | 失败可见性 |
|
||||
| --- | --- | --- |
|
||||
| A:`std::vector<PanelRow>` + 列视图(`PanelColumn<T>`) | 242 处读点(其中 **127** 处在 `PlotViewInteraction.cpp` 的命中判定里)+ 自定义拷贝/赋值 + 视图自检 | 拷贝后忘重绑 = **静默悬垂**,只能靠新增自检兜住 |
|
||||
| B:`std::vector<PanelRow>` + 具名成员访问(无视图) | 同样是 242 处,但所有访问变成 `rows[i].check`,**结构上不可能悬垂** | 编译期全查;无新风险 |
|
||||
|
||||
> 结论:真要做就做 **B**(无视图),A 的"零改动读点"是幻觉 —— 省下的正则改写换来一个
|
||||
> 必须靠新自检才能发现的隐患。B 的代价是 242 处机械替换(含 30 余处 range-for 与 `.size()`),
|
||||
> 适合单独一轮、以 `rowgeom` + `panels` 双基线为判据,而不是塞在本轮末尾。
|
||||
|
||||
另外现在"漏推一列"已被 `AppendRow` + 长度不变式双重挡住,
|
||||
B 的**剩余收益**主要是"单一分配 + 少 15 个 vector 头"(`EdgePanelLayout` 每实例省约 360 B
|
||||
头部,566 个网格时约 200 KB,但那是**布局对象**、每帧临时构造,实际峰值影响很小)。
|
||||
因此 B 的优先级应低于"面板结构再简化"的实际痛点,属于**整洁性收益**而非正确性收益。
|
||||
|
||||
### 15.4 §14.5 第 3 项的取舍
|
||||
|
||||
| 段落 | 状态 |
|
||||
| --- | --- |
|
||||
| 重采样行(132 行:两行只读统计 + 两行联动输入框) | ✅ 提取为 `PaintPanelResampleRows`,零逻辑改动 |
|
||||
| 通用参数行(中心轴统计 + 两行滑块) | ⏸ 提取需 9 个参数(`layout`/`rowIndex`/`laneIndex`/`ref`/`kind`/`resolved`/`item`/`peakItem`/`tabLane`),签名比函数体更难读 |
|
||||
| 条目栏 | 保留(三种排版的公共前缀) |
|
||||
|
||||
### 15.5 验证
|
||||
|
||||
| 项 | 结果 |
|
||||
| --- | --- |
|
||||
| `make release` | 零 warning;**784,896 B**(−512) |
|
||||
| `UnitTests` | 260 / 19 PASS |
|
||||
| `OffscreenChecks -all` | 7 / 127 PASS |
|
||||
| `panels -mode compare` | 7 面板像素哈希逐项不变 |
|
||||
| `rowgeom -mode compare` | 919 + 7 键,0 差异 |
|
||||
|
||||
### 15.6 下一步(更新)
|
||||
|
||||
1. **方案 B(`vector<PanelRow>` 无视图)单独一轮**:判据 = 编译通过 + `rowgeom`/`panels` 双基线归零;
|
||||
预期收益是"字段重载(`rowRefs` 双语义)"这类问题从**结构上消失** —— 这比省字节更重要。
|
||||
2. 若要在 B 之上再做**语义化**:把 `rowRefs` 的双语义拆成 `rows[].ref` + `markerGroups[]`,
|
||||
让"MARK 面板 12 列为空"的注释消失。
|
||||
3. 面板几何算式重写(§13.6 遗留):基线已就绪,但需先完成 1 或 2。
|
||||
|
||||
Reference in new issue
Block a user