hermet pushed a commit to branch master.

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

commit 208c579e0df527791e40a0a90bef9b9e373cdf15
Author: Hermet Park <[email protected]>
Date:   Fri Jun 29 09:58:41 2018 +0900

    evas map: check render condition more elaborately.
    
    Summary:
    Ok, this was started from a bug that canvas getting not be updated.
    If map is just disabled, at least one frame in the map region should be 
redrawn
    So I added a condition 'map changed' in the render even though map is off
    status. Now, I got a performance regression issue because it makes dirty
    region is always true for the map object.
    
    That is a corner case acutally, that object is not rendered but map still
    have changed status.
    
    I replaced the condition only if object is changed + map is changed.
    
    At least, my test case works better with this patch.
    
    @fix T6975
    
    Reviewers: #committers, ManMower, devilhorns
    
    Reviewed By: #committers, ManMower
    
    Subscribers: ApB, ManMower, cedric, #committers, zmike
    
    Tags: #efl
    
    Maniphest Tasks: T6975
    
    Differential Revision: https://phab.enlightenment.org/D6429
---
 src/lib/evas/canvas/evas_render.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_render.c 
b/src/lib/evas/canvas/evas_render.c
index 9614ec6f7f..3256ae1185 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -505,12 +505,19 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
 
              if ((obj->is_smart) &&
                  ((has_map && !_evas_render_can_map(obj)) ||
-                  (obj->changed_map && !has_map) ||
                   obj->changed_src_visible))
                {
                   RD(0, "      has map + smart\n");
                   _evas_render_prev_cur_clip_cache_add(e, obj);
                }
+             /* This is the only case that map was just turned off,
+                Need to redraw the previous obj region as well. */
+             else if (!has_map && obj->changed_map &&
+                      _evas_render_object_changed_get(obj))
+               {
+                  _evas_render_prev_cur_clip_cache_add(e, obj);
+                  obj->changed_map = EINA_FALSE;
+               }
           }
         else
           {

-- 


Reply via email to