Files
eden/src/common/x64/native_clock.cpp
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

51 lines
1.6 KiB
C++
Raw Normal View History

// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
2020-02-10 11:20:40 -04:00
#include "common/uint128.h"
#include "common/x64/native_clock.h"
2023-04-22 23:08:28 -04:00
#include "common/x64/rdtsc.h"
2023-04-22 23:08:28 -04:00
namespace Common::X64 {
2022-04-02 21:54:39 +01:00
2023-04-22 23:08:28 -04:00
NativeClock::NativeClock(u64 rdtsc_frequency_)
: start_ticks{FencedRDTSC()}, rdtsc_frequency{rdtsc_frequency_},
ns_rdtsc_factor{GetFixedPoint64Factor(NsRatio::den, rdtsc_frequency)},
us_rdtsc_factor{GetFixedPoint64Factor(UsRatio::den, rdtsc_frequency)},
ms_rdtsc_factor{GetFixedPoint64Factor(MsRatio::den, rdtsc_frequency)},
2023-05-28 17:45:47 -04:00
cntpct_rdtsc_factor{GetFixedPoint64Factor(CNTFRQ, rdtsc_frequency)},
gputick_rdtsc_factor{GetFixedPoint64Factor(GPUTickFreq, rdtsc_frequency)} {}
2023-04-22 23:08:28 -04:00
std::chrono::nanoseconds NativeClock::GetTimeNS() const {
return std::chrono::nanoseconds{MultiplyHigh(GetHostTicksElapsed(), ns_rdtsc_factor)};
2022-04-02 21:54:39 +01:00
}
2023-04-22 23:08:28 -04:00
std::chrono::microseconds NativeClock::GetTimeUS() const {
return std::chrono::microseconds{MultiplyHigh(GetHostTicksElapsed(), us_rdtsc_factor)};
}
2023-04-22 23:08:28 -04:00
std::chrono::milliseconds NativeClock::GetTimeMS() const {
return std::chrono::milliseconds{MultiplyHigh(GetHostTicksElapsed(), ms_rdtsc_factor)};
}
2023-04-22 23:08:28 -04:00
u64 NativeClock::GetCNTPCT() const {
return MultiplyHigh(GetHostTicksElapsed(), cntpct_rdtsc_factor);
}
2023-05-28 17:45:47 -04:00
u64 NativeClock::GetGPUTick() const {
return MultiplyHigh(GetHostTicksElapsed(), gputick_rdtsc_factor);
}
2023-04-22 23:08:28 -04:00
u64 NativeClock::GetHostTicksNow() const {
return FencedRDTSC();
}
2023-04-22 23:08:28 -04:00
u64 NativeClock::GetHostTicksElapsed() const {
return FencedRDTSC() - start_ticks;
}
2023-04-22 23:08:28 -04:00
bool NativeClock::IsNative() const {
return true;
}
2023-04-22 23:08:28 -04:00
} // namespace Common::X64