Files
MapLibreParticleLab/docs/报告/STEP-105_FZG_MapLibre13.6.1运行验收_RDC执行报告_v1.md
tei a49dd936c4
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs(android): close FZG native runtime audit with placement finding
2026-10-09 12:35:40 +09:00

5.6 KiB
Raw Blame History

STEP-105 FZG1-2 MapLibre 13.6.1 实机 ADB 验收报告 v1

1. 结论

整体状态:PARTIAL。Android x86_64 OpenGL 升级候选已在 FZG 上完成多组运行验收;STEP-102 T2_TWO_FREE 仍 FAIL。不得以已安装、可显示粒子和无崩溃代表升级全部 PASS。

2. 环境和范围

  • 2026-10-09 JST;Mac RDC/ADB;FZG1-2 Android 13,serial 192.168.200.139:5555。
  • Test App org.maplibre.android.testapp / versionName 13.6.1,已安装 APK SHA-256 为 77bc0b238fb476494410a603443030b104d78f97a737307be52460bf5a68f5aa。
  • Git 升级分支 upgrade/android-native-13.6.1-20261009,测试源码 HEAD c30add4d335c5c02aadac5756c1606b5bc497269。
  • 仅 ADB UI/手势/Intent/Logcat/截图;没有 Codex、Gradle、Jest、NavSea 修改、iOS、其他 ABI 或正式发布。

3. 验收表

实测项目 证据 结论
初始粒子显示 用户看到粒子;UI GLOBAL/ACTIVE/EAST/MIX0%/256;两帧截图 PASS(初始显示)
Cache ON→OFF→ON 状态回读,runtime-disabled 后恢复 CACHE ON PASS
地图平移/双击缩放 App 存活;camera-or-boundary 缓存失效,后续复用 PASS(基础运行)
STEP-101 T1 单次重建 destroy enter/return、Native reset、new Renderer ready、DONE PASS
STEP-101 T2 20 次重建 流式日志20请求、20 Native reset进入/完成、40 Render reset进入/完成、21 ready、crash buffer0 PASS
STEP-099 T4 R-C-R 71次动态源更新,R0 build2→2、reuse5696→9373、invalidation35→35 PASS(R0 locality)
QBIN V4 Golden T0/T1 ACCEPTED_INSERTED,6项播放控制 ACCEPTED PASS(操作契约)
STEP-102 T1_FREE_SYMBOL R0 composite reuse +3683;R1 symbol placement gate false,Live PASS
STEP-102 T2_TWO_FREE R0 reuse +3682;R1 placementCapable=true、Live/Fallback、reuse0 FAIL(预期双 Retained)
最终恢复 默认 GLOBAL/ACTIVE/EAST/MIX0%/256;前台 Test App 13.6.1;crash buffer0 PASS

4. 关键数字及诊断

STEP-101 T2 首轮虽完成20次但设备环形 Logcat 丢失了前15次。该轮不记完整 PASS。第二轮使用 Mac 实时流式日志,从场景启动前持续记录到 DONE,完整包含:20 RESET_REQUEST、20 MapView destroy enter、20 destroy return、20 nativeReset entered、20 nativeReset completed、40 resetRenderer entered、40 completed、21 NEW_RENDERER_READY、1 SCENARIO_DONE,Crash Buffer 0。

STEP-099 T4 R-C-R(底层 Retained/中央粒子 Continuous/上层动态 Retained)在 tick8 至 tick130:R0 build=2→2、reuse=5696→9373(+3677)、invalidation=35→35;动态 GeoJSON 共71次更新。上层 R1 因 static-placement 保守 Live 回退。该 PASS 仅针对独立 R0 的 Source-scoped 缓存隔离。

QBIN V4 Golden 录得 t0=ACCEPTED_INSERTED、t1=ACCEPTED_INSERTED,后续 action=3 Seek25、4 Seek75、1 Play、5 Speed2、2 Pause、7 Clear,均 result=ACCEPTED;最终 UI 显示 V4 CLEARED。这不是天气场颜色和方向的像素级数值证明。

5. T2_TWO_FREE 阻塞事实和归因限制

T1:R0 placementCapable=false/gate=true/actual=composite,build1→1、reuse196→3879、invalidation6→6;带 Symbol 的 R1 placementCapable=true/gate=false/actual=live,符合保守安全设计。

T2:R0 placementCapable=false/gate=true/actual=composite,build1→1、reuse197→3879、invalidation5→5;R1 即使 fixture 指定 Fill,仍 placementCapable=true、gate=false、actual=live、fallback=static-placement,build0→0、reuse0→0、invalidation202→3884。最终 symbolFadeChange≈0.997、placementTransitionActive=true、crossSourceCollisions=true。两窗口 tick8/130 一致;无 FATAL/ANR,Crash Buffer 0。

只读源码:renderSegmentHasPlacementCapableLayer 只要分段内出现类型 symbol 即判 true,而测试 fixture T2 的自定义上层为 Fill。应调查运行时完整 Style Layer 列表、默认 Annotation Symbol 注入、segment begin/end、source/layer 归属。其它场景的 dependency 中曾出现 org.maplibre.annotations,但尚未证明在 T2 中造成该问题。缺少旧 .21 的 T2 运行对照,因此不应把该差异直接断言为 13.6.1 新引入的回归。

现象是保守 Live/Fallback 与复用能力未达预期,不是已证实的错绘或 GPU 资源错误。禁止为凑 PASS 关闭 Placement 安全门。需先核实是场景/区段定义问题还是实现问题,再在授权范围内修复并重新验收。

6. 原始证据、范围与收尾

Mac Git 忽略目录:artifacts/maplibre-particle/step105-fzg-runtime-20261009/,共含 01-baseline、02-cache、03-camera、04-teardown-t1、05-teardown-t2、06-locality-t4、07-qbin-v4、08-step102-t1、09-step102-t2、10-restored;保存截图、UI XML、原始流式 Logcat 与 crash buffer。其中 STEP-101 T2 正式证据为 05-teardown-t2/stream-complete.log。

本轮未做严格像素对比、长时间性能曲线、bearing/pitch 数值校验、Vulkan、RN 11.5.0、iOS、NavSea SDK 接入或正式发布。

结束前将 FZG 的 Test App 重新冷启动至普通粒子状态 GLOBAL / ACTIVE / EAST / MIX 0% / 256,前台运行、版本仍 13.6.1,设备 Crash Buffer 为空;NavSea 没有被安装或覆盖。

下一阶段:STEP-102 T2 的只读诊断与旧版 .21 对照,确定是否默认 annotation layer 被归入 R1,必要时明确修正场景/索引或源码,并在用户手工 Android 编译后由 RDC 重跑 T1/T2、T4 R-C-R 与 STEP-101 20次 reset。未完成前 Android Native 功能 Gate 保持 PARTIAL。

此报告没有业务代码提交。根目录 recoder_step.md 追加事实,中文阶段记录与 Git 远端状态通过 RDC 单独收尾。