e_hwc_windows: set window transition even if target bufer isn't changed 87/253287/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 14 Jan 2021 08:27:43 +0000 (17:27 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 8 Feb 2021 03:32:48 +0000 (12:32 +0900)
Change-Id: I982e273491ec736b87a5a6f097e3435617bd5ddc

src/bin/e_hwc_windows.c

index 3e6d8139783b6a1cf7a06136ddd67537cc8f8322..56e75ad0c1080cdde9df11f0faef39df90376a18 100644 (file)
@@ -1752,6 +1752,7 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
    Eina_Bool transition = EINA_FALSE;
    const Eina_List *l;
    Eina_Bool display_state_changed = EINA_FALSE;
+   Eina_Bool target_window_changed = EINA_FALSE;
    Eina_Bool client_to_none_transition = EINA_FALSE;
 
    target_hwc_window = hwc->target_hwc_window;
@@ -1769,18 +1770,22 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         if (hwc_window->transition_failures > target_hwc_window->max_transition_failures)
           continue;
 
-        /* if norender except video is pushed, buffer of target_window can't be updated */
-        if (e_hwc_norender_get_except_video(hwc) <= 0)
+        if ((((E_Hwc_Window *)target_hwc_window)->display.buffer.tsurface) ==
+            (((E_Hwc_Window *)target_hwc_window)->buffer.tsurface))
           {
-             if ((((E_Hwc_Window *)target_hwc_window)->display.buffer.tsurface) ==
-                 (((E_Hwc_Window *)target_hwc_window)->buffer.tsurface))
-               return EINA_TRUE;
+             /* if norender except video is pushed, buffer of target_window can't be updated */
+             if (e_hwc_norender_get_except_video(hwc) <= 0)
+               transition = EINA_TRUE;
           }
+        else
+          target_window_changed = EINA_TRUE;
 
         /* DEVICE -> CLIENT */
         if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
             (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT);
+
              if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
                window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT;
 
@@ -1790,6 +1795,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE;
 
@@ -1799,6 +1806,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT);
+
              if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
                window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT;
 
@@ -1808,6 +1817,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE;
 
@@ -1817,6 +1828,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_DEVICE))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE;
 
@@ -1826,6 +1839,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_CURSOR))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR;
 
@@ -1835,6 +1850,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_DEVICE))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE;
 
@@ -1844,6 +1861,8 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_CURSOR))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR;
 
@@ -1853,15 +1872,16 @@ _e_hwc_windows_transition_check(E_Hwc *hwc)
         else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
                  (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
           {
+             e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE);
+
              if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
                window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE;
           }
 
         if (window_transition)
           {
-             hwc_window->transition_failures++;
-
-             e_hwc_window_transition_set(hwc_window, window_transition);
+             if (target_window_changed)
+               hwc_window->transition_failures++;
 
              if (window_transition == E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE)
                {