[Docs] (Disaggregated): record Redmi FCL gameplay results and Magma split P7 refusal

This commit is contained in:
2026-09-20 02:09:38 -04:00
parent aa78f102ff
commit 9e7cdefaf2
4 changed files with 108 additions and 0 deletions
@@ -17,6 +17,13 @@
## 2. P5f 最终验收
**FCL 游戏补测**(源码 `aa78f102`,2026-09-20):已正常编译/安装到 Redmi 的
`com.tungsten.fcl.mgdebug.debug`。MC `26.3-rc-3` 世界 `test`:GLES inproc / monolith、
Magma monolith 均完成至少60秒连续运行及人工画面检查;**Magma inproc 未进世界,
真实触发 P7 `buffer-legacy-arm` 并退出**。另有一次 GLES 渲染初始化前 signal34 启动异常,
重试通过,未隐去。详细范围与证据见 [fcl-e2e-report.md](notes/p5f/fcl-e2e-report.md)。
下面的六臂设备数字仍是先前公开 GL runner,不能冒充 FCL 测试结果。
| 门 | 总条目 | PASS | skip | failed / 结论 |
|---|---:|---:|---:|---|
| unit | 2310 | 2300 | 10 | 0 |
@@ -4,6 +4,11 @@
> `C:/Users/geekerwan/AndroidStudioProjects/FoldCraftLauncher/MobileGL-disagg`,分支 `feat/disaggregated`。
> 完整结果见 [close-report.md](close-report.md),设备见 [device-report.md](device-report.md),
> 阶段终审见 [close-review.md](close-review.md)。最终行为验收头 `cfca93c7`,之后仅文档/复现工具。
>
> **FCL 游戏补测(2026-09-20)**:源码 `aa78f102` 已编入并安装 `.mgdebug.debug` FCL,
> MC `26.3-rc-3` 的 GLES inproc / monolith 与 Magma monolith 各完成至少60秒世界运行;
> **Magma inproc 真失败于 P7 `buffer-legacy-arm`,尚不能跑该游戏**。
> 见 [fcl-e2e-report.md](fcl-e2e-report.md),不要将前面的公开 GL runner 当成 FCL E2E。
## 0. 当前结论
@@ -8,6 +8,10 @@
包含 Windows 收口头 `c42577a4` 的全部修复;之后仅补文档与设备复现工具。
交付分支为 `feat/disaggregated`。包提交与环境入口见 [HANDOFF-P5F.md](HANDOFF-P5F.md)。
用户随后要求的 [FCL 游戏端到端补测](fcl-e2e-report.md) 已实际执行:GLES inproc / monolith
与 Magma monolith 可进入 MC `26.3-rc-3` 世界并稳定运行;Magma inproc 真失败于 P7
`buffer-legacy-arm`。本文的 P5f 完成不表示完整 Magma 游戏 split 工作负载已经可用。
## 1. 完成的行为
波次 2 的 fc / fe / fm 已把 EGL 控制面、Espryt 对象读点、XFB Begin 快照与 Magma 可达
@@ -0,0 +1,92 @@
# P5f FCL / Minecraft 端到端补测
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/`。父仓原有冲突索引和未提交构建配置未改动。