]> git.sesse.net Git - vlc/commitdiff
Added vlc_GetCPUCount() to retreive the number of available CPU.
authorLaurent Aimar <fenrir@videolan.org>
Mon, 3 May 2010 19:54:28 +0000 (21:54 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Mon, 3 May 2010 20:53:19 +0000 (22:53 +0200)
It is implemented for win32 and when sched_getaffinity() is available.

configure.ac
include/vlc_cpu.h
src/libvlccore.sym
src/misc/cpu.c

index 8510e846191069e5b092828ea15d219b4121df30..8571ab6d2b09655479c071482efe405ff2b94705 100644 (file)
@@ -556,7 +556,7 @@ AC_CHECK_FUNCS(fdatasync,,
 ])
 
 dnl Check for non-standard system calls
-AC_CHECK_FUNCS([accept4 dup3 eventfd fstatfs vmsplice])
+AC_CHECK_FUNCS([accept4 dup3 eventfd fstatfs vmsplice sched_getaffinity])
 
 AH_BOTTOM([#include <vlc_fixups.h>])
 
index feb6e5e130863223bd0eb77b1715fddf5a32e312..bbc7b5b4687d79778d5dc9f97c39ed351c4464c8 100644 (file)
@@ -63,6 +63,7 @@
 # endif
 
 VLC_EXPORT( unsigned, vlc_CPU, ( void ) );
+VLC_EXPORT( unsigned, vlc_GetCPUCount, ( void ) );
 
 /** Are floating point operations fast?
  * If this bit is not set, you should try to use fixed-point instead.
index a8479ebb70bde49d2e476f9329bebb4dc4ed2bd1..f2343e9f9935a9bf6d08909a663eea46eb8f39b9 100644 (file)
@@ -493,6 +493,7 @@ vlc_sem_destroy
 vlc_sem_post
 vlc_sem_wait
 vlc_control_cancel
+vlc_GetCPUCount
 vlc_CPU
 vlc_error
 vlc_event_attach
index 3b0d278999938d58f9901aa9a9afba9181d3140c..fb705a249f4f3a677f9dfca9cf7c1225baa0df7c 100644 (file)
@@ -318,6 +318,38 @@ const struct
 #endif
 };
 
+/**
+ * Return the number of available logical CPU.
+ */
+unsigned vlc_GetCPUCount(void)
+{
+#ifdef WIN32
+    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 HAVE_SCHED_GETAFFINITY
+    cpu_set_t cpu;
+    CPU_ZERO(&cpu);
+    if (sched_getaffinity(0, 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;
+#else
+#   warning "vlc_GetCPUCount is not implemented for your platform"
+    return 1;
+#endif
+}
+
 /**
  * Check if a directory name contains usable plugins w.r.t. the hardware
  * capabilities. Loading a plugin when the hardware has insufficient