Damjan Jovanovic : ntdll: Implement setting SYSTEM_PERFORMANCE_INFORMATION.IdleTime on FreeBSD.
Alexandre Julliard
julliard at winehq.org
Wed Nov 3 16:42:01 CDT 2021
Module: wine
Branch: master
Commit: d5406d028b9b735a1f727d7b500494a724b7eaad
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d5406d028b9b735a1f727d7b500494a724b7eaad
Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date: Sun Oct 31 17:47:50 2021 +0200
ntdll: Implement setting SYSTEM_PERFORMANCE_INFORMATION.IdleTime on FreeBSD.
Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/unix/system.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
index 6640a66597b..91184b12dba 100644
--- a/dlls/ntdll/unix/system.c
+++ b/dlls/ntdll/unix/system.c
@@ -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")))
More information about the wine-cvs
mailing list