[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH 2/7] ntdll: implement setting SYSTEM_PERFORMANCE_INFORMATION.IdleTime on FreeBSD
From:       Damjan Jovanovic <damjan.jov () gmail ! com>
Date:       2021-10-31 15:47:50
Message-ID: CAJm2B-=5TcbcoMjwasMWPUvt6kF9wMeK6WF5i4HtfVVkyvh9VQ () mail ! gmail ! com
[Download RAW message or body]

Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
---
 dlls/ntdll/unix/system.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

["0002-ntdll-implement-setting-SYSTEM_PERFORMANCE_INFORMATION.txt" (text/plain)]

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")))


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic