jpeg pushed a commit to branch master.

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

commit a55e0ced2604777c97521dddcf09b0421c6ea504
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Mon Feb 20 23:14:38 2017 +0900

    evas: Inline part of clip_dirty
    
    clip_dirty is called A LOT. Unfortunately this patch does not
    result in very measurable improvements.
    
    **********************
    Note about this merge:
    
    After this series of patches, the CPU usage for a certain test
    case has significantly gone down:
    
    Based on c0e6a8d698c17fc16f9b67fc9 (upstream before git push):
    NS since frame 2 = 28910806786 , 2937 frames = 9843652 / frame
    
    After this patch:
    NS since frame 2 = 19218592951 , 2928 frames = 6563727 / frame
    
    1.18:
    NS since 2 = 13105584220 , 2961 frames = 4426066 / frame
    
    As we can see, 1.18 remains *much* better than 1.19. I'm still
    struggling trying to figure out why (clip_recalc is called more,
    but the call tree is hard to decypher).
    
    The test case is:
    EINA_FREEQ_BYPASS=1 ELM_TEST_AUTOBOUNCE=100 \
      elementary_test -to "Scroller 2"
    
    EFL was compiled with GCC 6.3.1 with -O3 -g
    
    @optimization
---
 src/lib/evas/canvas/evas_clip.c     | 4 +---
 src/lib/evas/include/evas_inline.x  | 7 +++++++
 src/lib/evas/include/evas_private.h | 2 +-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/lib/evas/canvas/evas_clip.c b/src/lib/evas/canvas/evas_clip.c
index da761c3..6d9f267 100644
--- a/src/lib/evas/canvas/evas_clip.c
+++ b/src/lib/evas/canvas/evas_clip.c
@@ -4,13 +4,11 @@
 static void _clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj);
 
 void
-evas_object_clip_dirty(Evas_Object *eo_obj EINA_UNUSED, 
Evas_Object_Protected_Data *obj)
+evas_object_clip_dirty_do(Evas_Object_Protected_Data *obj)
 {
    Evas_Object_Protected_Data *clipee;
    Eina_List *l;
 
-   if (obj->cur->cache.clip.dirty) return;
-
    EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
      {
        state_write->cache.clip.dirty = EINA_TRUE;
diff --git a/src/lib/evas/include/evas_inline.x 
b/src/lib/evas/include/evas_inline.x
index ec53d6d..979f6ef 100644
--- a/src/lib/evas/include/evas_inline.x
+++ b/src/lib/evas/include/evas_inline.x
@@ -289,6 +289,13 @@ evas_object_clip_recalc(Evas_Object_Protected_Data *obj)
 }
 
 static inline void
+evas_object_clip_dirty(Evas_Object *eo_obj EINA_UNUSED, 
Evas_Object_Protected_Data *obj)
+{
+   if (obj->cur->cache.clip.dirty) return;
+   evas_object_clip_dirty_do(obj);
+}
+
+static inline void
 evas_object_async_block(Evas_Object_Protected_Data *obj)
 {
    if (EVAS_OBJECT_DATA_VALID(obj))
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 356f3be..eb9a1a0 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1615,7 +1615,7 @@ void evas_object_render_pre_effect_updates(Eina_Array 
*rects, Evas_Object *obj,
 void evas_rects_return_difference_rects(Eina_Array *rects, int x, int y, int 
w, int h, int xx, int yy, int ww, int hh);
 Evas_Object_Pointer_Data *_evas_object_pointer_data_get(Evas_Pointer_Data 
*evas_pdata, Evas_Object_Protected_Data *obj);
 
-void evas_object_clip_dirty(Evas_Object *obj, Evas_Object_Protected_Data *pd);
+void evas_object_clip_dirty_do(Evas_Object_Protected_Data *pd);
 void evas_object_recalc_clippees(Evas_Object_Protected_Data *pd);
 Evas_Layer *evas_layer_new(Evas *e);
 void _evas_layer_flush_removes(Evas_Layer *lay);

-- 


Reply via email to