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
This commit is contained in:
Hermet Park 2018-06-29 09:58:41 +09:00
parent aa9cc3a068
commit 208c579e0d
1 changed files with 8 additions and 1 deletions

View File

@ -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
{