From 84907e719de3b4700e5c2390b251b3b1d8e9437d Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 26 Oct 2017 13:35:27 -0700 Subject: [PATCH] evas: allow to suspend the rendering of an output. --- src/lib/evas/canvas/evas_out.c | 7 ++++--- src/lib/evas/canvas/evas_render.c | 3 +++ src/lib/evas/include/evas_private.h | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c index cd7fbaf2d8..34e2933469 100644 --- a/src/lib/evas/canvas/evas_out.c +++ b/src/lib/evas/canvas/evas_out.c @@ -172,13 +172,14 @@ efl_canvas_output_engine_info_get(Efl_Canvas_Output *output) } EAPI Eina_Bool -efl_canvas_output_lock(Efl_Canvas_Output *output EINA_UNUSED) +efl_canvas_output_lock(Efl_Canvas_Output *output) { - return EINA_FALSE; + output->lock++; + return EINA_TRUE; } EAPI Eina_Bool efl_canvas_output_unlock(Efl_Canvas_Output *output EINA_UNUSED) { - return EINA_FALSE; + return !!(--output->lock); } diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 3f1895de2d..9e6a65859f 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -3319,6 +3319,9 @@ evas_render_updates_internal(Evas *eo_e, { // Avoid processing not ready output until they are if (!out->output) continue ; + // Locked output are output that should not yet be rendered + // because the tick/vsync for it doesn't allow it yet. + if (out->lock > 0) continue ; /* phase 6. Initialize output */ if (out->changed) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index bc7c1f9aba..8a16d63e68 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1336,6 +1336,8 @@ struct _Efl_Canvas_Output int info_magic; + unsigned short lock; + Eina_Bool changed : 1; };