eina_cpu, evas: Remove _eina_cpu_fast_core_get, don't set render thread affinity

We've decided it would be best to just let the scheduler do its job.
This commit is contained in:
Derek Foreman 2016-09-20 11:33:33 -05:00
parent 58d3328d80
commit e2875cefc4
4 changed files with 2 additions and 171 deletions

View File

@ -58,7 +58,6 @@ lib/eina/eina_trash.h \
lib/eina/eina_iterator.h \
lib/eina/eina_main.h \
lib/eina/eina_cpu.h \
lib/eina/eina_cpu_private.h \
lib/eina/eina_inline_cpu.x \
lib/eina/eina_sched.h \
lib/eina/eina_tiler.h \

View File

@ -49,25 +49,12 @@
#include "eina_log.h"
#include "eina_cpu.h"
#include <Eina.h>
#include "eina_cpu_private.h"
#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__)
# include <sys/auxv.h>
# include <asm/hwcap.h>
#endif
/*============================================================================*
* Local *
*============================================================================*/
static void _eina_page_size(void);
static int fastest_core_speed = 0;
static int slowest_core_speed = INT_MAX;
static Eina_Hash *cpu_hash = NULL;
/* FIXME this ifdefs should be replaced */
#if defined(__i386__) || defined(__x86_64__)
/* We save ebx and restore it to be PIC compatible */
@ -178,9 +165,6 @@ eina_cpu_init(void)
Eina_Bool
eina_cpu_shutdown(void)
{
eina_hash_free(cpu_hash);
cpu_hash = NULL;
fastest_core_speed = 0;
return EINA_TRUE;
}
@ -316,104 +300,3 @@ void eina_cpu_count_internal(void)
else
_cpu_count = _eina_cpu_count_internal();
}
static void
eina_cpu_map_init(void)
{
fastest_core_speed = -1;
#if defined (__linux__) || defined(__GLIBC__)
FILE *f = NULL;
Eina_Iterator *it;
Eina_Strbuf *fname;
const Eina_File_Direct_Info *f_info;
it = eina_file_stat_ls("/sys/devices/system/cpu/cpufreq");
if (!it) return;
cpu_hash = eina_hash_int32_new(free);
fname = eina_strbuf_new();
EINA_ITERATOR_FOREACH(it, f_info)
{
if ((f_info->type == EINA_FILE_DIR) &&
eina_str_has_prefix(f_info->path,
"/sys/devices/system/cpu/cpufreq/policy"))
{
int num, speed;
eina_strbuf_append_printf(fname, "%s%s", f_info->path, "/cpuinfo_max_freq");
f = fopen(eina_strbuf_string_get(fname), "r");
eina_strbuf_reset(fname);
if (!f) goto err;
speed = -1;
num = fscanf(f, "%d", &speed);
fclose(f);
f = NULL;
if ((num != 1) || (speed == -1)) goto err;
slowest_core_speed = MIN(speed, slowest_core_speed);
fastest_core_speed = MAX(speed, fastest_core_speed);
eina_strbuf_append_printf(fname, "%s%s", f_info->path, "/affected_cpus");
f = fopen(eina_strbuf_string_get(fname), "r");
eina_strbuf_reset(fname);
if (!f) goto err;
do
{
int core;
uint64_t *corelist;
num = fscanf(f, "%d", &core);
if ((num == EOF) || (core > 63)) break;
corelist = eina_hash_find(cpu_hash, &speed);
if (!corelist)
{
corelist = malloc(sizeof(*corelist));
if (!corelist) goto err;
*corelist = 1LL << core;
eina_hash_add(cpu_hash, &speed, corelist);
}
*corelist |= 1LL << core;
} while (num != EOF);
fclose(f);
f = NULL;
}
}
err:
if (f) fclose(f);
eina_strbuf_free(fname);
eina_iterator_free(it);
#endif
}
EAPI int
_eina_cpu_fast_core_get(void)
{
#if defined (__linux__) || defined(__GLIBC__)
uint64_t *corelist;
uint64_t cores;
int bit, place = 0;
if (fastest_core_speed == -1) return -1;
if (fastest_core_speed == 0) eina_cpu_map_init();
/* Check again now that it's actually set up */
if (fastest_core_speed == -1) return -1;
corelist = eina_hash_find(cpu_hash, &fastest_core_speed);
cores = *corelist;
bit = rand() % __builtin_popcount(cores);
while (bit || !(cores & 1))
{
if (cores & 1) bit--;
cores = cores >> 1;
place++;
}
return place;
#else
return 0;
#endif
}

View File

@ -1,42 +0,0 @@
#ifndef EINA_CPU_PRIVATE_H_
#define EINA_CPU_PRIVATE_H_
#ifdef EAPI
# undef EAPI
#endif
#ifdef _WIN32
# ifdef EFL_EINA_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else
# define EAPI
# endif /* ! DLL_EXPORT */
# else
# define EAPI __declspec(dllimport)
# endif /* ! EFL_EINA_BUILD */
# define EAPI_WEAK
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# define EAPI_WEAK __attribute__ ((weak))
# else
# define EAPI
# define EAPI_WEAK
# endif
# else
/**
* @def EAPI
* @brief Used to export functions(by changing visibility).
*/
# define EAPI
# endif
#endif
EAPI int _eina_cpu_fast_core_get(void);
#undef EAPI
#define EAPI
#endif

View File

@ -1,5 +1,4 @@
#include "evas_common_private.h"
#include "eina_cpu_private.h"
#include <assert.h>
@ -126,7 +125,6 @@ out:
void
evas_thread_init(void)
{
int core;
if (init_count++) return;
eina_threads_init();
@ -138,16 +136,9 @@ evas_thread_init(void)
if (!eina_condition_new(&evas_thread_queue_condition, &evas_thread_queue_lock))
CRI("Could not create draw thread condition");
core = _eina_cpu_fast_core_get();
/* Keep previous behaviour of pinning to core 0 if finding a fast
* core fails.
*/
if (core < 0) core = 0;
if (!eina_thread_create(&evas_thread_worker, EINA_THREAD_NORMAL, core,
if (!eina_thread_create(&evas_thread_worker, EINA_THREAD_NORMAL, -1,
evas_thread_worker_func, NULL))
if (!eina_thread_create(&evas_thread_worker, EINA_THREAD_NORMAL, -1,
evas_thread_worker_func, NULL))
CRI("Could not create draw thread");
CRI("Could not create draw thread");
}
void