This relies on FILETIME and LARGE_INTEGER having the same layout.
On an i7-8700 CPU @ 3.20GHz with HZ=1000 it cuts the call cost from ~18ns to ~12ns.
Signed-off-by: Huw Davies huw@codeweavers.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/tests/time.c | 15 +++++++++++++++ dlls/kernel32/time.c | 21 --------------------- 3 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 8346575ac6..f887b1dc8c 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -832,7 +832,7 @@ @ stdcall GetSystemRegistryQuota(ptr ptr) @ stdcall GetSystemTime(ptr) @ stdcall GetSystemTimeAdjustment(ptr ptr ptr) -@ stdcall GetSystemTimeAsFileTime(ptr) +@ stdcall GetSystemTimeAsFileTime(ptr) ntdll.NtQuerySystemTime @ stdcall GetSystemTimePreciseAsFileTime(ptr) @ stdcall GetSystemTimes(ptr ptr ptr) @ stdcall GetSystemWindowsDirectoryA(ptr long) diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c index 8bbad2b8a2..536f23359b 100644 --- a/dlls/kernel32/tests/time.c +++ b/dlls/kernel32/tests/time.c @@ -773,6 +773,20 @@ static ULONGLONG get_longlong_time(FILETIME *time) return uli.QuadPart; }
+static void test_GetSystemTimeAsFileTime(void) +{ + LARGE_INTEGER t1, t2, t3; + FILETIME ft; + + NtQuerySystemTime( &t1 ); + GetSystemTimeAsFileTime( &ft ); + NtQuerySystemTime( &t3 ); + t2.QuadPart = get_longlong_time( &ft ); + + ok(t1.QuadPart <= t2.QuadPart, "out of order %s %s\n", wine_dbgstr_longlong(t1.QuadPart), wine_dbgstr_longlong(t2.QuadPart)); + ok(t2.QuadPart <= t3.QuadPart, "out of order %s %s\n", wine_dbgstr_longlong(t2.QuadPart), wine_dbgstr_longlong(t3.QuadPart)); +} + static void test_GetSystemTimePreciseAsFileTime(void) { FILETIME ft; @@ -1012,6 +1026,7 @@ START_TEST(time) test_FileTimeToDosDateTime(); test_GetCalendarInfo(); test_GetDynamicTimeZoneInformation(); + test_GetSystemTimeAsFileTime(); test_GetSystemTimePreciseAsFileTime(); test_GetTimeZoneInformationForYear(); } diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c index 8805c81aaa..3affb725ef 100644 --- a/dlls/kernel32/time.c +++ b/dlls/kernel32/time.c @@ -750,27 +750,6 @@ BOOL WINAPI TzSpecificLocalTimeToSystemTime( }
-/*********************************************************************** - * GetSystemTimeAsFileTime (KERNEL32.@) - * - * Get the current time in utc format. - * - * PARAMS - * time [out] Destination for the current utc time - * - * RETURNS - * Nothing. - */ -void WINAPI GetSystemTimeAsFileTime( FILETIME *time ) -{ - LARGE_INTEGER t; - - NtQuerySystemTime( &t ); - time->dwLowDateTime = t.u.LowPart; - time->dwHighDateTime = t.u.HighPart; -} - - /*********************************************************************** * GetSystemTimePreciseAsFileTime (KERNEL32.@) *
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=52256
Your paranoid android.
=== debian9 (build log) ===
error: patch failed: dlls/kernel32/time.c:750 Task: Patch failed to apply
=== debian9 (build log) ===
error: patch failed: dlls/kernel32/time.c:750 Task: Patch failed to apply
On Wed, May 15, 2019 at 06:04:47AM -0500, Marvin wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=52256
Your paranoid android.
=== debian9 (build log) ===
error: patch failed: dlls/kernel32/time.c:750 Task: Patch failed to apply
Works for me.
Huw.