From 82151d407d8021fa8865cf8dd51c4d5cf0a4b702 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Sat, 25 Nov 2017 14:56:57 +0100 Subject: CoreTiming: Reworked CoreTiming (cherry-picked from Citra #3119) * CoreTiming: New CoreTiming; Add Test for CoreTiming --- src/core/hle/kernel/thread.cpp | 5 ++--- src/core/hle/kernel/timer.cpp | 9 +++------ src/core/hle/shared_page.cpp | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) (limited to 'src/core/hle') diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 9132d1d77..f9d821a80 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -26,7 +26,7 @@ namespace Kernel { /// Event type for the thread wake up event -static int ThreadWakeupEventType; +static CoreTiming::EventType* ThreadWakeupEventType = nullptr; bool Thread::ShouldWait(Thread* thread) const { return status != THREADSTATUS_DEAD; @@ -265,8 +265,7 @@ void Thread::WakeAfterDelay(s64 nanoseconds) { if (nanoseconds == -1) return; - u64 microseconds = nanoseconds / 1000; - CoreTiming::ScheduleEvent(usToCycles(microseconds), ThreadWakeupEventType, callback_handle); + CoreTiming::ScheduleEvent(nsToCycles(nanoseconds), ThreadWakeupEventType, callback_handle); } void Thread::ResumeFromWait() { diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp index d7ec93672..a93a6c87a 100644 --- a/src/core/hle/kernel/timer.cpp +++ b/src/core/hle/kernel/timer.cpp @@ -14,7 +14,7 @@ namespace Kernel { /// The event type of the generic timer callback event -static int timer_callback_event_type; +static CoreTiming::EventType* timer_callback_event_type = nullptr; // TODO(yuriks): This can be removed if Timer objects are explicitly pooled in the future, allowing // us to simply use a pool index or similar. static Kernel::HandleTable timer_callback_handle_table; @@ -57,9 +57,7 @@ void Timer::Set(s64 initial, s64 interval) { // Immediately invoke the callback Signal(0); } else { - u64 initial_microseconds = initial / 1000; - CoreTiming::ScheduleEvent(usToCycles(initial_microseconds), timer_callback_event_type, - callback_handle); + CoreTiming::ScheduleEvent(nsToCycles(initial), timer_callback_event_type, callback_handle); } } @@ -88,8 +86,7 @@ void Timer::Signal(int cycles_late) { if (interval_delay != 0) { // Reschedule the timer with the interval delay - u64 interval_microseconds = interval_delay / 1000; - CoreTiming::ScheduleEvent(usToCycles(interval_microseconds) - cycles_late, + CoreTiming::ScheduleEvent(nsToCycles(interval_delay) - cycles_late, timer_callback_event_type, callback_handle); } } diff --git a/src/core/hle/shared_page.cpp b/src/core/hle/shared_page.cpp index 833dc5ec9..9ce8af961 100644 --- a/src/core/hle/shared_page.cpp +++ b/src/core/hle/shared_page.cpp @@ -14,7 +14,7 @@ namespace SharedPage { SharedPageDef shared_page; -static int update_time_event; +static CoreTiming::EventType* update_time_event; /// Gets system time in 3DS format. The epoch is Jan 1900, and the unit is millisecond. static u64 GetSystemTime() { @@ -56,7 +56,7 @@ static void UpdateTimeCallback(u64 userdata, int cycles_late) { date_time.date_time = GetSystemTime(); date_time.update_tick = CoreTiming::GetTicks(); - date_time.tick_to_second_coefficient = g_clock_rate_arm11; + date_time.tick_to_second_coefficient = BASE_CLOCK_RATE; date_time.tick_offset = 0; ++shared_page.date_time_counter; -- cgit v1.2.3