diff options
author | mpnico <mpnico@gmail.com> | 2021-09-11 22:08:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-11 22:08:25 +0200 |
commit | 117e32a6fffc30cdb895aa98483af7df353a8dd1 (patch) | |
tree | 3a6ad3b396bbf641663dada2419709837f7c8268 /Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs | |
parent | b0e410a828fd37bf0d9021fc2f6b630e3944a861 (diff) |
Implement a "Pause Emulation" option & hotkey (#2428)
* Add a "Pause Emulation" option and hotkey
Closes Ryujinx#1604
* Refactoring how pause is handled
* Applied suggested changes from review
* Applied suggested fixes
* Pass correct suspend type to threads for suspend/resume
* Fix NRE after stoping emulation
* Removing SimulateWakeUpMessage call after resuming emulation
* Skip suspending non game process
* Pause the tickCounter in the ExecutionContext
* Refactoring tickCounter pause/resume as suggested
* Fix Config migration to add pause hotkey
* Fixed pausing only application threads
* Fix exiting emulator while paused
* Avoid pause/resume while already paused/resumed
* Cleanup unused code
* Avoid restarting audio if stopping emulation while in pause.
* Added suggested changes
* Fix ConfigurationState
Diffstat (limited to 'Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs')
-rw-r--r-- | Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs b/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs index 13062ad1..77545b57 100644 --- a/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs +++ b/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs @@ -15,11 +15,13 @@ namespace Ryujinx.Audio.Backends.SDL2 public class SDL2HardwareDeviceDriver : IHardwareDeviceDriver { private readonly ManualResetEvent _updateRequiredEvent; + private readonly ManualResetEvent _pauseEvent; private readonly ConcurrentDictionary<SDL2HardwareDeviceSession, byte> _sessions; public SDL2HardwareDeviceDriver() { _updateRequiredEvent = new ManualResetEvent(false); + _pauseEvent = new ManualResetEvent(true); _sessions = new ConcurrentDictionary<SDL2HardwareDeviceSession, byte>(); SDL2Driver.Instance.Initialize(); @@ -44,6 +46,11 @@ namespace Ryujinx.Audio.Backends.SDL2 return _updateRequiredEvent; } + public ManualResetEvent GetPauseEvent() + { + return _pauseEvent; + } + public IHardwareDeviceSession OpenDeviceSession(Direction direction, IVirtualMemoryManager memoryManager, SampleFormat sampleFormat, uint sampleRate, uint channelCount) { if (channelCount == 0) @@ -136,6 +143,8 @@ namespace Ryujinx.Audio.Backends.SDL2 } SDL2Driver.Instance.Dispose(); + + _pauseEvent.Dispose(); } } |