diff options
| author | 2020-02-25 12:28:55 -0400 | |
|---|---|---|
| committer | 2020-06-27 11:35:10 -0400 | |
| commit | 18dcb0934217628711c5b1d22fd6d7635e683e3f (patch) | |
| tree | 426f78eb11aa79e0d1c7470b966fbae8ea8e3e6d /src/core | |
| parent | AudioCore: Use nanoseconds instead of cycles for buffer time. (diff) | |
| download | yuzu-18dcb0934217628711c5b1d22fd6d7635e683e3f.tar.gz yuzu-18dcb0934217628711c5b1d22fd6d7635e683e3f.tar.xz yuzu-18dcb0934217628711c5b1d22fd6d7635e683e3f.zip | |
HostTiming: Pause the hardware clock on pause.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/core.cpp | 2 | ||||
| -rw-r--r-- | src/core/core_timing.cpp | 6 | ||||
| -rw-r--r-- | src/core/core_timing.h | 1 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index e8936b09d..1d6179a80 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -137,8 +137,8 @@ struct System::Impl { | |||
| 137 | ResultStatus Pause() { | 137 | ResultStatus Pause() { |
| 138 | status = ResultStatus::Success; | 138 | status = ResultStatus::Success; |
| 139 | 139 | ||
| 140 | kernel.Suspend(true); | ||
| 141 | core_timing.SyncPause(true); | 140 | core_timing.SyncPause(true); |
| 141 | kernel.Suspend(true); | ||
| 142 | cpu_manager.Pause(true); | 142 | cpu_manager.Pause(true); |
| 143 | 143 | ||
| 144 | return status; | 144 | return status; |
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index cc32a853b..5a7abcfca 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp | |||
| @@ -77,6 +77,9 @@ void CoreTiming::SyncPause(bool is_paused) { | |||
| 77 | return; | 77 | return; |
| 78 | } | 78 | } |
| 79 | Pause(is_paused); | 79 | Pause(is_paused); |
| 80 | if (!is_paused) { | ||
| 81 | pause_event.Set(); | ||
| 82 | } | ||
| 80 | event.Set(); | 83 | event.Set(); |
| 81 | while (paused_set != is_paused) | 84 | while (paused_set != is_paused) |
| 82 | ; | 85 | ; |
| @@ -197,6 +200,9 @@ void CoreTiming::ThreadLoop() { | |||
| 197 | wait_set = false; | 200 | wait_set = false; |
| 198 | } | 201 | } |
| 199 | paused_set = true; | 202 | paused_set = true; |
| 203 | clock->Pause(true); | ||
| 204 | pause_event.Wait(); | ||
| 205 | clock->Pause(false); | ||
| 200 | } | 206 | } |
| 201 | } | 207 | } |
| 202 | 208 | ||
diff --git a/src/core/core_timing.h b/src/core/core_timing.h index 707c8ef0c..c70b605c8 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h | |||
| @@ -136,6 +136,7 @@ private: | |||
| 136 | 136 | ||
| 137 | std::shared_ptr<EventType> ev_lost; | 137 | std::shared_ptr<EventType> ev_lost; |
| 138 | Common::Event event{}; | 138 | Common::Event event{}; |
| 139 | Common::Event pause_event{}; | ||
| 139 | Common::SpinLock basic_lock{}; | 140 | Common::SpinLock basic_lock{}; |
| 140 | Common::SpinLock advance_lock{}; | 141 | Common::SpinLock advance_lock{}; |
| 141 | std::unique_ptr<std::thread> timer_thread; | 142 | std::unique_ptr<std::thread> timer_thread; |