mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 00:22:57 -05:00
On Windows every direct host import leaves the write watch, and a storage image over it compares its whole surface with its guest-byte copy at every collect epoch. #4432 measured 7-8.6 s of every 10 s in those compares on a GTA V scene, with 98% of the compared surfaces unchanged. Tracker blocks that leave the watch now keep their write-watch marks as a hint. Leaving the watch gives a block a fresh hint stamp, and UntrackedHint walks a range of such blocks, at most once per collect epoch and thread, stamping the blocks whose pages a CPU store marked; it returns the newest stamp of the range. compareUntracked puts that stamp in its memo key in place of the collect epoch, so an image is compared again after a mark in its range, a driver store, a mapping change or a recorded GPU write. The byte compare still decides whether anything changed: a mark the driver makes without a CPU store costs one compare and drops nothing. Nothing else reads the hint. Collects, Watched, UnchangedSince, ChangedBlocks and NewestStamp still treat those blocks as untracked, and Linux is unchanged. agc_driver_dcc_keys_first_write refreshes an imported storage image over 50 collect epochs with no store: it compared the image 50 times before and 0 times now. A CPU store is still uploaded on the next refresh, and a store of the bytes already there costs one compare and keeps the pending results. agc_write_tracking checks the hint itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>