mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 10:03:23 +09:00
96 lines
6.7 KiB
Markdown
96 lines
6.7 KiB
Markdown
# P5f FCL / Minecraft 端到端补测
|
||
|
||
> 本文是 `aa78f102` 的历史失败记录。后续 `38919d45` 已修复应用 buffer 消费及 Android
|
||
> 90° window blit,Magma inproc 已能正常进入同一世界;见 [magma-inproc-fix.md](magma-inproc-fix.md)。
|
||
|
||
2026-09-20,Redmi `2f7cbe2e`,FCL `com.tungsten.fcl.mgdebug.debug`,Minecraft
|
||
`26.3-rc-3`,现有单人世界 `test`。此前 [device-report.md](device-report.md) 是公开 GL
|
||
像素 runner,不是 FCL E2E;本文是用户要求后新增的真实游戏测试。
|
||
|
||
**两个后端均已实际启动测试;Magma inproc 失败,不能表述为两后端 split 均可玩。**
|
||
GLES inproc、GLES monolith 与 Magma monolith 进入世界并完成至少 60 秒连续运行,截图人工复核。
|
||
Magma inproc 在加载阶段触发明确的 P7 buffer-consumer 拒绝,未到进世界阶段。
|
||
|
||
## 被测制品与安装
|
||
|
||
- MobileGL 源头:`aa78f102ff8ecbe32be34b79d1d654c039867d19`,已推至
|
||
`origin/feat/disaggregated`。相对上一份验证库源头 `cfca93c7` 没有 C++ 行为变化。
|
||
- 正常 Gradle 构建 `:FCL:assembleFordebug`,`-Darch=arm64` 与
|
||
`mobilegl.pipePush=ON`、`mobilegl.buildDisaggregated=ON`、
|
||
`mobilegl.buildDisaggregatedInproc=ON`;**BUILD SUCCESSFUL in 52s**。
|
||
- `settings.gradle.kts` 的已有测试接线指向 `MobileGL-disagg`;NDK 27.3.13750724、
|
||
arm64、RelWithDebInfo。FCL 原有 Java / Kotlin 任务复用有效增量产物;未修改其源代码。
|
||
- APK:`FCL/build/outputs/apk/fordebug/FCL-fordebug-1.3.3.2-arm64-v8a.apk`,326039983 bytes,
|
||
applicationId 精确为 `com.tungsten.fcl.mgdebug.debug`,versionCode 1332。
|
||
- APK SHA256:`864fb685893abd346ac62aef1921dddddb6cd49c616ff0812ba9225cc90d11d7`。
|
||
- `libMobileGL.so` SHA256:`76c61d5990f52e5ffcad9741532ea2dec443d6677f97b55585df886df0f1a1e7`。
|
||
- APK 与设备实际 nativeLibraryDir 的 MobileGL / libc++ hash 逐项一致;libc++ 为
|
||
`46b51d661454b9cfaf42c1dc90893b5ad601b7a7ffc2e09d44bb3cc9d20e7ae2`。
|
||
这是本轮 Windows/Gradle 的实际产物,不混用先前 WSL pixel runner 的库 hash。
|
||
- 签名沿用已有 FCL debug key,证书 SHA256
|
||
`b8f82162dbfd193d2c8383bda495d5d5cdbabcd00c4e9064bc59483422a8b765`;`adb install -r`
|
||
成功,设备 lastUpdateTime `2026-09-20 13:49:19`。配置、options 与 55 MiB 的 test 世界已备份,
|
||
没有清应用数据或改其他 FCL 包。
|
||
|
||
## 实际运行结果
|
||
|
||
| 后端 / transport | 入世界 | 稳定窗口 | 窗口内帧增量 | 轮询近似 FPS(仅记录) | 判定 |
|
||
|---|---:|---:|---:|---:|---|
|
||
| GLES / inproc,strict=1、role-split=1 | 32.029 s | 64.005 s | 14280 | 223.109 | PASS,真实 apply verbs、所有128个统计窗口 rsp=0 |
|
||
| Magma / inproc,strict=1、role-split=1 | 未进入 | — | — | — | FAIL,21.454 s 内退出,P7 buffer consumer |
|
||
| Magma / monolith | 28.435 s | 62.251 s | 10560 | 169.636 | PASS,90个统计窗口 rsp=0、vbs=0 |
|
||
| GLES / monolith | 38.864 s | 60.696 s | 6840 | 112.692 | PASS,64个统计窗口 rsp=0、vbs=0 |
|
||
|
||
成功项同时核对:实际 backend 日志、inproc 的 capability/strict/role 配置、fresh 游戏日志
|
||
中的玩家进入世界、持续递增的 frames、进程存活与截图。GLES inproc 已 ARMED;Magma inproc
|
||
明确运行 lockstep,没有以界面选项或环境文件代替运行臂证明。每组前重启;GLES inproc
|
||
首次启动失败后的重试在同一次 boot 内完成。
|
||
|
||
画面人工检查范围是地形、树木、天空、手部、快捷栏与正常菜单;未见黑屏或明显纹理破坏。
|
||
场景时间/视角在运行中有变化,未定频,也不是固定帧像素比对;表中 FPS 不能用于后端性能
|
||
比较或回归判定。只验证这个版本、这个世界及数分钟内的游戏流程,不宣称完整功能覆盖。
|
||
|
||
### Magma inproc 的真实失败
|
||
|
||
```text
|
||
[13:58:45] [Android mgl-srv-apply/FATAL]: MGPipe: Fatal{RoleViolation, "buffer-legacy-arm"} (Magma P7 buffer consumer)
|
||
```
|
||
|
||
同次日志先报告 subsystem `0x80` 没有 server consumer,随后在 apply 线程拒绝 legacy buffer
|
||
路径。该文案对应 Magma draw / indirect buffer 的 P7 守卫,区别于 UniformManager 的另一条
|
||
`buffer descriptors remain P7` 文案。现有抓取没有 native PC / tombstone,不能进一步指定
|
||
是哪一个 GL draw 或 VBO/EBO 触发;FCL 自身的 SIGABRT hook 会接管退出。
|
||
这不是测试跳过,也没有通过关闭 strict / dualblock 绕过拒绝。Magma monolith 成功仅说明
|
||
该库的单体路径能跑此游戏,不能代替 split 支持。P5f 的已完成范围仍以 wire ownership 门
|
||
为准,完整 Magma 应用缓冲消费继续属于 P7。
|
||
|
||
### 其余诊断没有隐去
|
||
|
||
GLES 首次启动 PID 12166 在 MobileGL 初始化前被 signal 34 结束,没有生成 library log;
|
||
根因未定位。原始日志保留在 `GLES-inproc/`,同配置重试保留在 `GLES-inproc-retry/`。
|
||
两次都有 `ClassNotFoundException: sun/java2d/SurfaceManagerFactory`,成功重试证明不能
|
||
把这条被处理的 CTC agent 警告认作首轮退出原因。
|
||
|
||
成功运行仍有初始化诊断:GLES 的 `eglSwapBuffersWithDamageEXT` 动态入口缺失带历史 FATAL
|
||
日志级别,但没有导致 abort;还有 `glShaderStorageBlockBinding` 入口缺失、两后端的
|
||
`GL_STENCIL_INDEX8` 归一化诊断,Magma 的 separate depth/stencil 不支持提示。
|
||
因此本文不宣称“日志零错误”;通过项是本场景实际进世界、运行与画面检查,且无 wire
|
||
`Fatal{...}` / 进程退出。Magma 的具名 P7 拒绝单列为失败。
|
||
|
||
## 复现与证据
|
||
|
||
证据根:`C:/Users/geekerwan/.codex/tmp/p5f-fcl-e2e-aa78f102/`。其中有 Gradle 日志、
|
||
`artifact-identity.json`、设备库 hash、构建接线快照、备份,以及每臂的 library/latest/logcat、
|
||
boot-id、逐次 pid/统计采样、summary 和截图。`run_fcl_arm.py` 只负责测试采样,未清 logcat、
|
||
未 pin 时钟;机器成功状态需经过人工截图检查再判 PASS。
|
||
|
||
FCL 当前的 `mg_transport.txt` / `mg_env.txt` 接线只在内置 Espryt renderer 分支执行;因此四臂
|
||
保持该入口,通过 `MOBILEGL_BACKEND_TYPE` 明确覆盖后端,并核运行日志。直接点内置 Magma
|
||
选项默认走 monolith,不能把这种操作误记成 Magma inproc。两后端加载同一个 `libMobileGL.so`。
|
||
所有 inproc 组使用 stage=256 MiB、strict=1、role-split-state=1、run-ahead=1、stats period=120;
|
||
monolith 对照明确设 transport=monolith、role-split-state=0。
|
||
|
||
测试结束已从游戏菜单保存退出,恢复原 `mg_transport.txt=inproc` 与空 `mg_env.txt`,
|
||
核对文件 hash 一致。新 APK 保留安装;未改系统时钟/定频设置,未回滚运行中发生的世界变更。
|
||
完整 test 世界备份仍在证据根的 `backup/test/`。父仓原有冲突索引和未提交构建配置未改动。
|