summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/host_timing.cpp21
-rw-r--r--src/core/host_timing.h4
2 files changed, 11 insertions, 14 deletions
diff --git a/src/core/host_timing.cpp b/src/core/host_timing.cpp
index d9514b2c5..ef9977b76 100644
--- a/src/core/host_timing.cpp
+++ b/src/core/host_timing.cpp
@@ -35,7 +35,11 @@ struct CoreTiming::Event {
35 } 35 }
36}; 36};
37 37
38CoreTiming::CoreTiming() = default; 38CoreTiming::CoreTiming() {
39 Common::WallClock* wall = Common::CreateBestMatchingClock(Core::Timing::BASE_CLOCK_RATE, Core::Timing::CNTFREQ);
40 clock = std::unique_ptr<Common::WallClock>(wall);
41}
42
39CoreTiming::~CoreTiming() = default; 43CoreTiming::~CoreTiming() = default;
40 44
41void CoreTiming::ThreadEntry(CoreTiming& instance) { 45void CoreTiming::ThreadEntry(CoreTiming& instance) {
@@ -46,7 +50,6 @@ void CoreTiming::Initialize() {
46 event_fifo_id = 0; 50 event_fifo_id = 0;
47 const auto empty_timed_callback = [](u64, s64) {}; 51 const auto empty_timed_callback = [](u64, s64) {};
48 ev_lost = CreateEvent("_lost_event", empty_timed_callback); 52 ev_lost = CreateEvent("_lost_event", empty_timed_callback);
49 start_time = std::chrono::steady_clock::now();
50 timer_thread = std::make_unique<std::thread>(ThreadEntry, std::ref(*this)); 53 timer_thread = std::make_unique<std::thread>(ThreadEntry, std::ref(*this));
51} 54}
52 55
@@ -108,13 +111,11 @@ void CoreTiming::UnscheduleEvent(const std::shared_ptr<EventType>& event_type, u
108} 111}
109 112
110u64 CoreTiming::GetCPUTicks() const { 113u64 CoreTiming::GetCPUTicks() const {
111 std::chrono::nanoseconds time_now = GetGlobalTimeNs(); 114 return clock->GetCPUCycles();
112 return Core::Timing::nsToCycles(time_now);
113} 115}
114 116
115u64 CoreTiming::GetClockTicks() const { 117u64 CoreTiming::GetClockTicks() const {
116 std::chrono::nanoseconds time_now = GetGlobalTimeNs(); 118 return clock->GetClockCycles();
117 return Core::Timing::nsToClockCycles(time_now);
118} 119}
119 120
120void CoreTiming::ClearPendingEvents() { 121void CoreTiming::ClearPendingEvents() {
@@ -174,15 +175,11 @@ void CoreTiming::Advance() {
174} 175}
175 176
176std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const { 177std::chrono::nanoseconds CoreTiming::GetGlobalTimeNs() const {
177 sys_time_point current = std::chrono::steady_clock::now(); 178 return clock->GetTimeNS();
178 auto elapsed = current - start_time;
179 return std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed);
180} 179}
181 180
182std::chrono::microseconds CoreTiming::GetGlobalTimeUs() const { 181std::chrono::microseconds CoreTiming::GetGlobalTimeUs() const {
183 sys_time_point current = std::chrono::steady_clock::now(); 182 return clock->GetTimeUS();
184 auto elapsed = current - start_time;
185 return std::chrono::duration_cast<std::chrono::microseconds>(elapsed);
186} 183}
187 184
188} // namespace Core::Timing 185} // namespace Core::Timing
diff --git a/src/core/host_timing.h b/src/core/host_timing.h
index 1d053a7fa..f04a150ee 100644
--- a/src/core/host_timing.h
+++ b/src/core/host_timing.h
@@ -17,12 +17,12 @@
17#include "common/spin_lock.h" 17#include "common/spin_lock.h"
18#include "common/thread.h" 18#include "common/thread.h"
19#include "common/threadsafe_queue.h" 19#include "common/threadsafe_queue.h"
20#include "common/wall_clock.h"
20 21
21namespace Core::HostTiming { 22namespace Core::HostTiming {
22 23
23/// A callback that may be scheduled for a particular core timing event. 24/// A callback that may be scheduled for a particular core timing event.
24using TimedCallback = std::function<void(u64 userdata, s64 cycles_late)>; 25using TimedCallback = std::function<void(u64 userdata, s64 cycles_late)>;
25using sys_time_point = std::chrono::time_point<std::chrono::steady_clock>;
26 26
27/// Contains the characteristics of a particular event. 27/// Contains the characteristics of a particular event.
28struct EventType { 28struct EventType {
@@ -112,7 +112,7 @@ private:
112 static void ThreadEntry(CoreTiming& instance); 112 static void ThreadEntry(CoreTiming& instance);
113 void Advance(); 113 void Advance();
114 114
115 sys_time_point start_time; 115 std::unique_ptr<Common::WallClock> clock;
116 116
117 u64 global_timer = 0; 117 u64 global_timer = 0;
118 118