jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=a56cc8a8c1f81dbdf9242c198c7a62523a582249
commit a56cc8a8c1f81dbdf9242c198c7a62523a582249 Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Wed Nov 12 19:18:09 2014 +0900 Evas: Avoid creating an extra context for proxy rendering --- src/lib/evas/canvas/evas_3d_texture.c | 2 +- src/lib/evas/canvas/evas_render.c | 18 +++++++++++++----- src/lib/evas/include/evas_private.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lib/evas/canvas/evas_3d_texture.c b/src/lib/evas/canvas/evas_3d_texture.c index b87d143..8945fad 100644 --- a/src/lib/evas/canvas/evas_3d_texture.c +++ b/src/lib/evas/canvas/evas_3d_texture.c @@ -146,7 +146,7 @@ _texture_proxy_subrender(Evas_3D_Texture *obj) -source->cur->geometry.x, -source->cur->geometry.y, 1, 0, 0, e->output.w, e->output.h, - &proxy_render_data, 1, EINA_FALSE); + &proxy_render_data, 1, EINA_FALSE, EINA_FALSE); } e->engine.func->context_free(e->engine.data.output, ctx); diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index ea25d76..9494d3a 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -1107,7 +1107,7 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, void *surface, int off_x, int off_y, int mapped, int ecx, int ecy, int ecw, int ech, Evas_Proxy_Render_Data *proxy_render_data, int level, - Eina_Bool do_async) + Eina_Bool use_mapped_ctx, Eina_Bool do_async) { void *ctx; Evas_Object_Protected_Data *obj2; @@ -1278,6 +1278,7 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, ecx, ecy, ecw, ech, proxy_render_data, level + 1, + EINA_FALSE, do_async); /* We aren't sure this object will be rendered by normal(not proxy) drawing after, we reset this @@ -1394,7 +1395,10 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, { RDI(level); RD(" draw child of mapped obj\n"); - ctx = e->engine.func->context_new(e->engine.data.output); + if (use_mapped_ctx) + ctx = context; + else + ctx = e->engine.func->context_new(e->engine.data.output); if (obj->is_smart) { EINA_INLIST_FOREACH @@ -1406,6 +1410,7 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, ecx, ecy, ecw, ech, proxy_render_data, level + 1, + EINA_FALSE, do_async); /* We aren't sure this object will be rendered by normal(not proxy) drawing after, we reset this @@ -1432,7 +1437,8 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, e->engine.data.output, ctx, surface, off_x, off_y, EINA_FALSE); } - e->engine.func->context_free(e->engine.data.output, ctx); + if (!use_mapped_ctx) + e->engine.func->context_free(e->engine.data.output, ctx); } else { @@ -1545,7 +1551,7 @@ evas_render_proxy_subrender(Evas *eo_e, Evas_Object *eo_source, Evas_Object *eo_ -source->cur->geometry.x, -source->cur->geometry.y, 1, 0, 0, e->output.w, e->output.h, - &proxy_render_data, 1, do_async); + &proxy_render_data, 1, EINA_TRUE, do_async); e->engine.func->context_free(e->engine.data.output, ctx); proxy_write->surface = e->engine.func->image_dirty_region @@ -2022,7 +2028,9 @@ evas_render_updates_internal(Evas *eo_e, surface, off_x + fx, off_y + fy, 0, cx, cy, cw, ch, - NULL, 1, do_async); + NULL, 1, + EINA_FALSE, + do_async); e->engine.func->context_cutout_clear(e->engine.data.output, e->engine.data.context); } diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 8f0c24e..4c6017c 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1681,7 +1681,7 @@ Eina_Bool evas_render_mapped(Evas_Public_Data *e, Evas_Object *obj, void *context, void *surface, int off_x, int off_y, int mapped, int ecx, int ecy, int ecw, int ech, Evas_Proxy_Render_Data *proxy_render_data, - int level, Eina_Bool do_async); + int level, Eina_Bool use_mapped_ctx, Eina_Bool do_async); void evas_render_invalidate(Evas *e); void evas_render_object_recalc(Evas_Object *obj); void evas_render_proxy_subrender(Evas *eo_e, Evas_Object *eo_source, Evas_Object *eo_proxy, --