From: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp>

Previous code cleaned up surfaces in layer once and then added surfaces
to a layer in random. In this flow, two commitchanges are required.

This patch proposes that it avoids calling add_surface if a surface is
already added to a layer in random. In this flow, cleaning up
surfaces is not required.

Signed-off-by: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp>
---
 ivi-shell/hmi-controller.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c
index 77426bc..8a81f5c 100644
--- a/ivi-shell/hmi-controller.c
+++ b/ivi-shell/hmi-controller.c
@@ -418,24 +418,18 @@ mode_random_replace(struct hmi_controller *hmi_ctrl,
        struct ivi_layout_surface *ivisurf  = NULL;
        const uint32_t duration = hmi_ctrl->hmi_setting->transition_duration;
        int32_t i = 0;
+       int32_t j = 0;
        int32_t layer_idx = 0;
+       int32_t surface_len_on_layer = 0;
+       struct ivi_layout_surface **ivisurfs = NULL;
 
        layers = MEM_ALLOC(sizeof(*layers) * hmi_ctrl->screen_num);
 
        wl_list_for_each(application_layer, layer_list, link) {
                layers[layer_idx] = application_layer;
-               
ivi_layout_interface->layer_set_render_order(layers[layer_idx]->ivilayer,
-                                                       NULL, 0);
                layer_idx++;
        }
 
-       /*
-        * This commit change is needed because ivisurface can not belongs to 
several layers
-        * at the same time. So ivisurfaces shall be removed from layers once 
and then set them
-        * to layers randomly.
-        */
-       ivi_layout_interface->commit_changes();
-
        for (i = 0; i < surface_length; i++) {
                ivisurf = pp_surface[i];
 
@@ -463,6 +457,19 @@ mode_random_replace(struct hmi_controller *hmi_ctrl,
                                                             surface_width,
                                                             surface_height);
 
+               ivi_layout_interface
+                       ->get_surfaces_on_layer(layers[layer_idx]->ivilayer,
+                                               &surface_len_on_layer,
+                                               &ivisurfs);
+
+               for (j = 0; j < surface_len_on_layer; j++) {
+                       if (ivisurf == ivisurfs[j])
+                               break;
+               }
+
+               if (j < surface_len_on_layer)
+                       continue;
+
                
ivi_layout_interface->layer_add_surface(layers[layer_idx]->ivilayer, ivisurf);
        }
 
-- 
1.8.3.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to