evas_render: use do_async for mapped child (SW)
authorShinwoo Kim <cinoo.kim@samsung.com>
Mon, 16 Mar 2020 10:15:17 +0000 (19:15 +0900)
committerJongmin Lee <jm105.lee@samsung.com>
Mon, 16 Mar 2020 21:11:54 +0000 (06:11 +0900)
commite92c365a9736b4bd89e422a2f0c155d9b2f22292
tree2401b7b65ccebd73266cbcdfa6679cdc39775056
parent89c90d78ccc0d6efaf410c844fbfd4b69f070dd9
evas_render: use do_async for mapped child (SW)

Summary:
On the SW engine, the rendering has inconsistent between smart object and
non-smart object, if they are mapped children. The smart object does ASYNC
render while the non-smart object does SYNC render. Because of this there
is a filckering rendering problem.

[Problem]
The following is a case of problems.

  elm_layout (mapped, map_surface_1)
   │
   ├─ elm_image_1 (mapped)
   │
   └─ elm_image_2 (not mapped)
       │
       └─ evas_object_image

After elm_image_1 adds draw command to the draw thread queue, and it starts
its drawing on the map_surface_1 on a thread, and stops middle of drawing.
At this point, evas_object_image does SYNC draw on the same surface
map_surface_1. And the thread for elm_image_1 works for remains.

Because the evas_object_image draws before finishing drawing of elm_image_1,
There is the problem.

F.Y.I. From the first evas_render has done SYNC render for mapped child.

   cb10c7d evas: Modify software_generic ... with threaded renderer

This patch makes mapped children do ASYNC render.

Test Plan:
{F3856130}

{F3856131}

Reviewers: Hermet, jsuya, herb

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11506
src/lib/evas/canvas/evas_render.c