From a0c58276c34a1877b2c8a15502b06431ecb4b306 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 25 Aug 2017 10:52:10 -0700 Subject: [PATCH] evas: do not use default output or any other during render pre. --- src/lib/evas/canvas/evas_main.c | 18 ++++++------------ src/lib/evas/canvas/evas_object_vg.c | 4 ++-- src/lib/evas/canvas/evas_out.c | 2 -- src/lib/evas/include/evas_private.h | 7 +++---- .../evas/engines/gl_generic/evas_engine.c | 2 +- .../engines/software_generic/evas_engine.c | 3 ++- 6 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index 84b535ca35..0ebe72d9ed 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -378,6 +378,8 @@ next_zombie: evas_event_callback_all_del(eo_e); evas_event_callback_cleanup(eo_e); + /* Ector surface may require an existing output to finish its job */ + e->engine.func->ector_destroy(_evas_engine_context(e), e->ector); /* cleanup engine backend */ EINA_LIST_FREE(e->outputs, evo) efl_canvas_output_del(evo); e->engine.func->engine_free(e->backend); @@ -842,19 +844,11 @@ _evas_canvas_efl_loop_user_loop_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e EI } Ector_Surface * -evas_ector_get(Evas_Public_Data *e, void *output) +evas_ector_get(Evas_Public_Data *e) { - Efl_Canvas_Output *r; - Eina_List *l; - - EINA_LIST_FOREACH(e->outputs, l, r) - if (r->output == output) - { - if (!r->ector) - r->ector = e->engine.func->ector_create(_evas_engine_context(e), output); - return r->ector; - } - return NULL; + if (!e->ector) + e->ector = e->engine.func->ector_create(_evas_engine_context(e)); + return e->ector; } EAPI Evas_BiDi_Direction diff --git a/src/lib/evas/canvas/evas_object_vg.c b/src/lib/evas/canvas/evas_object_vg.c index 1b1e2bbbc5..c1a2730407 100644 --- a/src/lib/evas/canvas/evas_object_vg.c +++ b/src/lib/evas/canvas/evas_object_vg.c @@ -178,7 +178,7 @@ evas_object_vg_render(Evas_Object *eo_obj EINA_UNUSED, int x, int y, Eina_Bool do_async) { Evas_VG_Data *vd = type_private_data; - Ector_Surface *ector = evas_ector_get(obj->layer->evas, output); + Ector_Surface *ector = evas_ector_get(obj->layer->evas); // FIXME: Set context (that should affect Ector_Surface) and // then call Ector_Renderer render from bottom to top. Get the // Ector_Surface that match the output from Evas engine API. @@ -248,7 +248,7 @@ evas_object_vg_render_pre(Evas_Object *eo_obj, } // FIXME: handle damage only on changed renderer. - s = evas_ector_get(obj->layer->evas, _evas_default_output_get(obj->layer->evas)); + s = evas_ector_get(obj->layer->evas); if (vd->root && s) _evas_vg_render_pre(vd->root, s, NULL); diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c index 666becdf1e..42f8ed4401 100644 --- a/src/lib/evas/canvas/evas_out.c +++ b/src/lib/evas/canvas/evas_out.c @@ -74,8 +74,6 @@ efl_canvas_output_del(Efl_Canvas_Output *output) if (e->engine.func) { - e->engine.func->ector_destroy(_evas_engine_context(e), - output->ector); e->engine.func->output_free(_evas_engine_context(e), output->output); free(output->info); diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index c01eb0dc3c..529256a3c5 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -964,6 +964,7 @@ struct _Evas_Public_Data Eina_Array *cur_device; void *backend; + Ector_Surface *ector; Eina_List *outputs; Evas_Device *default_seat; @@ -1333,8 +1334,6 @@ struct _Efl_Canvas_Output { Eo *canvas; - Ector_Surface *ector; - Evas_Engine_Info *info; void *output; @@ -1611,7 +1610,7 @@ struct _Evas_Func void (*texture_image_set) (void *engine, void *texture, void *image); void *(*texture_image_get) (void *engine, void *texture); - Ector_Surface *(*ector_create) (void *engine, void *output); + Ector_Surface *(*ector_create) (void *engine); void (*ector_destroy) (void *engine, Ector_Surface *surface); Ector_Buffer *(*ector_buffer_wrap) (void *engine, Evas *e, void *engine_image); Ector_Buffer *(*ector_buffer_new) (void *engine, Evas *e, int width, int height, Efl_Gfx_Colorspace cspace, Ector_Buffer_Flag flags); @@ -1951,7 +1950,7 @@ void _efl_gfx_map_shutdown(void); void _efl_gfx_map_update(Eo *eo_obj); /* Ector */ -Ector_Surface *evas_ector_get(Evas_Public_Data *evas, void *output); +Ector_Surface *evas_ector_get(Evas_Public_Data *evas); /* Temporary save/load functions */ void evas_common_load_model_from_file(Evas_Canvas3D_Mesh *model, const char *file); diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 96f9afed1a..a3e19909f4 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -2377,7 +2377,7 @@ static Eina_Bool use_cairo = EINA_FALSE; static Eina_Bool use_gl = EINA_FALSE; static Ector_Surface * -eng_ector_create(void *engine EINA_UNUSED, void *output EINA_UNUSED) +eng_ector_create(void *engine EINA_UNUSED) { Ector_Surface *ector; const char *ector_backend; diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index f54c0843d6..b7dd3c8058 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -4316,10 +4316,11 @@ eng_output_idle_flush(void *engine EINA_UNUSED, void *data) static Eina_Bool use_cairo; static Ector_Surface * -eng_ector_create(void *engine EINA_UNUSED, void *output EINA_UNUSED) +eng_ector_create(void *engine EINA_UNUSED) { Ector_Surface *ector; const char *ector_backend; + ector_backend = getenv("ECTOR_BACKEND"); efl_domain_current_push(EFL_ID_DOMAIN_SHARED); if (ector_backend && !strcasecmp(ector_backend, "default"))