test: record STEP-119 Android RCRR CPU validation
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled

This commit is contained in:
tei
2026-10-11 19:50:28 +09:00
parent 32ac795fc4
commit e3f5760527
4 changed files with 83 additions and 2 deletions

View File

@@ -74,3 +74,12 @@ Mac Metal原生CMake配置首次因PATH找不到cmake而失败,改用既有/us
- 新增严格 SHA/HEAD/设备锁的 CPU 采样器(App进程 utime+stime、6秒采样、35秒warmup、90秒观测)、A-B-A 对照比较器;对照同时列 CPU核秒/秒、CPU估算ms/完成帧、Native FPS、FastFraction≥95%、Build/Reuse/Invalidate。ADB实机只读确认 `CLK_TCK=100`,未以旧APK冒充新测试;未进行Android编译。
- Python 非Jest结构+CPU测试 12项 PASS。正式测试矩阵 `docs/60_测试/STEP-119_RCRR多配置验收矩阵_v2.md`,本轮阶段报告 `docs/报告/STEP-119_粒子独占C与CPU效率_阶段验收_v1.md`。
- **待验**:用户手工编译、安装新APK及Full-Fast-Full CPU实测,三种粒子独占C布局的Build/Reuse/Fast、视觉等价、变更后失效与恢复,13项GTest/Metal/iOS。STEP-119继续PARTIAL、不宣称CPU性能提升。
## RDC 2026-10-11 STEP-119 粒子独占 C 与 CPU 实机综合验收(续)
- 用户已明确授权 Mac RDC 执行 Android APK 编译/安装及综合测试。Integration main 已同步到 `80667d6c343411d03a760425438e3d292f452118`;APK 真机源码 Commit 为 `32ac795fc4abd04006673bf644f87a711329e78f`;x86_64 APK SHA-256 为 `2bbd1cb4dc9e03ec56d8404363970e56f76b03819f6f2b50c8aee6dbb6fa43d2`,Mac build exit0、设备压缩下载解压 SHA 同源、`pm install -r` Success exit0、安装 Base APK 同 SHA、严格 preflight exit0。
- CPU 测量工具首次 `sh -c` 多参数读取阻塞 exit3;随后采用单个 ADB shell 命令并保存 warmup+末尾日志的临时修正测量,第一组 Full 不齐整 exit2排除。最终 9次Benchmark中8次有效:2×Full、3×RCRR(三R)、2×RCR(两R)、1×RCRRR(四R)。全部24 Gate完整、判定失配0、同 APK/Style指纹、固定相机与场、Native最后120帧窗口119 Fast/0 Full(正向组)。
- 实测进程CPUms/完成帧中位:Full 60.67ms,RCR 3.50ms,RCRR 7.04ms,RCRRR 7.82ms;RCR两次3.30/3.70ms,RCRR三次6.96/7.04/7.37ms。RCRR Full-Fast-Full 基线漂移2.70%,中间 Fast约55FPS、CPUms/帧7.04,相对Full估算降低88.40%。RCR约59.4–59.7FPS、CPU占单核约19.7–22.0%,比RCRR在该固定场景更省 CPU。仅为进程级CPU近似,不证明GPU、耗电。
- 两种负例独立90秒:宽 C 海图混入 `Fast0/Full+339`、Particle误入R `Fast0/Full+322`,两者均24 Gate完整、`decisionMismatch=0`、`unsupported-continuous-layer`安全拒绝;严格验证器返回2属于预期负例 PASS,并非进程崩溃。
- 定向验证中每个正向 R 都曾 Build1,稳定采样窗口 BuildDelta/InvalidateDelta=0,Reuse持续增加。天气切换后的 R 刷新、相机/源/Tile/Annotation/Context生命周期、Full与Fast的视觉同等、GPU计时、iOS/Metal、13个GTest仍未证实;STEP119 **PARTIAL**,不将稳态验收写成CLOSED。
- RDC 将临时已实际运行的 CPU 采样器 `sh -c` 与日志边界修正合入正式Python测试脚本,**不重新构建/修改当前已验APK**;Python 12项 PASS,Git收尾只包含此脚本、阶段报告、Step记录与开发记录。正式结果:`docs/报告/STEP-119_RCRR粒子独占C_CPU真机验证_阶段报告_v2.md`,综合数据 `artifacts/maplibre-particle/android-validation/step119-rcrr-cpu/compare-20261011_193724.json`(本地忽略目录)。

View File

@@ -0,0 +1,65 @@
# STEP-119 RCRR 粒子独占 C 与 CPU 实机对照阶段报告 v2
日期:2026-10-11(JST)。实际执行:Mac.lan RDC,Android FZG1-2 x86_64 / `192.168.200.139:5555`,后端 OpenGL。**本报告为真实 Android 固定相机稳态验证,不是 STEP-119 全量 CLOSED/PASS。**
## 一、执行结论
**粒子独占 C 的 RCR、RCRR、RCRRR 三种分段均已在 Native 真正执行 FastPath(观测窗口 Fast 100%);同一 PBF/天气场/相机条件下,两个 R 段的 RCR 平均 CPU 工作量显著低于三 R/四 R。** 宽 C 混入海图或 Particle 放入 R 的两项负对照均安全拒绝 Fast,24 Gate 没有误判。
CPU 为 Android App **整个进程**的 utime+stime,不是某个 Native render() 调用的精确耗时;`CPU毫秒/帧`是实测进程 CPU 核秒/秒除以同段 Native 帧率的估算值,**不证明 GPU、功耗、动画视觉等价或动态天气切换安全。**
## 二、来源锁与步骤执行返回
- Integration `main` 通过 Mac RDC `fetch + --ff-only`,HEAD `80667d6c343411d03a760425438e3d292f452118`。
- Particle 分支 `particle/main`,本次真机 APK 对应源码 Commit:`32ac795fc4abd04006673bf644f87a711329e78f`,完整 SHA256:`2bbd1cb4dc9e03ec56d8404363970e56f76b03819f6f2b50c8aee6dbb6fa43d2`。
- **构建 PASS,exit0**:RDC 经用户本轮明确授权在 Mac 执行 `build_validation_apk.sh`,Java17、Android x86_64 OpenGL Kotlin/Native Build Success;APK 66,702,127 bytes,libmaplibre.so 40,138,024 bytes。只是现有弃用 API 警告。
- **传输/安装 PASS**:`adb install -r` 因网络慢无终态而终止,非编译失败;改为临时 Mac LAN HTTP→设备 `curl` 下载无损 gzip(31,582,202 bytes)→SHA-256校验→设备解压成原 APK再校验→`pm install -r` 返回 `Success` exit0。临时 HTTP 已停止。最终 `verify_step113_fast_path.py --preflight-only` exit0:源码 HEAD、build-info、Mac APK SHA、已安装设备 base.apk SHA、x86_64 全匹配。
- **采样器第一次试跑 BLOCKED,exit3**:ADB `sh -c` 参数转义阻塞读取进程 /proc;已停止,不计 RCRR 缺陷。临时忽略目录的测量器按同一 APK 修复为单个 ADB shell 命令,并在温机期保存日志避免 logcat 轮转;原记录1次 `SUMMARY_ALIGNMENT_LIMIT` exit2,明确排除 CPU 比较。
- **有效 CPU Benchmark 8 次,exit0**:2次 Full、3次 RCRR、2次 RCR、1次 RCRRR。均同一 Commit/APK SHA/正式Style指纹 `e0f9c2d1df38ae5d5953b561c52efe2f8590336de80b988e1d2935580d30b996`;每次 24 Gate、decisionMismatch 0、Native/CPU 时间边界误差≤9秒、Lifecycle不变、真实分段/无 tide / 空 Annotation 受控。
- **负例各 90 秒观察,命令 exit2(预期负例状态),安全验收 PASS**:`RCRR_C_WIDE_NO_TIDE` FastDelta0 FullDelta339,`unsupported-continuous-layer`;`RCRR_R_DYNAMIC_NO_TIDE` FastDelta0 FullDelta322,`unsupported-continuous-layer`+动态粒子 R0 的反复 `static-unstable/cache-invalid`;两项 `decisionMismatch=0`、24 Gate完整。此 exit2 是严格验证器的 `NO_FAST_OBSERVED`,**不是 GPU 测试崩溃**。
- Python 现有非 Jest 合约/CPU比较测试 **12项 PASS**;修正后的正式 CPU 工具源代码仅为测试 Python(不改 Native/Test APK)。使用原 APK 的实测仍以旧源码 SHA `32ac...` 为准;仓库后续 Git 文档/测试器提交不倒写至 APK 来源。
## 三、实测 CPU / Fast 帧效率
每次独立冷启动,35秒 warmup,再约90秒稳定 CPU 采样,间隔6秒。相机固定(33.45,129.97、zoom10.5、bearing0、tilt0),场输入/forecast暂停/目标 FPS设置相同;Native FPS 实际值不等于目标 FPS,不得使用设定值算 CPUms/帧。
| 模式 | R数量 | 有效轮数 | Native FPS(实测) | 进程 CPU / 单核 | 估算 CPU ms/完成帧 |
|---|---:|---:|---|---|---|
| Full,缓存关闭 | 3 | 2 | 9.98、10.61 | 61.6%、63.3% | 61.74、59.61;中位 60.67 |
| RCR,Particle独占C | 2 | 2 | 59.67、59.40 | 19.7%、22.0% | 3.30、3.70;中位 **3.50** |
| RCRR,Particle独占C | 3 | 3 | 53.93、55.03、54.22 | 37.6%、38.7%、39.9% | 6.96、7.04、7.37;中位 **7.04** |
| RCRRR,Particle独占C | 4 | 1 | 48.94 | 38.3% | **7.82** |
对先 Full → Fast RCRR → 后 Full 的严格同源 A-B-A:
- Full CPU ms/帧基线取中位 **60.6716**,RCRR Fast **7.0396**:估算降低 **88.40%**;Fast比率100%;Full前后 CPU/秒漂移 **2.70%**,未达15%复测阈值。
- 同基线计算 RCR **3.2996**:估算降低 **94.56%**;RCRRR **7.8212**:估算降低 **87.11%**。RCR/RCRRR 不在严格 Full-Fast-Full 的相邻三次中,属于同 Style/设备基准横向对照,不能赋予与 A-B-A 完全相同的控制力度。
- RCR 3.30/3.70 与 RCRR 7.04/7.37 的交叉重复稳定支持**本场景两 R 优于三 R**。不能据此把差距直接归因为 FBO 合成或强称“R数越多必然越慢”:四 R 一次 CPU/秒略低于三 R,且缺少 GPU 渲染链 Profiling。
- Fast组全部在稳定观察窗口 `FullDelta=0`、`FastFraction=1.0`、`windowCount=120`、最后120帧 `Fast=119/Full=0`,每个 R 原先真实 Build1,观测窗口内 `BuildDelta=0、InvalidateDelta=0、Reuse大量增长`。这验证**稳态** Cache Reuse,不验证主动变更后安全重建。
## 四、证据坐标
Git 忽略的本地设备证据目录:
`artifacts/maplibre-particle/android-validation/step119-rcrr-cpu/`
- A-B-A 综合 `compare-20261011_193224.json`。
- 包含全部三种 Fast 结构的比较 `compare-20261011_193724.json`。
- Full 有效:`20261011_184647-rcrr_full_control_no_tide/result.json`、`20261011_193006-rcrr_full_control_no_tide/result.json`。
- RCR:`20261011_193242-rcr_particle_only_no_tide/result.json`、`20261011_194206-rcr_particle_only_no_tide/result.json`。
- RCRR:`20261011_184406-rcrr_c_narrow_no_tide/result.json`、`20261011_192746-rcrr_c_narrow_no_tide/result.json`、`20261011_194427-rcrr_c_narrow_no_tide/result.json`。
- RCRRR:`20261011_193504-rcrrr_particle_only_no_tide/result.json`。
- 无效首轮 Full(仅保留排障):`20261011_184029-rcrr_full_control_no_tide/result.json`。
- 负对照:`artifacts/maplibre-particle/android-validation/step113-retest-20261011_193754/rcrr_c_wide_no_tide/result.json`、`step113-retest-20261011_194000/rcrr_r_dynamic_no_tide/result.json`。
原始数据/Logcat 没有加入 Git,以上路径仅在执行 Mac 本地工作树中。正式报告记录事实和 Hash,**不能把本报告当作已发布或 Source-Locked APK**。
## 五、性能和架构局限 / 后续验收
1. **C 单独 Particle 是当前强准入边界**:宽 C 含普通海图会拒绝 Fast;把实时粒子错放 R 会频繁失效。不得为跑分降低24 Gate。
2. **R 数量不是越多越好**:本次两 R 性能最好,RCRR/RCRRR 受更多缓存、RenderTarget和合成/上传等成本影响的原因尚需 CPU/GPU 分项 Profiling,不得越证据结论。
3. **WeatherColor 在 R**:固定 forecast 的稳态 Build1/Reuse 大量通过;field 更新、插值时间、颜色表、可见度、Opacity、Source/Tile变化是否触发正确的失效、Full、重 Build/Reuse,**未验证**。
4. **视觉等价未通过**:航标、字体、跨段 Symbol Placement/遮挡、层次和色彩需同视角 Full/RC/RCR/RCRR 人工真实屏幕验收;尤其两 R 不允许以牺牲 Symbol 语义换速度。
5. **动态地图与错误恢复未通过**:Camera移动缩放旋转、Style、Source、Tile、Annotation、Context丢失以及反复切换的 Full→Fast恢复、无旧图闪现,未经过系统测试。
6. **跨平台与低层证明未通过**:Mac Metal/iOS、13项 STEP119新增 C++ GTest 真跑、GPU 时间/温度/电量未确认。Android APK 为测试 Debug x86_64,不能外推产品 ABI 或真机温度。
7. **长期运行/网络压力未通过**:设备网络传输约 48KiB/s,使用 gzip+LAN HTTP转移大APK完成安装;不能把安装网络瓶颈归咎于 FastPath,也不能用静态场证明运行稳定性。
阶段裁定:`ANDROID_RCRR_STEADY_FAST_CPU_PASS / TWO_NEGATIVES_FAIL_CLOSED_PASS / STEP119_PARTIAL`。建议后续优先 RCR 两 R 方案做动态/视觉/生命周期长时间测试,**不修改正式生产配置,不在此报告直接决定采用**。