summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2016-01-27 16:00:42 -0800
committerCedric BAIL <cedric@osg.samsung.com>2016-02-01 13:51:13 -0800
commit840701827c6de7c76a887051580618b4e97fd82c (patch)
tree63278cd00107c383e548b9ec1580328c6d18c3b6
parent02e4d438de4e6e490e05f3f89e78c02f56fd8845 (diff)
downloadefl-840701827c6de7c76a887051580618b4e97fd82c.tar.gz
ecore_evas: switch main animator to use the first windows source for tick.
-rw-r--r--src/lib/ecore_evas/ecore_evas.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index d61f75f9ab..0ac2274e1d 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -3069,6 +3069,8 @@ _ecore_evas_fps_debug_rendertime_add(double t)
}
}
+static Ecore_Evas *_general_tick = NULL;
+
EAPI void
ecore_evas_animator_tick(Ecore_Evas *ee, Eina_Rectangle *viewport)
{
@@ -3095,6 +3097,39 @@ ecore_evas_animator_tick(Ecore_Evas *ee, Eina_Rectangle *viewport)
evas_output_size_get(subee->evas, &a.update_area.w, &a.update_area.h);
eo_do(subee->evas, eo_event_callback_call(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, &a));
}
+
+ // We are the source of sync for general animator.
+ if (_general_tick == ee)
+ {
+ // Check first we didn't tick during this loop
+ if (!ecore_main_loop_animator_ticked_get())
+ ecore_animator_custom_tick();
+ }
+}
+
+static void
+_ecore_evas_tick_source_find(void)
+{
+ Ecore_Evas *ee;
+
+ _general_tick = NULL;
+ EINA_INLIST_FOREACH(ecore_evases, ee)
+ if (ee->anim_count &&
+ ee->engine.func->fn_animator_register &&
+ ee->engine.func->fn_animator_unregister)
+ {
+ _general_tick = ee;
+ break;
+ }
+
+ if (!_general_tick)
+ {
+ ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
+ }
+ else
+ {
+ ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_CUSTOM);
+ }
}
static Eina_Bool
@@ -3125,6 +3160,7 @@ _check_animator_event_catcher_add(void *data,
{
// Backend support per window vsync
ee->engine.func->fn_animator_register(ee);
+ if (!_general_tick) _general_tick = ee;
}
else
{
@@ -3162,6 +3198,7 @@ _check_animator_event_catcher_del(void *data,
{
// Backend support per window vsync
ee->engine.func->fn_animator_unregister(ee);
+ if (_general_tick == ee) _ecore_evas_tick_source_find();
}
else
{
@@ -3226,6 +3263,7 @@ _ecore_evas_free(Ecore_Evas *ee)
{
// Backend support per window vsync
ee->engine.func->fn_animator_unregister(ee);
+ if (_general_tick == ee) _ecore_evas_tick_source_find();
}
if (ee->anim)
ecore_animator_del(ee->anim);