mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 18:13:23 +09:00
5.5 KiB
5.5 KiB
P5f 阶段末跨模型族审查
实现方为 GPT 系列;审查通过本机 Claude Code 只读 CLI 执行,限定 Read/Glob/Grep、无 MCP,
没有修改文件或运行 shell。审查头 de78f47d,基线 e75e00cb。CLI 成功返回;模型记录含
claude-opus-5[1m] 与 claude-haiku-4-5,与实现方错开模型族。原始结果保存在
C:/Users/geekerwan/.codex/tmp/p5f-final-review-de78f47d/result.json。
原始审查结果
审查发现
P1 — 最终 dual-block“硬绿”门可在测试未完整执行时伪绿
-
位置
.github/workflows/test.yml:1387-1400MobileGL/MG_IntegrationTest/Harness/split_log_paths.py:138-160MobileGL/MG_IntegrationTest/CMakeLists.txt:2580-2601MobileGL/MG_IntegrationTest/Scenarios/F1WireScenario.cpp:99-103
-
触发条件
- 当前
dualblock-expected-fatals.txt为空; ctest因空选择、提前中断或基础设施错误返回非零;或者新加的某个DirectGLES/DirectVulkan.Split.P5fRsp.*用例因环境标记或 split runtime 不满足而 skip/未出现在 JUnit 中。
- 当前
-
失败路径
- workflow 用
|| rc=$?吞掉ctest的非零状态; - 随后仅在“
rc == 0且预期表非空”时失败。当前预期表为空,因此任何非零rc都不会直接使步骤失败; expect_fatal()只遍历 JUnit 中实际出现的 testcase,不把dualblock-lane.json的发现集合与 JUnit 集合比较;skip 被直接计数后忽略,缺失用例也完全不可见;- 最终空观测集合与空预期集合相等,helper 返回成功。
- 因而阶段出口要求的双后端逐帧
rsp=0用例可以没有实际执行,步骤仍打印硬绿。
- workflow 用
-
最小修复建议
- 当前阶段预期表为空时,无条件要求
rc == 0; - 在
expect_fatal()中比较 JSON 发现集合与 JUnit 集合,拒绝 missing、notrun、disabled;硬绿模式还应拒绝所有 skip; - 对
integration-p5f-rsp增加独立核验:必须恰好执行 DirectGLES、DirectVulkan 两条,2 PASS / 0 skip / 0 failed。
- 当前阶段预期表为空时,无条件要求
P2 — 三个反向回调没有投递给实际取得所有权的 ServerSession
-
位置
MobileGL/MG_Remote/Server/ServerSession.cpp:264-315- 对照正确的错误回调:
MobileGL/MG_Remote/Server/ServerSession.cpp:332-340 - active owner 发布点:
MobileGL/MG_Remote/Server/ServerSession.cpp:567-573
-
触发条件
- 首个成功
Accept()的对象不是ServerSessionInstance(),而是另一个合法的ServerSession实例; - 之后后端调用
OnBufferWriteback、OnGpuWritten或OnSurfaceChanged。
- 首个成功
-
失败路径
Accept()将实际 owner 发布到g_active,并把全局回调表安装为该 session 的生产者;- 但三个生产函数仍硬编码调用
ServerSessionInstance(),而不是ServerSession::Active(); - 事件因此写向未接受连接的 singleton,而非拥有 SEG_EVENT 的 session,通常在无效 event producer 上落入
Fatal{EventRingOverflow};即使 singleton 状态发生变化,也会投递到错误 session。 ServerOnGlError()已正确通过Active()解析 owner,四个回调的所有权语义目前不一致。g_sessionOwner对任意ServerSession*做 CAS,也说明所有权并未限定为 singleton。
-
最小修复建议
- 让三个生产函数与
ServerOnGlError()一样解析ServerSession::Active();没有 active owner 时给出具名RoleViolation; - 增加一个“非 singleton session 首先 Accept,四种回调均进入其 event ring”的测试。
- 让三个生产函数与
审查局限
本次严格保持只读,仅使用 Read/Glob/Grep;未运行构建、测试或设备门。因此未评价当前 pending validation 的通过与否,也未将其视为代码缺陷。除此之外,在指定的跨角色访问、上下文/XFB/raw sampler 生命周期、控制帧保真及 Magma record/resource 路径中,未发现其他具有充分代码依据的 P0/P1/P2 问题。
处置(均已完成)
- P1,结果集不完整可伪绿:
c42577a4给空表要求 ctest rc=0;对 JSON 发现全集与 JUnit 做非空、完整、一一对应核验;拒绝 missing/extra/duplicate/notrun/disabled。 对已执行的 green/skip 也扫描 marker,而非仅扫描 failed 条目。GLES 与 Magma 私有日志 所有权同样校验。新增独立integration-p5f-rsp硬门,必须恰两后端 2 PASS / 0 skip。 仅保留既有六个 skip,严格匹配名称和原因;不采用“所有 skip 都拒绝”,因为四个是专属 计数车道的普通/SmallRing sibling,另两个是已有 Magma clip-feature 限制。其他 skip 均红。 9 个结果核对回归测试全绿;旧 helper 对“缺一个 JUnit 条目”没有拒绝,控制真实失败为ValueError not raised,新 helper 通过。日志exit-review-gate-{red-once,green}.log。 - P2,非 singleton callback owner:
53699b5a让四种 producer 统一取Active(), 无 active owner 时均具名 RoleViolation。新增非 singleton 首先 Accept 后四事件落入其 ring 的生产测试,以及 Close 后缓存的四 callback 不可再投递测试。旧版真实 abort 于kEventGpuWritten的EventRingOverflow,修复后 11 项反向通道测试全绿;原 readback fixture 与握手也通过。日志fv-review-*.log。
两项均有实际红转绿证据,未把审查建议当作验证结果。修复后的最终 Android 库也重新部署, 六个 clean-boot 臂全部重新运行。没有留待 P6 的本次审查 P0/P1/P2 项。