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,

-- 


Reply via email to