* eina: Add eina_cpu_count.

SVN revision: 41543
This commit is contained in:
Cedric BAIL 2009-07-30 16:45:15 +00:00
parent cecbfe7618
commit 5784d74daa
6 changed files with 34 additions and 30 deletions

View File

@ -34,5 +34,6 @@ typedef enum _Eina_Cpu_Features
} Eina_Cpu_Features;
EAPI Eina_Cpu_Features eina_cpu_features_get(void);
EAPI int eina_cpu_count(void);
#endif /* EINA_CPU_H_ */

View File

@ -20,6 +20,14 @@
# include "config.h"
#endif
#ifdef EFL_HAVE_PTHREAD
# define _GNU_SOURCE
# include <sched.h>
# include <pthread.h>
# define TH_MAX 8
#endif
#include "eina_cpu.h"
/*============================================================================*
@ -99,3 +107,26 @@ EAPI Eina_Cpu_Features eina_cpu_features_get(void)
#endif
return ecf;
}
EAPI int eina_cpu_count(void)
{
#ifdef EFL_HAVE_PTHREAD
cpu_set_t cpu;
int i;
static int cpus = 0;
if (cpus != 0) return cpus;
CPU_ZERO(&cpu);
if (sched_getaffinity(0, sizeof(cpu), &cpu) != 0)
return 1;
for (i = 0; i < TH_MAX; i++)
{
if (CPU_ISSET(i, &cpu)) cpus = i + 1;
else break;
}
return cpus;
#else
return 1;
#endif
}

View File

@ -245,30 +245,3 @@ evas_common_cpu_end_opt(void)
{
}
#endif
EAPI int
evas_common_cpu_count(void)
{
#ifdef BUILD_PTHREAD
cpu_set_t cpu;
int i;
static int cpus = 0;
if (cpus != 0) return cpus;
CPU_ZERO(&cpu);
if (sched_getaffinity(0, sizeof(cpu), &cpu) != 0)
{
printf("[Evas] could not get cpu affinity: %s\n", strerror(errno));
return 1;
}
for (i = 0; i < TH_MAX; i++)
{
if (CPU_ISSET(i, &cpu)) cpus = i + 1;
else break;
}
return cpus;
#else
return 1;
#endif
}

View File

@ -126,7 +126,7 @@ evas_common_pipe_begin(RGBA_Image *im)
{
int cpunum;
cpunum = evas_common_cpu_count();
cpunum = eina_cpu_count();
thread_num = cpunum;
if (thread_num == 1) return;
pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1);

View File

@ -1069,7 +1069,6 @@ int evas_common_cpu_have_cpuid (void);
int evas_common_cpu_has_feature (unsigned int feature);
EAPI void evas_common_cpu_can_do (int *mmx, int *sse, int *sse2);
EAPI void evas_common_cpu_end_opt (void);
EAPI int evas_common_cpu_count (void);
/****/
#include "../engines/common/evas_blend.h"

View File

@ -1132,7 +1132,7 @@ module_open(Evas_Module *em)
{
if (!em) return 0;
em->functions = (void *)(&func);
cpunum = evas_common_cpu_count();
cpunum = eina_cpu_count();
return 1;
}