citra-qt: Add an "Alternative Speed Limit" with its hotkey (#5281)

* Change "Toggle Speed Limit" to toggle between 100% and a custom value

This will change the shortcut for "Toggle Speed Limit" to make it swap between 100% and the value of "Limit Speed Percent" in the config. Old functionality is still there, but renamed to "Unthrottle".

* Complete reimplementation of the function

* Fix something that didn't get saved correctly

* Fix missing indentation

* Rewrite to keep only a single QSpinBox

* Second rewrite

* set Unthrottled to 0 in the Qspinbox

* Hotkey for Unthrottle

* minor improvements to the design

* Apply suggestions from code review

Co-authored-by: Ben <bene_thomas@web.de>

* Default slider values

* clang-format fixes

* Prevent the speed slider from changing size

...when an element in its row has variable width.

* Change "Game Speed" to "Emulation Speed"

* Apply suggestions from code review

`game_speed` to` emulation_speed`

Co-authored-by: Valentin Vanelslande <vvanelslandedev@gmail.com>

* Fix for QSliders

* Revert "Prevent the speed slider from changing size"

This reverts commit ddaca2004484f1e024f49d2e6dc99ef5e261f64d.

* clang-format

...doesn't seem to stick to a choice

* Fix 2 for QSliders

Co-authored-by: B3n30 <benediktthomas@gmail.com>
Co-authored-by: Ben <bene_thomas@web.de>
Co-authored-by: Valentin Vanelslande <vvanelslandedev@gmail.com>
This commit is contained in:
SutandoTsukai181 2020-06-20 21:52:14 +03:00 committed by GitHub
parent 6d65319c85
commit 485d64ae73
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 259 additions and 61 deletions

View file

@ -133,13 +133,18 @@ void FrameLimiter::DoFrameLimiting(microseconds current_system_time_us) {
return;
}
if (!Settings::values.use_frame_limit) {
return;
}
auto now = Clock::now();
double sleep_scale = Settings::values.frame_limit / 100.0;
if (Settings::values.use_frame_limit_alternate) {
if (Settings::values.frame_limit_alternate == 0) {
return;
}
sleep_scale = Settings::values.frame_limit_alternate / 100.0;
} else if (Settings::values.frame_limit == 0) {
return;
}
// Max lag caused by slow frames. Shouldn't be more than the length of a frame at the current
// speed percent or it will clamp too much and prevent this from properly limiting to that
// percent. High values means it'll take longer after a slow frame to recover and start limiting

View file

@ -83,8 +83,9 @@ void LogSettings() {
LogSetting("Renderer_ShadersAccurateMul", Settings::values.shaders_accurate_mul);
LogSetting("Renderer_UseShaderJit", Settings::values.use_shader_jit);
LogSetting("Renderer_UseResolutionFactor", Settings::values.resolution_factor);
LogSetting("Renderer_UseFrameLimit", Settings::values.use_frame_limit);
LogSetting("Renderer_FrameLimit", Settings::values.frame_limit);
LogSetting("Renderer_UseFrameLimitAlternate", Settings::values.use_frame_limit_alternate);
LogSetting("Renderer_FrameLimitAlternate", Settings::values.frame_limit_alternate);
LogSetting("Renderer_PostProcessingShader", Settings::values.pp_shader_name);
LogSetting("Renderer_FilterMode", Settings::values.filter_mode);
LogSetting("Renderer_TextureFilterName", Settings::values.texture_filter_name);

View file

@ -155,8 +155,9 @@ struct Values {
bool shaders_accurate_mul;
bool use_shader_jit;
u16 resolution_factor;
bool use_frame_limit;
bool use_frame_limit_alternate;
u16 frame_limit;
u16 frame_limit_alternate;
std::string texture_filter_name;
LayoutOption layout_option;

View file

@ -165,9 +165,11 @@ void TelemetrySession::AddInitialInfo(Loader::AppLoader& app_loader) {
AddField(Telemetry::FieldType::UserConfig, "Core_UseCpuJit", Settings::values.use_cpu_jit);
AddField(Telemetry::FieldType::UserConfig, "Renderer_ResolutionFactor",
Settings::values.resolution_factor);
AddField(Telemetry::FieldType::UserConfig, "Renderer_UseFrameLimit",
Settings::values.use_frame_limit);
AddField(Telemetry::FieldType::UserConfig, "Renderer_FrameLimit", Settings::values.frame_limit);
AddField(Telemetry::FieldType::UserConfig, "Renderer_UseFrameLimitAlternate",
Settings::values.use_frame_limit_alternate);
AddField(Telemetry::FieldType::UserConfig, "Renderer_FrameLimitAlternate",
Settings::values.frame_limit_alternate);
AddField(Telemetry::FieldType::UserConfig, "Renderer_UseHwRenderer",
Settings::values.use_hw_renderer);
AddField(Telemetry::FieldType::UserConfig, "Renderer_UseHwShader",