Huw Davies : kernel32: Forward GetSystemTimeAsFileTime() to NtQuerySystemTime().

Alexandre Julliard julliard at winehq.org
Wed May 15 16:18:26 CDT 2019


Module: wine
Branch: master
Commit: 71dc2514c3461448b411950e8722fb4e10c54a41
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=71dc2514c3461448b411950e8722fb4e10c54a41

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed May 15 11:45:52 2019 +0100

kernel32: Forward GetSystemTimeAsFileTime() to NtQuerySystemTime().

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>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 8346575..f887b1d 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 8bbad2b..536f233 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 8805c81..3affb72 100644
--- a/dlls/kernel32/time.c
+++ b/dlls/kernel32/time.c
@@ -751,27 +751,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.@)
  *
  *  Get the current time in utc format with greater accuracy.




More information about the wine-cvs mailing list