2.3 KiB
Test Runner Scheduling
Status: optional test-runner roadmap.
The stable baseline is metadata-first case registration, explicit skips, structured filters, JSON
output, process sharding, resource-aware shard policy, fixture setup timing, and shared fixtures for
selected low-risk lanes. Serial execution remains the default; --jobs N is explicit.
Shared Fixture Expansion
Migrate only low-risk cases into shared app/offscreen or shared GPU fixtures:
- clear-color tests;
- simple nonblank point, pixel, image, mesh, and sphere smokes;
- single-frame render-and-capture cases;
- cases independent of first-app construction semantics.
Keep isolated until audited:
- app creation and destruction;
- resize and recreate;
- descriptor refresh and resource lifetime;
- query/readback steady-state paths;
- failure-path and device-lost tests;
- GLFW, presentation, external surfaces, video, filesystem, environment, and log-capture tests.
Skip And Fixture Rules
Replace ad-hoc availability exits with explicit skip predicates or tst_skip(ctx, reason) when
tests are touched.
Setup code must:
- run skip predicates before allocation;
- clean up before returning skipped; or
- rely on runner-owned fixtures whose lifecycle is independent of per-case teardown.
Future Scheduling Work
- record resource capacities for CPU, GPU, GLFW, video, and exclusive/global resources;
- keep
TST_RES_GPUdistinct from shared GPU fixture eligibility; - add in-process workers only for explicitly
TST_ISOLATION_THREAD_SAFEtests; - keep Vulkan, GLFW, app, canvas, video, environment, and process-global tests out of thread workers until they have explicit contracts;
- preserve deterministic output and JSON summaries;
- include fixture scope, shard/worker index, slow groups, and setup-time amortization in reports.
Validation
Runner scheduling changes should cover:
git diff --check;- build every touched runner target;
--list,--list-groups, resource filters, isolation filters, exact filters, and--json;- representative CPU passes and graphics-unavailable skip paths;
- aggregate summaries matching child JSON records when sharding is involved.
Shared GPU fixture work should also capture timing before/after, keep the original isolated lane green, and run Vulkan validation smoke when ownership changes.