summaryrefslogtreecommitdiff
path: root/src/core/core_timing.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2022-09-10 01:48:15 -0700
committerGravatar bunnei2022-10-18 19:13:35 -0700
commita4d11f4427859cbe82fc825f8493844e17bb668f (patch)
treed1844e8ad7bcfd3c9467cad75091bc207fba7103 /src/core/core_timing.cpp
parentcore: hle: kernel: Fix InitializePreemption order. (diff)
downloadyuzu-a4d11f4427859cbe82fc825f8493844e17bb668f.tar.gz
yuzu-a4d11f4427859cbe82fc825f8493844e17bb668f.tar.xz
yuzu-a4d11f4427859cbe82fc825f8493844e17bb668f.zip
core: Partially persist emulation state across game boots.
Diffstat (limited to 'src/core/core_timing.cpp')
-rw-r--r--src/core/core_timing.cpp29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp
index 2678ce532..2afb2696c 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -40,7 +40,17 @@ struct CoreTiming::Event {
40CoreTiming::CoreTiming() 40CoreTiming::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() = default; 43CoreTiming::~CoreTiming() {
44 paused = true;
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}
44 54
45void CoreTiming::ThreadEntry(CoreTiming& instance) { 55void CoreTiming::ThreadEntry(CoreTiming& instance) {
46 constexpr char name[] = "HostTiming"; 56 constexpr char name[] = "HostTiming";
@@ -65,17 +75,8 @@ void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) {
65 } 75 }
66} 76}
67 77
68void CoreTiming::Shutdown() { 78void CoreTiming::ClearPendingEvents() {
69 paused = true; 79 event_queue.clear();
70 shutting_down = true;
71 pause_event.Set();
72 event.Set();
73 if (timer_thread) {
74 timer_thread->join();
75 }
76 ClearPendingEvents();
77 timer_thread.reset();
78 has_started = false;
79} 80}
80 81
81void CoreTiming::Pause(bool is_paused) { 82void CoreTiming::Pause(bool is_paused) {
@@ -196,10 +197,6 @@ u64 CoreTiming::GetClockTicks() const {
196 return CpuCyclesToClockCycles(ticks); 197 return CpuCyclesToClockCycles(ticks);
197} 198}
198 199
199void CoreTiming::ClearPendingEvents() {
200 event_queue.clear();
201}
202
203void CoreTiming::RemoveEvent(const std::shared_ptr<EventType>& event_type) { 200void CoreTiming::RemoveEvent(const std::shared_ptr<EventType>& event_type) {
204 std::scoped_lock lock{basic_lock}; 201 std::scoped_lock lock{basic_lock};
205 202