diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2022-07-15 02:41:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-15 02:41:29 +0200 |
commit | 9627c550a0c4403813af23d6bdf5348aef0d08d7 (patch) | |
tree | df0f702a3777a500dc09bdbb136f339b6c6ca0a7 | |
parent | Merge pull request #8559 from liamwhite/waiter-list (diff) | |
parent | input_common: sdl: lower vibration frequency and use it's own unique thread (diff) | |
download | yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.tar yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.tar.gz yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.tar.bz2 yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.tar.lz yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.tar.xz yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.tar.zst yuzu-9627c550a0c4403813af23d6bdf5348aef0d08d7.zip |
-rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 4 | ||||
-rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 10 | ||||
-rw-r--r-- | src/input_common/drivers/sdl_driver.h | 1 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index aa7189bda..3c28dee76 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -838,11 +838,11 @@ bool Controller_NPad::VibrateControllerAtIndex(Core::HID::NpadIdType npad_id, const auto now = steady_clock::now(); - // Filter out non-zero vibrations that are within 10ms of each other. + // Filter out non-zero vibrations that are within 15ms of each other. if ((vibration_value.low_amplitude != 0.0f || vibration_value.high_amplitude != 0.0f) && duration_cast<milliseconds>( now - controller.vibration[device_index].last_vibration_timepoint) < - milliseconds(10)) { + milliseconds(15)) { return false; } diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index 446c027d3..00474ac77 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -438,10 +438,17 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en using namespace std::chrono_literals; while (initialized) { SDL_PumpEvents(); - SendVibrations(); std::this_thread::sleep_for(1ms); } }); + vibration_thread = std::thread([this] { + Common::SetCurrentThreadName("yuzu:input:SDL_Vibration"); + using namespace std::chrono_literals; + while (initialized) { + SendVibrations(); + std::this_thread::sleep_for(10ms); + } + }); } // Because the events for joystick connection happens before we have our event watcher added, we // can just open all the joysticks right here @@ -457,6 +464,7 @@ SDLDriver::~SDLDriver() { initialized = false; if (start_thread) { poll_thread.join(); + vibration_thread.join(); SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); } } diff --git a/src/input_common/drivers/sdl_driver.h b/src/input_common/drivers/sdl_driver.h index 0846fbb50..7dc7a93c7 100644 --- a/src/input_common/drivers/sdl_driver.h +++ b/src/input_common/drivers/sdl_driver.h @@ -128,5 +128,6 @@ private: std::atomic<bool> initialized = false; std::thread poll_thread; + std::thread vibration_thread; }; } // namespace InputCommon |