Files
AnyPS5/docs/dev/debt/libSceJobManager.md
T

2.6 KiB

libSceJobManager technical debt

Functional

  • sce::Job::JobManager submits commands as work becomes runnable rather than encoding ahead with the rewind protocol recovered from PPSA06888's module (offsets 0x2210 and 0x2650). Commands are recycled after a completed wait. Command capacity is a separate bound from the dispatch count: the native size query measures one register and a 31-character marker, then its exhaustion callback at 0x29d0 traps instead of growing storage. The fallback throws. Original-module execution with the host AGC builders accepts two dispatches with 255 registers and 65,535-character markers, then traps on a third. Console timing equivalence remains unverified.
  • The manager keeps scheduling state and nodes on the host heap; only the header, compute commands and completion labels occupy the caller's block. Blocks smaller than 0x2d8 bytes throw. Worker parking uses host mutexes and condition variables instead of native atomic queues and semaphores; console scheduling and spin timing are unverified. Spin intervals use unscaled host TSC, while the original module reads scaled guest TSC under the host-only APS5_TIME_SCALE diagnostic.
  • Sequence and manager operations throw on a compute dispatch on a CPU sequence, a failing sceAgcDriverAddEqEvent, a factory priority above 1, and use of a destroyed sequence. shutdown throws while compute work is in flight or a caller is blocked in a sequence wait. Worker creation and attribute failures throw where the original does not check.
  • initialize returns 0 instead of the result of the final object-registration import (BG26hBGiNlw, _sceUlobjmgrRegisterObject). The sceRazorCpuJobManager* profiler calls are not made. Sequence and factory virtual-function order is recovered from module vtables; no calling title has been run.
  • The fallback differs from the owned module under host kernel services. Native Wait can stall allocating from an exhausted global node pool; the fallback deliberately needs no Wait node and recycles nodes. The owned module also stalls in the zero-spin, zero-persistence worker_wait fixture on Windows and Linux, while the fallback wakes a spare worker and completes the child. Console behavior for these cases is unverified. The reference runner on this branch supports Windows only; failures remain failures, and Linux runner support follows in #10272.