e_comp_wl_tizen_hwc: implement the create_commit_feedback request. 74/259374/6 accepted/tizen/unified/20210608.130948 submit/tizen/20210607.071331 submit/tizen/20210607.071352
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 7 Jun 2021 03:08:38 +0000 (12:08 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 7 Jun 2021 06:01:32 +0000 (06:01 +0000)
This request has the same implementation as commit_feedback request.
The implementationfor commit_feedback request will be removed later
because the commit_feedback request will be deprecated.

Change-Id: I8abc3c6b2001bc0b91955db2d8d1634eb1a8383c

src/bin/e_comp_wl_tizen_hwc.c

index b89acaa..f235055 100644 (file)
@@ -71,6 +71,7 @@ _e_comp_wl_tizen_hwc_commit_feedback_cb_timeout(void *data)
    return ECORE_CALLBACK_CANCEL;
 }
 
+// TODO: This request will be deprecated.
 static void
 _e_comp_wl_tizen_hwc_cb_commit_feedback(struct wl_client *client,
                                 struct wl_resource *tizen_hwc_resource,
@@ -121,9 +122,60 @@ _e_comp_wl_tizen_hwc_cb_commit_feedback(struct wl_client *client,
    ELOGF("TIZEN-HWC", "Request Tizen HWC Commit Feedback by Client.(%p, %p)", hwc_commit_feedback->ec, hwc_commit_feedback, hwc_commit_feedback->resource);
 }
 
+static void
+_e_comp_wl_tizen_hwc_cb_create_commit_feedback(struct wl_client *client,
+                                struct wl_resource *tizen_hwc_resource,
+                                struct wl_resource *surface_resource,
+                                uint32_t id,
+                                uint32_t serial)
+{
+   E_Client *ec;
+   E_Comp_Wl_Tizen_Hwc *tizen_hwc;
+   E_Comp_Wl_Tizen_Hwc_Commit_Feedback* hwc_commit_feedback;
+
+   tizen_hwc = wl_resource_get_user_data(tizen_hwc_resource);
+   EINA_SAFETY_ON_NULL_RETURN(tizen_hwc);
+
+   ec = wl_resource_get_user_data(surface_resource);
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+   if (e_object_is_del(E_OBJECT(ec))) return;
+
+   hwc_commit_feedback = E_NEW(E_Comp_Wl_Tizen_Hwc_Commit_Feedback, 1);
+   if (!hwc_commit_feedback)
+     {
+        wl_client_post_no_memory(client);
+        return;
+     }
+
+   hwc_commit_feedback->resource = wl_resource_create(client,
+                                           &tizen_hwc_commit_feedback_interface,
+                                           1, id);
+   if (!hwc_commit_feedback->resource)
+     {
+        wl_client_post_no_memory(client);
+        E_FREE(hwc_commit_feedback);
+        return;
+     }
+
+   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);
+
+   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);
+}
+
 static const struct tizen_hwc_interface _e_comp_wl_tizen_hwc_implementation = {
    .destroy = _e_comp_wl_tizen_hwc_cb_destroy,
-   .commit_feedback = _e_comp_wl_tizen_hwc_cb_commit_feedback
+   .commit_feedback = _e_comp_wl_tizen_hwc_cb_commit_feedback, // TODO: DEPRECATED: this will be deprecated.
+   .create_commit_feedback = _e_comp_wl_tizen_hwc_cb_create_commit_feedback
 };
 
 static void