mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-09 20:58:31 +09:00
[Test] (Retrace): make a retrace under MOBILEGL_PIPE_VERIFY prove it armed, and give the lane a label
- A retrace that exports MOBILEGL_PIPE_VERIFY=1 at a library configured without
-DMOBILEGL_PIPE_VERIFY=ON is a no-op: the frames still match their goldens and the
case reports green having compared nothing. run_trace_case.cmake now demands the
evidence whenever the variable is set to anything but 0/false - mobilegl.log must
exist, must carry "MGPipe: verify armed", and must carry neither
Fatal{PipeVerifyDiffer nor Fatal{UnmigratedPipeInput. With the variable unset the
script is byte-for-byte the old one.
- The Fatal scan is not redundant with the replay's exit status:
MOBILEGL_PIPE_VERIFY_FATAL=0 is the supported triage configuration, and there a
divergence is logged and counted rather than aborted, so the run would finish 0
with its own report sitting unread in the log.
- LABELS retrace on both registrations: the lane was selectable only by regex, so
`ctest -L retrace --no-tests=error` - the spelling that reds a lane which
registered nothing - could not be written at all.
- "verify": true on eight cases (the five 180s cases plus minecraft-1.21.4-in-world,
minecraft-1.21.4-fabric-sodium-in-world and improved-transparency-minecraft-26.3),
and --format github-verify-matrix over that subset: 16 entries, against the full
lane's 77. The verify build compares at every verb boundary and again at every
accessor read, which the design budgets at 5-10x, so the per-push job runs the
subset and the full sweep is a phase-exit / workflow_dispatch run.
- The flag is validated in the manifest loader, not at the matrix, so a non-boolean
or a verify case excluded from CI is a loud error in every consumer instead of a
subset that is quietly one case short.
This commit is contained in:
@@ -26,6 +26,16 @@ def load_trace_case_manifest(path=TRACE_CASES_JSON):
|
||||
for key in ("trace_archive", "trace_file", "golden", "target_call", "width", "height"):
|
||||
if key not in merged:
|
||||
raise ValueError(f"{key} is required for {name}")
|
||||
# "verify" opts a case into the MOBILEGL_PIPE_VERIFY retrace subset. It is checked here
|
||||
# rather than where the matrix is built so that a typo is a loud manifest error in every
|
||||
# consumer (the cmake emitter included) instead of a subset that is quietly one case short.
|
||||
verify = merged.get("verify", False)
|
||||
if not isinstance(verify, bool):
|
||||
raise ValueError(f"verify must be true or false for {name}")
|
||||
if verify and not merged.get("ci", True):
|
||||
raise ValueError(
|
||||
f"{name} is marked verify but excluded from CI, so the verify matrix would drop it"
|
||||
)
|
||||
cases.append(merged)
|
||||
return {"defaults": defaults, "cases": cases}
|
||||
|
||||
@@ -72,6 +82,16 @@ def ci_trace_cases(cases):
|
||||
return [case for case in cases if case.get("ci", True)]
|
||||
|
||||
|
||||
def verify_trace_cases(cases):
|
||||
"""The subset the third CI mode retraces.
|
||||
|
||||
The verify build compares two state models at every verb boundary and again at every accessor
|
||||
read, which the design budgets at 5-10x, so the per-push lane runs a named subset and the full
|
||||
79-case sweep happens at the phase exit and on workflow_dispatch.
|
||||
"""
|
||||
return [case for case in cases if case.get("verify", False)]
|
||||
|
||||
|
||||
def ci_backends(case):
|
||||
backends = case.get("ci_backends")
|
||||
if backends is None:
|
||||
@@ -98,6 +118,10 @@ def github_test_matrix(cases):
|
||||
}
|
||||
|
||||
|
||||
def github_verify_matrix(cases):
|
||||
return github_test_matrix(verify_trace_cases(cases))
|
||||
|
||||
|
||||
def github_apk_matrix(cases):
|
||||
backends = {
|
||||
"DirectGLES": {"name": "DirectGLES", "gpu": "software"},
|
||||
@@ -158,6 +182,7 @@ def parse_args():
|
||||
choices=(
|
||||
"names",
|
||||
"github-test-matrix",
|
||||
"github-verify-matrix",
|
||||
"github-apk",
|
||||
"github-apk-matrix",
|
||||
"fixture-files",
|
||||
@@ -177,6 +202,8 @@ def main():
|
||||
print(json.dumps([case["name"] for case in cases], separators=(",", ":")))
|
||||
elif args.format == "github-test-matrix":
|
||||
print(json.dumps(github_test_matrix(cases), separators=(",", ":")))
|
||||
elif args.format == "github-verify-matrix":
|
||||
print(json.dumps(github_verify_matrix(cases), separators=(",", ":")))
|
||||
elif args.format == "github-apk":
|
||||
print(json.dumps([github_apk_case(case) for case in cases], separators=(",", ":")))
|
||||
elif args.format == "github-apk-matrix":
|
||||
|
||||
Reference in New Issue
Block a user