Repository navigation
fix(libScePlayGo): answer chunk ids from the package layout - #4491
Conversation
7dc9a56 to
b4b9674
Compare
b4b9674 to
71a81cf
Compare
|
256 is a guess, and a constant tuned to end one title's loop can't go in: the answer has to follow from the package, or throw. Your own suggestion on #3238 does that, so please use it instead:
Please say which |
|
Thanks, agreed: the answer should follow from the package, not from a constant. I will change the PR to your two rules. Facts for the
Planned rule (not yet implemented, will follow after your OK):
Open point: a dump with
AI-assisted (Claude Code). |
71a81cf to
a96ce03
Compare
|
Updated as discussed: the chunk set now follows the package layout (the three rules from the comment above) instead of the 256 constant, with one test process per layout and the debt entry in AI-assisted (Claude Code). |
|
Rules 1 and 2 are as agreed. Rule 3 is wider than agreed:
|
A package with no playgo-* file in sce_sys has no PlayGo data, so only chunk 0 is valid and any other id returns SCE_PLAYGO_ERROR_BAD_CHUNK_ID. A package with playgo-scenario.json but no chunk table (PPSA01748) keeps accepting every id. A chunk table (playgo-chunk.dat or playgo-chunkdefs.xml) still decides when it exists. A sce_sys that holds other playgo-* files without a chunk table or a scenario file, or a playgo-chunk.dat that is not a plgx table with a nonzero count, throws naming the file, since no such dump is known. Without this a title that walks the ids until the first error (Sifu PPSA03001) never gets the error. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
a96ce03 to
51c7206
Compare
|
Thanks, both points are done in the new head.
AI-assisted (Claude Code). |
|
PPSA03001 run on the new head, as asked (Windows 10,
AI-assisted (Claude Code). |
|
@oneandonlydean the PPSA03001 run you asked for is in my comment above (libraries built from this head): the title no longer stops at the out-of-memory message and now stops later at a GPU message; it does not show which chunk ids the title asks for. Since your last reviews I corrected two source statements in my PRs (the Could you have a look when it suits you? No hurry. Thank you for the careful reviews. AI-assisted (Claude Code). |
…ithout PlayGo metadata Since boykopovar#5494 a dump with no playgo-chunk.dat and no playgo-scenario.json throws on the first nonzero chunk id. High on Life (PPSA15388) asks scePlayGoGetLocus about ids 0-999 at startup and now aborts on id 1; Sifu (PPSA03001) walks ids until the first error (boykopovar#4491). APS5_PLAYGO_UNLISTED_CHUNKS=installed reports such ids as installed and =absent returns SCE_PLAYGO_ERROR_BAD_CHUNK_ID. Without it the stop stays, and its message now names the setting. Any other value throws. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ithout PlayGo metadata Since boykopovar#5494 a dump with no playgo-chunk.dat and no playgo-scenario.json throws on the first nonzero chunk id. High on Life (PPSA15388) asks scePlayGoGetLocus about ids 0-999 at startup and now aborts on id 1; Sifu (PPSA03001) walks ids until the first error (boykopovar#4491). APS5_PLAYGO_UNLISTED_CHUNKS=installed reports such ids as installed and =absent returns SCE_PLAYGO_ERROR_BAD_CHUNK_ID. Without it the stop stays, and its message now names the setting. Any other value throws. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ithout PlayGo metadata Since boykopovar#5494 a dump with no playgo-chunk.dat and no playgo-scenario.json throws on the first nonzero chunk id. High on Life (PPSA15388) asks scePlayGoGetLocus about ids 0-999 at startup and now aborts on id 1; Sifu (PPSA03001) walks ids until the first error (boykopovar#4491). APS5_PLAYGO_UNLISTED_CHUNKS=installed reports such ids as installed and =absent returns SCE_PLAYGO_ERROR_BAD_CHUNK_ID. Without it the stop stays, and its message now names the setting. Any other value throws. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What
Without
playgo-chunkdefs.xmlorsce_sys/playgo-chunk.datevery chunk id was accepted by the PlayGo chunk checks (scePlayGoGetLocus,GetEta,GetProgress,Prefetch,SetToDoList). A title that walks the ids one call at a time until the first error then never stops: Sifu (PPSA03001), whose dump has no PlayGo file, calledscePlayGoGetLocuswith one ever increasing id per call at least 250 million times in 100 s (temporary counter, not part of this change); its own allocator then failed to grow a 16-byte-element array to about 348 million entries (Ran out of memory allocating 5565054976 bytes with alignment 65536) and the title trapped inlibc.prx. Demon Slayer (PPSA03490) and Returnal (PPSA01285) show the same title message and trap and their dumps have no PlayGo file either (observation, not shown to be caused by PlayGo for those two).The chunk set now follows the package layout instead of a constant (review on this PR):
playgo-chunkdefs.xmlor a validplaygo-chunk.dat: unchanged.sce_sys/playgo-scenario.jsonpresent (Guardians of the Galaxy PPSA01748, fix(libScePlayGo): accept chunk ids when the dump has no chunk definitions #3238; no chunk list in the dump): every id is accepted and reported installed, as before.sce_syshas noplaygo-*file at all (PPSA03001, PPSA03490, PPSA01285): only chunk 0 is valid, any other id returnsSCE_PLAYGO_ERROR_BAD_CHUNK_ID. This is where Sifu's enumeration ended after two calls (id 0, then id 1) before fix(libScePlayGo): accept chunk ids when the dump has no chunk definitions #3238 accepted every id (measured on Sifu (PPSA03001): RenderThread faults popping a free list whose head reads 0xFFFFFFFFFFFFFFFF #3209).sce_syswith otherplaygo-*files (playgo-ficm.dat,playgo-hash-table.dat) but neitherplaygo-chunk.datnorplaygo-scenario.json, or aplaygo-chunk.datwithout aplgxheader or with a zero count: throws, naming the file (no such dump is known, so no answer is guessed).Rule 3 is recorded in
docs/dev/debt/libScePlayGo.mdas unverified on a console.scePlayGoGetChunkIdstill lists only chunk 0 in rules 2 and 3.Tested
Windows 10, WinLibs GCC 15.2, Release,
-j2, onmain4bb2c7f39plus this commit (54ba59b92, before the rebase; the code of the PlayGo files is identical in the current head51c7206fd, rebased ontomain8299b2f7e;libusb-cmakefrom a local checkout).git merge-treeof the current head51c7206fdagainstmain068ab2aba(13 October) is clean. The rebased head itself was not rebuilt.guest_playgopasses (3 of 3 runs). Each layout runs in its own empty root: noplaygo-*file, chunk table, scenario file next to a chunk table, scenario file only,playgo-ficm.datonly,playgo-hash-table.datonly and an unreadableplaygo-chunk.dat(the last three expect the throw with the file name).Export.cppas onmainthe test fails; with the previous rule 3 (a96ce03cb) the three throw cases fail.python tools/check_conventions.py --base upstream/mainpasses.BAD_CHUNK_IDline in the log; the run ended after about 109 s with a GPU message (storage image access to depth/stencil surface ... is not implemented) andabort()(details in the comment on this PR). Not tested: the chunk ids the title asks for (no PlayGo trace in the libraries); Demon Slayer (PPSA03490) and Returnal (PPSA01285) with this change; Guardians of the Galaxy (PPSA01748, layout taken from the check on fix(libScePlayGo): accept chunk ids when the dump has no chunk definitions #3238); Linux.Checklist
main068ab2aba(git merge-tree, 13 October); no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repositoryAI-assisted (Claude Code).
🤖 Generated with Claude Code