e_hwc_windows: check to change of cursor buffer and info in commit_data_acquire 44/239544/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 21 Jul 2020 05:28:22 +0000 (14:28 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 27 Jul 2020 11:46:15 +0000 (20:46 +0900)
Change-Id: I62e017be2ea882b8390f8591195181cf9808de54

src/bin/e_hwc_window.c

index 3556b628c239d6613070fbf21110c170fe91e222..7f1e9e3bb20a01616fc70b60ce2f88013da3cea3 100644 (file)
@@ -1401,16 +1401,22 @@ e_hwc_window_commit_data_acquire(E_Hwc_Window *hwc_window)
 {
    E_Hwc_Window_Commit_Data *commit_data = NULL;
 
-    if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR)
-      {
+   if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR)
+     {
+        if (!hwc_window->cursor.buffer) return EINA_FALSE;
+        if ((hwc_window->cursor.buffer == hwc_window->display.buffer_ref.buffer) &&
+            (!memcmp(&hwc_window->info, &hwc_window->display.info, sizeof(tdm_hwc_window_info))))
+          return EINA_FALSE;
+
         commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1);
         EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, EINA_FALSE);
 
+        memcpy(&commit_data->info, &hwc_window->info, sizeof(tdm_hwc_window_info));
         e_comp_wl_buffer_reference(&commit_data->buffer_ref,
                                    _e_hwc_window_comp_wl_buffer_get(hwc_window));
-      }
-    else if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE ||
-             hwc_window->accepted_state == E_HWC_WINDOW_STATE_VIDEO)
+     }
+   else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) ||
+            (hwc_window->accepted_state == E_HWC_WINDOW_STATE_VIDEO))
      {
         if (!hwc_window->buffer.tsurface) return EINA_FALSE;
         if ((hwc_window->buffer.tsurface == hwc_window->display.buffer.tsurface) &&
@@ -1422,7 +1428,16 @@ e_hwc_window_commit_data_acquire(E_Hwc_Window *hwc_window)
      }
    else
      {
-        if (!hwc_window->display.buffer.tsurface) return EINA_FALSE;
+        if (e_hwc_window_is_cursor(hwc_window))
+          {
+             if (!hwc_window->display.buffer_ref.buffer)
+               return EINA_FALSE;
+          }
+        else
+          {
+             if (!hwc_window->display.buffer.tsurface)
+               return EINA_FALSE;
+          }
 
         commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1);
         EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, EINA_FALSE);
@@ -1522,6 +1537,18 @@ e_hwc_window_commit_data_release(E_Hwc_Window *hwc_window)
 
    if (e_hwc_window_is_cursor(hwc_window))
      {
+        if (hwc_window->commit_data->buffer_ref.buffer)
+          {
+             e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref,
+                                        hwc_window->commit_data->buffer_ref.buffer);
+             memcpy(&hwc_window->display.info, &hwc_window->commit_data->info, sizeof(tdm_hwc_window_info));
+          }
+        else
+          {
+             e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref, NULL);
+             CLEAR(hwc_window->display.info);
+          }
+
         e_comp_wl_buffer_reference(&hwc_window->commit_data->buffer_ref, NULL);
         free(hwc_window->commit_data);
         hwc_window->commit_data = NULL;