summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio_core/stream.cpp7
-rw-r--r--src/audio_core/stream.h22
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp6
-rw-r--r--src/core/arm/unicorn/arm_unicorn.cpp4
-rw-r--r--src/core/core.cpp6
-rw-r--r--src/core/core_cpu.cpp6
-rw-r--r--src/core/core_timing.cpp4
-rw-r--r--src/core/core_timing.h4
-rw-r--r--src/core/core_timing_util.cpp4
-rw-r--r--src/core/core_timing_util.h4
-rw-r--r--src/core/hle/kernel/kernel.cpp6
-rw-r--r--src/core/hle/kernel/kernel.h4
-rw-r--r--src/core/hle/kernel/scheduler.cpp2
-rw-r--r--src/core/hle/kernel/svc.cpp8
-rw-r--r--src/core/hle/kernel/thread.cpp13
-rw-r--r--src/core/hle/service/hid/controllers/debug_pad.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/gesture.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/keyboard.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/mouse.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/stubbed.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/touchscreen.cpp4
-rw-r--r--src/core/hle/service/hid/controllers/xpad.cpp2
-rw-r--r--src/core/hle/service/hid/hid.cpp19
-rw-r--r--src/core/hle/service/hid/hid.h4
-rw-r--r--src/core/hle/service/hid/irs.cpp2
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp2
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.h4
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.cpp10
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.h6
-rw-r--r--src/core/hle/service/time/time.cpp6
-rw-r--r--src/tests/core/core_timing.cpp169
-rw-r--r--src/video_core/engines/maxwell_3d.cpp2
-rw-r--r--src/video_core/gpu.cpp2
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp2
35 files changed, 172 insertions, 174 deletions
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp
index 4ce2d374e..8ab5649df 100644
--- a/src/audio_core/stream.cpp
+++ b/src/audio_core/stream.cpp
@@ -37,7 +37,7 @@ Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callbac
37 : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, 37 : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)},
38 sink_stream{sink_stream}, name{std::move(name_)} { 38 sink_stream{sink_stream}, name{std::move(name_)} {
39 39
40 release_event = CoreTiming::RegisterEvent( 40 release_event = Core::Timing::RegisterEvent(
41 name, [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); 41 name, [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); });
42} 42}
43 43
@@ -57,7 +57,7 @@ Stream::State Stream::GetState() const {
57 57
58s64 Stream::GetBufferReleaseCycles(const Buffer& buffer) const { 58s64 Stream::GetBufferReleaseCycles(const Buffer& buffer) const {
59 const std::size_t num_samples{buffer.GetSamples().size() / GetNumChannels()}; 59 const std::size_t num_samples{buffer.GetSamples().size() / GetNumChannels()};
60 return CoreTiming::usToCycles((static_cast<u64>(num_samples) * 1000000) / sample_rate); 60 return Core::Timing::usToCycles((static_cast<u64>(num_samples) * 1000000) / sample_rate);
61} 61}
62 62
63static void VolumeAdjustSamples(std::vector<s16>& samples) { 63static void VolumeAdjustSamples(std::vector<s16>& samples) {
@@ -99,7 +99,8 @@ void Stream::PlayNextBuffer() {
99 99
100 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples()); 100 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples());
101 101
102 CoreTiming::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {}); 102 Core::Timing::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event,
103 {});
103} 104}
104 105
105void Stream::ReleaseActiveBuffer() { 106void Stream::ReleaseActiveBuffer() {
diff --git a/src/audio_core/stream.h b/src/audio_core/stream.h
index aebfeb51d..caa775544 100644
--- a/src/audio_core/stream.h
+++ b/src/audio_core/stream.h
@@ -13,7 +13,7 @@
13#include "audio_core/buffer.h" 13#include "audio_core/buffer.h"
14#include "common/common_types.h" 14#include "common/common_types.h"
15 15
16namespace CoreTiming { 16namespace Core::Timing {
17struct EventType; 17struct EventType;
18} 18}
19 19
@@ -91,16 +91,16 @@ private:
91 /// Gets the number of core cycles when the specified buffer will be released 91 /// Gets the number of core cycles when the specified buffer will be released
92 s64 GetBufferReleaseCycles(const Buffer& buffer) const; 92 s64 GetBufferReleaseCycles(const Buffer& buffer) const;
93 93
94 u32 sample_rate; ///< Sample rate of the stream 94 u32 sample_rate; ///< Sample rate of the stream
95 Format format; ///< Format of the stream 95 Format format; ///< Format of the stream
96 ReleaseCallback release_callback; ///< Buffer release callback for the stream 96 ReleaseCallback release_callback; ///< Buffer release callback for the stream
97 State state{State::Stopped}; ///< Playback state of the stream 97 State state{State::Stopped}; ///< Playback state of the stream
98 CoreTiming::EventType* release_event{}; ///< Core timing release event for the stream 98 Core::Timing::EventType* release_event{}; ///< Core timing release event for the stream
99 BufferPtr active_buffer; ///< Actively playing buffer in the stream 99 BufferPtr active_buffer; ///< Actively playing buffer in the stream
100 std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream 100 std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream
101 std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream 101 std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream
102 SinkStream& sink_stream; ///< Output sink for the stream 102 SinkStream& sink_stream; ///< Output sink for the stream
103 std::string name; ///< Name of the stream, must be unique 103 std::string name; ///< Name of the stream, must be unique
104}; 104};
105 105
106using StreamPtr = std::shared_ptr<Stream>; 106using StreamPtr = std::shared_ptr<Stream>;
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index afbda8d8b..f28951f8a 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -112,14 +112,14 @@ public:
112 // Always execute at least one tick. 112 // Always execute at least one tick.
113 amortized_ticks = std::max<u64>(amortized_ticks, 1); 113 amortized_ticks = std::max<u64>(amortized_ticks, 1);
114 114
115 CoreTiming::AddTicks(amortized_ticks); 115 Timing::AddTicks(amortized_ticks);
116 num_interpreted_instructions = 0; 116 num_interpreted_instructions = 0;
117 } 117 }
118 u64 GetTicksRemaining() override { 118 u64 GetTicksRemaining() override {
119 return std::max(CoreTiming::GetDowncount(), 0); 119 return std::max(Timing::GetDowncount(), 0);
120 } 120 }
121 u64 GetCNTPCT() override { 121 u64 GetCNTPCT() override {
122 return CoreTiming::GetTicks(); 122 return Timing::GetTicks();
123 } 123 }
124 124
125 ARM_Dynarmic& parent; 125 ARM_Dynarmic& parent;
diff --git a/src/core/arm/unicorn/arm_unicorn.cpp b/src/core/arm/unicorn/arm_unicorn.cpp
index c455c81fb..c36c15c02 100644
--- a/src/core/arm/unicorn/arm_unicorn.cpp
+++ b/src/core/arm/unicorn/arm_unicorn.cpp
@@ -177,7 +177,7 @@ void ARM_Unicorn::Run() {
177 if (GDBStub::IsServerEnabled()) { 177 if (GDBStub::IsServerEnabled()) {
178 ExecuteInstructions(std::max(4000000, 0)); 178 ExecuteInstructions(std::max(4000000, 0));
179 } else { 179 } else {
180 ExecuteInstructions(std::max(CoreTiming::GetDowncount(), 0)); 180 ExecuteInstructions(std::max(Timing::GetDowncount(), 0));
181 } 181 }
182} 182}
183 183
@@ -190,7 +190,7 @@ MICROPROFILE_DEFINE(ARM_Jit_Unicorn, "ARM JIT", "Unicorn", MP_RGB(255, 64, 64));
190void ARM_Unicorn::ExecuteInstructions(int num_instructions) { 190void ARM_Unicorn::ExecuteInstructions(int num_instructions) {
191 MICROPROFILE_SCOPE(ARM_Jit_Unicorn); 191 MICROPROFILE_SCOPE(ARM_Jit_Unicorn);
192 CHECKED(uc_emu_start(uc, GetPC(), 1ULL << 63, 0, num_instructions)); 192 CHECKED(uc_emu_start(uc, GetPC(), 1ULL << 63, 0, num_instructions));
193 CoreTiming::AddTicks(num_instructions); 193 Timing::AddTicks(num_instructions);
194 if (GDBStub::IsServerEnabled()) { 194 if (GDBStub::IsServerEnabled()) {
195 if (last_bkpt_hit) { 195 if (last_bkpt_hit) {
196 uc_reg_write(uc, UC_ARM64_REG_PC, &last_bkpt.address); 196 uc_reg_write(uc, UC_ARM64_REG_PC, &last_bkpt.address);
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 1dd576c26..4d9d21ee4 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -94,7 +94,7 @@ struct System::Impl {
94 ResultStatus Init(System& system, Frontend::EmuWindow& emu_window) { 94 ResultStatus Init(System& system, Frontend::EmuWindow& emu_window) {
95 LOG_DEBUG(HW_Memory, "initialized OK"); 95 LOG_DEBUG(HW_Memory, "initialized OK");
96 96
97 CoreTiming::Init(); 97 Timing::Init();
98 kernel.Initialize(); 98 kernel.Initialize();
99 99
100 const auto current_time = std::chrono::duration_cast<std::chrono::seconds>( 100 const auto current_time = std::chrono::duration_cast<std::chrono::seconds>(
@@ -205,7 +205,7 @@ struct System::Impl {
205 205
206 // Shutdown kernel and core timing 206 // Shutdown kernel and core timing
207 kernel.Shutdown(); 207 kernel.Shutdown();
208 CoreTiming::Shutdown(); 208 Timing::Shutdown();
209 209
210 // Close app loader 210 // Close app loader
211 app_loader.reset(); 211 app_loader.reset();
@@ -232,7 +232,7 @@ struct System::Impl {
232 } 232 }
233 233
234 PerfStatsResults GetAndResetPerfStats() { 234 PerfStatsResults GetAndResetPerfStats() {
235 return perf_stats.GetAndResetStats(CoreTiming::GetGlobalTimeUs()); 235 return perf_stats.GetAndResetStats(Timing::GetGlobalTimeUs());
236 } 236 }
237 237
238 Kernel::KernelCore kernel; 238 Kernel::KernelCore kernel;
diff --git a/src/core/core_cpu.cpp b/src/core/core_cpu.cpp
index fffda8a99..452366250 100644
--- a/src/core/core_cpu.cpp
+++ b/src/core/core_cpu.cpp
@@ -93,14 +93,14 @@ void Cpu::RunLoop(bool tight_loop) {
93 93
94 if (IsMainCore()) { 94 if (IsMainCore()) {
95 // TODO(Subv): Only let CoreTiming idle if all 4 cores are idling. 95 // TODO(Subv): Only let CoreTiming idle if all 4 cores are idling.
96 CoreTiming::Idle(); 96 Timing::Idle();
97 CoreTiming::Advance(); 97 Timing::Advance();
98 } 98 }
99 99
100 PrepareReschedule(); 100 PrepareReschedule();
101 } else { 101 } else {
102 if (IsMainCore()) { 102 if (IsMainCore()) {
103 CoreTiming::Advance(); 103 Timing::Advance();
104 } 104 }
105 105
106 if (tight_loop) { 106 if (tight_loop) {
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp
index 7953c8720..2b7ca9766 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -15,7 +15,7 @@
15#include "common/threadsafe_queue.h" 15#include "common/threadsafe_queue.h"
16#include "core/core_timing_util.h" 16#include "core/core_timing_util.h"
17 17
18namespace CoreTiming { 18namespace Core::Timing {
19 19
20static s64 global_timer; 20static s64 global_timer;
21static int slice_length; 21static int slice_length;
@@ -242,4 +242,4 @@ int GetDowncount() {
242 return downcount; 242 return downcount;
243} 243}
244 244
245} // namespace CoreTiming 245} // namespace Core::Timing
diff --git a/src/core/core_timing.h b/src/core/core_timing.h
index 9ed757bd7..093989d4c 100644
--- a/src/core/core_timing.h
+++ b/src/core/core_timing.h
@@ -22,7 +22,7 @@
22#include <string> 22#include <string>
23#include "common/common_types.h" 23#include "common/common_types.h"
24 24
25namespace CoreTiming { 25namespace Core::Timing {
26 26
27struct EventType; 27struct EventType;
28 28
@@ -92,4 +92,4 @@ std::chrono::microseconds GetGlobalTimeUs();
92 92
93int GetDowncount(); 93int GetDowncount();
94 94
95} // namespace CoreTiming 95} // namespace Core::Timing
diff --git a/src/core/core_timing_util.cpp b/src/core/core_timing_util.cpp
index 73dea4edb..88ff70233 100644
--- a/src/core/core_timing_util.cpp
+++ b/src/core/core_timing_util.cpp
@@ -8,7 +8,7 @@
8#include <limits> 8#include <limits>
9#include "common/logging/log.h" 9#include "common/logging/log.h"
10 10
11namespace CoreTiming { 11namespace Core::Timing {
12 12
13constexpr u64 MAX_VALUE_TO_MULTIPLY = std::numeric_limits<s64>::max() / BASE_CLOCK_RATE; 13constexpr u64 MAX_VALUE_TO_MULTIPLY = std::numeric_limits<s64>::max() / BASE_CLOCK_RATE;
14 14
@@ -60,4 +60,4 @@ s64 nsToCycles(u64 ns) {
60 return (BASE_CLOCK_RATE * static_cast<s64>(ns)) / 1000000000; 60 return (BASE_CLOCK_RATE * static_cast<s64>(ns)) / 1000000000;
61} 61}
62 62
63} // namespace CoreTiming 63} // namespace Core::Timing
diff --git a/src/core/core_timing_util.h b/src/core/core_timing_util.h
index 5c3718782..513cfac1b 100644
--- a/src/core/core_timing_util.h
+++ b/src/core/core_timing_util.h
@@ -6,7 +6,7 @@
6 6
7#include "common/common_types.h" 7#include "common/common_types.h"
8 8
9namespace CoreTiming { 9namespace Core::Timing {
10 10
11// The below clock rate is based on Switch's clockspeed being widely known as 1.020GHz 11// The below clock rate is based on Switch's clockspeed being widely known as 1.020GHz
12// The exact value used is of course unverified. 12// The exact value used is of course unverified.
@@ -61,4 +61,4 @@ inline u64 cyclesToMs(s64 cycles) {
61 return cycles * 1000 / BASE_CLOCK_RATE; 61 return cycles * 1000 / BASE_CLOCK_RATE;
62} 62}
63 63
64} // namespace CoreTiming 64} // namespace Core::Timing
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 7a524ce5a..3721ae8fe 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -124,7 +124,7 @@ struct KernelCore::Impl {
124 124
125 void InitializeThreads() { 125 void InitializeThreads() {
126 thread_wakeup_event_type = 126 thread_wakeup_event_type =
127 CoreTiming::RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); 127 Core::Timing::RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback);
128 } 128 }
129 129
130 std::atomic<u32> next_object_id{0}; 130 std::atomic<u32> next_object_id{0};
@@ -137,7 +137,7 @@ struct KernelCore::Impl {
137 137
138 SharedPtr<ResourceLimit> system_resource_limit; 138 SharedPtr<ResourceLimit> system_resource_limit;
139 139
140 CoreTiming::EventType* thread_wakeup_event_type = nullptr; 140 Core::Timing::EventType* thread_wakeup_event_type = nullptr;
141 // TODO(yuriks): This can be removed if Thread objects are explicitly pooled in the future, 141 // TODO(yuriks): This can be removed if Thread objects are explicitly pooled in the future,
142 // allowing us to simply use a pool index or similar. 142 // allowing us to simply use a pool index or similar.
143 Kernel::HandleTable thread_wakeup_callback_handle_table; 143 Kernel::HandleTable thread_wakeup_callback_handle_table;
@@ -213,7 +213,7 @@ u64 KernelCore::CreateNewProcessID() {
213 return impl->next_process_id++; 213 return impl->next_process_id++;
214} 214}
215 215
216CoreTiming::EventType* KernelCore::ThreadWakeupCallbackEventType() const { 216Core::Timing::EventType* KernelCore::ThreadWakeupCallbackEventType() const {
217 return impl->thread_wakeup_event_type; 217 return impl->thread_wakeup_event_type;
218} 218}
219 219
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index c643a6401..7406f107e 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -11,7 +11,7 @@
11template <typename T> 11template <typename T>
12class ResultVal; 12class ResultVal;
13 13
14namespace CoreTiming { 14namespace Core::Timing {
15struct EventType; 15struct EventType;
16} 16}
17 17
@@ -89,7 +89,7 @@ private:
89 u64 CreateNewThreadID(); 89 u64 CreateNewThreadID();
90 90
91 /// Retrieves the event type used for thread wakeup callbacks. 91 /// Retrieves the event type used for thread wakeup callbacks.
92 CoreTiming::EventType* ThreadWakeupCallbackEventType() const; 92 Core::Timing::EventType* ThreadWakeupCallbackEventType() const;
93 93
94 /// Provides a reference to the thread wakeup callback handle table. 94 /// Provides a reference to the thread wakeup callback handle table.
95 Kernel::HandleTable& ThreadWakeupCallbackHandleTable(); 95 Kernel::HandleTable& ThreadWakeupCallbackHandleTable();
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp
index df4d6cf0a..9e2517e1b 100644
--- a/src/core/hle/kernel/scheduler.cpp
+++ b/src/core/hle/kernel/scheduler.cpp
@@ -111,7 +111,7 @@ void Scheduler::SwitchContext(Thread* new_thread) {
111 111
112void Scheduler::UpdateLastContextSwitchTime(Thread* thread, Process* process) { 112void Scheduler::UpdateLastContextSwitchTime(Thread* thread, Process* process) {
113 const u64 prev_switch_ticks = last_context_switch_time; 113 const u64 prev_switch_ticks = last_context_switch_time;
114 const u64 most_recent_switch_ticks = CoreTiming::GetTicks(); 114 const u64 most_recent_switch_ticks = Core::Timing::GetTicks();
115 const u64 update_ticks = most_recent_switch_ticks - prev_switch_ticks; 115 const u64 update_ticks = most_recent_switch_ticks - prev_switch_ticks;
116 116
117 if (thread != nullptr) { 117 if (thread != nullptr) {
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 7cfecb68c..5f040f79f 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -927,9 +927,9 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id)
927 if (same_thread && info_sub_id == 0xFFFFFFFFFFFFFFFF) { 927 if (same_thread && info_sub_id == 0xFFFFFFFFFFFFFFFF) {
928 const u64 thread_ticks = current_thread->GetTotalCPUTimeTicks(); 928 const u64 thread_ticks = current_thread->GetTotalCPUTimeTicks();
929 929
930 out_ticks = thread_ticks + (CoreTiming::GetTicks() - prev_ctx_ticks); 930 out_ticks = thread_ticks + (Core::Timing::GetTicks() - prev_ctx_ticks);
931 } else if (same_thread && info_sub_id == system.CurrentCoreIndex()) { 931 } else if (same_thread && info_sub_id == system.CurrentCoreIndex()) {
932 out_ticks = CoreTiming::GetTicks() - prev_ctx_ticks; 932 out_ticks = Core::Timing::GetTicks() - prev_ctx_ticks;
933 } 933 }
934 934
935 *result = out_ticks; 935 *result = out_ticks;
@@ -1546,10 +1546,10 @@ static ResultCode SignalToAddress(VAddr address, u32 type, s32 value, s32 num_to
1546static u64 GetSystemTick() { 1546static u64 GetSystemTick() {
1547 LOG_TRACE(Kernel_SVC, "called"); 1547 LOG_TRACE(Kernel_SVC, "called");
1548 1548
1549 const u64 result{CoreTiming::GetTicks()}; 1549 const u64 result{Core::Timing::GetTicks()};
1550 1550
1551 // Advance time to defeat dumb games that busy-wait for the frame to end. 1551 // Advance time to defeat dumb games that busy-wait for the frame to end.
1552 CoreTiming::AddTicks(400); 1552 Core::Timing::AddTicks(400);
1553 1553
1554 return result; 1554 return result;
1555} 1555}
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index d3984dfc4..7881c2b90 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -43,7 +43,7 @@ Thread::~Thread() = default;
43 43
44void Thread::Stop() { 44void Thread::Stop() {
45 // Cancel any outstanding wakeup events for this thread 45 // Cancel any outstanding wakeup events for this thread
46 CoreTiming::UnscheduleEvent(kernel.ThreadWakeupCallbackEventType(), callback_handle); 46 Core::Timing::UnscheduleEvent(kernel.ThreadWakeupCallbackEventType(), callback_handle);
47 kernel.ThreadWakeupCallbackHandleTable().Close(callback_handle); 47 kernel.ThreadWakeupCallbackHandleTable().Close(callback_handle);
48 callback_handle = 0; 48 callback_handle = 0;
49 49
@@ -85,12 +85,13 @@ void Thread::WakeAfterDelay(s64 nanoseconds) {
85 85
86 // This function might be called from any thread so we have to be cautious and use the 86 // This function might be called from any thread so we have to be cautious and use the
87 // thread-safe version of ScheduleEvent. 87 // thread-safe version of ScheduleEvent.
88 CoreTiming::ScheduleEventThreadsafe(CoreTiming::nsToCycles(nanoseconds), 88 Core::Timing::ScheduleEventThreadsafe(Core::Timing::nsToCycles(nanoseconds),
89 kernel.ThreadWakeupCallbackEventType(), callback_handle); 89 kernel.ThreadWakeupCallbackEventType(), callback_handle);
90} 90}
91 91
92void Thread::CancelWakeupTimer() { 92void Thread::CancelWakeupTimer() {
93 CoreTiming::UnscheduleEventThreadsafe(kernel.ThreadWakeupCallbackEventType(), callback_handle); 93 Core::Timing::UnscheduleEventThreadsafe(kernel.ThreadWakeupCallbackEventType(),
94 callback_handle);
94} 95}
95 96
96static std::optional<s32> GetNextProcessorId(u64 mask) { 97static std::optional<s32> GetNextProcessorId(u64 mask) {
@@ -197,7 +198,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(KernelCore& kernel, std::string name
197 thread->stack_top = stack_top; 198 thread->stack_top = stack_top;
198 thread->tpidr_el0 = 0; 199 thread->tpidr_el0 = 0;
199 thread->nominal_priority = thread->current_priority = priority; 200 thread->nominal_priority = thread->current_priority = priority;
200 thread->last_running_ticks = CoreTiming::GetTicks(); 201 thread->last_running_ticks = Core::Timing::GetTicks();
201 thread->processor_id = processor_id; 202 thread->processor_id = processor_id;
202 thread->ideal_core = processor_id; 203 thread->ideal_core = processor_id;
203 thread->affinity_mask = 1ULL << processor_id; 204 thread->affinity_mask = 1ULL << processor_id;
@@ -257,7 +258,7 @@ void Thread::SetStatus(ThreadStatus new_status) {
257 } 258 }
258 259
259 if (status == ThreadStatus::Running) { 260 if (status == ThreadStatus::Running) {
260 last_running_ticks = CoreTiming::GetTicks(); 261 last_running_ticks = Core::Timing::GetTicks();
261 } 262 }
262 263
263 status = new_status; 264 status = new_status;
diff --git a/src/core/hle/service/hid/controllers/debug_pad.cpp b/src/core/hle/service/hid/controllers/debug_pad.cpp
index c22357d8c..b264c9503 100644
--- a/src/core/hle/service/hid/controllers/debug_pad.cpp
+++ b/src/core/hle/service/hid/controllers/debug_pad.cpp
@@ -22,7 +22,7 @@ void Controller_DebugPad::OnInit() {}
22void Controller_DebugPad::OnRelease() {} 22void Controller_DebugPad::OnRelease() {}
23 23
24void Controller_DebugPad::OnUpdate(u8* data, std::size_t size) { 24void Controller_DebugPad::OnUpdate(u8* data, std::size_t size) {
25 shared_memory.header.timestamp = CoreTiming::GetTicks(); 25 shared_memory.header.timestamp = Core::Timing::GetTicks();
26 shared_memory.header.total_entry_count = 17; 26 shared_memory.header.total_entry_count = 17;
27 27
28 if (!IsControllerActivated()) { 28 if (!IsControllerActivated()) {
diff --git a/src/core/hle/service/hid/controllers/gesture.cpp b/src/core/hle/service/hid/controllers/gesture.cpp
index 898572277..6d21f1a7d 100644
--- a/src/core/hle/service/hid/controllers/gesture.cpp
+++ b/src/core/hle/service/hid/controllers/gesture.cpp
@@ -18,7 +18,7 @@ void Controller_Gesture::OnInit() {}
18void Controller_Gesture::OnRelease() {} 18void Controller_Gesture::OnRelease() {}
19 19
20void Controller_Gesture::OnUpdate(u8* data, std::size_t size) { 20void Controller_Gesture::OnUpdate(u8* data, std::size_t size) {
21 shared_memory.header.timestamp = CoreTiming::GetTicks(); 21 shared_memory.header.timestamp = Core::Timing::GetTicks();
22 shared_memory.header.total_entry_count = 17; 22 shared_memory.header.total_entry_count = 17;
23 23
24 if (!IsControllerActivated()) { 24 if (!IsControllerActivated()) {
diff --git a/src/core/hle/service/hid/controllers/keyboard.cpp b/src/core/hle/service/hid/controllers/keyboard.cpp
index ca75adc2b..798f30436 100644
--- a/src/core/hle/service/hid/controllers/keyboard.cpp
+++ b/src/core/hle/service/hid/controllers/keyboard.cpp
@@ -20,7 +20,7 @@ void Controller_Keyboard::OnInit() {}
20void Controller_Keyboard::OnRelease() {} 20void Controller_Keyboard::OnRelease() {}
21 21
22void Controller_Keyboard::OnUpdate(u8* data, std::size_t size) { 22void Controller_Keyboard::OnUpdate(u8* data, std::size_t size) {
23 shared_memory.header.timestamp = CoreTiming::GetTicks(); 23 shared_memory.header.timestamp = Core::Timing::GetTicks();
24 shared_memory.header.total_entry_count = 17; 24 shared_memory.header.total_entry_count = 17;
25 25
26 if (!IsControllerActivated()) { 26 if (!IsControllerActivated()) {
diff --git a/src/core/hle/service/hid/controllers/mouse.cpp b/src/core/hle/service/hid/controllers/mouse.cpp
index 63391dbe9..4985037be 100644
--- a/src/core/hle/service/hid/controllers/mouse.cpp
+++ b/src/core/hle/service/hid/controllers/mouse.cpp
@@ -18,7 +18,7 @@ void Controller_Mouse::OnInit() {}
18void Controller_Mouse::OnRelease() {} 18void Controller_Mouse::OnRelease() {}
19 19
20void Controller_Mouse::OnUpdate(u8* data, std::size_t size) { 20void Controller_Mouse::OnUpdate(u8* data, std::size_t size) {
21 shared_memory.header.timestamp = CoreTiming::GetTicks(); 21 shared_memory.header.timestamp = Core::Timing::GetTicks();
22 shared_memory.header.total_entry_count = 17; 22 shared_memory.header.total_entry_count = 17;
23 23
24 if (!IsControllerActivated()) { 24 if (!IsControllerActivated()) {
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 04c8c35a8..ffdd1c593 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -308,7 +308,7 @@ void Controller_NPad::OnUpdate(u8* data, std::size_t data_len) {
308 const auto& last_entry = 308 const auto& last_entry =
309 main_controller->npad[main_controller->common.last_entry_index]; 309 main_controller->npad[main_controller->common.last_entry_index];
310 310
311 main_controller->common.timestamp = CoreTiming::GetTicks(); 311 main_controller->common.timestamp = Core::Timing::GetTicks();
312 main_controller->common.last_entry_index = 312 main_controller->common.last_entry_index =
313 (main_controller->common.last_entry_index + 1) % 17; 313 (main_controller->common.last_entry_index + 1) % 17;
314 314
diff --git a/src/core/hle/service/hid/controllers/stubbed.cpp b/src/core/hle/service/hid/controllers/stubbed.cpp
index 02fcfadd9..cca4dca1d 100644
--- a/src/core/hle/service/hid/controllers/stubbed.cpp
+++ b/src/core/hle/service/hid/controllers/stubbed.cpp
@@ -22,7 +22,7 @@ void Controller_Stubbed::OnUpdate(u8* data, std::size_t size) {
22 } 22 }
23 23
24 CommonHeader header{}; 24 CommonHeader header{};
25 header.timestamp = CoreTiming::GetTicks(); 25 header.timestamp = Core::Timing::GetTicks();
26 header.total_entry_count = 17; 26 header.total_entry_count = 17;
27 header.entry_count = 0; 27 header.entry_count = 0;
28 header.last_entry_index = 0; 28 header.last_entry_index = 0;
diff --git a/src/core/hle/service/hid/controllers/touchscreen.cpp b/src/core/hle/service/hid/controllers/touchscreen.cpp
index f666b1bd8..a7c8acc72 100644
--- a/src/core/hle/service/hid/controllers/touchscreen.cpp
+++ b/src/core/hle/service/hid/controllers/touchscreen.cpp
@@ -21,7 +21,7 @@ void Controller_Touchscreen::OnInit() {}
21void Controller_Touchscreen::OnRelease() {} 21void Controller_Touchscreen::OnRelease() {}
22 22
23void Controller_Touchscreen::OnUpdate(u8* data, std::size_t size) { 23void Controller_Touchscreen::OnUpdate(u8* data, std::size_t size) {
24 shared_memory.header.timestamp = CoreTiming::GetTicks(); 24 shared_memory.header.timestamp = Core::Timing::GetTicks();
25 shared_memory.header.total_entry_count = 17; 25 shared_memory.header.total_entry_count = 17;
26 26
27 if (!IsControllerActivated()) { 27 if (!IsControllerActivated()) {
@@ -48,7 +48,7 @@ void Controller_Touchscreen::OnUpdate(u8* data, std::size_t size) {
48 touch_entry.diameter_x = Settings::values.touchscreen.diameter_x; 48 touch_entry.diameter_x = Settings::values.touchscreen.diameter_x;
49 touch_entry.diameter_y = Settings::values.touchscreen.diameter_y; 49 touch_entry.diameter_y = Settings::values.touchscreen.diameter_y;
50 touch_entry.rotation_angle = Settings::values.touchscreen.rotation_angle; 50 touch_entry.rotation_angle = Settings::values.touchscreen.rotation_angle;
51 const u64 tick = CoreTiming::GetTicks(); 51 const u64 tick = Core::Timing::GetTicks();
52 touch_entry.delta_time = tick - last_touch; 52 touch_entry.delta_time = tick - last_touch;
53 last_touch = tick; 53 last_touch = tick;
54 touch_entry.finger = Settings::values.touchscreen.finger; 54 touch_entry.finger = Settings::values.touchscreen.finger;
diff --git a/src/core/hle/service/hid/controllers/xpad.cpp b/src/core/hle/service/hid/controllers/xpad.cpp
index cd397c70b..eff03d14e 100644
--- a/src/core/hle/service/hid/controllers/xpad.cpp
+++ b/src/core/hle/service/hid/controllers/xpad.cpp
@@ -19,7 +19,7 @@ void Controller_XPad::OnRelease() {}
19 19
20void Controller_XPad::OnUpdate(u8* data, std::size_t size) { 20void Controller_XPad::OnUpdate(u8* data, std::size_t size) {
21 for (auto& xpad_entry : shared_memory.shared_memory_entries) { 21 for (auto& xpad_entry : shared_memory.shared_memory_entries) {
22 xpad_entry.header.timestamp = CoreTiming::GetTicks(); 22 xpad_entry.header.timestamp = Core::Timing::GetTicks();
23 xpad_entry.header.total_entry_count = 17; 23 xpad_entry.header.total_entry_count = 17;
24 24
25 if (!IsControllerActivated()) { 25 if (!IsControllerActivated()) {
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 008bf3f02..79c320d04 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -36,9 +36,9 @@ namespace Service::HID {
36 36
37// Updating period for each HID device. 37// Updating period for each HID device.
38// TODO(ogniK): Find actual polling rate of hid 38// TODO(ogniK): Find actual polling rate of hid
39constexpr u64 pad_update_ticks = CoreTiming::BASE_CLOCK_RATE / 66; 39constexpr u64 pad_update_ticks = Core::Timing::BASE_CLOCK_RATE / 66;
40constexpr u64 accelerometer_update_ticks = CoreTiming::BASE_CLOCK_RATE / 100; 40constexpr u64 accelerometer_update_ticks = Core::Timing::BASE_CLOCK_RATE / 100;
41constexpr u64 gyroscope_update_ticks = CoreTiming::BASE_CLOCK_RATE / 100; 41constexpr u64 gyroscope_update_ticks = Core::Timing::BASE_CLOCK_RATE / 100;
42constexpr std::size_t SHARED_MEMORY_SIZE = 0x40000; 42constexpr std::size_t SHARED_MEMORY_SIZE = 0x40000;
43 43
44IAppletResource::IAppletResource() : ServiceFramework("IAppletResource") { 44IAppletResource::IAppletResource() : ServiceFramework("IAppletResource") {
@@ -73,14 +73,13 @@ IAppletResource::IAppletResource() : ServiceFramework("IAppletResource") {
73 GetController<Controller_Stubbed>(HidController::Unknown3).SetCommonHeaderOffset(0x5000); 73 GetController<Controller_Stubbed>(HidController::Unknown3).SetCommonHeaderOffset(0x5000);
74 74
75 // Register update callbacks 75 // Register update callbacks
76 pad_update_event = 76 pad_update_event = Core::Timing::RegisterEvent(
77 CoreTiming::RegisterEvent("HID::UpdatePadCallback", [this](u64 userdata, int cycles_late) { 77 "HID::UpdatePadCallback",
78 UpdateControllers(userdata, cycles_late); 78 [this](u64 userdata, int cycles_late) { UpdateControllers(userdata, cycles_late); });
79 });
80 79
81 // TODO(shinyquagsire23): Other update callbacks? (accel, gyro?) 80 // TODO(shinyquagsire23): Other update callbacks? (accel, gyro?)
82 81
83 CoreTiming::ScheduleEvent(pad_update_ticks, pad_update_event); 82 Core::Timing::ScheduleEvent(pad_update_ticks, pad_update_event);
84 83
85 ReloadInputDevices(); 84 ReloadInputDevices();
86} 85}
@@ -94,7 +93,7 @@ void IAppletResource::DeactivateController(HidController controller) {
94} 93}
95 94
96IAppletResource ::~IAppletResource() { 95IAppletResource ::~IAppletResource() {
97 CoreTiming::UnscheduleEvent(pad_update_event, 0); 96 Core::Timing::UnscheduleEvent(pad_update_event, 0);
98} 97}
99 98
100void IAppletResource::GetSharedMemoryHandle(Kernel::HLERequestContext& ctx) { 99void IAppletResource::GetSharedMemoryHandle(Kernel::HLERequestContext& ctx) {
@@ -114,7 +113,7 @@ void IAppletResource::UpdateControllers(u64 userdata, int cycles_late) {
114 controller->OnUpdate(shared_mem->GetPointer(), SHARED_MEMORY_SIZE); 113 controller->OnUpdate(shared_mem->GetPointer(), SHARED_MEMORY_SIZE);
115 } 114 }
116 115
117 CoreTiming::ScheduleEvent(pad_update_ticks - cycles_late, pad_update_event); 116 Core::Timing::ScheduleEvent(pad_update_ticks - cycles_late, pad_update_event);
118} 117}
119 118
120class IActiveVibrationDeviceList final : public ServiceFramework<IActiveVibrationDeviceList> { 119class IActiveVibrationDeviceList final : public ServiceFramework<IActiveVibrationDeviceList> {
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h
index eca27c056..6d897c842 100644
--- a/src/core/hle/service/hid/hid.h
+++ b/src/core/hle/service/hid/hid.h
@@ -7,7 +7,7 @@
7#include "controllers/controller_base.h" 7#include "controllers/controller_base.h"
8#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
9 9
10namespace CoreTiming { 10namespace Core::Timing {
11struct EventType; 11struct EventType;
12} 12}
13 13
@@ -66,7 +66,7 @@ private:
66 66
67 Kernel::SharedPtr<Kernel::SharedMemory> shared_mem; 67 Kernel::SharedPtr<Kernel::SharedMemory> shared_mem;
68 68
69 CoreTiming::EventType* pad_update_event; 69 Core::Timing::EventType* pad_update_event;
70 70
71 std::array<std::unique_ptr<ControllerBase>, static_cast<size_t>(HidController::MaxControllers)> 71 std::array<std::unique_ptr<ControllerBase>, static_cast<size_t>(HidController::MaxControllers)>
72 controllers{}; 72 controllers{};
diff --git a/src/core/hle/service/hid/irs.cpp b/src/core/hle/service/hid/irs.cpp
index 3c7f8b1ee..b427d4068 100644
--- a/src/core/hle/service/hid/irs.cpp
+++ b/src/core/hle/service/hid/irs.cpp
@@ -98,7 +98,7 @@ void IRS::GetImageTransferProcessorState(Kernel::HLERequestContext& ctx) {
98 98
99 IPC::ResponseBuilder rb{ctx, 5}; 99 IPC::ResponseBuilder rb{ctx, 5};
100 rb.Push(RESULT_SUCCESS); 100 rb.Push(RESULT_SUCCESS);
101 rb.PushRaw<u64>(CoreTiming::GetTicks()); 101 rb.PushRaw<u64>(Core::Timing::GetTicks());
102 rb.PushRaw<u32>(0); 102 rb.PushRaw<u32>(0);
103} 103}
104 104
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp
index d57a54ee8..88d80ba06 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp
@@ -184,7 +184,7 @@ u32 nvhost_ctrl_gpu::GetGpuTime(const std::vector<u8>& input, std::vector<u8>& o
184 184
185 IoctlGetGpuTime params{}; 185 IoctlGetGpuTime params{};
186 std::memcpy(&params, input.data(), input.size()); 186 std::memcpy(&params, input.data(), input.size());
187 params.gpu_time = CoreTiming::cyclesToNs(CoreTiming::GetTicks()); 187 params.gpu_time = Core::Timing::cyclesToNs(Core::Timing::GetTicks());
188 std::memcpy(output.data(), &params, output.size()); 188 std::memcpy(output.data(), &params, output.size());
189 return 0; 189 return 0;
190} 190}
diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h
index b171f256c..ab90d591e 100644
--- a/src/core/hle/service/nvflinger/buffer_queue.h
+++ b/src/core/hle/service/nvflinger/buffer_queue.h
@@ -13,10 +13,6 @@
13#include "core/hle/kernel/object.h" 13#include "core/hle/kernel/object.h"
14#include "core/hle/kernel/writable_event.h" 14#include "core/hle/kernel/writable_event.h"
15 15
16namespace CoreTiming {
17struct EventType;
18}
19
20namespace Service::NVFlinger { 16namespace Service::NVFlinger {
21 17
22struct IGBPBuffer { 18struct IGBPBuffer {
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp
index cde06916d..ce1b59860 100644
--- a/src/core/hle/service/nvflinger/nvflinger.cpp
+++ b/src/core/hle/service/nvflinger/nvflinger.cpp
@@ -25,21 +25,21 @@
25namespace Service::NVFlinger { 25namespace Service::NVFlinger {
26 26
27constexpr std::size_t SCREEN_REFRESH_RATE = 60; 27constexpr std::size_t SCREEN_REFRESH_RATE = 60;
28constexpr u64 frame_ticks = static_cast<u64>(CoreTiming::BASE_CLOCK_RATE / SCREEN_REFRESH_RATE); 28constexpr u64 frame_ticks = static_cast<u64>(Core::Timing::BASE_CLOCK_RATE / SCREEN_REFRESH_RATE);
29 29
30NVFlinger::NVFlinger() { 30NVFlinger::NVFlinger() {
31 // Schedule the screen composition events 31 // Schedule the screen composition events
32 composition_event = 32 composition_event =
33 CoreTiming::RegisterEvent("ScreenComposition", [this](u64 userdata, int cycles_late) { 33 Core::Timing::RegisterEvent("ScreenComposition", [this](u64 userdata, int cycles_late) {
34 Compose(); 34 Compose();
35 CoreTiming::ScheduleEvent(frame_ticks - cycles_late, composition_event); 35 Core::Timing::ScheduleEvent(frame_ticks - cycles_late, composition_event);
36 }); 36 });
37 37
38 CoreTiming::ScheduleEvent(frame_ticks, composition_event); 38 Core::Timing::ScheduleEvent(frame_ticks, composition_event);
39} 39}
40 40
41NVFlinger::~NVFlinger() { 41NVFlinger::~NVFlinger() {
42 CoreTiming::UnscheduleEvent(composition_event, 0); 42 Core::Timing::UnscheduleEvent(composition_event, 0);
43} 43}
44 44
45void NVFlinger::SetNVDrvInstance(std::shared_ptr<Nvidia::Module> instance) { 45void NVFlinger::SetNVDrvInstance(std::shared_ptr<Nvidia::Module> instance) {
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h
index 4c55e99f4..6d8bcbd30 100644
--- a/src/core/hle/service/nvflinger/nvflinger.h
+++ b/src/core/hle/service/nvflinger/nvflinger.h
@@ -14,7 +14,7 @@
14#include "common/common_types.h" 14#include "common/common_types.h"
15#include "core/hle/kernel/object.h" 15#include "core/hle/kernel/object.h"
16 16
17namespace CoreTiming { 17namespace Core::Timing {
18struct EventType; 18struct EventType;
19} 19}
20 20
@@ -115,8 +115,8 @@ private:
115 /// layers. 115 /// layers.
116 u32 next_buffer_queue_id = 1; 116 u32 next_buffer_queue_id = 1;
117 117
118 /// CoreTiming event that handles screen composition. 118 /// Event that handles screen composition.
119 CoreTiming::EventType* composition_event; 119 Core::Timing::EventType* composition_event;
120}; 120};
121 121
122} // namespace Service::NVFlinger 122} // namespace Service::NVFlinger
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp
index c13640ad8..efebd1b24 100644
--- a/src/core/hle/service/time/time.cpp
+++ b/src/core/hle/service/time/time.cpp
@@ -106,8 +106,8 @@ private:
106 void GetCurrentTimePoint(Kernel::HLERequestContext& ctx) { 106 void GetCurrentTimePoint(Kernel::HLERequestContext& ctx) {
107 LOG_DEBUG(Service_Time, "called"); 107 LOG_DEBUG(Service_Time, "called");
108 108
109 SteadyClockTimePoint steady_clock_time_point{ 109 const SteadyClockTimePoint steady_clock_time_point{
110 CoreTiming::cyclesToMs(CoreTiming::GetTicks()) / 1000}; 110 Core::Timing::cyclesToMs(Core::Timing::GetTicks()) / 1000};
111 IPC::ResponseBuilder rb{ctx, (sizeof(SteadyClockTimePoint) / 4) + 2}; 111 IPC::ResponseBuilder rb{ctx, (sizeof(SteadyClockTimePoint) / 4) + 2};
112 rb.Push(RESULT_SUCCESS); 112 rb.Push(RESULT_SUCCESS);
113 rb.PushRaw(steady_clock_time_point); 113 rb.PushRaw(steady_clock_time_point);
@@ -282,7 +282,7 @@ void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) {
282 } 282 }
283 283
284 const SteadyClockTimePoint steady_clock_time_point{ 284 const SteadyClockTimePoint steady_clock_time_point{
285 CoreTiming::cyclesToMs(CoreTiming::GetTicks()) / 1000, {}}; 285 Core::Timing::cyclesToMs(Core::Timing::GetTicks()) / 1000, {}};
286 286
287 CalendarTime calendar_time{}; 287 CalendarTime calendar_time{};
288 calendar_time.year = tm->tm_year + 1900; 288 calendar_time.year = tm->tm_year + 1900;
diff --git a/src/tests/core/core_timing.cpp b/src/tests/core/core_timing.cpp
index 2242c14cf..77607a755 100644
--- a/src/tests/core/core_timing.cpp
+++ b/src/tests/core/core_timing.cpp
@@ -31,10 +31,10 @@ void CallbackTemplate(u64 userdata, s64 cycles_late) {
31class ScopeInit final { 31class ScopeInit final {
32public: 32public:
33 ScopeInit() { 33 ScopeInit() {
34 CoreTiming::Init(); 34 Core::Timing::Init();
35 } 35 }
36 ~ScopeInit() { 36 ~ScopeInit() {
37 CoreTiming::Shutdown(); 37 Core::Timing::Shutdown();
38 } 38 }
39}; 39};
40 40
@@ -44,37 +44,37 @@ static void AdvanceAndCheck(u32 idx, int downcount, int expected_lateness = 0,
44 expected_callback = CB_IDS[idx]; 44 expected_callback = CB_IDS[idx];
45 lateness = expected_lateness; 45 lateness = expected_lateness;
46 46
47 CoreTiming::AddTicks(CoreTiming::GetDowncount() - 47 // Pretend we executed X cycles of instructions.
48 cpu_downcount); // Pretend we executed X cycles of instructions. 48 Core::Timing::AddTicks(Core::Timing::GetDowncount() - cpu_downcount);
49 CoreTiming::Advance(); 49 Core::Timing::Advance();
50 50
51 REQUIRE(decltype(callbacks_ran_flags)().set(idx) == callbacks_ran_flags); 51 REQUIRE(decltype(callbacks_ran_flags)().set(idx) == callbacks_ran_flags);
52 REQUIRE(downcount == CoreTiming::GetDowncount()); 52 REQUIRE(downcount == Core::Timing::GetDowncount());
53} 53}
54 54
55TEST_CASE("CoreTiming[BasicOrder]", "[core]") { 55TEST_CASE("CoreTiming[BasicOrder]", "[core]") {
56 ScopeInit guard; 56 ScopeInit guard;
57 57
58 CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); 58 Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>);
59 CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); 59 Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>);
60 CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", CallbackTemplate<2>); 60 Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", CallbackTemplate<2>);
61 CoreTiming::EventType* cb_d = CoreTiming::RegisterEvent("callbackD", CallbackTemplate<3>); 61 Core::Timing::EventType* cb_d = Core::Timing::RegisterEvent("callbackD", CallbackTemplate<3>);
62 CoreTiming::EventType* cb_e = CoreTiming::RegisterEvent("callbackE", CallbackTemplate<4>); 62 Core::Timing::EventType* cb_e = Core::Timing::RegisterEvent("callbackE", CallbackTemplate<4>);
63 63
64 // Enter slice 0 64 // Enter slice 0
65 CoreTiming::Advance(); 65 Core::Timing::Advance();
66 66
67 // D -> B -> C -> A -> E 67 // D -> B -> C -> A -> E
68 CoreTiming::ScheduleEvent(1000, cb_a, CB_IDS[0]); 68 Core::Timing::ScheduleEvent(1000, cb_a, CB_IDS[0]);
69 REQUIRE(1000 == CoreTiming::GetDowncount()); 69 REQUIRE(1000 == Core::Timing::GetDowncount());
70 CoreTiming::ScheduleEvent(500, cb_b, CB_IDS[1]); 70 Core::Timing::ScheduleEvent(500, cb_b, CB_IDS[1]);
71 REQUIRE(500 == CoreTiming::GetDowncount()); 71 REQUIRE(500 == Core::Timing::GetDowncount());
72 CoreTiming::ScheduleEvent(800, cb_c, CB_IDS[2]); 72 Core::Timing::ScheduleEvent(800, cb_c, CB_IDS[2]);
73 REQUIRE(500 == CoreTiming::GetDowncount()); 73 REQUIRE(500 == Core::Timing::GetDowncount());
74 CoreTiming::ScheduleEvent(100, cb_d, CB_IDS[3]); 74 Core::Timing::ScheduleEvent(100, cb_d, CB_IDS[3]);
75 REQUIRE(100 == CoreTiming::GetDowncount()); 75 REQUIRE(100 == Core::Timing::GetDowncount());
76 CoreTiming::ScheduleEvent(1200, cb_e, CB_IDS[4]); 76 Core::Timing::ScheduleEvent(1200, cb_e, CB_IDS[4]);
77 REQUIRE(100 == CoreTiming::GetDowncount()); 77 REQUIRE(100 == Core::Timing::GetDowncount());
78 78
79 AdvanceAndCheck(3, 400); 79 AdvanceAndCheck(3, 400);
80 AdvanceAndCheck(1, 300); 80 AdvanceAndCheck(1, 300);
@@ -86,36 +86,36 @@ TEST_CASE("CoreTiming[BasicOrder]", "[core]") {
86TEST_CASE("CoreTiming[Threadsave]", "[core]") { 86TEST_CASE("CoreTiming[Threadsave]", "[core]") {
87 ScopeInit guard; 87 ScopeInit guard;
88 88
89 CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); 89 Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>);
90 CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); 90 Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>);
91 CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", CallbackTemplate<2>); 91 Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", CallbackTemplate<2>);
92 CoreTiming::EventType* cb_d = CoreTiming::RegisterEvent("callbackD", CallbackTemplate<3>); 92 Core::Timing::EventType* cb_d = Core::Timing::RegisterEvent("callbackD", CallbackTemplate<3>);
93 CoreTiming::EventType* cb_e = CoreTiming::RegisterEvent("callbackE", CallbackTemplate<4>); 93 Core::Timing::EventType* cb_e = Core::Timing::RegisterEvent("callbackE", CallbackTemplate<4>);
94 94
95 // Enter slice 0 95 // Enter slice 0
96 CoreTiming::Advance(); 96 Core::Timing::Advance();
97 97
98 // D -> B -> C -> A -> E 98 // D -> B -> C -> A -> E
99 CoreTiming::ScheduleEventThreadsafe(1000, cb_a, CB_IDS[0]); 99 Core::Timing::ScheduleEventThreadsafe(1000, cb_a, CB_IDS[0]);
100 // Manually force since ScheduleEventThreadsafe doesn't call it 100 // Manually force since ScheduleEventThreadsafe doesn't call it
101 CoreTiming::ForceExceptionCheck(1000); 101 Core::Timing::ForceExceptionCheck(1000);
102 REQUIRE(1000 == CoreTiming::GetDowncount()); 102 REQUIRE(1000 == Core::Timing::GetDowncount());
103 CoreTiming::ScheduleEventThreadsafe(500, cb_b, CB_IDS[1]); 103 Core::Timing::ScheduleEventThreadsafe(500, cb_b, CB_IDS[1]);
104 // Manually force since ScheduleEventThreadsafe doesn't call it 104 // Manually force since ScheduleEventThreadsafe doesn't call it
105 CoreTiming::ForceExceptionCheck(500); 105 Core::Timing::ForceExceptionCheck(500);
106 REQUIRE(500 == CoreTiming::GetDowncount()); 106 REQUIRE(500 == Core::Timing::GetDowncount());
107 CoreTiming::ScheduleEventThreadsafe(800, cb_c, CB_IDS[2]); 107 Core::Timing::ScheduleEventThreadsafe(800, cb_c, CB_IDS[2]);
108 // Manually force since ScheduleEventThreadsafe doesn't call it 108 // Manually force since ScheduleEventThreadsafe doesn't call it
109 CoreTiming::ForceExceptionCheck(800); 109 Core::Timing::ForceExceptionCheck(800);
110 REQUIRE(500 == CoreTiming::GetDowncount()); 110 REQUIRE(500 == Core::Timing::GetDowncount());
111 CoreTiming::ScheduleEventThreadsafe(100, cb_d, CB_IDS[3]); 111 Core::Timing::ScheduleEventThreadsafe(100, cb_d, CB_IDS[3]);
112 // Manually force since ScheduleEventThreadsafe doesn't call it 112 // Manually force since ScheduleEventThreadsafe doesn't call it
113 CoreTiming::ForceExceptionCheck(100); 113 Core::Timing::ForceExceptionCheck(100);
114 REQUIRE(100 == CoreTiming::GetDowncount()); 114 REQUIRE(100 == Core::Timing::GetDowncount());
115 CoreTiming::ScheduleEventThreadsafe(1200, cb_e, CB_IDS[4]); 115 Core::Timing::ScheduleEventThreadsafe(1200, cb_e, CB_IDS[4]);
116 // Manually force since ScheduleEventThreadsafe doesn't call it 116 // Manually force since ScheduleEventThreadsafe doesn't call it
117 CoreTiming::ForceExceptionCheck(1200); 117 Core::Timing::ForceExceptionCheck(1200);
118 REQUIRE(100 == CoreTiming::GetDowncount()); 118 REQUIRE(100 == Core::Timing::GetDowncount());
119 119
120 AdvanceAndCheck(3, 400); 120 AdvanceAndCheck(3, 400);
121 AdvanceAndCheck(1, 300); 121 AdvanceAndCheck(1, 300);
@@ -143,42 +143,42 @@ TEST_CASE("CoreTiming[SharedSlot]", "[core]") {
143 143
144 ScopeInit guard; 144 ScopeInit guard;
145 145
146 CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", FifoCallback<0>); 146 Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", FifoCallback<0>);
147 CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", FifoCallback<1>); 147 Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", FifoCallback<1>);
148 CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", FifoCallback<2>); 148 Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", FifoCallback<2>);
149 CoreTiming::EventType* cb_d = CoreTiming::RegisterEvent("callbackD", FifoCallback<3>); 149 Core::Timing::EventType* cb_d = Core::Timing::RegisterEvent("callbackD", FifoCallback<3>);
150 CoreTiming::EventType* cb_e = CoreTiming::RegisterEvent("callbackE", FifoCallback<4>); 150 Core::Timing::EventType* cb_e = Core::Timing::RegisterEvent("callbackE", FifoCallback<4>);
151 151
152 CoreTiming::ScheduleEvent(1000, cb_a, CB_IDS[0]); 152 Core::Timing::ScheduleEvent(1000, cb_a, CB_IDS[0]);
153 CoreTiming::ScheduleEvent(1000, cb_b, CB_IDS[1]); 153 Core::Timing::ScheduleEvent(1000, cb_b, CB_IDS[1]);
154 CoreTiming::ScheduleEvent(1000, cb_c, CB_IDS[2]); 154 Core::Timing::ScheduleEvent(1000, cb_c, CB_IDS[2]);
155 CoreTiming::ScheduleEvent(1000, cb_d, CB_IDS[3]); 155 Core::Timing::ScheduleEvent(1000, cb_d, CB_IDS[3]);
156 CoreTiming::ScheduleEvent(1000, cb_e, CB_IDS[4]); 156 Core::Timing::ScheduleEvent(1000, cb_e, CB_IDS[4]);
157 157
158 // Enter slice 0 158 // Enter slice 0
159 CoreTiming::Advance(); 159 Core::Timing::Advance();
160 REQUIRE(1000 == CoreTiming::GetDowncount()); 160 REQUIRE(1000 == Core::Timing::GetDowncount());
161 161
162 callbacks_ran_flags = 0; 162 callbacks_ran_flags = 0;
163 counter = 0; 163 counter = 0;
164 lateness = 0; 164 lateness = 0;
165 CoreTiming::AddTicks(CoreTiming::GetDowncount()); 165 Core::Timing::AddTicks(Core::Timing::GetDowncount());
166 CoreTiming::Advance(); 166 Core::Timing::Advance();
167 REQUIRE(MAX_SLICE_LENGTH == CoreTiming::GetDowncount()); 167 REQUIRE(MAX_SLICE_LENGTH == Core::Timing::GetDowncount());
168 REQUIRE(0x1FULL == callbacks_ran_flags.to_ullong()); 168 REQUIRE(0x1FULL == callbacks_ran_flags.to_ullong());
169} 169}
170 170
171TEST_CASE("CoreTiming[PredictableLateness]", "[core]") { 171TEST_CASE("Core::Timing[PredictableLateness]", "[core]") {
172 ScopeInit guard; 172 ScopeInit guard;
173 173
174 CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); 174 Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>);
175 CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); 175 Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>);
176 176
177 // Enter slice 0 177 // Enter slice 0
178 CoreTiming::Advance(); 178 Core::Timing::Advance();
179 179
180 CoreTiming::ScheduleEvent(100, cb_a, CB_IDS[0]); 180 Core::Timing::ScheduleEvent(100, cb_a, CB_IDS[0]);
181 CoreTiming::ScheduleEvent(200, cb_b, CB_IDS[1]); 181 Core::Timing::ScheduleEvent(200, cb_b, CB_IDS[1]);
182 182
183 AdvanceAndCheck(0, 90, 10, -10); // (100 - 10) 183 AdvanceAndCheck(0, 90, 10, -10); // (100 - 10)
184 AdvanceAndCheck(1, MAX_SLICE_LENGTH, 50, -50); 184 AdvanceAndCheck(1, MAX_SLICE_LENGTH, 50, -50);
@@ -192,9 +192,10 @@ static void RescheduleCallback(u64 userdata, s64 cycles_late) {
192 REQUIRE(reschedules >= 0); 192 REQUIRE(reschedules >= 0);
193 REQUIRE(lateness == cycles_late); 193 REQUIRE(lateness == cycles_late);
194 194
195 if (reschedules > 0) 195 if (reschedules > 0) {
196 CoreTiming::ScheduleEvent(1000, reinterpret_cast<CoreTiming::EventType*>(userdata), 196 Core::Timing::ScheduleEvent(1000, reinterpret_cast<Core::Timing::EventType*>(userdata),
197 userdata); 197 userdata);
198 }
198} 199}
199} // namespace ChainSchedulingTest 200} // namespace ChainSchedulingTest
200 201
@@ -203,35 +204,35 @@ TEST_CASE("CoreTiming[ChainScheduling]", "[core]") {
203 204
204 ScopeInit guard; 205 ScopeInit guard;
205 206
206 CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); 207 Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>);
207 CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); 208 Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>);
208 CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", CallbackTemplate<2>); 209 Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", CallbackTemplate<2>);
209 CoreTiming::EventType* cb_rs = 210 Core::Timing::EventType* cb_rs =
210 CoreTiming::RegisterEvent("callbackReschedule", RescheduleCallback); 211 Core::Timing::RegisterEvent("callbackReschedule", RescheduleCallback);
211 212
212 // Enter slice 0 213 // Enter slice 0
213 CoreTiming::Advance(); 214 Core::Timing::Advance();
214 215
215 CoreTiming::ScheduleEvent(800, cb_a, CB_IDS[0]); 216 Core::Timing::ScheduleEvent(800, cb_a, CB_IDS[0]);
216 CoreTiming::ScheduleEvent(1000, cb_b, CB_IDS[1]); 217 Core::Timing::ScheduleEvent(1000, cb_b, CB_IDS[1]);
217 CoreTiming::ScheduleEvent(2200, cb_c, CB_IDS[2]); 218 Core::Timing::ScheduleEvent(2200, cb_c, CB_IDS[2]);
218 CoreTiming::ScheduleEvent(1000, cb_rs, reinterpret_cast<u64>(cb_rs)); 219 Core::Timing::ScheduleEvent(1000, cb_rs, reinterpret_cast<u64>(cb_rs));
219 REQUIRE(800 == CoreTiming::GetDowncount()); 220 REQUIRE(800 == Core::Timing::GetDowncount());
220 221
221 reschedules = 3; 222 reschedules = 3;
222 AdvanceAndCheck(0, 200); // cb_a 223 AdvanceAndCheck(0, 200); // cb_a
223 AdvanceAndCheck(1, 1000); // cb_b, cb_rs 224 AdvanceAndCheck(1, 1000); // cb_b, cb_rs
224 REQUIRE(2 == reschedules); 225 REQUIRE(2 == reschedules);
225 226
226 CoreTiming::AddTicks(CoreTiming::GetDowncount()); 227 Core::Timing::AddTicks(Core::Timing::GetDowncount());
227 CoreTiming::Advance(); // cb_rs 228 Core::Timing::Advance(); // cb_rs
228 REQUIRE(1 == reschedules); 229 REQUIRE(1 == reschedules);
229 REQUIRE(200 == CoreTiming::GetDowncount()); 230 REQUIRE(200 == Core::Timing::GetDowncount());
230 231
231 AdvanceAndCheck(2, 800); // cb_c 232 AdvanceAndCheck(2, 800); // cb_c
232 233
233 CoreTiming::AddTicks(CoreTiming::GetDowncount()); 234 Core::Timing::AddTicks(Core::Timing::GetDowncount());
234 CoreTiming::Advance(); // cb_rs 235 Core::Timing::Advance(); // cb_rs
235 REQUIRE(0 == reschedules); 236 REQUIRE(0 == reschedules);
236 REQUIRE(MAX_SLICE_LENGTH == CoreTiming::GetDowncount()); 237 REQUIRE(MAX_SLICE_LENGTH == Core::Timing::GetDowncount());
237} 238}
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index 10eae6a65..19b6b14b2 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -317,7 +317,7 @@ void Maxwell3D::ProcessQueryGet() {
317 LongQueryResult query_result{}; 317 LongQueryResult query_result{};
318 query_result.value = result; 318 query_result.value = result;
319 // TODO(Subv): Generate a real GPU timestamp and write it here instead of CoreTiming 319 // TODO(Subv): Generate a real GPU timestamp and write it here instead of CoreTiming
320 query_result.timestamp = CoreTiming::GetTicks(); 320 query_result.timestamp = Core::Timing::GetTicks();
321 Memory::WriteBlock(*address, &query_result, sizeof(query_result)); 321 Memory::WriteBlock(*address, &query_result, sizeof(query_result));
322 } 322 }
323 dirty_flags.OnMemoryWrite(); 323 dirty_flags.OnMemoryWrite();
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp
index 96c42b8a0..018363f95 100644
--- a/src/video_core/gpu.cpp
+++ b/src/video_core/gpu.cpp
@@ -282,7 +282,7 @@ void GPU::ProcessSemaphoreTriggerMethod() {
282 block.sequence = regs.semaphore_sequence; 282 block.sequence = regs.semaphore_sequence;
283 // TODO(Kmather73): Generate a real GPU timestamp and write it here instead of 283 // TODO(Kmather73): Generate a real GPU timestamp and write it here instead of
284 // CoreTiming 284 // CoreTiming
285 block.timestamp = CoreTiming::GetTicks(); 285 block.timestamp = Core::Timing::GetTicks();
286 Memory::WriteBlock(*address, &block, sizeof(block)); 286 Memory::WriteBlock(*address, &block, sizeof(block));
287 } else { 287 } else {
288 const auto address = 288 const auto address =
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index 6476a9e1a..843c034e7 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -137,7 +137,7 @@ void RendererOpenGL::SwapBuffers(
137 137
138 render_window.PollEvents(); 138 render_window.PollEvents();
139 139
140 Core::System::GetInstance().FrameLimiter().DoFrameLimiting(CoreTiming::GetGlobalTimeUs()); 140 Core::System::GetInstance().FrameLimiter().DoFrameLimiting(Core::Timing::GetGlobalTimeUs());
141 Core::System::GetInstance().GetPerfStats().BeginSystemFrame(); 141 Core::System::GetInstance().GetPerfStats().BeginSystemFrame();
142 142
143 // Restore the rasterizer state 143 // Restore the rasterizer state