[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

This commit is contained in:
2026-09-11 14:31:46 -04:00
parent 142bf921d4
commit d9ade1e7cd
2 changed files with 17 additions and 4 deletions
+16 -3
View File
@@ -65,9 +65,22 @@
// payload, not resource bytes. // payload, not resource bytes.
// NOT covered: Magma builds no such array (it issues one vkCmdDraw* // NOT covered: Magma builds no such array (it issues one vkCmdDraw*
// per sub-draw), so this class is Espryt-only by construction. // 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 // persistent-map-push WIRED IN P5 (b1), and only a split build can ever move it. The one
// space donation (D4/D-B4) that survives the whole monolith track, // site is BufferObject::PushMappedSpanBlock, i.e. the client shipping
// so there is no push to count until the IPC track breaks it. // 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). // residual-value-block Placeholder, always 0 until P2 (plan section 6.3).
// //
// Call classes // Call classes
+1 -1
View File
@@ -108,7 +108,7 @@ python3 tools/trace_replay/run_android_retrace_local.py \
| `PipeInputs` 字段 | 63 | 计划写 61`GetBoundTransformFeedbackLifetimeId``HasOpenTransformFeedbackSpan` 是 D21 之后新增的读点 | | `PipeInputs` 字段 | 63 | 计划写 61`GetBoundTransformFeedbackLifetimeId``HasOpenTransformFeedbackSpan` 是 D21 之后新增的读点 |
| 后端调用的不同访问器 | 62Espryt 32、Magma 56 | `GetBoundTransformFeedbackName` 已无人读,留作已标注的死行 | | 后端调用的不同访问器 | 62Espryt 32、Magma 56 | `GetBoundTransformFeedbackName` 已无人读,留作已标注的死行 |
| 填充点 | 83 条 `MGP_FILL`,覆盖 69 个 verb、9 个类 | `MG_Pipe/FillPoints.def` | | 填充点 | 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 通道发现的两类真问题 ## 7. verify 通道发现的两类真问题