render_thread: Attempt to set affinity to a random fast core

We've been pinning the render thread for every EFL process to core 0.
This is a bit silly in the first place, but some big.LITTLE arm systems,
such as exynos 5422, have the LITTLE cores first.

On those systems we put all the render threads on a slow core.

This attempts to fix that by using a random core from the pool of fast
cores.

If we can't determine which cores are fast (ie: we're not on a
linux kernel with cpufreq enabled) then we'll continue doing what we've
always done - pin to core 0.
This commit is contained in:
Derek Foreman 2016-09-19 09:39:35 -05:00
parent 2569a8c880
commit 541b72dcb2
1 changed files with 9 additions and 1 deletions

View File

@ -1,4 +1,5 @@
#include "evas_common_private.h"
#include "eina_cpu_private.h"
#include <assert.h>
@ -125,6 +126,7 @@ out:
void
evas_thread_init(void)
{
int core;
if (init_count++) return;
eina_threads_init();
@ -135,7 +137,13 @@ evas_thread_init(void)
CRI("Could not create draw thread lock");
if (!eina_condition_new(&evas_thread_queue_condition, &evas_thread_queue_lock))
CRI("Could not create draw thread condition");
if (!eina_thread_create(&evas_thread_worker, EINA_THREAD_NORMAL, 0,
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,
evas_thread_worker_func, NULL))
if (!eina_thread_create(&evas_thread_worker, EINA_THREAD_NORMAL, -1,
evas_thread_worker_func, NULL))