forked from enlightenment/efl
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:
parent
2569a8c880
commit
541b72dcb2
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue