diff options
| author | lizzie <lizzie@eden-emu.dev> | 2025-11-30 06:04:36 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-11-30 06:04:36 +0100 |
| commit | c72144abad7405ab883422c2c117bc2914e457db (patch) | |
| tree | 132cf271885a084d513b338b8014bc5467669db7 /src/common/steady_clock.cpp | |
| parent | d656e347c851b6aa0e1624b8864bc061788b2e2e (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.cpp | 27 |
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 |
