From d9ade1e7cda7b5f35b4368e56929c98235380388 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Fri, 11 Sep 2026 14:31:46 -0400 Subject: [PATCH] [Feat, Docs] (PipeStats, MEASUREMENTS): wire persistent-map-push to the bytes the client ships, rewrite the inventory line that called it unwired, and correct the persistent-map census from 20 to 21 --- MobileGL/MG_Util/Metrics/PipeStats.cpp | 19 ++++++++++++++++--- docs/Disaggregated/MEASUREMENTS.md | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/MobileGL/MG_Util/Metrics/PipeStats.cpp b/MobileGL/MG_Util/Metrics/PipeStats.cpp index 92847bfd..8ccd08a5 100644 --- a/MobileGL/MG_Util/Metrics/PipeStats.cpp +++ b/MobileGL/MG_Util/Metrics/PipeStats.cpp @@ -65,9 +65,22 @@ // payload, not resource bytes. // NOT covered: Magma builds no such array (it issues one vkCmdDraw* // per sub-draw), so this class is Espryt-only by construction. -// persistent-map-push Not wired in P0: today a persistent map is a permanent address -// space donation (D4/D-B4) that survives the whole monolith track, -// so there is no push to count until the IPC track breaks it. +// persistent-map-push WIRED IN P5 (b1), and only a split build can ever move it. The one +// site is BufferObject::PushMappedSpanBlock, i.e. the client shipping +// one MOBILEGL_IPC_PERSISTENT_BLOCK_KB block of a persistently mapped +// span because MGPipeApplyMapPersistent declined the adoption (R-6, +// tier T2). Zero in every monolith build, and that zero is CORRECT +// rather than missing: a persistent map there is a permanent address +// space donation (D4/D-B4), the application writes straight into GPU +// memory, and there is no push to count. A split run where this stays +// 0 has NOT reached T2. +// Read it against map-persistent-roundtrips (mpr), which it is +// ANTI-CORRELATED with: mpr counts acquisition ATTEMPTS - one per +// storage definition, the same number in both modes - and this counts +// the bytes the client had to ship because the attempt was declined. +// NOT double-counted with stage-buffer: that class is what a BACKEND +// stages out of a shadow it owns, and it explicitly excludes bytes an +// app writes through a persistent map (see its entry above). // residual-value-block Placeholder, always 0 until P2 (plan section 6.3). // // Call classes diff --git a/docs/Disaggregated/MEASUREMENTS.md b/docs/Disaggregated/MEASUREMENTS.md index 4c752f5f..98d6ca78 100644 --- a/docs/Disaggregated/MEASUREMENTS.md +++ b/docs/Disaggregated/MEASUREMENTS.md @@ -108,7 +108,7 @@ python3 tools/trace_replay/run_android_retrace_local.py \ | `PipeInputs` 字段 | 63 | 计划写 61;`GetBoundTransformFeedbackLifetimeId`、`HasOpenTransformFeedbackSpan` 是 D21 之后新增的读点 | | 后端调用的不同访问器 | 62(Espryt 32、Magma 56) | `GetBoundTransformFeedbackName` 已无人读,留作已标注的死行 | | 填充点 | 83 条 `MGP_FILL`,覆盖 69 个 verb、9 个类 | `MG_Pipe/FillPoints.def` | -| `SyncPersistentMappedRange` / `SyncGpuWrites` | 20 / 6 | 与计划一致 | +| `SyncPersistentMappedRange` / `SyncGpuWrites` | **21** / 6 | P5 b1 复核:21 = Espryt 9 + Magma 12,不是 20。原来的 20 与 `Managers.cpp:5047-5048` 的"十一处 Espryt"都恰好少一行,少的是 `DirectGLES.cpp:361`(`ResolveIndirectCommandBytes`)——它是共享 helper 而不是 draw-path 站点,多半因此被排除,但一个能读到持久映射区间的 helper 与 draw 站点一样会读到陈旧字节。`ARCHITECTURE.md:290` 引的那张 §5.7 逐站点归属表**在树里不存在**。 | ## 7. verify 通道发现的两类真问题