From cea3f016db7797959a5facb0a05be3875e920a45 Mon Sep 17 00:00:00 2001 From: Louis Lenders Date: Sun, 12 Dec 2010 23:14:47 +0100 Subject: ntdll: Change NtQuerySystemInformation to return 100ns ticks for SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION info class --- dlls/ntdll/nt.c | 23 ++++++++++++++--------- 1 files changed, 14 insertions(+), 9 deletions(-) diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 7ad56e4..034c8d6 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -66,6 +66,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(ntdll); +#define USER_HZ_TO_TICKSPERSEC(x,y) (ULONGLONG)10000000 * x / y + /* * Token */ @@ -1591,6 +1593,9 @@ NTSTATUS WINAPI NtQuerySystemInformation( int count; char name[10]; char line[255]; + static long user_hz; + + user_hz = sysconf(_SC_CLK_TCK); /* first line is combined usage */ if (fgets(line,255,cpuinfo)) @@ -1603,9 +1608,9 @@ NTSTATUS WINAPI NtQuerySystemInformation( { sppi = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)); - sppi->IdleTime.QuadPart = idle; - sppi->KernelTime.QuadPart = sys; - sppi->UserTime.QuadPart = usr; + sppi->IdleTime.QuadPart = USER_HZ_TO_TICKSPERSEC(idle, user_hz); + sppi->KernelTime.QuadPart = USER_HZ_TO_TICKSPERSEC(sys, user_hz); + sppi->UserTime.QuadPart = USER_HZ_TO_TICKSPERSEC(usr, user_hz); cpus = 1; len = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION); } @@ -1622,17 +1627,17 @@ NTSTATUS WINAPI NtQuerySystemInformation( out_cpus --; if (name[3]=='0') /* first cpu */ { - sppi->IdleTime.QuadPart = idle; - sppi->KernelTime.QuadPart = sys; - sppi->UserTime.QuadPart = usr; + sppi->IdleTime.QuadPart = USER_HZ_TO_TICKSPERSEC(idle, user_hz); + sppi->KernelTime.QuadPart = USER_HZ_TO_TICKSPERSEC(sys, user_hz); + sppi->UserTime.QuadPart = USER_HZ_TO_TICKSPERSEC(usr, user_hz); } else /* new cpu */ { len = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * (cpus+1); sppi = RtlReAllocateHeap(GetProcessHeap(), 0, sppi, len); - sppi[cpus].IdleTime.QuadPart = idle; - sppi[cpus].KernelTime.QuadPart = sys; - sppi[cpus].UserTime.QuadPart = usr; + sppi[cpus].IdleTime.QuadPart = USER_HZ_TO_TICKSPERSEC(idle, user_hz); + sppi[cpus].KernelTime.QuadPart = USER_HZ_TO_TICKSPERSEC(sys, user_hz); + sppi[cpus].UserTime.QuadPart = USER_HZ_TO_TICKSPERSEC(usr, user_hz); cpus++; } } -- 1.7.1