diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
index be3b2f4a48..c8985cd45d 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
@@ -29,6 +29,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
RENDERER_DYNA_STATE("dyna_state"),
DMA_ACCURACY("dma_accuracy"),
+ FRAME_PACING_MODE("frame_pacing_mode"),
AUDIO_OUTPUT_ENGINE("output_engine"),
MAX_ANISOTROPY("max_anisotropy"),
THEME("theme"),
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
index 8bb618289e..0aecc0d253 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
@@ -641,6 +641,15 @@ abstract class SettingsItem(
valuesId = R.array.dmaAccuracyValues
)
)
+ put(
+ SingleChoiceSetting(
+ IntSetting.FRAME_PACING_MODE,
+ titleId = R.string.frame_pacing_mode,
+ descriptionId = R.string.frame_pacing_mode_description,
+ choicesId = R.array.framePacingModeNames,
+ valuesId = R.array.framePacingModeValues
+ )
+ )
put(
SwitchSetting(
BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS,
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
index 8135b6043c..cac0022edc 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -265,6 +265,7 @@ class SettingsFragmentPresenter(
add(IntSetting.RENDERER_ACCURACY.key)
add(IntSetting.DMA_ACCURACY.key)
+ add(IntSetting.FRAME_PACING_MODE.key)
add(IntSetting.MAX_ANISOTROPY.key)
add(IntSetting.RENDERER_VRAM_USAGE_MODE.key)
add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key)
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 69f1590844..1f45383a86 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -530,6 +530,19 @@
- 2
+
+ - @string/frame_pacing_mode_default
+ - @string/frame_pacing_mode_target_30
+ - @string/frame_pacing_mode_target_60
+ - @string/frame_pacing_mode_target_120
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+
+
- @string/applet_hle
- @string/applet_lle
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 97aa054e8a..99e225192f 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -473,6 +473,8 @@
Controls the GPU emulation mode. Most games render fine with Fast or Balanced modes, but Accurate is still required for some. Particles tend to only render correctly with Accurate mode.
DMA Accuracy
Controls the DMA precision accuracy. Safe precision can fix issues in some games, but it can also impact performance in some cases. If unsure, leave this on Default.
+ Frame Pacing Mode
+ Controls how the emulator manages frame pacing to reduce stuttering and make the frame rate smoother and more consistent.
Anisotropic filtering
Improves the quality of textures when viewed at oblique angles
VRAM Usage Mode
@@ -1023,6 +1025,12 @@
Unsafe
Safe
+
+ Default
+ 30 FPS
+ 60 FPS
+ 120 FPS
+
CPU
GPU