Commit 497f9aff authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

vlc_GetCPUCount(): move to thread subsystem (cosmetic)

parent 13c9ba8e
...@@ -63,7 +63,6 @@ ...@@ -63,7 +63,6 @@
# endif # endif
VLC_API unsigned vlc_CPU( void ); VLC_API unsigned vlc_CPU( void );
VLC_API unsigned vlc_GetCPUCount( void );
/** Are floating point operations fast? /** Are floating point operations fast?
* If this bit is not set, you should try to use fixed-point instead. * If this bit is not set, you should try to use fixed-point instead.
......
...@@ -205,6 +205,8 @@ VLC_API void vlc_timer_destroy(vlc_timer_t); ...@@ -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 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_timer_getoverrun(vlc_timer_t) VLC_USED;
VLC_API unsigned vlc_GetCPUCount(void);
#ifndef LIBVLC_USE_PTHREAD_CANCEL #ifndef LIBVLC_USE_PTHREAD_CANCEL
enum { enum {
VLC_CLEANUP_PUSH, VLC_CLEANUP_PUSH,
......
...@@ -45,23 +45,6 @@ ...@@ -45,23 +45,6 @@
#include "libvlc.h" #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__ ) \ #if defined( __i386__ ) || defined( __x86_64__ ) || defined( __powerpc__ ) \
|| defined( __ppc__ ) || defined( __ppc64__ ) || defined( __powerpc64__ ) || defined( __ppc__ ) || defined( __ppc64__ ) || defined( __powerpc64__ )
# ifndef WIN32 # ifndef WIN32
...@@ -317,73 +300,6 @@ unsigned vlc_CPU (void) ...@@ -317,73 +300,6 @@ unsigned vlc_CPU (void)
return cpu_flags; 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; static vlc_memcpy_t pf_vlc_memcpy = memcpy;
void vlc_fastmem_register (vlc_memcpy_t cpy) void vlc_fastmem_register (vlc_memcpy_t cpy)
...@@ -427,4 +343,3 @@ void *vlc_memalign(void **base, size_t alignment, size_t size) ...@@ -427,4 +343,3 @@ void *vlc_memalign(void **base, size_t alignment, size_t size)
return (void*)((uintptr_t)(p + alignment - 1) & ~(alignment - 1)); return (void*)((uintptr_t)(p + alignment - 1) & ~(alignment - 1));
#endif #endif
} }
...@@ -50,8 +50,23 @@ ...@@ -50,8 +50,23 @@
#ifdef __APPLE__ #ifdef __APPLE__
# include <sys/time.h> /* gettimeofday in vlc_cond_timedwait */ # include <sys/time.h> /* gettimeofday in vlc_cond_timedwait */
# include <mach/mach_init.h> /* mach_task_self in semaphores */ # include <mach/mach_init.h> /* mach_task_self in semaphores */
# include <sys/sysctl.h>
#endif #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. * Print a backtrace to the standard error for debugging purpose.
*/ */
...@@ -1008,3 +1023,66 @@ unsigned vlc_timer_getoverrun (vlc_timer_t timer) ...@@ -1008,3 +1023,66 @@ unsigned vlc_timer_getoverrun (vlc_timer_t timer)
{ {
return vlc_atomic_swap (&timer->overruns, 0); 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
}
...@@ -906,3 +906,25 @@ unsigned vlc_timer_getoverrun (vlc_timer_t timer) ...@@ -906,3 +906,25 @@ unsigned vlc_timer_getoverrun (vlc_timer_t timer)
(void)timer; (void)timer;
return 0; 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;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment