aboutsummaryrefslogtreecommitdiff
path: root/src/common/steady_clock.cpp
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2025-11-30 06:04:36 +0100
committercrueter <crueter@eden-emu.dev>2025-11-30 06:04:36 +0100
commitc72144abad7405ab883422c2c117bc2914e457db (patch)
tree132cf271885a084d513b338b8014bc5467669db7 /src/common/steady_clock.cpp
parentd656e347c851b6aa0e1624b8864bc061788b2e2e (diff)
[port] windows 7 support (#3105)
Signed-off-by: lizzie lizzie@eden-emu.dev Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3105 Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Reviewed-by: crueter <crueter@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/common/steady_clock.cpp')
-rw-r--r--src/common/steady_clock.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/common/steady_clock.cpp b/src/common/steady_clock.cpp
index 9415eed29b..9c3d73659e 100644
--- a/src/common/steady_clock.cpp
+++ b/src/common/steady_clock.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -25,15 +28,21 @@ static s64 WindowsQueryPerformanceCounter() {
}
static s64 GetSystemTimeNS() {
- // GetSystemTimePreciseAsFileTime returns the file time in 100ns units.
- static constexpr s64 Multiplier = 100;
- // Convert Windows epoch to Unix epoch.
- static constexpr s64 WindowsEpochToUnixEpoch = 0x19DB1DED53E8000LL;
-
- FILETIME filetime;
- GetSystemTimePreciseAsFileTime(&filetime);
- return Multiplier * ((static_cast<s64>(filetime.dwHighDateTime) << 32) +
- static_cast<s64>(filetime.dwLowDateTime) - WindowsEpochToUnixEpoch);
+ static auto pf = (decltype(&GetSystemTimePreciseAsFileTime))(void*)GetProcAddress(GetModuleHandle(TEXT("Kernel32.dll")), "GetSystemTimePreciseAsFileTime"); // Windows 8+
+ if (pf) {
+ // GetSystemTimePreciseAsFileTime returns the file time in 100ns units.
+ constexpr s64 Multiplier = 100;
+ // Convert Windows epoch to Unix epoch.
+ constexpr s64 WindowsEpochToUnixEpoch = 0x19DB1DED53E8000LL;
+ FILETIME filetime;
+ pf(&filetime);
+ return Multiplier * ((s64(filetime.dwHighDateTime) << 32) + s64(filetime.dwLowDateTime) - WindowsEpochToUnixEpoch);
+ } else {
+ // Only Windows XP and below error out here
+ LARGE_INTEGER ticks;
+ QueryPerformanceCounter(&ticks);
+ return ticks.QuadPart;
+ }
}
#endif