From 208c579e0df527791e40a0a90bef9b9e373cdf15 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 29 Jun 2018 09:58:41 +0900 Subject: [PATCH] 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 {