e_hwc_windows: commit hwc even if only info of hwc_window is changed
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 24 Jan 2019 10:17:34 +0000 (19:17 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 12 Apr 2019 10:00:22 +0000 (19:00 +0900)
Change-Id: Ie84db27423287b2a29f91d5fb8f92b1362d9cc72

src/bin/e_hwc_window.c
src/bin/e_hwc_window.h

index 51b7d2b7338225c7d8a40f6f2c69f3e5b1338b41..0e831c982feda2608b551d6a88f654d0b7aebd02 100644 (file)
@@ -3,6 +3,10 @@
 # include <pixman.h>
 # include <wayland-tbm-server.h>
 
+#ifndef CLEAR
+#define CLEAR(x) memset(&(x), 0, sizeof (x))
+#endif
+
 #define EHWINF(f, ec, ehw, x...)                                \
    do                                                           \
      {                                                          \
@@ -992,7 +996,9 @@ e_hwc_window_commit_data_acquire(E_Hwc_Window *hwc_window)
              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) return EINA_FALSE;
+        if ((hwc_window->buffer.tsurface == hwc_window->display.buffer.tsurface) &&
+            (!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);
@@ -1078,6 +1084,8 @@ e_hwc_window_commit_data_release(E_Hwc_Window *hwc_window)
 
         e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref, NULL);
         _e_hwc_window_buffer_set(&hwc_window->display.buffer, NULL, NULL);
+
+        CLEAR(hwc_window->display.info);
      }
    else
      {
@@ -1102,6 +1110,8 @@ e_hwc_window_commit_data_release(E_Hwc_Window *hwc_window)
         /* update hwc_window display info */
         _e_hwc_window_buffer_set(&hwc_window->display.buffer, tsurface, queue);
 
+        memcpy(&hwc_window->display.info, &hwc_window->commit_data->info, sizeof(tdm_hwc_window_info));
+
         e_object_ref(E_OBJECT(hwc_window));
      }
 
index 6531450e697d3c4b9552338883b0da95be4990d4..610278b564ea91fbfe777cc9d8cb631479edfc38 100644 (file)
@@ -100,6 +100,7 @@ struct _E_Hwc_Window
    {
       E_Comp_Wl_Buffer_Ref        buffer_ref;
       E_Hwc_Window_Buffer         buffer;
+      tdm_hwc_window_info         info;
    } display;
 
    struct
@@ -142,6 +143,7 @@ struct _E_Hwc_Window_Target
 struct _E_Hwc_Window_Commit_Data {
    E_Comp_Wl_Buffer_Ref   buffer_ref;
    E_Hwc_Window_Buffer    buffer;
+   tdm_hwc_window_info    info;
 };
 
 EINTERN Eina_Bool          e_hwc_window_init(E_Hwc *hwc);