summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2017-07-11 16:43:33 -0500
committerDerek Foreman <derekf@osg.samsung.com>2017-07-13 11:31:11 -0500
commite2851b712d72923d05289d249485f853b4ac8a4e (patch)
tree89016b707553b1c466497e5371b73031e82061b1
parentb5f7f3c274fd841e6c6e967e456100cb57b75a32 (diff)
downloadefl-e2851b712d72923d05289d249485f853b4ac8a4e.tar.gz
ecore_evas: Don't start custom tickers for manually rendered canvases
When a canvas is manually rendered the ticker is just a waste of cpu, and worse - it can wake the drm back-end from dpms sleep, as the display needs to be awake to generate vblanks. We fire a DBG message when attempting to start an animator in this state because it's frequently a bug that wastes battery life - (like E doing idle cursor animations or clock updates while the display is off) However, dpms off is not the only potential usage of manual render, so another commit will follow shortly to fix the bug this commit introduces - when using a backend with a custom ticker and doing manual render with the display on, calling ecore_evas_manual_render() will not draw with updated animator state. Fix T5462 Again. Really.
-rw-r--r--src/lib/ecore_evas/ecore_evas.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index a055839ee4..42b35fcb12 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -2646,6 +2646,14 @@ ecore_evas_manual_render_set(Ecore_Evas *ee, Eina_Bool manual_render)
{
ECORE_EVAS_CHECK(ee);
ee->manual_render = manual_render;
+ if (!ee->anim_count) return;
+ if (!ee->engine.func->fn_animator_register) return;
+ if (!ee->engine.func->fn_animator_unregister) return;
+
+ if (manual_render)
+ ee->engine.func->fn_animator_unregister(ee);
+ else
+ ee->engine.func->fn_animator_register(ee);
}
EAPI Eina_Bool
@@ -3085,6 +3093,11 @@ _ecore_evas_custom_tick_begin(void *data)
if (ee->anim_count++ > 0) return;
+ if (ee->manual_render)
+ {
+ DBG("Attempt to schedule tick for manually rendered canvas.");
+ return;
+ }
ee->engine.func->fn_animator_register(ee);
}
@@ -3095,6 +3108,8 @@ _ecore_evas_custom_tick_end(void *data)
if ((--ee->anim_count) > 0) return;
+ if (ee->manual_render) return;
+
ee->engine.func->fn_animator_unregister(ee);
}