diff options
| author | 2022-10-15 00:48:28 -0700 | |
|---|---|---|
| committer | 2022-10-18 19:13:35 -0700 | |
| commit | 638fa6170a8a4c36ffa644055e683a7e50aa7ae5 (patch) | |
| tree | 42d24dd017358235db295b512d3be2228b9b95d5 /src/core/core_timing.cpp | |
| parent | core: core_timing: Remove unused IsHostTiming. (diff) | |
| download | yuzu-638fa6170a8a4c36ffa644055e683a7e50aa7ae5.tar.gz yuzu-638fa6170a8a4c36ffa644055e683a7e50aa7ae5.tar.xz yuzu-638fa6170a8a4c36ffa644055e683a7e50aa7ae5.zip | |
core: core_timing: Re-initialize if single/multicore state changes.
Diffstat (limited to 'src/core/core_timing.cpp')
| -rw-r--r-- | src/core/core_timing.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index 2afb2696c..0e7b5f943 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp | |||
| @@ -41,15 +41,7 @@ CoreTiming::CoreTiming() | |||
| 41 | : clock{Common::CreateBestMatchingClock(Hardware::BASE_CLOCK_RATE, Hardware::CNTFREQ)} {} | 41 | : clock{Common::CreateBestMatchingClock(Hardware::BASE_CLOCK_RATE, Hardware::CNTFREQ)} {} |
| 42 | 42 | ||
| 43 | CoreTiming::~CoreTiming() { | 43 | CoreTiming::~CoreTiming() { |
| 44 | paused = true; | 44 | Reset(); |
| 45 | shutting_down = true; | ||
| 46 | pause_event.Set(); | ||
| 47 | event.Set(); | ||
| 48 | if (timer_thread) { | ||
| 49 | timer_thread->join(); | ||
| 50 | } | ||
| 51 | timer_thread.reset(); | ||
| 52 | has_started = false; | ||
| 53 | } | 45 | } |
| 54 | 46 | ||
| 55 | void CoreTiming::ThreadEntry(CoreTiming& instance) { | 47 | void CoreTiming::ThreadEntry(CoreTiming& instance) { |
| @@ -63,6 +55,7 @@ void CoreTiming::ThreadEntry(CoreTiming& instance) { | |||
| 63 | } | 55 | } |
| 64 | 56 | ||
| 65 | void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { | 57 | void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { |
| 58 | Reset(); | ||
| 66 | on_thread_init = std::move(on_thread_init_); | 59 | on_thread_init = std::move(on_thread_init_); |
| 67 | event_fifo_id = 0; | 60 | event_fifo_id = 0; |
| 68 | shutting_down = false; | 61 | shutting_down = false; |
| @@ -304,6 +297,18 @@ void CoreTiming::ThreadLoop() { | |||
| 304 | } | 297 | } |
| 305 | } | 298 | } |
| 306 | 299 | ||
| 300 | void CoreTiming::Reset() { | ||
| 301 | paused = true; | ||
| 302 | shutting_down = true; | ||
| 303 | pause_event.Set(); | ||
| 304 | event.Set(); | ||
| 305 | if (timer_thread) { | ||
| 306 | timer_thread->join(); | ||
| 307 | } | ||
| 308 | timer_thread.reset(); | ||
| 309 | has_started = false; | ||
| 310 | } | ||
| 311 | |||
| 307 | std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const { | 312 | std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const { |
| 308 | if (is_multicore) { | 313 | if (is_multicore) { |
| 309 | return clock->GetTimeNS(); | 314 | return clock->GetTimeNS(); |