hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=03cb0212ac26b4359263228851ece40cae474193

commit 03cb0212ac26b4359263228851ece40cae474193
Author: Hermet Park <[email protected]>
Date:   Fri Aug 2 18:17:40 2019 +0900

    efl_canvas_rectangle: rendering optmization.
    
    There was a weird profiling result that rectangles drawing is much much 
slower than images.
    Checked reason, the computation rect clip area is the overload point.
    
    I don't think it's necesary but we can simplely improve the performance here
    by replacing native function.
    
    I tested this by drawing 400 number of rectangles,
    and this patch improved up abt 10 fps(sw), 20fps(gl).
    
    @TEST CODE
    
       MAX_SIZE = 400;
    
       for(int i=0; i< MAX_SIZE; i++)
       {
          Evas_Object *rect = evas_object_rectangle_add(layout);
    
          int x = rand() % WINDOW_WIDTH;
          int y = rand() % WINDOW_HEIGHT;
    
          evas_object_resize(rect, ELM_SCALE_SIZE(200), ELM_SCALE_SIZE(200));
          evas_object_move(rect, x, y);
          evas_object_color_set(rect, (rand() % 256), (rand() % 256), (rand() % 
256), 255);
          evas_object_show(rect);
    
          Elm_Transit *transit = elm_transit_add();
          elm_transit_object_add(transit, rect);
    
          int dX = rand() % WINDOW_WIDTH;
          int dY = rand() % WINDOW_HEIGHT;
    
          elm_transit_effect_translation_add(transit, 0, 0, dX - x, dY - y);
          elm_transit_repeat_times_set(transit, -1);
          elm_transit_duration_set(transit, 1.0);
    
          elm_transit_go(transit);
       }
---
 src/lib/evas/canvas/evas_object_rectangle.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_rectangle.c 
b/src/lib/evas/canvas/evas_object_rectangle.c
index 45cb1ada65..222effe942 100644
--- a/src/lib/evas/canvas/evas_object_rectangle.c
+++ b/src/lib/evas/canvas/evas_object_rectangle.c
@@ -234,6 +234,10 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj,
        (obj->cur->geometry.w != obj->prev->geometry.w) ||
        (obj->cur->geometry.h != obj->prev->geometry.h))
      {
+        evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, 
eo_obj, obj);
+
+//This Performance is not so good ...!
+#if 0
         evas_rects_return_difference_rects(&obj->layer->evas->clip_changes,
                                            obj->cur->geometry.x,
                                            obj->cur->geometry.y,
@@ -243,15 +247,7 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj,
                                            obj->prev->geometry.y,
                                            obj->prev->geometry.w,
                                            obj->prev->geometry.h);
-        ////   rl = 
evas_rects_return_difference_rects(obj->cur->cache.geometry.x,
-        ////                                           
obj->cur->cache.geometry.y,
-        ////                                           
obj->cur->cache.geometry.w,
-        ////                                           
obj->cur->cache.geometry.h,
-        ////                                           
obj->prev->cache.geometry.x,
-        ////                                           
obj->prev->cache.geometry.y,
-        ////                                           
obj->prev->cache.geometry.w,
-        ////                                           
obj->prev->cache.geometry.h);
-        goto done;
+#endif
      }
 done:
    evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, 
eo_obj, is_v, was_v);

-- 


Reply via email to