性能优化与代码重构评估¶
面向「新开仓库继续开发」前的决策参考。每个条目给收益 / 风险 / 验证方式。 风险分级:🟢低(可独立验证)|🟡中(需真机/回归)|🔴高(改动大,需充分测试)。
1. 性能优化候选¶
| 项目 | 现状 | 收益 | 风险 | 说明/验证 |
|---|---|---|---|---|
| 修复 SIMD 公式缺陷 | 有 2 高危 + 2 中危公式错误 | 中(正确性为主) | 🟢 | 对齐标量参考即可;macOS 上 SIMD on/off 逐像素比对 |
| iOS IOSurface 零拷贝 | iOS 走 glReadPixels 慢路径 | 高(帧率/功耗) | 🟡 | C++ 侧实现 AttachIOSurface for iOS;需真机验证 ANGLE Metal 行为 |
| GPU 合成管线 | 图层合成在 CPU,GPU 只做最终绘制 | 高但不确定 | 🔴 | 大改造;把图层混合搬进 GL shader;需真机基准 |
| TJS2 VM 优化 | 计划 computed-goto | 中高(脚本重负载) | 🟡 | 解释器热路径;回归用脚本基准集 |
| 解析器/解码提速 | TLG/PSB 等已 C++ | 中 | 🟡 | 用性能分析器(Instruments)定位热点再动 |
| 纹理上传/缓存 | 有 GraphicsLoadThread | 中 | 🟡 | 观察 Loading 卡顿;考虑 LRU 调参 |
| 音频混音 | OpenAL + WaveMixer | 低 | 🟢 | 一般够用,非瓶颈 |
2. 代码结构重构候选¶
| 项目 | 收益 | 风险 | 说明 |
|---|---|---|---|
win32/ 目录改名(sound/utils/environ 下的共享实现) |
消除误导 | 🟡 | 需同步改全部 CMakeLists 与 include 路径;建议新仓库做 |
| 清理死代码 | 减小心智负担 | 🟢 | 已注释掉的 #if 0 大块(WindowImpl/DInputMgn 的 D3D 代码等)、未注册的 SIMD 导出 |
移除惰性平台守卫(#if defined(__ANDROID__) 等) |
更干净 | 🟡 | 只在新仓库、且逐文件确认 Apple 路径后做 |
| 引擎/Dart 边界整理 | 可读性 | 🟢 | engine_api.h 已有稳定 ABI,保持 |
| 头文件依赖收敛 | 编译提速 | 🟡 | include 目录过多(plugins 曾引用不存在目录,已清) |
| 构建缓存/CI 加速 | 迭代提速 | 🟢 | vcpkg 二进制缓存已加;考虑 ccache 持久化 |
3. 风险最高的三件事(动手前必读)¶
- GPU 合成管线:涉及渲染架构重写,必须有真机基准(帧率/功耗/发热)和逐模式回归,否则可能大面积改坏现有画面。
- IOSurface iOS 实现:依赖 ANGLE 在 iOS 上的
EGL_ANGLE_iosurface_client_buffer行为,有不确定性;失败要有回退(当前 glReadPixels 路径保留)。 - 存档/读档与 Z 兼容:改动
base/存档格式相关代码前,先确认与 Z 的存档互读目标,避免破坏已有存档。
4. 新开仓库的开发建议¶
-
把本仓库作为基线:先 commit 当前状态 → 新仓库设 upstream 指向本仓库(或直接 fork)。
-
按「低风险→高收益」排序做:① 修 SIMD 公式 ② 清理死代码 ③ iOS IOSurface ④ 再评估 GPU 管线。
-
每一步保持可编译可运行(CI 工作流已就绪,每 PR 触发打包验证)。
-
渲染相关改动务必保留「标量 vs SIMD / 旧 vs 新」比对开关,便于二分定位回归。