e_comp_wl_tizen_hwc: add timer to hwc_commit_feedback 65/246965/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 5 Nov 2020 09:47:52 +0000 (18:47 +0900)
committerchangyeon lee <cyeon.lee@samsung.com>
Fri, 6 Nov 2020 04:29:05 +0000 (04:29 +0000)
Change-Id: Ib6abc7274281745b8374f233dce06c7f6514f2f4

src/bin/e_comp_wl_tizen_hwc.c

index 60fd967..b89acaa 100644 (file)
@@ -1,6 +1,8 @@
 #include "e.h"
 #include "tizen-hwc-server-protocol.h"
 
+#define E_COMP_WL_TIZEN_HWC_TIMEOUT 10.0
+
 static Eina_List *_e_comp_wl_tizen_hwc_list = NULL;
 
 typedef struct _E_Comp_Wl_Tizen_Hwc E_Comp_Wl_Tizen_Hwc;
@@ -18,6 +20,7 @@ struct _E_Comp_Wl_Tizen_Hwc_Commit_Feedback
    E_Client *ec;
    E_Comp_Wl_Tizen_Hwc *tizen_hwc;
    uint32_t serial;
+   Ecore_Timer *timer;
 };
 
 static void
@@ -34,6 +37,9 @@ _tizen_hwc_commit_feedback_cb_resource_destroy(struct wl_resource *hwc_commit_fe
 
    ELOGF("TIZEN-HWC", "Destory Tizen HWC Commit Feedback.", hwc_commit_feedback->ec);
 
+   if (hwc_commit_feedback->timer)
+     ecore_timer_del(hwc_commit_feedback->timer);
+
    tizen_hwc->hwc_commit_feeback_list = eina_list_remove(tizen_hwc->hwc_commit_feeback_list, hwc_commit_feedback);
    E_FREE(hwc_commit_feedback);
 }
@@ -46,6 +52,25 @@ _e_comp_wl_tizen_hwc_cb_destroy(struct wl_client *client,
    ELOGF("TIZEN-HWC", "Destroy Tizen HWC.", NULL);
 }
 
+static Eina_Bool
+_e_comp_wl_tizen_hwc_commit_feedback_cb_timeout(void *data)
+{
+   E_Comp_Wl_Tizen_Hwc_Commit_Feedback* hwc_commit_feedback = (E_Comp_Wl_Tizen_Hwc_Commit_Feedback *)data;
+
+   if (!hwc_commit_feedback) return ECORE_CALLBACK_CANCEL;
+
+   ELOGF("TIZEN-HWC", "Timeout Tizen HWcCommit Feedback.(%p, %p)",
+         hwc_commit_feedback->ec, hwc_commit_feedback, hwc_commit_feedback->resource);
+
+   hwc_commit_feedback->timer = NULL;
+
+   tizen_hwc_commit_feedback_send_discarded(hwc_commit_feedback->resource,
+                                          hwc_commit_feedback->serial);
+   wl_resource_destroy(hwc_commit_feedback->resource);
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
 static void
 _e_comp_wl_tizen_hwc_cb_commit_feedback(struct wl_client *client,
                                 struct wl_resource *tizen_hwc_resource,
@@ -84,6 +109,9 @@ _e_comp_wl_tizen_hwc_cb_commit_feedback(struct wl_client *client,
    hwc_commit_feedback->ec = ec;
    hwc_commit_feedback->tizen_hwc = tizen_hwc;
    hwc_commit_feedback->serial = serial;
+   hwc_commit_feedback->timer = ecore_timer_add(E_COMP_WL_TIZEN_HWC_TIMEOUT,
+                                                _e_comp_wl_tizen_hwc_commit_feedback_cb_timeout,
+                                                hwc_commit_feedback);
 
    wl_resource_set_implementation(hwc_commit_feedback->resource, NULL, hwc_commit_feedback,
                                   _tizen_hwc_commit_feedback_cb_resource_destroy);