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:
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):
|
||||
|
||||
Reference in new issue
Block a user