System: Add OSD message when all enhancements are disabled

This commit is contained in:
Stenzek 2024-04-22 00:24:51 +10:00
parent b26a9556f7
commit a5613fc815
No known key found for this signature in database
3 changed files with 34 additions and 31 deletions

View file

@ -176,7 +176,12 @@ public:
ALWAYS_INLINE const char* end_ptr() const { return m_buffer + m_length; } ALWAYS_INLINE const char* end_ptr() const { return m_buffer + m_length; }
// STL adapters // STL adapters
ALWAYS_INLINE char& front() { return m_buffer[0]; }
ALWAYS_INLINE const char& front() const { return m_buffer[0]; }
ALWAYS_INLINE char& back() { return m_buffer[m_length - 1]; }
ALWAYS_INLINE const char& back() const { return m_buffer[m_length - 1]; }
ALWAYS_INLINE void push_back(value_type&& val) { append(val); } ALWAYS_INLINE void push_back(value_type&& val) { append(val); }
ALWAYS_INLINE void pop_back() { erase(-1); }
// returns a string view for this string // returns a string view for this string
std::string_view view() const; std::string_view view() const;

View file

@ -684,7 +684,6 @@ void Settings::FixIncompatibleSettings(bool display_osd_messages)
{ {
if (g_settings.disable_all_enhancements) if (g_settings.disable_all_enhancements)
{ {
Log_WarningPrintf("All enhancements disabled by config setting.");
g_settings.cpu_overclock_enable = false; g_settings.cpu_overclock_enable = false;
g_settings.cpu_overclock_active = false; g_settings.cpu_overclock_active = false;
g_settings.enable_8mb_ram = false; g_settings.enable_8mb_ram = false;
@ -712,7 +711,9 @@ void Settings::FixIncompatibleSettings(bool display_osd_messages)
if (g_settings.pcdrv_enable && g_settings.pcdrv_root.empty()) if (g_settings.pcdrv_enable && g_settings.pcdrv_root.empty())
{ {
Log_WarningPrintf("Disabling PCDrv because no root directory is specified."); Host::AddKeyedOSDMessage("pcdrv_disabled_no_root",
TRANSLATE_STR("OSDMessage", "Disabling PCDrv because no root directory is specified."),
Host::OSD_WARNING_DURATION);
g_settings.pcdrv_enable = false; g_settings.pcdrv_enable = false;
} }
@ -756,8 +757,9 @@ void Settings::FixIncompatibleSettings(bool display_osd_messages)
if (g_settings.IsRunaheadEnabled() && g_settings.rewind_enable) if (g_settings.IsRunaheadEnabled() && g_settings.rewind_enable)
{ {
Host::AddKeyedOSDMessage("rewind_disabled_android", Host::AddKeyedOSDMessage("rewind_disabled",
TRANSLATE_STR("OSDMessage", "Rewind is disabled because runahead is enabled."), 10.0f); TRANSLATE_STR("OSDMessage", "Rewind is disabled because runahead is enabled."),
Host::OSD_WARNING_DURATION);
g_settings.rewind_enable = false; g_settings.rewind_enable = false;
} }

View file

@ -110,7 +110,7 @@ static bool DoState(StateWrapper& sw, GPUTexture** host_texture, bool update_dis
static bool CreateGPU(GPURenderer renderer, bool is_switching); static bool CreateGPU(GPURenderer renderer, bool is_switching);
static bool SaveUndoLoadState(); static bool SaveUndoLoadState();
static void WarnAboutUnsafeSettings(); static void WarnAboutUnsafeSettings();
static void LogUnsafeSettingsToConsole(const std::string& messages); static void LogUnsafeSettingsToConsole(const SmallStringBase& messages);
/// Throttles the system, i.e. sleeps until it's time to execute the next frame. /// Throttles the system, i.e. sleeps until it's time to execute the next frame.
static void Throttle(Common::Timer::Value current_time); static void Throttle(Common::Timer::Value current_time);
@ -1017,9 +1017,9 @@ void System::ApplySettings(bool display_osd_messages)
if (IsValid()) if (IsValid())
{ {
WarnAboutUnsafeSettings();
ResetPerformanceCounters(); ResetPerformanceCounters();
if (s_system_executing) InterruptExecution();
s_system_interrupted = true;
} }
} }
@ -3952,13 +3952,8 @@ void System::CheckForSettingsChanges(const Settings& old_settings)
void System::WarnAboutUnsafeSettings() void System::WarnAboutUnsafeSettings()
{ {
std::string messages; LargeString messages;
auto append = [&messages](const char* icon, std::string_view msg) { auto append = [&messages](const char* icon, std::string_view msg) { messages.append_format("{} {}\n", icon, msg); };
messages += icon;
messages += ' ';
messages += msg;
messages += '\n';
};
if (g_settings.cpu_overclock_active) if (g_settings.cpu_overclock_active)
{ {
@ -3993,6 +3988,15 @@ void System::WarnAboutUnsafeSettings()
} }
if (g_settings.enable_8mb_ram) if (g_settings.enable_8mb_ram)
append(ICON_FA_MICROCHIP, TRANSLATE_SV("System", "8MB RAM is enabled, this may be incompatible with some games.")); append(ICON_FA_MICROCHIP, TRANSLATE_SV("System", "8MB RAM is enabled, this may be incompatible with some games."));
if (g_settings.disable_all_enhancements)
append(ICON_FA_COGS, TRANSLATE_SV("System", "All enhancements are currently disabled."));
if (s_cheat_list && s_cheat_list->GetEnabledCodeCount() > 0)
{
append(ICON_FA_EXCLAMATION_TRIANGLE,
fmt::format(TRANSLATE_FS("System", "{} cheats are enabled. This may crash games."),
s_cheat_list->GetEnabledCodeCount()));
}
if (!messages.empty()) if (!messages.empty())
{ {
@ -4000,7 +4004,7 @@ void System::WarnAboutUnsafeSettings()
messages.pop_back(); messages.pop_back();
LogUnsafeSettingsToConsole(messages); LogUnsafeSettingsToConsole(messages);
Host::AddKeyedOSDMessage("performance_settings_warning", std::move(messages), Host::OSD_WARNING_DURATION); Host::AddKeyedOSDMessage("performance_settings_warning", std::string(messages.view()), Host::OSD_WARNING_DURATION);
} }
else else
{ {
@ -4008,16 +4012,16 @@ void System::WarnAboutUnsafeSettings()
} }
} }
void System::LogUnsafeSettingsToConsole(const std::string& messages) void System::LogUnsafeSettingsToConsole(const SmallStringBase& messages)
{ {
// a not-great way of getting rid of the icons for the console message // a not-great way of getting rid of the icons for the console message
std::string console_messages = messages; LargeString console_messages = messages;
for (;;) for (;;)
{ {
const std::string::size_type pos = console_messages.find("\xef"); const s32 pos = console_messages.find("\xef");
if (pos != std::string::npos) if (pos >= 0)
{ {
console_messages.erase(pos, pos + 3); console_messages.erase(pos, 3);
console_messages.insert(pos, "[Unsafe Settings]"); console_messages.insert(pos, "[Unsafe Settings]");
} }
else else
@ -4025,7 +4029,7 @@ void System::LogUnsafeSettingsToConsole(const std::string& messages)
break; break;
} }
} }
Log_WarningPrint(console_messages.c_str()); Log_WarningPrint(console_messages);
} }
void System::CalculateRewindMemoryUsage(u32 num_saves, u32 resolution_scale, u64* ram_usage, u64* vram_usage) void System::CalculateRewindMemoryUsage(u32 num_saves, u32 resolution_scale, u64* ram_usage, u64* vram_usage)
@ -4679,19 +4683,11 @@ bool System::LoadCheatList()
std::unique_ptr<CheatList> cl = std::make_unique<CheatList>(); std::unique_ptr<CheatList> cl = std::make_unique<CheatList>();
if (!cl->LoadFromFile(filename.c_str(), CheatList::Format::Autodetect)) if (!cl->LoadFromFile(filename.c_str(), CheatList::Format::Autodetect))
{ {
Host::AddFormattedOSDMessage(15.0f, TRANSLATE("OSDMessage", "Failed to load cheats from '%s'."), filename.c_str()); Host::AddIconOSDMessage("cheats_loaded", ICON_FA_EXCLAMATION_TRIANGLE,
fmt::format(TRANSLATE_FS("OSDMessage", "Failed to load cheats from '{}'."), filename));
return false; return false;
} }
if (cl->GetEnabledCodeCount() > 0)
{
Host::AddIconOSDMessage(
"cheats_loaded", ICON_FA_EXCLAMATION_TRIANGLE,
fmt::format(TRANSLATE_FS("OSDMessage", "{} cheats are enabled. This may result in instability."),
cl->GetEnabledCodeCount()),
Host::OSD_WARNING_DURATION);
}
SetCheatList(std::move(cl)); SetCheatList(std::move(cl));
return true; return true;
} }