mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-08-31 17:55:23 +02:00
FixedSizeQueue::DoState serializes the entire fixed backing store. For the sceAudio channel queues that is 512KB per channel (32768*8 s16 samples), or ~4.6MB of mostly dead bytes in every savestate across the nine channels - the live sample count at any moment is normally a few KB. This addresses the existing TODO in DoState. Add DoStateCompact(), which stores only the live [head, head+count) region and restores it linearized at the front of storage. A wrapped live region is written as its two pieces in pop order; since the POD DoArray path writes raw bytes with no per-element or per-call header, the single linear read on load consumes them identically. The count is validated on load and a bad value fails the load cleanly via p.SetError. AudioChannel bumps its section to v3 to use the compact form; old states still load through the unchanged full-storage path. This shrinks every savestate by several MB uncompressed and cuts the copy/compress cost of each save, including the rewind feature's periodic states.