mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[CI] (P13 W5 S4): the latch-site map follows the record verbs into RecordVerbSink.cpp.
This commit is contained in:
@@ -1152,7 +1152,7 @@ namespace {
|
||||
}},
|
||||
// P8-F: ProtocolCorruption, no longer UnmigratedVerb - our client cannot send this shape
|
||||
// (nor +CLIENT_INDICES, the same site), so only a foreign peer like this one reaches it.
|
||||
{"MultiDrawInstanced", "PipeApplier.cpp", "MultiDraw*+INSTANCED", Outcome::Latched,
|
||||
{"MultiDrawInstanced", "RecordVerbSink.cpp", "MultiDraw*+INSTANCED", Outcome::Latched,
|
||||
"Fatal{ProtocolCorruption, \"MultiDrawArrays+INSTANCED\"}", false,
|
||||
[](Client::ClientSession& c, PeerReport& r) {
|
||||
P::MGPDrawInfo info{};
|
||||
@@ -1165,7 +1165,7 @@ namespace {
|
||||
std::memcpy(tail.data(), ranges, sizeof(ranges));
|
||||
return Forge(c, r, P::MGPWireOp::DrawVbo, Bytes(info), {tail});
|
||||
}},
|
||||
{"UnitWindowSamplerViews", "PipeApplier.cpp", "SetSamplerViews.Count (unit window)", Outcome::Latched,
|
||||
{"UnitWindowSamplerViews", "RecordVerbSink.cpp", "SetSamplerViews.Count (unit window)", Outcome::Latched,
|
||||
"Fatal{ProtocolCorruption, \"SetSamplerViews.Count\"} - draw_vbo applies", false,
|
||||
[](Client::ClientSession& c, PeerReport& r) {
|
||||
P::MGPContextValues values{};
|
||||
@@ -1185,7 +1185,7 @@ namespace {
|
||||
const P::MGPDrawRange range{0, 3, 0};
|
||||
return Forge(c, r, P::MGPWireOp::DrawVbo, Bytes(info), {Bytes(range)});
|
||||
}},
|
||||
{"UnitWindowSamplerStates", "PipeApplier.cpp", "BindSamplerStates.Count (unit window)", Outcome::Latched,
|
||||
{"UnitWindowSamplerStates", "RecordVerbSink.cpp", "BindSamplerStates.Count (unit window)", Outcome::Latched,
|
||||
"Fatal{ProtocolCorruption, \"BindSamplerStates.Count\"} - draw_vbo applies", false,
|
||||
[](Client::ClientSession& c, PeerReport& r) {
|
||||
P::MGPContextValues values{};
|
||||
@@ -1248,7 +1248,7 @@ namespace {
|
||||
// P9 (CONTRACT-P9.md §1): the pack-buffer readbacks. Each sink has ONE shape site, fed by
|
||||
// every check (box, extent, PH-3 bound, Src.DstSize, the layout), so one row per sink
|
||||
// covers them; the texture sink's unreadable-level site is the third.
|
||||
{"ReadPixelsToBufferShape", "PipeApplier.cpp", "ReadPixelsToBuffer.shape", Outcome::Latched,
|
||||
{"ReadPixelsToBufferShape", "RecordVerbSink.cpp", "ReadPixelsToBuffer.shape", Outcome::Latched,
|
||||
"Fatal{ProtocolCorruption, \"ReadPixelsToBuffer.shape\"} the read box or its format is invalid", false,
|
||||
[](Client::ClientSession& c, PeerReport& r) {
|
||||
P::MGPReadbackToBuffer rec{};
|
||||
@@ -1259,7 +1259,7 @@ namespace {
|
||||
rec.RowStride = 16;
|
||||
return Forge(c, r, P::MGPWireOp::ReadPixelsToBuffer, Bytes(rec));
|
||||
}},
|
||||
{"GetTextureImageToBufferShape", "PipeApplier.cpp", "GetTextureImageToBuffer.shape", Outcome::Latched,
|
||||
{"GetTextureImageToBufferShape", "RecordVerbSink.cpp", "GetTextureImageToBuffer.shape", Outcome::Latched,
|
||||
"Fatal{ProtocolCorruption, \"GetTextureImageToBuffer.shape\"} the image extent is not a whole level's", false,
|
||||
[](Client::ClientSession& c, PeerReport& r) {
|
||||
P::MGPReadbackToBuffer rec{};
|
||||
@@ -1275,7 +1275,7 @@ namespace {
|
||||
// A well-shaped record naming a texture the server never created: the level cannot be
|
||||
// read, and with no reply to answer ERROR in, the session latches under the reply form's
|
||||
// family word.
|
||||
{"GetTextureImageToBufferUnreadable", "PipeApplier.cpp", "GetTextureImageToBuffer", Outcome::Latched,
|
||||
{"GetTextureImageToBufferUnreadable", "RecordVerbSink.cpp", "GetTextureImageToBuffer", Outcome::Latched,
|
||||
"Fatal{ReplyError, \"GetTextureImageToBuffer\"}", true,
|
||||
[](Client::ClientSession& c, PeerReport& r) {
|
||||
P::MGPReadbackToBuffer rec{};
|
||||
|
||||
@@ -38,6 +38,8 @@ TEST = ROOT / "MobileGL" / "MG_Test" / "Wire" / "PeerLatchTest.cpp"
|
||||
FILES = {
|
||||
"PipeWireCodec.cpp": ROOT / "MobileGL" / "MG_Remote" / "Wire" / "PipeWireCodec.cpp",
|
||||
"PipeApplier.cpp": ROOT / "MobileGL" / "MG_Remote" / "Server" / "PipeApplier.cpp",
|
||||
# P13 W5: the record verbs ServerVerbSink applied moved to their own consumer, with their latches.
|
||||
"RecordVerbSink.cpp": ROOT / "MobileGL" / "MG_Backend" / "Record" / "RecordVerbSink.cpp",
|
||||
"ServerLoop.cpp": ROOT / "MobileGL" / "MG_Remote" / "Server" / "ServerLoop.cpp",
|
||||
"SurfaceOpCodec.cpp": ROOT / "MobileGL" / "MG_Remote" / "Protocol" / "SurfaceOpCodec.cpp",
|
||||
}
|
||||
@@ -75,7 +77,7 @@ UNREACHABLE = [
|
||||
"peer's bytes; ServerLoopTest's lost-window case is its negative control"),
|
||||
# P9 (CONTRACT-P9.md §1): the pack-buffer read's decline. The reply form's twin answers
|
||||
# DECLINED for the same case and has no row either.
|
||||
("PipeApplier.cpp", 'Fatal{ReadbackDeclined, "ReadPixelsToBuffer"}',
|
||||
("RecordVerbSink.cpp", 'Fatal{ReadbackDeclined, "ReadPixelsToBuffer"}',
|
||||
"both server backends install GL.ReadPixels; no record bytes can take the slot away, so the "
|
||||
"arm exists only for a backend that never had one"),
|
||||
]
|
||||
@@ -154,7 +156,8 @@ def print_mechanics():
|
||||
", ".join(f"`{case_suite(f, c)}.{c}` ({f})" for f, c in cases) + " |")
|
||||
|
||||
|
||||
LATCH_CALL = re.compile(r"(?<![A-Za-z0-9_])(SessionLatch|WireProtocolLatchAt|WireProtocolLatch)\s*\(")
|
||||
# P13 W5: MGPipeRecordLatch is SessionLatch through the record arm's seam (MG_Pipe/PipeSessionFail.h).
|
||||
LATCH_CALL = re.compile(r"(?<![A-Za-z0-9_])(SessionLatch|MGPipeRecordLatch|WireProtocolLatchAt|WireProtocolLatch)\s*\(")
|
||||
STRING = re.compile(r'"((?:[^"\\]|\\.)*)"')
|
||||
CONVERSION = re.compile(r"%[-+ #0-9.]*(?:hh|h|ll|l|z|j|t)?[diouxXcsp]")
|
||||
|
||||
@@ -282,7 +285,7 @@ def latch_sites():
|
||||
if re.search(r"\bBool\s+WireProtocolLatch(At)?\s*\(", previous):
|
||||
continue # the SessionLatch inside the helper: its callers are the sites
|
||||
args = string_args(call_text(lines, index, match.start()))
|
||||
if match.group(1) == "SessionLatch":
|
||||
if match.group(1) in ("SessionLatch", "MGPipeRecordLatch"):
|
||||
fmt = next((a for a in args[1:] if a is not None), None)
|
||||
elif match.group(1) == "WireProtocolLatch":
|
||||
fmt = None if args[0] is None else (
|
||||
|
||||
Reference in New Issue
Block a user