mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
`scripts/ci/fatal_census.py` scanned `MG_Remote/` and saw four abort sites. CONTRACT-P6
§12.1 already says what the server image is - "P6's server image is the whole
libMobileGL.so" - and the server process was executing seventy-nine more deaths the gate
could not see: 15 in DirectGLES.cpp, 12 in Managers.cpp, 11 in VkBufferManager.cpp, 7 in
PipeRoute.cpp. SCAN_ROOTS is now MG_Remote / MG_Pipe / MG_Backend / MG_Impl/Pipe /
MG_State, `.inc` joins `.cpp`/`.h` (the Magma wire arms and the generated wire records are
.inc files, and 20 sites are reachable only through one), and MG_Benchmark /
MG_IntegrationTest join MG_Test in the exclusion.
Four rules now, where there were two:
1. an abort names its family within twelve lines, OR it is argued into FUNNEL_FILES /
the new FUNNEL_SITES table. FUNNEL_SITES exempts an individual funnel inside a file
that has ordinary named deaths around it, and only when one of the file's anchors
appears in the same window - so the exemption follows the funnel if it moves, expires
if it is deleted, and does not cover an unrelated abort added to the same file. Two
entries, one line of reason each: PipeApply.cpp's MGP_TRIP_WIRE_REPORT and
PipeWire.inc's MGPipeWireProtocolFatal.
2. unchanged: a WireLogFatal / SessionFail call carries a `Fatal{` in its string.
3. NEW: every family word found in the perimeter has a row in FatalFamilies.def. Eleven
words did not, and now do (see below).
4. NEW: every `Refuse{Word}` names a RefuseCode enumerator. This is what catches
`Refuse{AuthenticationRequired}` (SocketTransport.cpp:161), a word protocol.fbs has
never had - PH-7 (2). Renamed to the enum's own `Authentication`, and
SocketTransportTest pins the spelling to `EnumNameRefuseCode` so the two cannot
drift again.
`abort_sites` was recorded and never compared. It is now a DOWNWARD ratchet with a
per-file map beside it, so "83 became 84" reports as "VkBufferManager.cpp went 11 -> 12,
here are its lines"; fewer sites - the direction `@P7` retirement moves the number - asks
for a re-baseline rather than blocking one.
Eleven new `.def` rows for the eleven rowless words. Ten are ProtocolCorruption for the
reason that bucket already states. ResourceUnavailable is ServerCrashed, not SegmentMismatch:
SegmentMismatch means a shared SEGMENT was the wrong size, and telling a peer that when a
VkBuffer allocation failed would be a lie about whose geometry was wrong. A twelfth word was
collapsed rather than given a row - `InitialBytesNotCarried` (PipeFill.cpp) said the same
thing as `UncarriedInitialBytes` (WireTables.cpp) about the same record, and two words for
one family is the drift a6 censused.
Red-once, four ways: an unnamed `std::abort()` appended under MG_State reds naming the file
and the line; deleting the `Fatal{` from PipeRoute.cpp's ResidualBlockSize reds; putting
`Refuse{AuthenticationRequired}` back reds rule 4; a typo'd family word reds rule 3 and the
vocabulary ratchet together.
76 lines
2.5 KiB
JSON
76 lines
2.5 KiB
JSON
{
|
|
"abort_sites": 83,
|
|
"abort_sites_by_file": {
|
|
"MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp": 15,
|
|
"MobileGL/MG_Backend/DirectGLES/Managers.cpp": 12,
|
|
"MobileGL/MG_Backend/DirectGLES/MultiDraw.cpp": 2,
|
|
"MobileGL/MG_Backend/DirectGLES/Utils.cpp": 1,
|
|
"MobileGL/MG_Backend/DirectVulkan/DirectVulkan.cpp": 2,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/MagmaPipeArms.h": 1,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/UniformManager.cpp": 1,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/VkBufferManager.cpp": 11,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/WireDraw.inc": 1,
|
|
"MobileGL/MG_Backend/DirectVulkan/Renderer/WireFramebuffer.inc": 1,
|
|
"MobileGL/MG_Backend/Init.cpp": 2,
|
|
"MobileGL/MG_Backend/MGPipe/PipeInputs.cpp": 3,
|
|
"MobileGL/MG_Impl/Pipe/PipeFill.cpp": 5,
|
|
"MobileGL/MG_Impl/Pipe/ResourceTracker.h": 5,
|
|
"MobileGL/MG_Impl/Pipe/SlotAllocator.cpp": 2,
|
|
"MobileGL/MG_Pipe/PipeApply.cpp": 3,
|
|
"MobileGL/MG_Pipe/PipeRoute.cpp": 7,
|
|
"MobileGL/MG_Pipe/generated/PipeFilled.inc": 1,
|
|
"MobileGL/MG_Pipe/generated/PipeWire.inc": 1,
|
|
"MobileGL/MG_Remote/FatalFunnel.cpp": 1,
|
|
"MobileGL/MG_Remote/Server/StagedShadow.h": 1,
|
|
"MobileGL/MG_Remote/Server/StagedTextureStore.h": 1,
|
|
"MobileGL/MG_Remote/Transport/WireLog.cpp": 1,
|
|
"MobileGL/MG_State/GLState/BufferState/BufferObject.cpp": 2,
|
|
"MobileGL/MG_State/GLState/TextureState/MipmapStorage.cpp": 1
|
|
},
|
|
"families": [
|
|
"ApplyThreadJoinTimeout",
|
|
"ApplyThreadNotRunning",
|
|
"ArchiveEmpty",
|
|
"ArtefactsMissing",
|
|
"BarrierTimeout",
|
|
"BarrierViolation",
|
|
"BlobMissing",
|
|
"ClientTablesUninstalled",
|
|
"ConsumerMaskLie",
|
|
"EventRingOverflow",
|
|
"NoClientSession",
|
|
"PipeLegacyMemosDisabled",
|
|
"PipeVerifyBadKnob",
|
|
"PipeVerifyDiffer",
|
|
"PresentCreditTimeout",
|
|
"ProtocolCorruption",
|
|
"ReadbackDeclined",
|
|
"ReadbackReplyShort",
|
|
"ReplyError",
|
|
"ReplyMismatched",
|
|
"ReplyMissing",
|
|
"ReplyOverrun",
|
|
"ReplyStatusInvalid",
|
|
"ReplyToNoSlot",
|
|
"ReplyTooLarge",
|
|
"ResidualBlockSize",
|
|
"ResourceUnavailable",
|
|
"RetirementWaitFailed",
|
|
"RingOverrun",
|
|
"RoleViolation",
|
|
"StageSnapshotTooNarrow",
|
|
"UncarriedInitialBytes",
|
|
"UnexpectedMapAccept",
|
|
"UnimplementedAdoptTier",
|
|
"UnimplementedClientSession",
|
|
"UnimplementedWritebackWait",
|
|
"UnmigratedEmulation",
|
|
"UnmigratedPipeInput",
|
|
"UnmigratedSurface",
|
|
"UnmigratedVerb",
|
|
"UnnamedIdentity",
|
|
"UnsetCallMask",
|
|
"UnsizedReadback"
|
|
]
|
|
}
|