ntdll: Implement setting SYSTEM_PERFORMANCE_INFORMATION.IdleTime on FreeBSD.

Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Damjan Jovanovic 2021-10-31 17:47:50 +02:00 committed by Alexandre Julliard
parent 478a7dbc90
commit d5406d028b
1 changed files with 18 additions and 1 deletions

View File

@ -1852,6 +1852,7 @@ static void get_performance_info( SYSTEM_PERFORMANCE_INFORMATION *info )
memset( info, 0, sizeof(*info) );
#if defined(linux)
if ((fp = fopen("/proc/uptime", "r")))
{
double uptime, idle_time;
@ -1860,12 +1861,28 @@ static void get_performance_info( SYSTEM_PERFORMANCE_INFORMATION *info )
fclose(fp);
info->IdleTime.QuadPart = 10000000 * idle_time;
}
else
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
{
static int clockrate_name[] = { CTL_KERN, KERN_CLOCKRATE };
size_t size = 0;
struct clockinfo clockrate;
long ptimes[CPUSTATES];
size = sizeof(clockrate);
if (!sysctl(clockrate_name, 2, &clockrate, &size, NULL, 0))
{
size = sizeof(ptimes);
if (!sysctlbyname("kern.cp_time", ptimes, &size, NULL, 0))
info->IdleTime.QuadPart = (ULONGLONG)ptimes[CP_IDLE] * 10000000 / clockrate.stathz;
}
}
#else
{
static ULONGLONG idle;
/* many programs expect IdleTime to change so fake change */
info->IdleTime.QuadPart = ++idle;
}
#endif
#ifdef linux
if ((fp = fopen("/proc/meminfo", "r")))