From 1667998b4ef1bb941a05c2492d7c31a25cc1a8c1 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sat, 20 Sep 2025 11:12:54 +0200 Subject: [PATCH] SDL: call SDL_PumpEvents from main thread --- rpcs3/Input/sdl_instance.cpp | 16 +++++++++++++++- rpcs3/Input/sdl_instance.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/rpcs3/Input/sdl_instance.cpp b/rpcs3/Input/sdl_instance.cpp index 879333b513..7310cf5f8c 100644 --- a/rpcs3/Input/sdl_instance.cpp +++ b/rpcs3/Input/sdl_instance.cpp @@ -3,6 +3,8 @@ #include "stdafx.h" #include "sdl_instance.h" #include "Emu/System.h" +#include "Emu/system_config.h" +#include "Emu/Cell/timers.hpp" #ifndef _MSC_VER #pragma GCC diagnostic push @@ -37,7 +39,19 @@ void sdl_instance::pump_events() if (m_initialized) { - SDL_PumpEvents(); + const u64 sleep_us = std::clamp(g_cfg.io.pad_sleep.get(), 1000, 16000); // 1ms to 16ms + + if ((get_system_time() - m_last_pump_us) < sleep_us) + { + return; + } + + Emu.CallFromMainThread([this]() + { + if (!m_initialized) return; + SDL_PumpEvents(); + m_last_pump_us = get_system_time(); + }, nullptr, false); } } diff --git a/rpcs3/Input/sdl_instance.h b/rpcs3/Input/sdl_instance.h index 23fc1b6d59..79f7ad207a 100644 --- a/rpcs3/Input/sdl_instance.h +++ b/rpcs3/Input/sdl_instance.h @@ -21,6 +21,7 @@ private: bool m_initialized = false; std::mutex m_instance_mutex; + atomic_t m_last_pump_us {0}; }; #endif