feat(bench): automate B7 shader profiles, wire B12b trials, settle 45s

- gen_shader_profiles.py + shader-profiles/: Iris per-pack option files
  resolved from each pack's profile.* lines (Iris has no profile key)
- bench.py: flag rows shader_not_loaded when Iris falls back to vanilla
  rendering (analyze.py treats it as invalid)
- matrix: shader_options session key, trial jar globs pinned to the
  downloaded Modrinth builds, post-join settle 45 s (B0 v1 showed rep 1
  still warming at 10 s)
This commit is contained in:
logan committed 2026-10-16 23:34:52 -04:00
1 parent a15c912ad0
commit 4fa9a6ab81
13 files changed
+552 -31

No files matched your search

@@ -238,7 +238,69 @@ class Commands(Fixture):
def test_seconds(self):
b3 = matrix.expand(self.m, matrix.block_map(self.m)["B3"])
self.assertEqual(matrix.session_seconds(b3[0], 60), 60 + 3 * 45 + 3 * 130)
self.assertEqual(matrix.session_seconds(b3[0], 60), 60 + 10 + 3 * 45 + 3 * 130)
class ShaderOptions(Fixture):
def b7(self, **extra):
d = tomllib.loads(MINI.format(tmp=self.tmp))
sess = {"variant": "C1", "plan": "s1,s4", "shader": "Pack.zip",
"shader_profile": "low", "tag": "p-low", **extra}
d["block"].append({"id": "B7", "rule": "shaders", "sessions": [sess]})
return d
def test_emitted(self):
f = self.tmp / "Pack.low.txt"
f.write_text("A=1\n")
d = self.b7(shader_options=str(f))
self.assertEqual(matrix.validate(d, self.out), [])
s = matrix.expand(d, matrix.block_map(d)["B7"])[0]
argv, miss = matrix.bench_argv(d, s)
self.assertEqual(miss, [])
self.assertEqual(argv[argv.index("--shader") + 1], "Pack.zip")
self.assertEqual(argv[argv.index("--shader-options") + 1], str(f))
self.assertIn("--shader-options", matrix.BENCH_SESSION_FLAGS)
def test_missing_file_and_relative_path(self):
d = self.b7(shader_options="shader-profiles/does-not-exist.txt")
s = matrix.expand(d, matrix.block_map(d)["B7"])[0]
argv, miss = matrix.bench_argv(d, s)
self.assertEqual(argv[argv.index("--shader-options") + 1],
str(matrix.HERE / "shader-profiles/does-not-exist.txt"))
self.assertTrue(any("shader options" in x for x in miss))
def test_needs_shader(self):
d = self.b7(shader_options="x.txt", shader="off")
self.assertIn("shader_options needs shader", "\n".join(matrix.validate(d, self.out)))
def test_spec_hash_tracks_file_content(self):
f = self.tmp / "Pack.low.txt"
f.write_text("A=1\n")
d = self.b7(shader_options=str(f))
s = matrix.expand(d, matrix.block_map(d)["B7"])[0]
argv, _ = matrix.bench_argv(d, s)
h1 = matrix.spec_hash(argv, s)
f.write_text("A=2\n")
self.assertNotEqual(h1, matrix.spec_hash(argv, s))
# sessions without shader_options keep the original hash formula (resume state)
b0 = matrix.expand(self.m, matrix.block_map(self.m)["B0"])[0]
a0, _ = matrix.bench_argv(self.m, b0)
blob = json.dumps({"argv": a0, "manual": False}, sort_keys=True)
import hashlib
self.assertEqual(matrix.spec_hash(a0, b0),
hashlib.sha256(blob.encode()).hexdigest()[:16])
def test_real_b7_automated(self):
m = matrix.load()
rows = matrix.expand(m, matrix.block_map(m)["B7"])
shaded = [s for s in rows if s["shader"] != "off"]
self.assertEqual(len(shaded), 4)
for s in rows:
self.assertFalse(s.get("manual"), s["label"])
for s in shaded:
argv, miss = matrix.bench_argv(m, s)
self.assertEqual([x for x in miss if "shader options" in x], [], s["label"])
self.assertTrue(Path(argv[argv.index("--shader-options") + 1]).is_file())
class Resume(Fixture):