test(job-manager): record worker wait reference divergence

This commit is contained in:
Felipebmaitan committed 2026-10-23 18:05:09 -03:00
1 parent a078f2a401
commit 31c4d801ea
2 files changed
+4 -2

No files matched your search

+2
View File
@@ -5,3 +5,5 @@
- [Compute sequences](../../../core/libs/prx/libSceJobManager/Export.cpp) use explicit release packets instead of native rewind and completion-packet patching across GPU barriers. The bounded command area throws when exhausted; the original traps. Maximum register lists and markers can exhaust it before the logical dispatch limit. Compute dispatch on a CPU sequence throws.
- [Scheduling](../../../core/libs/prx/libSceJobManager/Export.cpp) uses host mutexes and condition variables instead of native atomic queues and semaphores; spin intervals deliberately use unscaled host TSC. Blocks below 0x2d8 bytes, factory priorities above one, use of destroyed sequences and shutdown from a worker throw. New calls concurrent with shutdown are unverified.
- [Pool allocation](../../../core/libs/prx/libSceJobManager/Export.cpp) reuses freed nodes in a different order; profiler dispatch IDs can differ from native allocation. The fallback Wait deliberately allocates no pool node; native Wait can stall on global pool exhaustion. Resource-creation failures throw after cleanup, where the original does not check every return. Vtable order was checked, but no calling title or PS5 timing equivalence has been tested.
- Console behavior for [worker waits](../../../core/libs/prx/libSceJobManager/Export.cpp) is unverified. The owned original module stalls on the zero-spin, zero-persistence `worker_wait` fixture with native Windows and Linux host kernel services; the fallback wakes a spare worker and completes the child. The reference runner keeps this case selectable but excludes it from the shared-behavior parity suite.
+2 -2
View File
@@ -17,7 +17,7 @@ sys.path.insert(0, str(ROOT / "core/relinker/relinker/tests"))
from guest_import_fixtures import executable
CASES = ("memory", "owned_state", "concurrent_wait", "validation", "dispatch", "ordering", "nested", "limits", "node_pool", "priority", "shutdown", "worker_policy", "worker_wake", "worker_wait", "worker_count", "worker_spin")
PARITY_CASES = tuple(case for case in CASES if case != "node_pool")
PARITY_CASES = tuple(case for case in CASES if case not in ("node_pool", "worker_wait"))
def stage_libraries(directory, build, toolchain, dependencies):
@@ -122,7 +122,7 @@ def main():
parser.add_argument("--output", type=Path, help="New directory for staged modules, per-case logs and results.json; defaults to a temporary directory")
selection = parser.add_mutually_exclusive_group()
selection.add_argument("--cases", nargs="+", choices=CASES)
selection.add_argument("--suite", choices=("all", "parity"), help="all runs every case (default); parity excludes the known native node_pool Wait stall")
selection.add_argument("--suite", choices=("all", "parity"), help="all runs every case (default); parity excludes original-module node_pool and worker_wait stalls with host kernel services")
parser.add_argument("--timeout", type=float, default=20)
args = parser.parse_args()
if args.cases is None: