[vlc-commits] vlc_GetCPUCount(): move to thread subsystem (cosmetic)

Rémi Denis-Courmont git at videolan.org
Wed Jun 29 20:03:34 CEST 2011


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Jun 29 21:00:34 2011 +0300| [497f9affadf6ed00524e8c3ada213e66e424f446] | committer: Rémi Denis-Courmont

vlc_GetCPUCount(): move to thread subsystem (cosmetic)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=497f9affadf6ed00524e8c3ada213e66e424f446
---

 include/vlc_cpu.h     |    1 -
 include/vlc_threads.h |    2 +
 src/misc/cpu.c        |   85 -------------------------------------------------
 src/posix/thread.c    |   78 +++++++++++++++++++++++++++++++++++++++++++++
 src/win32/thread.c    |   22 +++++++++++++
 5 files changed, 102 insertions(+), 86 deletions(-)

diff --git a/include/vlc_cpu.h b/include/vlc_cpu.h
index 674e78e..932dc68 100644
--- a/include/vlc_cpu.h
+++ b/include/vlc_cpu.h
@@ -63,7 +63,6 @@
 # endif
 
 VLC_API unsigned vlc_CPU( void );
-VLC_API unsigned vlc_GetCPUCount( void );
 
 /** Are floating point operations fast?
  * If this bit is not set, you should try to use fixed-point instead.
diff --git a/include/vlc_threads.h b/include/vlc_threads.h
index 6bf0fb5..d052f13 100644
--- a/include/vlc_threads.h
+++ b/include/vlc_threads.h
@@ -205,6 +205,8 @@ VLC_API void vlc_timer_destroy(vlc_timer_t);
 VLC_API void vlc_timer_schedule(vlc_timer_t, bool, mtime_t, mtime_t);
 VLC_API unsigned vlc_timer_getoverrun(vlc_timer_t) VLC_USED;
 
+VLC_API unsigned vlc_GetCPUCount(void);
+
 #ifndef LIBVLC_USE_PTHREAD_CANCEL
 enum {
     VLC_CLEANUP_PUSH,
diff --git a/src/misc/cpu.c b/src/misc/cpu.c
index 6f5d8fb..ad0c0b6 100644
--- a/src/misc/cpu.c
+++ b/src/misc/cpu.c
@@ -45,23 +45,6 @@
 
 #include "libvlc.h"
 
-#if defined(__APPLE__)
-#include <sys/sysctl.h>
-#endif
-
-#if defined(__OpenBSD__)
-#include <sys/param.h>
-#include <sys/sysctl.h>
-#include <machine/cpu.h>
-#endif
-
-#if defined(__SunOS)
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/processor.h>
-#include <sys/pset.h>
-#endif
-
 #if defined( __i386__ ) || defined( __x86_64__ ) || defined( __powerpc__ ) \
  || defined( __ppc__ ) || defined( __ppc64__ ) || defined( __powerpc64__ )
 # ifndef WIN32
@@ -317,73 +300,6 @@ unsigned vlc_CPU (void)
     return cpu_flags;
 }
 
-/**
- * Return the number of available logical CPU.
- */
-unsigned vlc_GetCPUCount(void)
-{
-#if defined(WIN32) && !defined(UNDER_CE)
-    DWORD process_mask;
-    DWORD system_mask;
-    if (!GetProcessAffinityMask(GetCurrentProcess(), &process_mask, &system_mask))
-        return 1;
-
-    unsigned count = 0;
-    while (system_mask) {
-        count++;
-        system_mask >>= 1;
-    }
-    return count;
-#elif defined(__SYMBIAN32__)
-    return 1;
-#elif defined(HAVE_SCHED_GETAFFINITY)
-    cpu_set_t cpu;
-    CPU_ZERO(&cpu);
-    if (sched_getaffinity(getpid(), sizeof(cpu), &cpu) < 0)
-        return 1;
-    unsigned count = 0;
-    for (unsigned i = 0; i < CPU_SETSIZE; i++)
-        count += CPU_ISSET(i, &cpu) != 0;
-    return count;
-#elif defined(__APPLE__)
-    int count;
-    size_t size = sizeof(count) ;
-    if (sysctlbyname("hw.ncpu", &count, &size, NULL, 0))
-        return 1; /* Failure */
-    return count;
-#elif defined(__OpenBSD__)
-    int selectors[2] = { CTL_HW, HW_NCPU };
-    int count;
-    size_t size = sizeof(count) ;
-    if (sysctl(selectors, 2, &count, &size, NULL, 0))
-        return 1; /* Failure */
-    return count;
-#elif defined(__SunOS)
-    unsigned count = 0;
-    int type;
-    u_int numcpus;
-    processorid_t *cpulist;
-    processor_info_t cpuinfo;
-    cpulist = malloc(sizeof(processorid_t) * sysconf(_SC_NPROCESSORS_MAX));
-    if (!cpulist) return 1;
-    if (pset_info(PS_MYID, &type, &numcpus, cpulist)==0)
-    {
-        for (u_int i = 0; i < numcpus; i++)
-        {
-            if (!processor_info(cpulist[i], &cpuinfo))
-                count += (cpuinfo.pi_state == P_ONLINE)?1:0;
-        }
-    } else {
-        count = sysconf(_SC_NPROCESSORS_ONLN);
-    }
-    free(cpulist);
-    return (count>0)?count:1;
-#else
-#   warning "vlc_GetCPUCount is not implemented for your platform"
-    return 1;
-#endif
-}
-
 static vlc_memcpy_t pf_vlc_memcpy = memcpy;
 
 void vlc_fastmem_register (vlc_memcpy_t cpy)
@@ -427,4 +343,3 @@ void *vlc_memalign(void **base, size_t alignment, size_t size)
     return (void*)((uintptr_t)(p + alignment - 1) & ~(alignment - 1));
 #endif
 }
-
diff --git a/src/posix/thread.c b/src/posix/thread.c
index 67193e4..93b7ca1 100644
--- a/src/posix/thread.c
+++ b/src/posix/thread.c
@@ -50,8 +50,23 @@
 #ifdef __APPLE__
 # include <sys/time.h> /* gettimeofday in vlc_cond_timedwait */
 # include <mach/mach_init.h> /* mach_task_self in semaphores */
+# include <sys/sysctl.h>
 #endif
 
+#if defined(__OpenBSD__)
+# include <sys/param.h>
+# include <sys/sysctl.h>
+# include <machine/cpu.h>
+#endif
+
+#if defined(__SunOS)
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/processor.h>
+# include <sys/pset.h>
+#endif
+
+
 /**
  * Print a backtrace to the standard error for debugging purpose.
  */
@@ -1008,3 +1023,66 @@ unsigned vlc_timer_getoverrun (vlc_timer_t timer)
 {
     return vlc_atomic_swap (&timer->overruns, 0);
 }
+
+
+/**
+ * Count CPUs.
+ * @return number of available (logical) CPUs.
+ */
+unsigned vlc_GetCPUCount(void)
+{
+#if defined(HAVE_SCHED_GETAFFINITY)
+    cpu_set_t cpu;
+
+    CPU_ZERO(&cpu);
+    if (sched_getaffinity (getpid(), sizeof (cpu), &cpu) < 0)
+        return 1;
+
+    unsigned count = 0;
+    for (unsigned i = 0; i < CPU_SETSIZE; i++)
+        count += CPU_ISSET(i, &cpu) != 0;
+    return count;
+
+#elif defined(__APPLE__)
+    int count;
+    size_t size = sizeof(count) ;
+
+    if (sysctlbyname ("hw.ncpu", &count, &size, NULL, 0))
+        return 1; /* Failure */
+    return count;
+
+#elif defined(__OpenBSD__)
+    int selectors[2] = { CTL_HW, HW_NCPU };
+    int count;
+    size_t size = sizeof(count);
+
+    if (sysctl (selectors, 2, &count, &size, NULL, 0))
+        return 1; /* Failure */
+    return count;
+
+#elif defined(__SunOS)
+    unsigned count = 0;
+    int type;
+    u_int numcpus;
+    processor_info_t cpuinfo;
+
+    processorid_t *cpulist = malloc (sizeof (*cpulist) * sysconf(_SC_NPROCESSORS_MAX));
+    if (unlikely(cpulist == NULL))
+        return 1;
+
+    if (pset_info(PS_MYID, &type, &numcpus, cpulist) == 0)
+    {
+        for (u_int i = 0; i < numcpus; i++)
+            if (processor_info (cpulist[i], &cpuinfo) == 0)
+                count += (cpuinfo.pi_state == P_ONLINE);
+    }
+    else
+        count = sysconf (_SC_NPROCESSORS_ONLN);
+    free (cpulist);
+    return count ? count : 1;
+
+#else
+#   warning "vlc_GetCPUCount is not implemented for your platform"
+    return 1;
+#endif
+}
diff --git a/src/win32/thread.c b/src/win32/thread.c
index 5ec18d2..dbd2e51 100644
--- a/src/win32/thread.c
+++ b/src/win32/thread.c
@@ -906,3 +906,25 @@ unsigned vlc_timer_getoverrun (vlc_timer_t timer)
     (void)timer;
     return 0;
 }
+
+
+/*** CPU ***/
+unsigned vlc_GetCPUCount (void)
+{
+#ifndef UNDER_CE
+    DWORD process;
+    DWORD system;
+
+    if (GetProcessAffinityMask (GetCurrentProcess(), &process, &system))
+    {
+        unsigned count = 0;
+        while (system)
+        {
+            count++;
+            system >>= 1;
+        }
+        return count;
+     }
+#endif
+     return 1;
+}



More information about the vlc-commits mailing list