Files
MapLibreParticleLab/docs/50_Step记录/STEP-057_AndroidHost天气运行时接口基础_v1.md
OpenAI Codex 486cc80b6f
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
fix: correct STEP-057B weather runtime state semantics
2026-09-07 13:03:30 +08:00

38 lines
4.2 KiB
Markdown
Raw Permalink 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.
# STEP-057 Android Host 天气运行时接口基础
状态:`IMPLEMENTED / WAITING_ANDROID_VALIDATION`。
Starting HEAD:`faf7548220e9a1282275711c236987f7faedfa03`,分支 `particle/main`。
已实现:Android `WeatherRuntime` typed facade;canonical byte[] submit result enum;clear fields;timestamp seek;play/pause/0.5/1/2x;独立 visibility;OFF unload;WeatherColor 8-stop dynamic ramp;独立 particle/trail RGBA;Android→JNI→C++ 接线;REAL WEATHER Test App submit/playback 改走 facade。
Core 保持 canonical U/V、Timeline、Runtime Field Window、T0/T1 interpolation 和 Renderer 架构边界。正常窗口边界的 GPU content reuse 路径未改变;normal seek 不改变 window revision,跨窗口仍由既有 revision 驱动 reuse。
OFF 会停止 Timeline、clear Host ownership,并在 Render 线程的空 Source path 清理 layer drawables、particle State/Trail/draw targets、field textures 和 WeatherColor resources。结构化日志包括 `TIMELINE_STOP`、`FIELD_WINDOW_CLEAR`、`SNAPSHOT_CLEAR`、`PARTICLE_RESOURCE_RELEASE`、`TRAIL_RESOURCE_RELEASE`、`WEATHER_COLOR_RESOURCE_RELEASE`。
本地验证:shader generator、Linux OpenGL `mbgl-core`、`style_layer.test.cpp` 与 `source.test.cpp` 精确编译;`git diff --check`。Android Gradle/APK/ADB/设备测试和 Jest 未运行。
未完成:Android 手工 T1–T13 验收,特别是 OFF resource log、ON 后重新 T0/T1、dynamic ramp/colour 无 field upload/particle reset、timestamp mid-point 和窗口边界回归。
## STEP-057A 审计修正(2026-09-07)
状态保持 `IMPLEMENTED / WAITING_ANDROID_VALIDATION`。基于已推送 `efaa3e61c` 审计修正,不进入 STEP-058。
- 删除正式 `WeatherRuntime.setParticleVisual(String, float)`;改为 particle count、line width、length、particle/trail opacity、trail fade、speed-color enabled 的明确 typed 方法。Test App 的 fixture-only generic property 调试仍只留在低层路径。
- 修正 facade 状态:READY 重复 enable 幂等;DISABLED enable 进入 WAITING;ERROR 收到 pending T0 恢复 WAITING;initial window ready 进入 READY;clear/disable 只在对应 Core 成功时转入 WAITING/DISABLED。新增 Android 既有 JUnit state transition 定向测试源码,未按本轮限制执行 Gradle。
- `RenderOrchestrator` 不再对所有 hidden RasterArray layer 执行额外 prepare/update。`RenderLayer` 默认无 cleanup;仅仍持有资源、Host-field Source 已空的 RasterParticle/WeatherColor renderer 显式 opt-in,完成一次空场 GPU cleanup。普通 hidden layer 语义不变。
- Host stop capacity 改为由 JNI 读取 Core `MaxWeatherColorStops`;Host API 继续接受 `ColorStop` list,未暴露 UBO。严格验证与 particle/trail 独立性保持。
- timestamp 测试改为 epoch milliseconds(2024-01-01 UTC 起的 64-bit ms),覆盖 exact T0、midpoint、exact T1、上下界 out-of-range 与 clear 后 fail-closed。
验证:output-throttle 下 shader generator、Linux OpenGL `mbgl-core`、`mbgl-render`、`mbgl-test-runner`、相关精确 Source/Style compile 和定向非 Jest tests 均 PASS;`git diff --check` PASS。Android Gradle/APK/ADB/设备/Jest 未运行。
## STEP-057B 状态语义修正(2026-09-07)
状态:`IMPLEMENTED / WAITING_CODE_REVIEW`。
基于 `dad6876c72f29e2d5671677ee15e13cd25e653a1`,本轮只修改 `WeatherRuntime` 与状态测试/记录:普通 `REJECTED_ADAPTER`、`REJECTED_INCOMPATIBLE`、`REJECTED_NON_MONOTONIC`、`REJECTED_CAPACITY` 和空 metadata/payload 保持当前 state;`REJECTED_SOURCE_MODE`、`UNKNOWN` 才进入 ERROR。pending T0、initial window、next snapshot、duplicate 的成功/保持语义不变。
`READY + enable(true)`、`WAITING_FOR_FIELDS + enable(true)` 为幂等 no-op;`DISABLED + enable(true)` 成功恢复到 WAITING;ERROR enable 明确返回 REJECTED 并保持 ERROR。clear/disable 成功与失败转换保持原有契约,DISABLED 重复 disable 仍为成功 no-op。
`WeatherRuntimeStateTest` 已覆盖普通 rejection 保持 READY/WAITING、真正错误、所有 enable 分支、clear/disable,以及 public flow 的 invalid submit 和 ERROR enable。public flow 测试源码已加入现有 Mockito/JUnit 体系,但本轮未运行 Android Gradle;因此仍需代码审计后统一 Android 验收。