summaryrefslogtreecommitdiff
path: root/src/core/core_timing.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2022-10-15 00:48:28 -0700
committerGravatar bunnei2022-10-18 19:13:35 -0700
commit638fa6170a8a4c36ffa644055e683a7e50aa7ae5 (patch)
tree42d24dd017358235db295b512d3be2228b9b95d5 /src/core/core_timing.cpp
parentcore: core_timing: Remove unused IsHostTiming. (diff)
downloadyuzu-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.cpp23
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
43CoreTiming::~CoreTiming() { 43CoreTiming::~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
55void CoreTiming::ThreadEntry(CoreTiming& instance) { 47void CoreTiming::ThreadEntry(CoreTiming& instance) {
@@ -63,6 +55,7 @@ void CoreTiming::ThreadEntry(CoreTiming& instance) {
63} 55}
64 56
65void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { 57void 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
300void 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
307std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const { 312std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const {
308 if (is_multicore) { 313 if (is_multicore) {
309 return clock->GetTimeNS(); 314 return clock->GetTimeNS();