diff options
Diffstat (limited to 'base/gp_win32.c')
-rw-r--r-- | base/gp_win32.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/base/gp_win32.c b/base/gp_win32.c index ed6516b2..e04a7e45 100644 --- a/base/gp_win32.c +++ b/base/gp_win32.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2020 Artifex Software, Inc. +/* Copyright (C) 2001-2021 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -70,24 +70,16 @@ gp_get_realtime(long *pdt) void gp_get_usertime(long *pdt) { + FILETIME CreationTime, ExitTime, KernelTime, UserTime; - LARGE_INTEGER freq; - LARGE_INTEGER count; - LARGE_INTEGER seconds; - - if (!QueryPerformanceFrequency(&freq)) { + if (!GetProcessTimes(GetCurrentProcess(), &CreationTime, &ExitTime, &KernelTime, &UserTime)) gp_get_realtime(pdt); /* use previous method if high-res perf counter not available */ - return; + else { + ULONGLONG t = (ULONGLONG)UserTime.dwLowDateTime + (ULONGLONG)KernelTime.dwLowDateTime + + (((ULONGLONG)UserTime.dwHighDateTime + (ULONGLONG)KernelTime.dwHighDateTime) << 32); + pdt[0] = (long)(t / 10000000); + pdt[1] = (long)(t % 10000000)*100; } - /* Get the high resolution time as seconds and nanoseconds */ - QueryPerformanceCounter(&count); - - seconds.QuadPart = (count.QuadPart / freq.QuadPart); - pdt[0] = seconds.LowPart; - count.QuadPart -= freq.QuadPart * seconds.QuadPart; - count.QuadPart *= 1000000000; /* we want nanoseconds */ - count.QuadPart /= freq.QuadPart; - pdt[1] = count.LowPart; } /* ------ Console management ------ */ |