diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/k_scheduler.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc/svc_info.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc/svc_tick.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hidbus.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/nvnflinger/nvnflinger.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/service/time/clock_types.h | 13 | ||||
| -rw-r--r-- | src/core/hle/service/time/standard_steady_clock_core.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/time/tick_based_steady_clock_core.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/time/time.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/time/time_sharedmemory.cpp | 5 | 
11 files changed, 24 insertions, 27 deletions
| diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index faa12b4f0..75ce5a23c 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp @@ -184,7 +184,8 @@ u64 KScheduler::UpdateHighestPriorityThread(KThread* highest_thread) {          prev_highest_thread != highest_thread) [[likely]] {          if (prev_highest_thread != nullptr) [[likely]] {              IncrementScheduledCount(prev_highest_thread); -            prev_highest_thread->SetLastScheduledTick(m_kernel.System().CoreTiming().GetCPUTicks()); +            prev_highest_thread->SetLastScheduledTick( +                m_kernel.System().CoreTiming().GetClockTicks());          }          if (m_state.should_count_idle) {              if (highest_thread != nullptr) [[likely]] { @@ -351,7 +352,7 @@ void KScheduler::SwitchThread(KThread* next_thread) {      // Update the CPU time tracking variables.      const s64 prev_tick = m_last_context_switch_time; -    const s64 cur_tick = m_kernel.System().CoreTiming().GetCPUTicks(); +    const s64 cur_tick = m_kernel.System().CoreTiming().GetClockTicks();      const s64 tick_diff = cur_tick - prev_tick;      cur_thread->AddCpuTime(m_core_id, tick_diff);      if (cur_process != nullptr) { diff --git a/src/core/hle/kernel/svc/svc_info.cpp b/src/core/hle/kernel/svc/svc_info.cpp index 2b2c878b5..445cdd87b 100644 --- a/src/core/hle/kernel/svc/svc_info.cpp +++ b/src/core/hle/kernel/svc/svc_info.cpp @@ -199,9 +199,9 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle          if (same_thread && info_sub_id == 0xFFFFFFFFFFFFFFFF) {              const u64 thread_ticks = current_thread->GetCpuTime(); -            out_ticks = thread_ticks + (core_timing.GetCPUTicks() - prev_ctx_ticks); +            out_ticks = thread_ticks + (core_timing.GetClockTicks() - prev_ctx_ticks);          } else if (same_thread && info_sub_id == system.Kernel().CurrentPhysicalCoreIndex()) { -            out_ticks = core_timing.GetCPUTicks() - prev_ctx_ticks; +            out_ticks = core_timing.GetClockTicks() - prev_ctx_ticks;          }          *result = out_ticks; diff --git a/src/core/hle/kernel/svc/svc_tick.cpp b/src/core/hle/kernel/svc/svc_tick.cpp index 561336482..7dd7c6e51 100644 --- a/src/core/hle/kernel/svc/svc_tick.cpp +++ b/src/core/hle/kernel/svc/svc_tick.cpp @@ -12,16 +12,8 @@ namespace Kernel::Svc {  int64_t GetSystemTick(Core::System& system) {      LOG_TRACE(Kernel_SVC, "called"); -    auto& core_timing = system.CoreTiming(); -      // Returns the value of cntpct_el0 (https://switchbrew.org/wiki/SVC#svcGetSystemTick) -    const u64 result{core_timing.GetClockTicks()}; - -    if (!system.Kernel().IsMulticore()) { -        core_timing.AddTicks(400U); -    } - -    return static_cast<int64_t>(result); +    return static_cast<int64_t>(system.CoreTiming().GetClockTicks());  }  int64_t GetSystemTick64(Core::System& system) { diff --git a/src/core/hle/service/hid/hidbus.cpp b/src/core/hle/service/hid/hidbus.cpp index 5604a6fda..80aac221b 100644 --- a/src/core/hle/service/hid/hidbus.cpp +++ b/src/core/hle/service/hid/hidbus.cpp @@ -5,7 +5,6 @@  #include "common/settings.h"  #include "core/core.h"  #include "core/core_timing.h" -#include "core/core_timing_util.h"  #include "core/hid/hid_types.h"  #include "core/hle/kernel/k_event.h"  #include "core/hle/kernel/k_readable_event.h" diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index 5a5b2e305..0fe242e9d 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -51,8 +51,8 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, android::PixelFormat form                                                 stride, format, transform, crop_rect};      system.GPU().RequestSwapBuffers(&framebuffer, fences, num_fences); -    system.GetPerfStats().EndSystemFrame();      system.SpeedLimiter().DoSpeedLimiting(system.CoreTiming().GetGlobalTimeUs()); +    system.GetPerfStats().EndSystemFrame();      system.GetPerfStats().BeginSystemFrame();  } diff --git a/src/core/hle/service/nvnflinger/nvnflinger.cpp b/src/core/hle/service/nvnflinger/nvnflinger.cpp index da2d5890f..b41c6240c 100644 --- a/src/core/hle/service/nvnflinger/nvnflinger.cpp +++ b/src/core/hle/service/nvnflinger/nvnflinger.cpp @@ -70,7 +70,8 @@ Nvnflinger::Nvnflinger(Core::System& system_, HosBinderDriverServer& hos_binder_          [this](std::uintptr_t, s64 time,                 std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> {              vsync_signal.store(true); -            vsync_signal.notify_all(); +            { const auto lock_guard = Lock(); } +            vsync_signal.notify_one();              return std::chrono::nanoseconds(GetNextTicks());          }); diff --git a/src/core/hle/service/time/clock_types.h b/src/core/hle/service/time/clock_types.h index e6293ffb9..9fc01ea90 100644 --- a/src/core/hle/service/time/clock_types.h +++ b/src/core/hle/service/time/clock_types.h @@ -3,6 +3,8 @@  #pragma once +#include <ratio> +  #include "common/common_funcs.h"  #include "common/common_types.h"  #include "common/uuid.h" @@ -74,18 +76,19 @@ static_assert(std::is_trivially_copyable_v<ContinuousAdjustmentTimePoint>,  /// https://switchbrew.org/wiki/Glue_services#TimeSpanType  struct TimeSpanType {      s64 nanoseconds{}; -    static constexpr s64 ns_per_second{1000000000ULL};      s64 ToSeconds() const { -        return nanoseconds / ns_per_second; +        return nanoseconds / std::nano::den;      }      static TimeSpanType FromSeconds(s64 seconds) { -        return {seconds * ns_per_second}; +        return {seconds * std::nano::den};      } -    static TimeSpanType FromTicks(u64 ticks, u64 frequency) { -        return FromSeconds(static_cast<s64>(ticks) / static_cast<s64>(frequency)); +    template <u64 Frequency> +    static TimeSpanType FromTicks(u64 ticks) { +        using TicksToNSRatio = std::ratio<std::nano::den, Frequency>; +        return {static_cast<s64>(ticks * TicksToNSRatio::num / TicksToNSRatio::den)};      }  };  static_assert(sizeof(TimeSpanType) == 8, "TimeSpanType is incorrect size"); diff --git a/src/core/hle/service/time/standard_steady_clock_core.cpp b/src/core/hle/service/time/standard_steady_clock_core.cpp index 3dbbb9850..5627b7003 100644 --- a/src/core/hle/service/time/standard_steady_clock_core.cpp +++ b/src/core/hle/service/time/standard_steady_clock_core.cpp @@ -10,7 +10,7 @@ namespace Service::Time::Clock {  TimeSpanType StandardSteadyClockCore::GetCurrentRawTimePoint(Core::System& system) {      const TimeSpanType ticks_time_span{ -        TimeSpanType::FromTicks(system.CoreTiming().GetClockTicks(), Core::Hardware::CNTFREQ)}; +        TimeSpanType::FromTicks<Core::Hardware::CNTFREQ>(system.CoreTiming().GetClockTicks())};      TimeSpanType raw_time_point{setup_value.nanoseconds + ticks_time_span.nanoseconds};      if (raw_time_point.nanoseconds < cached_raw_time_point.nanoseconds) { diff --git a/src/core/hle/service/time/tick_based_steady_clock_core.cpp b/src/core/hle/service/time/tick_based_steady_clock_core.cpp index 27600413e..0d9fb3143 100644 --- a/src/core/hle/service/time/tick_based_steady_clock_core.cpp +++ b/src/core/hle/service/time/tick_based_steady_clock_core.cpp @@ -10,7 +10,7 @@ namespace Service::Time::Clock {  SteadyClockTimePoint TickBasedSteadyClockCore::GetTimePoint(Core::System& system) {      const TimeSpanType ticks_time_span{ -        TimeSpanType::FromTicks(system.CoreTiming().GetClockTicks(), Core::Hardware::CNTFREQ)}; +        TimeSpanType::FromTicks<Core::Hardware::CNTFREQ>(system.CoreTiming().GetClockTicks())};      return {ticks_time_span.ToSeconds(), GetClockSourceId()};  } diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp index 868be60c5..7197ca30f 100644 --- a/src/core/hle/service/time/time.cpp +++ b/src/core/hle/service/time/time.cpp @@ -240,8 +240,8 @@ void Module::Interface::CalculateMonotonicSystemClockBaseTimePoint(HLERequestCon      const auto current_time_point{steady_clock_core.GetCurrentTimePoint(system)};      if (current_time_point.clock_source_id == context.steady_time_point.clock_source_id) { -        const auto ticks{Clock::TimeSpanType::FromTicks(system.CoreTiming().GetClockTicks(), -                                                        Core::Hardware::CNTFREQ)}; +        const auto ticks{Clock::TimeSpanType::FromTicks<Core::Hardware::CNTFREQ>( +            system.CoreTiming().GetClockTicks())};          const s64 base_time_point{context.offset + current_time_point.time_point -                                    ticks.ToSeconds()};          IPC::ResponseBuilder rb{ctx, (sizeof(s64) / 4) + 2}; diff --git a/src/core/hle/service/time/time_sharedmemory.cpp b/src/core/hle/service/time/time_sharedmemory.cpp index ce1c85bcc..a00676669 100644 --- a/src/core/hle/service/time/time_sharedmemory.cpp +++ b/src/core/hle/service/time/time_sharedmemory.cpp @@ -21,8 +21,9 @@ SharedMemory::~SharedMemory() = default;  void SharedMemory::SetupStandardSteadyClock(const Common::UUID& clock_source_id,                                              Clock::TimeSpanType current_time_point) { -    const Clock::TimeSpanType ticks_time_span{Clock::TimeSpanType::FromTicks( -        system.CoreTiming().GetClockTicks(), Core::Hardware::CNTFREQ)}; +    const Clock::TimeSpanType ticks_time_span{ +        Clock::TimeSpanType::FromTicks<Core::Hardware::CNTFREQ>( +            system.CoreTiming().GetClockTicks())};      const Clock::SteadyClockContext context{          static_cast<u64>(current_time_point.nanoseconds - ticks_time_span.nanoseconds),          clock_source_id}; | 
