mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[Docs] (Disaggregated): P5e 进度、monolith 回归与设备验证写回
- CURRENT_STAGE_PROGRESS.md 新增 2.5 节:八包落地情况、设备验证发现的 monolith SIGSEGV 及其 根因/覆盖漏洞/修复(ID-107 -> fix1 -> ID-109/ID-110)、头3cc4e1ec的逐门数字、三臂设备结果。 代码头更新为 3cc4e1ec。 - MEASUREMENTS.md 新增 10 节:主机门在44f91c74与3cc4e1ec的对比(integration-gpu 1157/1294 -> 1294/1294 是本阶段最重要的一个数:那 137 个 SEGFAULT 当时没有任何门禁步骤会看到)、 设备四行、以及本轮与上一轮的测量纪律四条。 - ROADMAP.md 的 P5e 行与状态行标注八包全落地与当前头。 阶段未收官:kMGPipeP5eRunAheadReady / kMGPipeP5eClientWaitRuleLanded 仍为 false,翻转门是 BRIEF-P5E 3 节(strict 硬绿)与 4 节(设备出口)。
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# 当前阶段进度
|
||||
|
||||
分支 `feat/disaggregated`;代码头 `1f8de61b`(2026-09-18,P5d 三轮收官;P5c 收官头 `b88e8487`)。本文随每次落地更新。ID-1..75 的逐条裁定长文在 git 历史(`ef35ea0c` 之前版本的本文件)。
|
||||
分支 `feat/disaggregated`;代码头 `3cc4e1ec`(2026-09-18,P5e wave 2 + fix1 + ID-110;P5d 收官头 `1f8de61b`,P5c 收官头 `b88e8487`)。本文随每次落地更新。ID-1..75 的逐条裁定长文在 git 历史(`ef35ea0c` 之前版本的本文件)。
|
||||
|
||||
## 1. 阶段状态
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
| **P5b** inproc 下的 verb 迁移(Minecraft 优先) | **已收官(2026-09-16)** | `37fc4fdb..82683d4a`;`MEASUREMENTS.md` §7 |
|
||||
| **P5c** `inproc` 共享内存读点归零 | **已收官(2026-09-17)** | `11ac3de6..b88e8487` + triage 修复;契约 `MobileGL/MG_Remote/CONTRACT-P5C.md`;审计 `~/w7/notes/p5c/p5c-audit-v1.md` |
|
||||
| **P5d** `inproc` 性能专项 | **已收官(2026-09-18,三轮)** | `cb06538c`、`56a77348`、`1f8de61b`;报告 [`P5D-INPROC-PERFORMANCE.md`](P5D-INPROC-PERFORMANCE.md);`MEASUREMENTS.md` §9 |
|
||||
| **P5e** 退役 Espryt draw path 的 lockstep | **进行中** | 契约 `MobileGL/MG_Remote/CONTRACT-P5E.md`(c0e 落地);计划 `~/w7/notes/p5e/BRIEF-P5E.md`、裁定 `~/w7/notes/p5e/INTEGRATOR-DECISIONS-P5E.md`(ID-80..98);包序 c0e → id → {vi, sb, pg, tx2, fb} ∥ ra,集成 commit 翻 `kMGPipeP5eRunAheadReady` |
|
||||
| **P5e** 退役 Espryt draw path 的 lockstep | **进行中** | 契约 `MobileGL/MG_Remote/CONTRACT-P5E.md`(c0e 落地);计划 `~/w7/notes/p5e/BRIEF-P5E.md`、裁定 `~/w7/notes/p5e/INTEGRATOR-DECISIONS-P5E.md`(ID-80..98);包序 c0e → id → {vi, sb, pg, tx2, fb} ∥ ra,集成 commit 翻 `kMGPipeP5eRunAheadReady`。**八包已全部落地合并**,当前头 `3cc4e1ec`,逐门数字与设备验证见 §2.5 |
|
||||
| P6 spawn transport | P5e 之后 | 届时只是传输替换 |
|
||||
|
||||
## 2. 当前头实测
|
||||
@@ -33,6 +33,42 @@
|
||||
| Redmi 四臂复测 | **未做**(E-P5c #5 是记录项;本机无设备,需 Redmi `2f7cbe2e` 窗口) |
|
||||
| 79 trace 普查 | **未重跑**(全集语料不在本机;本机可用语料的实测见 `rsp` 与 audit 行)。P5b 收官数字(72/6/1)仍以其头为准 |
|
||||
|
||||
## 2.5 P5e 当前进度(头 `3cc4e1ec`)
|
||||
|
||||
八包全部落地并合并:wave 1 = **c0e**(契约 + 线上行)+ **id**(身份按 `{slot, gen}` 重键),wave 2 = **vi / sb / pg / tx2 / fb** ∥ **ra**,集成提交 `44f91c74` 解了三处两包相接的 seam。**`kMGPipeP5eRunAheadReady` 与 `kMGPipeP5eClientWaitRuleLanded` 仍为 false**:翻转它们的门是 BRIEF-P5E §3(strict 车道转硬绿,只余 §7 白名单)与 §4(设备出口),前者尚未达成。裁定见 `~/w7/notes/p5e/INTEGRATOR-DECISIONS-P5E.md`(ID-80..110)。
|
||||
|
||||
### 设备验证发现的 monolith 回归与修复(ID-107 → fix1 `66621767` → ID-109 / ID-110 `3cc4e1ec`)
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| 症状 | `MOBILEGL_TRANSPORT=monolith` 下游戏启动即 SIGSEGV:`Lightmap.<init>` → `clearColorTexture` → `glClear` → `SyncCurrentFBO` → `SyncToBackend(前端 FBO)` → `SyncAttachmentSurface` → `SyncMipmapsToBackend(空 SharedPtr)` |
|
||||
| 根因 | fb 的 `SyncAttachmentSurface` 把**存储同步**指向 tx2 的 by-handle 座,后者传空 `SharedPtr` 并依赖记录臂被选中;而记录臂自身由 `Transport != Monolith` 选择(ID-81)。push 构建自 P4a 起**两条臂都由记录驱动附件**(`FramebufferSubsystemEnabled()` 单独门控,无传输测试),于是 monolith 臂走进了一个无法作答的座 |
|
||||
| 覆盖漏洞 | 结构性,而非"少写了一个用例":门禁跑 `unit` + `integration-split`,而 `integration-split` 的**每一条**都导出 `MOBILEGL_TRANSPORT=inproc`;凡是"清一个带纹理附件的 FBO"的场景又都在 `SetUp` 里按 `SplitRuntimeSkipReason` 自跳过——**push 构建的第二条运行时臂在门禁集合里一条条目都没有**。实测 `44f91c74` 上 `ctest -L integration-gpu` = **1157/1294,137 个 SEGFAULT、横跨 38 个 scenario**,全部是带纹理附件的 FBO 用例。回归从来不只在 Lightmap 一条路径上 |
|
||||
| 修复 `66621767` | (1) `SyncAttachmentSurface` 的存储同步按 `MG_Config::Transport` 选臂——monolith 臂拿回 `f6cfcbd3` 的前端同步,经一个**只用于存储同步**的 monolith 胶水指针(附件形状、空点测试、twin 认领两臂都仍归记录,N-6 的洞不重开);renderbuffer 半边同理,它的 by-handle 形丢掉了应用可见的 OOM `RecordError`。(2) 三个纹理同步体改用 `RefuseNullFrontendTextureOffTheHandleArm`:空前端对象落到无法作答的臂上是 `Fatal{RoleViolation, "texture-handle-arm"}` 具名中止,而不是空指针解引用;pull 构建里折成与修复前逐 token 相同的常量,不新增调用(D-P)。(3) 新增 `MonolithAttachmentClearScenario`(可变纹理 / 不可变纹理 / renderbuffer 三例,**断言像素而非"没崩"**——附件点未填的 clear 会静默抛 `GL_INVALID_FRAMEBUFFER_OPERATION`,那是同一缺陷的无声形态)与 `DirectGLES.PushMonolithArm.` 注册(ctest ENVIRONMENT 钉 `MOBILEGL_TRANSPORT=monolith`,挂 `integration-split` 标签) |
|
||||
| ID-109 | 标签保留(`integration-split` 指"门禁要跑的集合"而非"跑 inproc";ID-81 给 push 构建两条服务端臂,只有一条在集合里,"门禁全绿"就一直等于"两条里的一条全绿"),**并把 `integration-gpu` 升为集成分支的常设门禁步骤**(`p5e_gate.sh gpu`,-j 4 约 10 分钟),不下放到每个包 |
|
||||
| ID-110 | 新增 `MGB_TEXTURE_RECORD_ARM_SELECTED()`(`Transport != Monolith` 且 `TextureResourceSubsystemEnabled()`),把"记录臂被选中"这句话只说一次;`texBufferByRecord` 那处"靠链条安全"的座改为自述式传输测试。有传输时该合取项已被 `pushedStorage != nullptr` 蕴含,故行为不变、不关门 |
|
||||
|
||||
### 头 `3cc4e1ec` 的门(WSL `~/w7/p5e-int`,split flavour)
|
||||
|
||||
| 门 | 结果 |
|
||||
|---|---|
|
||||
| build | rc=0 |
|
||||
| unit | **2250/2250** |
|
||||
| `integration-split` | **116/116**(113 + 三条新的 monolith 臂条目) |
|
||||
| `integration-gpu`(ID-109 新增步) | **1294/1294**(修复前同机 1157/1294) |
|
||||
| 生成器 / 卫生门 | `gen_pipe`、`gen_pipe_field_ownership`、`gen_pipe_dirty_surface` 的 --check/--self-test 与 include 闭包共七项全 rc=0;doc 引用只余 `CONTRACT-P5.md:524` 的既有歧义行 |
|
||||
| `integration-split-strict` | **7/116**(预期红,与 fix1 的基线逐数相同;本阶段进度以其"具名标记集合"而非通过数衡量) |
|
||||
|
||||
### 设备验证(Redmi `2f7cbe2e`,FCL fordebug + Minecraft 26.3-rc-3 世界 "test",进世界后 60 s 采样)
|
||||
|
||||
| 臂 | 进世界 | fps | draws/帧 | 进程 | Fatal / crash buffer |
|
||||
|---|---|---|---|---|---|
|
||||
| monolith | 31 s | **263.5** | 845 | 存活 | 无 |
|
||||
| inproc | 31 s | **136.1** | 853 | 存活 | 无 |
|
||||
| inproc(复跑) | 32 s | **140.3** | 852 | 存活 | 无 |
|
||||
|
||||
两臂截图为同一视角同一世界,画面正确。monolith 这一次未被 120 Hz vsync 封顶(与 P5d 的 205.8 那次同类),故**不与 inproc 直接比大小**——本轮问的是"改完还能不能正常跑",不是配对性能。inproc 的 136-140 与 ID-107 记的 140.0 / 144.9 同档,说明 fix1 触到的那行(臂选择本身,两臂都读)没有拖慢 split 臂。库版本以符号探针确认(`texture-handle-arm` 等四个字符串在 APK 的 `lib/arm64-v8a/libMobileGL.so` 内),不看游戏内的 `GIT@` 戳记——增量构建下它是旧的。
|
||||
|
||||
## 3. P5c 落地内容
|
||||
|
||||
| 包 | 内容 | 效果 |
|
||||
|
||||
@@ -476,3 +476,35 @@ splitctl−push 全部在 ±1.6% 内(增量来自 inproc 传输与 barrier,
|
||||
|
||||
`wait[]` 计数(三轮加入 stats 行):审查前构建 inproc 30 s 窗口累计 srv=7.56M / srvpark=76k、cli=6.70M / clipark=17k;`SPIN_US=2000` 下 park 各降两个量级、fps 不变——park 已不是主项。持久映射线流量 pmap ≈ 0.36 MB/帧(二轮 0.23,三轮多了首推与脏页排空)。
|
||||
|
||||
## 10. P5e(wave 1 `f6cfcbd3` → wave 2 `44f91c74` → fix1 `66621767` → ID-110 `3cc4e1ec`)
|
||||
|
||||
P5e 尚未收官(`kMGPipeP5eRunAheadReady` 仍为 false),本节记的是**设备验证一轮**,问题是"八包合并后两条传输臂还能不能正常跑游戏",不是配对性能。
|
||||
|
||||
### 主机门(WSL `~/w7/p5e-int`,split flavour,头 `3cc4e1ec`)
|
||||
|
||||
| 门 | `44f91c74` | `3cc4e1ec` |
|
||||
|---|---|---|
|
||||
| unit | 2250/2250 | **2250/2250** |
|
||||
| `integration-split` | 113/113 | **116/116** |
|
||||
| `integration-gpu`(两条运行时臂,ID-109 起为常设步) | **1157/1294**(137 SEGFAULT / 38 scenario) | **1294/1294** |
|
||||
| `integration-split-strict` | 7/116 | 7/116(预期红) |
|
||||
|
||||
`integration-gpu` 那一列是本阶段最重要的一个数:`44f91c74` 的 137 个 SEGFAULT 在当时**没有任何门禁步骤会看到**——`integration-split` 的每一条都导出 `MOBILEGL_TRANSPORT=inproc`,而 push 构建有两条服务端臂。详见 `CURRENT_STAGE_PROGRESS.md` §2.5。
|
||||
|
||||
### 设备(Redmi `2f7cbe2e`,FCL fordebug + Minecraft 26.3-rc-3 世界 "test",VD12,DirectGLES;进世界后 60 s 采样)
|
||||
|
||||
| 臂 | 进世界 | fps | draws/帧 | 进程 | Fatal / crash buffer |
|
||||
|---|---|---|---|---|---|
|
||||
| monolith(`44f91c74`,修复前) | — | — | — | **65 s 后进程消失** | SIGSEGV,栈见 §2.5 |
|
||||
| monolith(`3cc4e1ec`) | 31 s | 263.5 | 845 | 存活 | 无 |
|
||||
| inproc(`3cc4e1ec`) | 31 s | 136.1 | 853 | 存活 | 无 |
|
||||
| inproc 复跑(`3cc4e1ec`) | 32 s | 140.3 | 852 | 存活 | 无 |
|
||||
|
||||
monolith 这一次未被 120 Hz vsync 封顶(与 §9 的 205.8 那次同类),两臂 fps 不可直接相比。inproc 的 136-140 与修复前记录的 140.0 / 144.9 同档:fix1 改的那行两臂都读,split 臂没有被拖慢。
|
||||
|
||||
### 测量纪律(本轮与上一轮踩到的坑,全部是污染而非代码问题)
|
||||
|
||||
- `adb install` 的收尾会在一两分钟后杀掉正在跑的同包进程(`am_kill … due to installPackageLI`):装包与测量之间必须等到 `dex2oat` 退出。
|
||||
- 派给外部 CLI 的任务,其进程会活过 harness 的完成通知;**派出后不得自己再跑同一件事**,否则两套实验同时对一台手机 force-stop / 清 logcat,得出假失败。
|
||||
- 不得在脚本正被 bash 执行时修改它(边读边执行);要改先冻结副本。
|
||||
- 游戏内 F3 的 `GIT@` 戳记在增量构建下是旧的,**判断库版本要看 APK 里 `.so` 的符号 / 字符串**,不看戳记。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# MGPipe 路线图
|
||||
|
||||
> 状态:**P0、P0.5、P1、P2、P3a、P4a、P5、P5b、P5c、P5d 已收官**(P5c:2026-09-17,代码头 `b88e8487`;P5d:三轮,2026-09-18,代码头 `1f8de61b`)。当前头、逐门数字、开放项与下一步见 **[`CURRENT_STAGE_PROGRESS.md`](CURRENT_STAGE_PROGRESS.md)**;设计见 `ARCHITECTURE.md`;逐阶段实测见 `MEASUREMENTS.md`;P5d 报告见 [`P5D-INPROC-PERFORMANCE.md`](P5D-INPROC-PERFORMANCE.md)。**当前在 P5e**(退役 Espryt draw path 的 lockstep,契约 `MobileGL/MG_Remote/CONTRACT-P5E.md`);之后才是 P6 spawn transport(此时只是传输替换)。
|
||||
> 状态:**P0、P0.5、P1、P2、P3a、P4a、P5、P5b、P5c、P5d 已收官**(P5c:2026-09-17,代码头 `b88e8487`;P5d:三轮,2026-09-18,代码头 `1f8de61b`)。当前头、逐门数字、开放项与下一步见 **[`CURRENT_STAGE_PROGRESS.md`](CURRENT_STAGE_PROGRESS.md)**;设计见 `ARCHITECTURE.md`;逐阶段实测见 `MEASUREMENTS.md`;P5d 报告见 [`P5D-INPROC-PERFORMANCE.md`](P5D-INPROC-PERFORMANCE.md)。**当前在 P5e**(退役 Espryt draw path 的 lockstep,契约 `MobileGL/MG_Remote/CONTRACT-P5E.md`;八包已全部落地合并,头 `3cc4e1ec`,逐门数字与设备验证见 `CURRENT_STAGE_PROGRESS.md` §2.5);之后才是 P6 spawn transport(此时只是传输替换)。
|
||||
|
||||
## 通用纪律(每个 commit)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
| **P5b** `inproc` verb migration | ✅ `37fc4fdb..82683d4a` | class-C 普查决定顺序;d1 19 / i1 7 / t2 6 / f1 11 槽迁移;sync 五槽;具名 blit;GLES mip descriptor;r1 / r2;收官审查三项修复。发射表 A=2 / B=54 / C=15 | 主机全门 `348d22a4` complete;`integration-split` 107/107;合并普查零回退、79 trace 72/6/1;**Redmi 正确性 8/8 + 四臂 A/B、barrier tax 首测**。§7 |
|
||||
| **P5c** `inproc` 共享内存读点归零 | ✅ `11ac3de6..b88e8487` | server 端纹理 staged shadow(`StagedTextureStore`,句柄为键、整段覆盖、defined-ness 追踪);`SEG_EVENT` 三个 producer + `kEventGlError`(反向通道零裸指针);sink / twin 按记录句柄解析(blit 具名臂经 verb 句柄工作区,Magma 走 G6 消费臂);`applier_reset` / `object_death` 控制记录(opcode 77/78,framebuffer 首个 wire delete);`set_context_values`(79)退役全部值类 BARRIER-PULLED 行,三 shutter 自答;双层 `Fatal{RoleViolation}` 守卫 + `InBarrierWait` 接线;两个具名豁免 scope(通告家族 P4b/P7、G6 registry 家族 P3b/P4b)承接未到期的债 | 角色守卫开启下 unit 2187/2187(strict 下同绿)、`integration-split` 111/111、每层守卫 red-once 按名变红;纹理 `0xDD` audit 在 bsl / complementary 两条 in-world trace 零 Fatal;rsp 按帧实测(bsl 948.5/帧,残留全为钉住的对象类 15 行);G1 三个认定 resize(SwapchainObject::Create / CopyTexSubImage2D / ScopedRestartIndexSubstitution,均已具名)+ `.text` −16 B、pull 构建零 MG_Remote 符号;G5 保护区字节一致;双生成器 --check/--self-test 绿 | P5b |
|
||||
| **P5d** `inproc` 性能专项 | ✅ `cb06538c`、`56a77348`、`1f8de61b` | 一二轮:persistent-map 推送三级臂(mprotect 脏页追踪 + 哈希抑制 + 绑定过滤 `PushDrawConsumers`)、barrier 批处理 `MOBILEGL_IPC_BATCH_WAITS` + 延期销毁队列、自旋时钟 64 合 1、零页注册 + shadow 页对齐分配。三轮(按符号化 profile 逐项切,四包 + 一份 lockstep 可行性研究):apply 空转轮询零锁(控制邮箱原子影子位)、`Doorbell::Wait` 校准自旋稳态不读时钟、wait/park 计数进 stats;`OnApplyThread()` 内联为线程指针比较、三个 scope 深度计数器退掉 `thread_local`;shadow 分配尺寸补页、追踪范围向外对齐、边块哈希消失、脏页排空修复;image unit 高水位、残余填充 memo、server stamp 常量表;`generate_mipmap` 不再免等(apply 读残余输入)、death 测试围栏 | 三轮设备(Redmi,CPU 定频):inproc **64.3 → 103-106 fps**(p50),client 线程 CPU 15.0 → 9.2 ms/帧、apply 12.4 → 7.0-7.4;monolith 同场景 115(120 Hz vsync 封顶的运行)/ 206(一次未封顶,渲染线程 5.0 ms/帧 大核);配对比较以逐线程 CPU/帧为主,见报告"数字"节;unit 2203/2203、`integration-split` 111/111(两条曾 flaky 的用例复跑 6/6);双生成器、include 闭包、dirty-surface、doc 引用绿。未完成:R-1 序列化(研究结论:留给 P3b/P4b 后的 P11 `gPipeInputs` 版本化)、线程放置(内核忽略亲和)、`SetHashSuppressor` 哈希等小项。报告:[`P5D-INPROC-PERFORMANCE.md`](P5D-INPROC-PERFORMANCE.md) | P5b |
|
||||
| **P5e** 退役 Espryt draw path 的 lockstep | 🚧 进行中 | 契约 `MG_Remote/CONTRACT-P5E.md`(规则 F:未设障记录的 apply 不得读任何 client 内存;19 条裁定见 §9)。八包:**c0e** 契约 + 线上行(`PipeCalls.def` 第五列 `WaitClass` + `MGPipeWaitClassFor`、`set_program_bindings` opcode 80 空路由、`kCapRunAheadApply` 位 10、`kDrawClientArrays`、子系统位 13、`MGPipeImageAccess` 一张表、两个旋钮、跨包 seam 声明)→ **id** 身份(registry 按 `{slot, gen}` 重键、by-handle resolver、分配器守卫)→ **vi / sb / pg / tx2 / fb** 五个 per-draw 家族并行(VAO / 缓冲绑定点 / program 归档 + 绑定 / 纹理 + sampler 窗口 / FBO + image)∥ **ra** 传输机制(等待规则 `EmitAndWaitTails`、present credit、`gPipeInputs` 变 server 角色内存、事件环流控)。集成 commit 翻 `kMGPipeP5eRunAheadReady` | 集成门(§3):unit 两臂绿;`integration-split` 111+ 绿 + inproc 普查零回退 + 79 trace 无新首阻塞;`integration-split-strict` 转**硬绿车道**(只允许 §7 白名单的 `[BARRIER-PULLED]` 标记,未设障记录 `rsp` = 0);三条阴性对照(`MOBILEGL_IPC_RUN_AHEAD=0` SSIM 一致、`VERB_BARRIER=0` 在设障行变红、Magma 上 `RUN_AHEAD=1` 记一条日志后跑 lockstep);每包 red-once 在集成树复跑;G1 0/0/0/0、G2、G14、G5;monolith push 四条 A/B trace SSIM 不变。设备出口(§4,Redmi 30 s 在世界窗口,四臂):fps ≥ lockstep、client 线程 CPU ms/帧 < lockstep、SSIM 不变,且逐 op 等待清单里**没有 `kWaitApplied` 行、没有逐 draw 的 reply 行** | P5d |
|
||||
| **P5e** 退役 Espryt draw path 的 lockstep | 🚧 进行中(八包全落地,头 `3cc4e1ec`) | 契约 `MG_Remote/CONTRACT-P5E.md`(规则 F:未设障记录的 apply 不得读任何 client 内存;19 条裁定见 §9)。八包:**c0e** 契约 + 线上行(`PipeCalls.def` 第五列 `WaitClass` + `MGPipeWaitClassFor`、`set_program_bindings` opcode 80 空路由、`kCapRunAheadApply` 位 10、`kDrawClientArrays`、子系统位 13、`MGPipeImageAccess` 一张表、两个旋钮、跨包 seam 声明)→ **id** 身份(registry 按 `{slot, gen}` 重键、by-handle resolver、分配器守卫)→ **vi / sb / pg / tx2 / fb** 五个 per-draw 家族并行(VAO / 缓冲绑定点 / program 归档 + 绑定 / 纹理 + sampler 窗口 / FBO + image)∥ **ra** 传输机制(等待规则 `EmitAndWaitTails`、present credit、`gPipeInputs` 变 server 角色内存、事件环流控)。集成 commit 翻 `kMGPipeP5eRunAheadReady` | 集成门(§3):unit 两臂绿;`integration-split` 111+ 绿 + inproc 普查零回退 + 79 trace 无新首阻塞;`integration-split-strict` 转**硬绿车道**(只允许 §7 白名单的 `[BARRIER-PULLED]` 标记,未设障记录 `rsp` = 0);三条阴性对照(`MOBILEGL_IPC_RUN_AHEAD=0` SSIM 一致、`VERB_BARRIER=0` 在设障行变红、Magma 上 `RUN_AHEAD=1` 记一条日志后跑 lockstep);每包 red-once 在集成树复跑;G1 0/0/0/0、G2、G14、G5;monolith push 四条 A/B trace SSIM 不变。设备出口(§4,Redmi 30 s 在世界窗口,四臂):fps ≥ lockstep、client 线程 CPU ms/帧 < lockstep、SSIM 不变,且逐 op 等待清单里**没有 `kWaitApplied` 行、没有逐 draw 的 reply 行** | P5d |
|
||||
| **P6** spawn transport | P5e 之后 | `SocketTransport`(socketpair + fork/execve,envp 剔除 + 强制 monolith 双保险);`ServerMain`;`MOBILEGL_IPC_SERVER_PATH` + `dladdr` 兜底;有界重试握手;EOF 即时退出;device-lost latch;EGL forwarder 的控制面帧;P5c 留下的 `s_synced` / `g_syncedRenderStateParameters` 按 context 世代重置 | P5b 的完整渲染路径在 `spawn` 下绿;进程树只多一个子进程;`HeadlessGL` fork 预检无孤儿;OpenRA 在 Adreno 830 上 split SSIM ≥ 0.99 |
|
||||
| **P3b / P4b** 深化(Espryt) | 待排 | 按存储属主键控的发射游标与 view 索引重映射;`g_fboTextureSyncList`;`ResolvedTextureBindingMemo` / `SamplerPassMemo` / image sweep / program registry 重键;XFB scatter 搬到 client;删 fragColor 重推导 workaround 与 `g_broadcastMemo*`;raw-depth-fetch sampler 原生化;回读 / pack state;P4a 记下的 R-3 / R-4 / R-5 / R-7 / R-10 / R-11;`ProgramArtifacts.h` 的 NDK 尺寸钉 | 纹理 / program 场景;CTS `texture_*` / `shader_image_*` / `packed_pixels` 在 0.5 pp 内;每一个 Iris trace;`TextureUploadShapeScenario` 升级成门 |
|
||||
| **P7** DirectVulkan(Magma)全量迁移 | 待排 | 其余 10 个子系统:`SetupDrawSnapshot` 探测字段塌成 dirty mask;占位纹理原生化;具名 UBO host payload(D-B8);内部 shader 烘焙;`VertexInputStateFactory` 内容寻址 CSO;D18 容器纪律保留 | 集成 + trace 在 Magma 的 push 与 split 下全绿;verify 零分歧;`nm -D libMobileGLServer.so \| grep glslang` 为空;CTS 0.5 pp 内。**再基线检查点:中点完成子系统 < 40% 立即重定基线** |
|
||||
|
||||
Reference in New Issue
Block a user