docs: record particle rotation state retest

This commit is contained in:
OpenAI Codex
2026-08-30 08:41:37 +08:00
parent 503f1c6695
commit 7ff37de898
3 changed files with 136 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
# 30-02 GPU Ping-Pong 与 Context Recreation 最小技术验证报告 v4
日期:2026-08-30
当前状态:`WAITING_MANUAL_VALIDATION`
## 1. 已确认实机状态与本轮问题
用户已确认此前 C++ STATIC freeze 修复有效:在 STATIC 下 pan、zoom、bearing、pitch 触发的普通 MapLibre redraw 不再推进 GPU simulation。DISABLE / ENABLE 也已由用户确认正常。
本轮 Android OpenGL 实机发现是另一层问题:屏幕旋转触发 Activity recreation 后,旋转前的 `STATIC + ENABLED` 被恢复成 `ACTIVE + ENABLED`。
该现象不改变已确认的 C++ STATIC freeze 结论;它是 Test App validation control mode 未在标准 Android Bundle 中恢复的问题。
## 2. 根因
`ParticleCoreLayerValidationActivity` 在 Activity 存活期间已经由 `loadValidationStyle(active, enabled)` 维护两个成员状态。但旧代码:
- 没有在 `onSaveInstanceState()` 保存 `active`、`enabled`;
- 在 `onCreate()` 的 Map callback 中无条件调用 `loadValidationStyle(active = true, enabled = true)`;
- 同时无条件重置相机到 `(0, 0), zoom=2`。
因此标准旋转 recreation 无论此前为 STATIC、ACTIVE 或 DISABLED,都会退回 ACTIVE + ENABLED。
## 3. 定向修复
仅修改:
- `platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt`
具体调整:
- 新增稳定 Bundle key:`particle_validation.active`、`particle_validation.enabled`;
- `onCreate()` 在 Map 初始化前恢复两个成员变量,首次进入默认 ACTIVE + ENABLED;
- `getMapAsync` 只在首次进入时设置默认 camera;recreation 时保持 MapView 的已保存状态;
- 恢复后的 `active/enabled` 仍只通过既有 `loadValidationStyle()` 应用 style 与页面状态;
- `onSaveInstanceState()` 写入两个 validation control 值,同时保留原有 MapView state 保存顺序;
- 新增低频日志:`Activity state restored active=<...> enabled=<...> recreated=<...>`。
未修改 AndroidManifest、layout、strings、C++ Core、gfx、RenderLayer、shader、GPU state、Gradle 或依赖。没有使用 `configChanges`、方向锁定、static/global、SharedPreferences、ViewModel 或 GPU 状态序列化。
## 4. 静态检查
- S1:Activity 中已不存在 recreation 后无条件 `loadValidationStyle(active = true, enabled = true)`:PASS。
- S2:`savedInstanceState == null` 时默认 ACTIVE + ENABLED 且设置初始 camera:PASS。
- S3:ACTIVE、STATIC、DISABLE、ENABLE 按钮仍调用唯一 `loadValidationStyle()`:PASS。
- S4:`loadValidationStyle()` 继续统一更新成员状态、style 和状态文字:PASS。
- S5:没有 Manifest workaround、持久化、全局状态或 GPU 资源状态:PASS。
- `git diff --check`:PASS。
- Kotlin/Android 编译、Gradle、ADB、安装与实机运行:未执行,遵守任务限制。
## 5. Rotation 重新验证
使用包含代码提交 `503f1c66958798ef7294165c3ddeaffbd4908ee9` 的新 APK。日志过滤:
```bash
adb -s 192.168.1.146 logcat | grep -E 'ParticleValidation30_02|ParticleValidation'
```
1. R1 STATIC rotation:ACTIVE 运行几秒 → STATIC → 确认停止 → 竖屏/横屏互转两次。每次日志应为 `active=false enabled=true recreated=true`,页面保持 STATIC,不能自动 ACTIVE。
2. R2 ACTIVE rotation:ACTIVE 下旋转,日志应为 `active=true enabled=true recreated=true`,页面保持 ACTIVE。
3. R3 DISABLED rotation:DISABLE 后旋转,日志应为 `active=<切换前值> enabled=false recreated=true`,页面保持 DISABLED,不能自动 ENABLE。
4. R4 STATIC gesture regression:STATIC 下 pan、zoom、bearing、pitch;地图正常 redraw,但 GPU simulation 仍不得推进,验证本轮没有破坏 v3 的 C++ freeze。
## 6. 判定边界
Rotation 通过只能证明 validation control mode 在 Activity recreation 后恢复正确;它不能单独判定 T4 viewport resize 或 T6/T7 context/resource recreation PASS。旋转路径可能同时重建 Activity、MapView、RenderLayer 和 GPU resources,旧 Trail 不要求跨 Activity 保存。
30-02 总体状态仍为 `WAITING_MANUAL_VALIDATION`,等待 R1–R4 人工证据;不得写 PASS,也不允许进入 30-03。

View File

@@ -0,0 +1,56 @@
# 30-02 GPU Ping-Pong 与 Context Recreation 验证 Codex 完成报告 v4
日期:2026-08-30
执行结论:`WAITING_MANUAL_VALIDATION`
## 1. 任务基线
- 分支:`particle/main`。
- 本轮开始 HEAD:`625836fcaf1474c51210f51b95dc9adeafdead9d`。
- 30-01:正式 `PASS`。
- 30-02:仍为 `WAITING_MANUAL_VALIDATION`。
- 开始时存在用户提供、未跟踪的本定向修复指令书;它保留在工作区,未修改或提交。
## 2. 用户实机输入
用户确认 C++ STATIC freeze 已通过手势回归,DISABLE / ENABLE 正常;同时发现旋转后 STATIC 恢复为 ACTIVE。该问题发生在 Android Activity recreation 的 Test App control mode,不是 GPU ping-pong 或 MapLibre redraw 问题。
## 3. 根因与修复
根因是 Activity 未向 Bundle 写入 `active/enabled`,且 recreation 后 `onCreate()` 无条件把 validation style 设为 ACTIVE + ENABLED,并重置相机。
修复仅在 `ParticleCoreLayerValidationActivity.kt`:
- 以稳定 Bundle key 保存/恢复 active 与 enabled;
- 只在首次 Activity 创建时初始化 camera;
- callback 使用恢复成员值调用唯一 `loadValidationStyle()`;
- 增加一次恢复日志;
- 保留既有 MapView lifecycle/state 保存与四个按钮状态机。
没有修改 Manifest、C++、gfx、RenderLayer、shader、GPU resource lifecycle、Gradle、依赖或 Test App UI。没有引入任何绕过 Activity recreation 的机制。
## 4. 检查与未执行项
- `git diff --check`:PASS。
- Bundle key、初始默认值、统一 style 入口、旧硬编码删除和禁止项静态检索:PASS。
- Kotlin formatter 工具在环境中不可用;未声称 Kotlin lint PASS。
- Android/Gradle/ADB/安装/运行以及任何编译:未执行,遵守用户限制。
## 5. 重新验证与范围
技术报告 v4 给出 R1 STATIC、R2 ACTIVE、R3 DISABLED rotation 和 R4 STATIC gesture 回归。必须通过 Android OpenGL 实机日志确认恢复状态;Rotation control-mode 恢复不等价于 T4 resize 或 T6/T7 context recreation PASS。
当前不允许进入 30-03。
## 6. Git 收尾
- 代码 commit:`503f1c66958798ef7294165c3ddeaffbd4908ee9`。
- 代码 message:`fix: preserve particle validation mode on rotation`。
- 代码 push:成功,远端分支 `origin/particle/main`。
- v4 文档实质提交及最终远端 HEAD 按元数据收尾规则在最终回复中记录。
- 除用户提供的未跟踪指令书外,无本任务无关本地修改。
## 7. 当前状态
本轮仅完成 Rotation state restoration 代码准备。R1–R4 尚待用户手工验证,故最终状态保持 `WAITING_MANUAL_VALIDATION`。

View File

@@ -106,3 +106,14 @@
- 修复后的 T3 等待用户在 commit `364b8f381e27eee36c4895084b2f0578a023fa61` 上重新手工验证;30-02 总体状态仍为 `WAITING_MANUAL_VALIDATION`,不允许进入 30-03。 - 修复后的 T3 等待用户在 commit `364b8f381e27eee36c4895084b2f0578a023fa61` 上重新手工验证;30-02 总体状态仍为 `WAITING_MANUAL_VALIDATION`,不允许进入 30-03。
- 技术报告:`docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v3.md`。 - 技术报告:`docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v3.md`。
- Codex 完成报告:`docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v3.md`。 - Codex 完成报告:`docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v3.md`。
## 2026-08-30 — 30-02 Android Rotation 状态恢复定向修复
- 用户确认此前 STATIC 的 pan/zoom/bearing/pitch 手势回归已经通过,DISABLE / ENABLE 正常;但旋转导致 Activity recreation 后 STATIC 错误恢复为 ACTIVE。
- 根因是 Test App 没有将 `active/enabled` 写入 Bundle,且 `onCreate()` 无条件恢复 ACTIVE + ENABLED 并重置 camera。
- 仅在 `ParticleCoreLayerValidationActivity.kt` 新增 Bundle key、保存/恢复 validation control mode;recreation 复用恢复后的统一 `loadValidationStyle()`,且只在首次进入设置默认 camera。
- 未修改 Manifest、C++、gfx、RenderLayer、shader、GPU ping-pong、GPU 状态、Gradle 或依赖;未使用 configChanges、方向锁定、SharedPreferences、全局变量或 GPU 序列化。
- `git diff --check` 与状态控制静态检查通过;按要求未运行 Gradle、Android 编译或 ADB。
- R1 STATIC、R2 ACTIVE、R3 DISABLED rotation 与 R4 STATIC gesture 回归等待用户实机验证;30-02 保持 `WAITING_MANUAL_VALIDATION`,不允许进入 30-03。
- 技术报告:`docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v4.md`。
- Codex 完成报告:`docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v4.md`。