e_hwc_window: update the composition_types at e_hwc_window_state_set 14/191814/3
authorSooChan Lim <sc1.lim@samsung.com>
Wed, 24 Oct 2018 06:39:04 +0000 (15:39 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Tue, 30 Oct 2018 05:51:52 +0000 (05:51 +0000)
Change-Id: I88e5a826d9d772edc8dc1b08969d348e291e00e2
Signed-off-by: SooChan Lim <sc1.lim@samsung.com>
src/bin/e_comp_wl_video.c
src/bin/e_hwc_window.c
src/bin/e_hwc_window.h
src/bin/e_hwc_windows.c

index 6283870c4089bd97812db3c5dafd3887e96f81c2..8054ef8b8f11c7519b43ae85d8ba4b663bfecc25 100644 (file)
@@ -560,7 +560,7 @@ _e_video_layer_unset_buffer(E_Video_Layer *layer)
         hwc_window = layer->e_client->hwc_window;
         EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, TDM_ERROR_OPERATION_FAILED);
 
-        e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+        e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
         layer->cur_tsurface = NULL; // set the buffer to the tdm at the e_hwc_window_buffer_update();
 
         ret = TDM_ERROR_NONE;
index ca2bfd352038bb6bd468671a910e202ee582aaf3..61975648550b55f4a1655dc8d419b171358d3c69 100644 (file)
@@ -979,7 +979,7 @@ e_hwc_window_free(E_Hwc_Window *hwc_window)
         hwc_window->queue = NULL;
      }
 
-   e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+   e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
 
    e_object_del(E_OBJECT(hwc_window));
 }
@@ -1695,7 +1695,7 @@ e_hwc_window_accepted_state_get(E_Hwc_Window *hwc_window)
 }
 
 EINTERN Eina_Bool
-e_hwc_window_state_set(E_Hwc_Window *hwc_window, E_Hwc_Window_State state)
+e_hwc_window_state_set(E_Hwc_Window *hwc_window, E_Hwc_Window_State state, Eina_Bool composition_update)
 {
    EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
 
@@ -1703,6 +1703,13 @@ e_hwc_window_state_set(E_Hwc_Window *hwc_window, E_Hwc_Window_State state)
 
    hwc_window->state = state;
 
+   /* update the composition type */
+   if (composition_update)
+     {
+        if (!e_hwc_window_composition_update(hwc_window))
+          ERR("HWC-WINS: cannot update E_Hwc_Window(%p)", hwc_window);
+     }
+
    /* zpos is -999 at state none */
    if (state == E_HWC_WINDOW_STATE_NONE)
      e_hwc_window_zpos_set(hwc_window, -999);
index 40d2b7b1d5840e2621a437c50cc53b8608a3c713..70fd93f7ade7cef19b6b208e7559d82d5dc7b687 100644 (file)
@@ -166,7 +166,7 @@ EINTERN Eina_Bool          e_hwc_window_deactivate(E_Hwc_Window *hwc_window);
 EINTERN Eina_Bool          e_hwc_window_is_on_hw_overlay(E_Hwc_Window *hwc_window);
 EINTERN tbm_surface_h      e_hwc_window_displaying_surface_get(E_Hwc_Window *hwc_window);
 
-EINTERN Eina_Bool          e_hwc_window_state_set(E_Hwc_Window *hwc_window, E_Hwc_Window_State state);
+EINTERN Eina_Bool          e_hwc_window_state_set(E_Hwc_Window *hwc_window, E_Hwc_Window_State state, Eina_Bool composition_update);
 EINTERN E_Hwc_Window_State e_hwc_window_state_get(E_Hwc_Window *hwc_window);
 EINTERN Eina_Bool          e_hwc_window_accepted_state_set(E_Hwc_Window *hwc_window, E_Hwc_Window_State state);
 EINTERN E_Hwc_Window_State e_hwc_window_accepted_state_get(E_Hwc_Window *hwc_window);
index 71b06899bf574877a83bda116c7c7af90b8c838d..c4aaf15fe71518f1abe14884c36803917386fc65 100644 (file)
@@ -927,7 +927,7 @@ _e_hwc_windows_accept(E_Hwc *hwc, uint32_t num_changes)
 
         /* update the state with the changed compsition */
         state = _e_hwc_windows_window_state_get(composition_types[i]);
-        e_hwc_window_state_set(hwc_window, state);
+        e_hwc_window_state_set(hwc_window, state, EINA_TRUE);
      }
 
    EINA_LIST_FOREACH(hwc->hwc_windows, l, hwc_window)
@@ -1074,21 +1074,21 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc)
 
         if (e_object_is_del(E_OBJECT(ec)))
           {
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
              continue;
           }
 
         // check clients to skip composite
         if (e_client_util_ignored_get(ec))
           {
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
              continue;
           }
 
         // check clients to skip composite
         if (!evas_object_visible_get(ec->frame))
           {
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
              continue;
           }
 
@@ -1096,20 +1096,20 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc)
         ecore_evas_geometry_get(e_comp->ee, NULL, NULL, &scr_w, &scr_h);
         if (!E_INTERSECTS(0, 0, scr_w, scr_h, ec->client.x, ec->client.y, ec->client.w, ec->client.h))
           {
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
              continue;
           }
 
         if (evas_object_data_get(ec->frame, "comp_skip"))
           {
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
              continue;
           }
 
         /* skip all small clients except the video clients */
         if ((ec->w == 1 || ec->h == 1) && !e_hwc_window_is_video(hwc_window))
           {
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE);
              continue;
           }
 
@@ -1118,7 +1118,7 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc)
             if (!e_comp_wl_video_hwc_widow_surface_get(hwc_window))
               continue;
 
-            e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_VIDEO);
+            e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_VIDEO, EINA_TRUE);
           }
 
         windows_list = eina_list_append(windows_list, hwc_window);
@@ -1209,14 +1209,10 @@ _e_hwc_windows_states_evaluate(E_Hwc *hwc)
                   continue;
                }
 
-             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_CLIENT);
+             e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_CLIENT, EINA_TRUE);
 
              EHWSTRACE("   ehw:%p -- {%25s} is NOT hwc_acceptable.",
                      hwc_window->ec, hwc_window, hwc_window->ec->icccm.title);
-
-             /* update the composition type */
-             if (!e_hwc_window_composition_update(hwc_window))
-               ERR("HWC-WINS: cannot update E_Hwc_Window(%p)", hwc_window);
           }
      }
    else
@@ -1235,13 +1231,9 @@ _e_hwc_windows_states_evaluate(E_Hwc *hwc)
              /* filter the visible clients which e20 prevent to shown by hw directly
                 by demand of e20 */
              if (e_hwc_window_device_state_available_check(hwc_window))
-               e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_DEVICE);
+               e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_DEVICE, EINA_TRUE);
              else
-               e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_CLIENT);
-
-             /* update the composition type */
-             if (!e_hwc_window_composition_update(hwc_window))
-               ERR("HWC-WINS: cannot update E_Hwc_Window(%p)", hwc_window);
+               e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_CLIENT, EINA_TRUE);
           }
      }
 }
@@ -1351,7 +1343,7 @@ _e_hwc_windows_target_state_set(E_Hwc_Window_Target *target_hwc_window, E_Hwc_Wi
    E_Hwc_Window *target_window = (E_Hwc_Window *)target_hwc_window;
 
    if (target_window->state != state)
-     e_hwc_window_state_set(target_window, state);
+     e_hwc_window_state_set(target_window, state, EINA_FALSE);
 
    if (target_window->accepted_state != state)
      e_hwc_window_accepted_state_set(target_window, state);