Fixes an off-by-one error in checkpoint restores during replay playback#18259
Closed
JoeOsborn wants to merge 2 commits intolibretro:masterfrom
Closed
Fixes an off-by-one error in checkpoint restores during replay playback#18259JoeOsborn wants to merge 2 commits intolibretro:masterfrom
JoeOsborn wants to merge 2 commits intolibretro:masterfrom
Conversation
I had to fix this so I could use address sanitizer + gdb to debug a different problem.
The issue was that when recording, the recorded checkpoint incorporates the current frame's inputs. But when playing back, the checkpoint was deserialized *before* the current frame was simulated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The issue was that when recording, the recorded checkpoint incorporates the current frame's inputs. But when playing back, the checkpoint was deserialized before the current frame was simulated. The fix was to serialize the current frame at the beginning of the frame, before inputs were applied, during recording. An alternative fix would be to defer deserializing the frame until after the next frame is simulated, but that seemed more complicated. A frame (including checkpoint) now means "the inputs of frame K and, if a checkpoint, the state as of the beginning of frame K".
If the maintainers would prefer that a replay checkpoint means "The inputs of frame K and the state as of the end of frame K" I could make that change instead.
Either solution should account for the "jank" I experienced in some cores which were particularly sensitive to the offset.
The change in msgqueue is an unrelated fix that I needed so I could run GDB without erroring out on a use-after-free.