Skip to content

Stop PCSX2's duplicate frame setting from halving the framerate - #5

Open
Zulux91 wants to merge 1 commit into
ARMSX2:masterfrom
Zulux91:pr/skip-duplicate-frames-halved-fps
Open

Stop PCSX2's duplicate frame setting from halving the framerate#5
Zulux91 wants to merge 1 commit into
ARMSX2:masterfrom
Zulux91:pr/skip-duplicate-frames-halved-fps

Conversation

@Zulux91

@Zulux91 Zulux91 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

SkipDuplicateFrames in PCSX2 means "do not present a frame identical to the last one". It is harmless there and on by default, which is why Settings defaults it to true. RPCS3 has no equivalent, and the bridge mapped it onto Enable Frame Skip, which means something completely different: drop one frame in every two, unconditionally.

So every game presented at half the rate the guest asked for, on a fresh install, with nothing touched. It also made the frameskip row in the in-game menu useless, because applyToInner pushes the explicit frameskip first and this key afterwards, so this one always won no matter what you picked.

Measured on Mirror's Edge, which asks for 30 flips a second. SurfaceFlinger was presenting 15.0 fps, one frame every 66.65 ms, rock steady. The RSX thread reported 0-5% load with six of eight cores idle, which is what sent me looking for a performance problem that was never there. With the mapping gone it sits at 30.0 fps, 33.32 ms.

Dropped rather than remapped. Frameskip belongs to the explicit control, which is the one the user actually set.

SkipDuplicateFrames in PCSX2 means "do not present a frame identical to the
last one". It is harmless there and on by default, which is why Settings
defaults it to true. RPCS3 has no equivalent, and the bridge mapped it onto
Enable Frame Skip, which means something completely different: drop one frame
in every two, unconditionally.

So every game presented at half the rate the guest asked for, on a fresh
install, with nothing touched. It also made the frameskip row in the in-game
menu useless, because applyToInner pushes the explicit frameskip first and this
key afterwards, so this one always won no matter what you picked.

Measured on Mirror's Edge, which asks for 30 flips a second. SurfaceFlinger was
presenting 15.0 fps, one frame every 66.65 ms, rock steady. The RSX thread
reported 0-5% load with six of eight cores idle, which is what sent me looking
for a performance problem that was never there. With the mapping gone it sits
at 30.0 fps, 33.32 ms.

Dropped rather than remapped. Frameskip belongs to the explicit control, which
is the one the user actually set.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant