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

2.1 KiB

libSceJobManager technical debt

Functional

  • sce::Job::JobManager submits every compute dispatch with its own label write and interrupt, while the original batches label writes and rewinds commands encoded ahead. Command buffers and labels live on the host heap; labels outside a GPU import force the driver to drain recorded work before each write. Completion labels are written as 32 bits; wrap behavior is unverified. The per-queue command-size formula uses fixed builder sizes of 104, 148 and 32 bytes per dispatch, sync point and wait.
  • The manager keeps its state on the host heap rather than in the caller's block, apart from the block header. Blocks smaller than 0x2d8 bytes throw. Worker parking uses a host condition variable and mutex rather than the original semaphore and atomic queues; console scheduling and spin timing have not been measured.
  • 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 original's final import (BG26hBGiNlw, unresolved). 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 and Windows reference runner disagree: the runner times out in the node-pool exhaustion fixture against the PPSA06888 module with the host kernel; the fallback returns SequenceInvalid and recycles its nodes. The cause remains unverified. Original-module execution on Linux and console timing equivalence are not covered by this runner.