e_hwc_windows: set hybrid/none hwc mode if ui window ins't exist 96/218096/3
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 19 Nov 2019 04:42:05 +0000 (13:42 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 20 Nov 2019 10:32:53 +0000 (10:32 +0000)
Change-Id: I67af4285b1c3b9efef97ebb7f1f8b547f045907b

src/bin/e_hwc_windows.c

index cbe9003b7db5cdadfa76cbad2981cc9e09075e04..c24d6c2a27785ec0b0d9dbfa531f5a8d89d774d0 100644 (file)
@@ -120,7 +120,7 @@ _e_hwc_windows_update_fps(E_Hwc *hwc)
 }
 
 static E_Hwc_Mode
-_e_hwc_windows_hwc_mode_update(E_Hwc *hwc, int num_client, int num_device, int num_video)
+_e_hwc_windows_hwc_mode_update(E_Hwc *hwc, int num_client, int num_device, int num_cursor, int num_video)
 {
    E_Hwc_Mode hwc_mode = E_HWC_MODE_NONE;
    int num_visible = hwc->num_visible_windows;
@@ -133,13 +133,23 @@ _e_hwc_windows_hwc_mode_update(E_Hwc *hwc, int num_client, int num_device, int n
         return hwc_mode;
      }
 
-   if (!num_visible || (!num_device && !num_video))
+   /* check ui windows */
+   if (!num_visible)
      hwc_mode = E_HWC_MODE_NONE;
-   else if (!num_client && (num_device || num_video))
+   else if (!num_device)
+     hwc_mode = E_HWC_MODE_NONE;
+   else if ((!num_client) && (num_device))
      hwc_mode = E_HWC_MODE_FULL;
    else
      hwc_mode = E_HWC_MODE_HYBRID;
 
+   /* check video and cursor windows */
+   if ((num_video) || (num_cursor))
+     {
+        if (hwc_mode == E_HWC_MODE_NONE)
+          hwc_mode = E_HWC_MODE_HYBRID;
+     }
+
    if (hwc->hwc_mode != hwc_mode)
      {
         if (hwc_mode == E_HWC_MODE_HYBRID || hwc_mode == E_HWC_MODE_NONE)
@@ -2283,7 +2293,7 @@ _e_hwc_windows_evaluate(E_Hwc *hwc)
    E_Hwc_Window *hwc_window = NULL;
    const Eina_List *l;
    uint32_t num_changes;
-   int num_client = 0, num_device = 0, num_video = 0;
+   int num_client = 0, num_device = 0, num_video = 0, num_cursor = 0;
    Eina_Bool ret = EINA_FALSE;
 
    /* validate the visible hwc_windows' states*/
@@ -2316,11 +2326,12 @@ _e_hwc_windows_evaluate(E_Hwc *hwc)
 
         if (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT) num_client++;
         if (hwc_window->state == E_HWC_WINDOW_STATE_DEVICE) num_device++;
+        if (hwc_window->state == E_HWC_WINDOW_STATE_CURSOR) num_cursor++;
         if (hwc_window->state == E_HWC_WINDOW_STATE_VIDEO) num_video++;
      }
 
    /* update the E_HWC_MODE */
-   hwc_mode = _e_hwc_windows_hwc_mode_update(hwc, num_client, num_device, num_video);
+   hwc_mode = _e_hwc_windows_hwc_mode_update(hwc, num_client, num_device, num_cursor ,num_video);
 
    /* set the state of the target_window */
    if (hwc_mode == E_HWC_MODE_NONE)