完成 StellarX 核心重构、缺陷修复与测试收口

This commit is contained in:
Codex
2026-09-30 01:23:18 +08:00
parent 9155a86a8a
commit 568ffc40eb
85 changed files with 5011 additions and 645 deletions
@@ -0,0 +1,63 @@
# Fix-BUG-20260206-0001
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
## 关联信息
- Fix ID: Fix-BUG-20260206-0001
- 关联 BUG ID: BUG-20260206-0001
- 修复目标: 只在对话框打开或关闭时触发一次必要全量重绘,避免对话框保持打开期间持续全量重绘。
- 状态:已完成
- 负责人: 未记录
- 分支 / 版本: master / v3.0.1
## 根因分析
- 根因: 对话框打开状态判断基于“是否有对话框可见”,导致只要有对话框保持打开,`needredraw` 就持续为 true。
- 触发条件: 触发对话框打开并保持可见。
- 为什么之前没发现:[可选] 之前没有引入日志系统,该问题属于性能类隐藏问题,不容易观察。
- 关键证据:[可选] 日志中连续出现“对话框打开/关闭,触发全量重绘”。
## 修复方案
- 修复思路: Window 新增 `dialogOpen` 状态,只有对话框刚打开时才触发打开相关重绘;完成重绘后立即复位。
- 关键改动:
- `Window` 新增变量 `dialogOpen`。
- 对话框弹出时设置 `dialogOpen=true`。
- `needredraw` 判断逻辑改为只在 `dialogOpen` 或关闭事件发生时触发。
- 重绘后立即将 `dialogOpen` 复位为 false。
- 涉及文件 / 类 / 函数:
- `Window.cpp`
- `Dialog.cpp`
- `Window::runEventLoop()`
- 影响的 API / 行为:[可选] 无对外 API 变化。
- 关键约束 / 不变量:[可选] `dialogOpen == true` 才触发对话框打开相关重绘判断;重绘后必须复位。
- 回滚点 / 开关:[可选] 回退 `dialogOpen` 状态门控。
## 影响评估
- 影响范围: 对话框打开 / 关闭后的全量重绘、主事件循环性能。
- 兼容性影响:无
- 行为变化:有(对话框保持打开时不再持续触发全量重绘)
- 性能影响:持平或更优,减少重复全量绘制。
- 回归风险: 未知;需确认对话框打开时仍能置顶并正确清理关闭残留。
## 验证结果
- 验证步骤:
1. 触发对话框弹出。
2. 观察日志,确认打开时只触发一次必要全量重绘。
3. 保持对话框打开,确认不再持续刷全量重绘日志。
4. 关闭对话框,确认关闭路径仍能重绘清理残留。
- 验证结果: PDF 历史记录标记已修复。
- 回归检查:[可选] 对话框打开 / 关闭、非模态对话框、普通控件重绘、背景快照刷新。
- 验证证据:[可选] PDF 记录包含 2026-02-15 修复后运行日志。
## 落地信息
- Commit: b765e54eff28ebcd0bd99a81dec80b3ac0769337
- PR:[可选] git 推送
- 发布版本: v3.0.1
- 备注: 来源原始 Fix 记录未包含 `-XXXX` 后缀,入库时按 BUG ID 补充为 `Fix-BUG-20260206-0001`。