From a6bfcec0be148c4b8979a7f7545d32df6134b35e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 17 Dec 2009 03:04:04 +0000 Subject: [PATCH] Added support for querying the number of CPUs available on Linux. This also happens to work on Mac OS X. --- configure.in | 2 +- include/SDL_config.h.in | 1 + include/SDL_config_iphoneos.h | 1 + include/SDL_config_macosx.h | 1 + src/cpuinfo/SDL_cpuinfo.c | 14 +++++++++++--- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/configure.in b/configure.in index 1f7444cf1..ce9ada780 100644 --- a/configure.in +++ b/configure.in @@ -207,7 +207,7 @@ if test x$enable_libc = xyes; then AC_DEFINE(HAVE_MPROTECT) ]), ) - AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove strlen strlcpy strlcat strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp sscanf snprintf vsnprintf sigaction setjmp nanosleep sysctlbyname) + AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove strlen strlcpy strlcat strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp sscanf snprintf vsnprintf sigaction setjmp nanosleep sysconf sysctlbyname) AC_CHECK_LIB(m, pow, [LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm"]) AC_CHECK_FUNCS(ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt) diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in index ec20f5e5e..7b8fb66ce 100644 --- a/include/SDL_config.h.in +++ b/include/SDL_config.h.in @@ -151,6 +151,7 @@ #undef HAVE_SIGACTION #undef HAVE_SETJMP #undef HAVE_NANOSLEEP +#undef HAVE_SYSCONF #undef HAVE_SYSCTLBYNAME #undef HAVE_CLOCK_GETTIME #undef HAVE_GETPAGESIZE diff --git a/include/SDL_config_iphoneos.h b/include/SDL_config_iphoneos.h index 2d8d565ee..9248c3c1b 100644 --- a/include/SDL_config_iphoneos.h +++ b/include/SDL_config_iphoneos.h @@ -108,6 +108,7 @@ typedef unsigned long uintptr_t; #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 +#define HAVE_SYSCONF 1 #define HAVE_SYSCTLBYNAME 1 /* enable iPhone version of Core Audio driver */ diff --git a/include/SDL_config_macosx.h b/include/SDL_config_macosx.h index 0ffb13df7..be44f3325 100644 --- a/include/SDL_config_macosx.h +++ b/include/SDL_config_macosx.h @@ -106,6 +106,7 @@ #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 +#define HAVE_SYSCONF 1 #define HAVE_SYSCTLBYNAME 1 /* Enable various audio drivers */ diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index 05e80ddca..6011f8f18 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -25,6 +25,9 @@ #include "SDL_cpuinfo.h" +#ifdef HAVE_SYSCONF +#include +#endif #ifdef HAVE_SYSCTLBYNAME #include #include @@ -297,21 +300,26 @@ int SDL_GetCPUCount() { if (!SDL_CPUCount) { +#ifdef HAVE_SYSCONF + if (SDL_CPUCount <= 0) { + SDL_CPUCount = (int)sysconf(_SC_NPROCESSORS_ONLN); + } +#endif #ifdef HAVE_SYSCTLBYNAME - { + if (SDL_CPUCount <= 0) { size_t size = sizeof(SDL_CPUCount); sysctlbyname("hw.ncpu", &SDL_CPUCount, &size, NULL, 0); } #endif #ifdef __WIN32__ - { + if (SDL_CPUCount <= 0) { SYSTEM_INFO info; GetSystemInfo(&info); SDL_CPUCount = info.dwNumberOfProcessors; } #endif /* There has to be at least 1, right? :) */ - if (!SDL_CPUCount) { + if (SDL_CPUCount <= 0) { SDL_CPUCount = 1; } }