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@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Huw Davies 2019-05-15 11:45:52 +01:00 committed by Alexandre Julliard
parent a94a21026d
commit 71dc2514c3
3 changed files with 16 additions and 22 deletions

View File

@ -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)

View File

@ -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();
}

View File

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