[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