7.5 KiB
7.5 KiB
STEP-092 Continuous Range 可退化分段 Retained Cache Codex 完成报告 v1
1. 执行结论
PARTIAL:实现完成,等待 RDC 独立编译、Native directed test、OpenGL/Metal 验证。
未把静态审计写成编译通过,也未把 Android 项写成已执行;因此当前不满足任务的最终 PASS Gate。
2. Git 基线
- 机器:
Mac-mini-tei.lan,Darwin x86_64。 - 仓库:
/Users/tei/dev/MapLibreParticleLab。 - branch:
particle/main。 - Starting HEAD:
b29e564944197072a0effaec36ca95c48fe0649b。 - 起始
origin/particle/main:b29e564944197072a0effaec36ca95c48fe0649b。 - 起始 dirty:仅用户提供的 untracked STEP-092 任务书;已保留并纳入本任务文档范围。
- Implementation commit:
a9eaec6b65cc26aa70e03002bdc1326c46cad245。 - Implementation message:
feat: add continuous retained render ranges。 - Implementation push:SUCCESS,
b29e56494..a9eaec6b6 HEAD -> particle/main。 - 文档提交无法在自身内容中自指其最终 SHA;closeout SHA、最终本地/远端 HEAD 与最终 status 由提交后回读写入最终交付响应。
3. 修改文件
C++ Renderer / Map
include/mbgl/map/map.hppinclude/mbgl/renderer/retained_underlay.hppsrc/mbgl/map/map.cppsrc/mbgl/renderer/continuous_layer_range.hpp(新增)src/mbgl/renderer/render_orchestrator.cpp/.hppsrc/mbgl/renderer/renderer_impl.cpp/.hppsrc/mbgl/renderer/retained_underlay_cache.cpp/.hppsrc/mbgl/renderer/retained_underlay_runtime_state.hpp
Android API / bridge
platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/MapLibreMap.javaplatform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/NativeMap.javaplatform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/NativeMapView.javaplatform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/RetainedUnderlayDiagnostics.javaplatform/android/MapLibreAndroid/src/cpp/native_map_view.cpp/.hpp
iOS API / bridge
platform/ios/src/MLNMapView.h/.mmpackages/maplibre-particle-rn/ios/WeatherRuntimeBridge.mm
RN API
packages/maplibre-particle-rn/src/NativeWeatherRuntimeBridge.tspackages/maplibre-particle-rn/src/RendererRuntime.tspackages/maplibre-particle-rn/src/types.tspackages/maplibre-particle-rn/android/src/main/java/org/navsea/maplibre/particle/weather/WeatherRuntimeBridgeModule.kt
Tests / docs
test/renderer/retained_underlay_cache.test.cppdocs/40_任务/STEP-092_ContinuousRange可退化分段RetainedCache_Codex任务_v1.mddocs/50_Step记录/STEP-092_ContinuousRange可退化分段RetainedCache_v1.md- 本报告
粒子开发记录.md
4. Range config 所有者与解析
- map-scoped owner:
Map::Impl::retainedUnderlayState。 - thread safety:atomic control/counters + mutex-protected ID/config/resolution。
- revision:每次实际 ID pair 变化单调递增;重复相同配置不前进。
- ID→index:
RenderOrchestrator::createRenderTree()在完整orderedLayers上解析,visibility 不参与。 - explicit valid 时只使用
[startIndex, endIndex + 1);不读取 legacy boundary。 - explicit invalid 时 index 置
-1、资源/prepared gate 失效并 full fallback;不按 Particle/Weather 类型纠正。
5. 1/2/3 Render Range 与 0/1/2 cache
- single-layer Continuous 正式支持。
- Bottom+Continuous+Top / Bottom+Continuous / Continuous+Top / Continuous-only 全部由同一 plan 表达。
- 两个 cache holder 分别代表 Bottom/Top capability;只有 range present 才建立 key 并 lazy 创建 RGBA texture/render target/compositor。
- empty drawable content 不会把 Style 中实际存在的 Bottom/Top topology 偷偷消掉;可构建透明 retained texture。
6. Renderer、Z-order 与 Top 正确性
- Bottom build/reuse/composite → Continuous render → Top build/reuse/composite。
- Opaque reverse、Translucent forward 保持;original ordinal、
currentLayer、depthRangeSize按全 Style 计算。 - Top 使用透明 clear、RGBA offscreen、direct sample shader 与 alpha-blended premultiplied composite,可覆盖 Continuous Particle。
- 未增加 LandMask RT、业务 Layer ID、Anchor/Marker 或第二套 metadata Z-order。
7. Invalidation / legacy / Fast Path
- STEP-089 content/topology/static revision 继续作为 conservative invalidation 基础;range config/end index/Top topology 已纳入。
- 未配置 explicit range:保持 legacy retained-underlay。
- explicit valid:legacy
startsRetainedDynamicRange()只可用于 fast-safety 类型证明,不参与 topology/boundary。 - fast gate 对不存在 cache 不要求 valid;实际存在 Bottom/Top 都必须 valid/buildRevision 匹配。
- unknown Continuous layer 不能证明 particle-only 安全时 full CPU fallback;正常 full range render/cache 不受影响。
8. Diagnostics
已增加并跨 C++/Android/iOS/RN 暴露:
rangeConfigured,rangeValidstartLayerId,endLayerId,startIndex,endIndexbottomPresent,bottomBuild,bottomReuse,bottomInvalidationtopPresent,topBuild,topReuse,topInvalidation- 保留 aggregate
fallback,lastReason与原有 enabled/build/reuse/invalidation。
Continuous-only 的 Bottom/Top present 均为 false,仍可为 rangeValid=true。
9. Native tests
测试源码新增覆盖:
start == end、start < end、start > end- start/end missing
- hidden endpoint ID 仍参与完整 ordered list
- reorder、endpoint 删除后重新解析
- 四种 topology 与 0/1/2 cache decision
- Bottom/Top 不存在不造成 fast cache miss
- config empty-ID/revision/same-ID
- explicit valid/invalid 均不混用 legacy boundary
实际 test runner 尚未由 Codex 执行,等待 RDC。
10. OpenGL / Metal / Android
- OpenGL:源码实现完成;未执行 build/runtime,等待 RDC。
- Metal:共用 range/cache topology 与既有 Metal compositor;源码实现完成;未执行
ios-sdk-static,等待 RDC。 - Native directed tests:未执行,等待 RDC。
- Android 项:未执行 Android Gradle、AAR/APK、ADB、安装、设备视觉或生命周期验证。
- Jest:按任务要求未新增、未执行。
11. 静态检查与验证命令
Codex 已执行 git diff --check;最终提交前再次执行并回读。
RDC 精确命令:
cmake --build build-step088-opengl --target mbgl-test-runner -j3
build-step088-opengl/mbgl-test-runner \
--gtest_filter='ContinuousLayerRange.*:RetainedDynamicBoundary.*:RetainedLayerGroupRange.*:RetainedUnderlayCache.*:RetainedUnderlayRevision.*:ParticleFastPath.*'
cmake --build build-ios --target ios-sdk-static -- -quiet
git diff --check
12. Known limitations / 未完成
- 尚无 RDC 编译结果,桥接/codegen/ObjC++/C++ 编译结论不得写 PASS。
- 尚无 OpenGL/Metal frame capture 或资源计数运行证据。
- 尚无 Android lifecycle/style mutation/视觉验收。
- 本任务只支持一个 explicit Continuous Range;无 clear API、多个 Range 或 N Segment Planner。
13. Git 收尾
- scoped staging:只纳入本任务上列源码、测试与文档。
- 禁止项:未使用
git add -A、git add .、reset、clean 或 force push。 - Implementation commit SHA/message:
a9eaec6b65cc26aa70e03002bdc1326c46cad245/feat: add continuous retained render ranges。 - Implementation push result:SUCCESS。
- Remote branch:
origin/particle/main。 - Final HEAD /
origin/particle/main/git status --short:待提交与 push 后外部回读;在两者一致前不声明 Git 完成。