e_comp_wl_hwc: send discard event if hwc_window does not display by hwc 20/268620/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 28 Dec 2021 02:49:42 +0000 (11:49 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 28 Dec 2021 07:11:01 +0000 (07:11 +0000)
if hwc_window does not display by hwc, feedback does not need to
wait commit.

Change-Id: Ic424c93424d273303d4b9690c6150576ee522a1a

src/bin/e_comp_wl_tizen_hwc.c

index e03869f..e253919 100644 (file)
@@ -91,6 +91,7 @@ _e_comp_wl_tizen_hwc_cb_create_commit_feedback(struct wl_client *client,
    E_Client *ec;
    E_Comp_Wl_Tizen_Hwc *tizen_hwc;
    E_Comp_Wl_Tizen_Hwc_Commit_Feedback* hwc_commit_feedback;
+   E_Hwc_Window_State accepted_state;
 
    tizen_hwc = wl_resource_get_user_data(tizen_hwc_resource);
    EINA_SAFETY_ON_NULL_RETURN(tizen_hwc);
@@ -130,6 +131,20 @@ _e_comp_wl_tizen_hwc_cb_create_commit_feedback(struct wl_client *client,
    tizen_hwc->hwc_commit_feeback_list = eina_list_append(tizen_hwc->hwc_commit_feeback_list, hwc_commit_feedback);
 
    ELOGF("TIZEN-HWC", "Request Tizen HWC Commit Feedback by Client.(%p, %p)", hwc_commit_feedback->ec, hwc_commit_feedback, hwc_commit_feedback->resource);
+
+   if (ec->hwc_window)
+     {
+        accepted_state = e_hwc_window_accepted_state_get(ec->hwc_window);
+        if ((!ec->comp_data->buffer_ref.buffer) &&
+            ((accepted_state == E_HWC_WINDOW_STATE_NONE) ||
+             (accepted_state == E_HWC_WINDOW_STATE_CLIENT)))
+          {
+             ELOGF("TIZEN-HWC", "[Send] Commit FeedBack Discarded.(%p, %p)", hwc_commit_feedback->ec, hwc_commit_feedback, hwc_commit_feedback->resource);
+             tizen_hwc_commit_feedback_send_discarded(hwc_commit_feedback->resource,
+                                                      hwc_commit_feedback->serial);
+             wl_resource_destroy(hwc_commit_feedback->resource);
+          }
+     }
 }
 
 static const struct tizen_hwc_interface _e_comp_wl_tizen_hwc_implementation = {