From 334dd19a6fb9d80955579dc725aac895c24df5b7 Mon Sep 17 00:00:00 2001 From: Louis Lenders Date: Wed, 15 Dec 2010 10:07:50 +0100 Subject: ntdll: Change NtQuerySystemInformation to return 100ns ticks for SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION info class --- dlls/ntdll/nt.c | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 7ad56e4..bfab1d3 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,10 @@ NTSTATUS WINAPI NtQuerySystemInformation( int count; char name[10]; char line[255]; + static long user_hz; + + if (!user_hz) + user_hz = sysconf(_SC_CLK_TCK); /* first line is combined usage */ if (fgets(line,255,cpuinfo)) @@ -1603,9 +1609,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 +1628,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