[PATCH 4/4] kernel32: Forward GetSystemTimeAsFileTime() to NtQuerySystemTime().

Huw Davies huw at codeweavers.com
Wed May 15 05:45:52 CDT 2019


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 at 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.@)
  *
-- 
2.17.1




More information about the wine-devel mailing list