Files
StellarX-kaifa/开发记录/Fix/Fix-BUG-20260206-0001-对话框打开时持续触发全量重绘修复.md
T

64 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`。