diff options
| author | 2022-10-19 16:27:43 -0400 | |
|---|---|---|
| committer | 2022-10-19 16:27:43 -0400 | |
| commit | 560bca57a203c45acb1c589699b472223e8b68fd (patch) | |
| tree | 98ef4a0d62a368614075463d13c4220b11af9760 /src/core/core_timing.cpp | |
| parent | Merge pull request #9084 from vonchenplus/dma_copy (diff) | |
| parent | core: hle: kernel: Migrate ProcessState to enum class. (diff) | |
| download | yuzu-560bca57a203c45acb1c589699b472223e8b68fd.tar.gz yuzu-560bca57a203c45acb1c589699b472223e8b68fd.tar.xz yuzu-560bca57a203c45acb1c589699b472223e8b68fd.zip | |
Merge pull request #9071 from bunnei/mp-mm
Kernel Multiprocess (Part 1) - Persist memory & core timing
Diffstat (limited to 'src/core/core_timing.cpp')
| -rw-r--r-- | src/core/core_timing.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index 2678ce532..0e7b5f943 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp | |||
| @@ -40,7 +40,9 @@ struct CoreTiming::Event { | |||
| 40 | CoreTiming::CoreTiming() | 40 | 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() = default; | 43 | CoreTiming::~CoreTiming() { |
| 44 | Reset(); | ||
| 45 | } | ||
| 44 | 46 | ||
| 45 | void CoreTiming::ThreadEntry(CoreTiming& instance) { | 47 | void CoreTiming::ThreadEntry(CoreTiming& instance) { |
| 46 | constexpr char name[] = "HostTiming"; | 48 | constexpr char name[] = "HostTiming"; |
| @@ -53,6 +55,7 @@ void CoreTiming::ThreadEntry(CoreTiming& instance) { | |||
| 53 | } | 55 | } |
| 54 | 56 | ||
| 55 | void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { | 57 | void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { |
| 58 | Reset(); | ||
| 56 | on_thread_init = std::move(on_thread_init_); | 59 | on_thread_init = std::move(on_thread_init_); |
| 57 | event_fifo_id = 0; | 60 | event_fifo_id = 0; |
| 58 | shutting_down = false; | 61 | shutting_down = false; |
| @@ -65,17 +68,8 @@ void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { | |||
| 65 | } | 68 | } |
| 66 | } | 69 | } |
| 67 | 70 | ||
| 68 | void CoreTiming::Shutdown() { | 71 | void CoreTiming::ClearPendingEvents() { |
| 69 | paused = true; | 72 | 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 | } | 73 | } |
| 80 | 74 | ||
| 81 | void CoreTiming::Pause(bool is_paused) { | 75 | void CoreTiming::Pause(bool is_paused) { |
| @@ -196,10 +190,6 @@ u64 CoreTiming::GetClockTicks() const { | |||
| 196 | return CpuCyclesToClockCycles(ticks); | 190 | return CpuCyclesToClockCycles(ticks); |
| 197 | } | 191 | } |
| 198 | 192 | ||
| 199 | void CoreTiming::ClearPendingEvents() { | ||
| 200 | event_queue.clear(); | ||
| 201 | } | ||
| 202 | |||
| 203 | void CoreTiming::RemoveEvent(const std::shared_ptr<EventType>& event_type) { | 193 | void CoreTiming::RemoveEvent(const std::shared_ptr<EventType>& event_type) { |
| 204 | std::scoped_lock lock{basic_lock}; | 194 | std::scoped_lock lock{basic_lock}; |
| 205 | 195 | ||
| @@ -307,6 +297,18 @@ void CoreTiming::ThreadLoop() { | |||
| 307 | } | 297 | } |
| 308 | } | 298 | } |
| 309 | 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 | |||
| 310 | std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const { | 312 | std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const { |
| 311 | if (is_multicore) { | 313 | if (is_multicore) { |
| 312 | return clock->GetTimeNS(); | 314 | return clock->GetTimeNS(); |