tdm_server: Remove duplicate code 14/277514/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 5 Jul 2022 04:39:06 +0000 (13:39 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Thu, 7 Jul 2022 10:07:28 +0000 (19:07 +0900)
Change-Id: I04f6bc9b4064589e1609d78ceded9b8a08bbc96e

src/tdm_server.c

index 7e8fb20..903a659 100644 (file)
@@ -126,6 +126,11 @@ typedef struct _tdm_server_client_info {
        struct wl_resource *resource;
 } tdm_server_client_info;
 
+typedef enum {
+       VBLANK_WAIT_TYPE_INTERVAL,
+       VBLANK_WAIT_TYPE_SEQUENCE,
+} tdm_server_vblank_wait_type;
+
 static tdm_private_server *keep_private_server;
 static struct list_head client_list;
 
@@ -415,10 +420,9 @@ _tdm_server_vblank_cb_set_enable_fake(struct wl_client *client, struct wl_resour
 }
 
 static void
-_tdm_server_vblank_cb_wait_vblank(struct wl_client *client, struct wl_resource *resource,
-                                                                 uint32_t interval, uint32_t req_id, uint32_t req_sec, uint32_t req_usec)
+_tdm_server_vblank_wait_vblank(tdm_server_vblank_info *vblank_info, tdm_server_vblank_wait_type wait_type,
+                                                          uint32_t wait_value, uint32_t req_id, uint32_t req_sec, uint32_t req_usec)
 {
-       tdm_server_vblank_info *vblank_info = wl_resource_get_user_data(resource);
        tdm_server_output_info *output_info = vblank_info->output_info;
        tdm_private_server *private_server = output_info->private_server;
        tdm_private_loop *private_loop = private_server->private_loop;
@@ -448,7 +452,11 @@ _tdm_server_vblank_cb_wait_vblank(struct wl_client *client, struct wl_resource *
        if (tdm_ttrace_module & TDM_TTRACE_SERVER_VBLANK)
                TDM_TRACE_ASYNC_BEGIN((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
 
-       ret = tdm_vblank_wait(vblank_info->vblank, req_sec, req_usec, interval, _tdm_server_cb_vblank, wait_info);
+       if (wait_type == VBLANK_WAIT_TYPE_INTERVAL)
+               ret = tdm_vblank_wait(vblank_info->vblank, req_sec, req_usec, wait_value, _tdm_server_cb_vblank, wait_info);
+       else
+               ret = tdm_vblank_wait_seq(vblank_info->vblank, req_sec, req_usec, wait_value, _tdm_server_cb_vblank, wait_info);
+
 
        tdm_vblank_get_enable_fake(vblank_info->vblank, &enable_fake);
        if (!enable_fake && ret == TDM_ERROR_DPMS_OFF)
@@ -456,71 +464,38 @@ _tdm_server_vblank_cb_wait_vblank(struct wl_client *client, struct wl_resource *
 
        TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, wait_failed);
 
-       tdm_display_lock(private_loop->dpy);
-       _tdm_server_vblank_timeout_update(vblank_info, 1000);
-       tdm_display_unlock(private_loop->dpy);
+       if (wait_type == VBLANK_WAIT_TYPE_INTERVAL) {
+               tdm_display_lock(private_loop->dpy);
+               _tdm_server_vblank_timeout_update(vblank_info, 1000);
+               tdm_display_unlock(private_loop->dpy);
+       }
 
        return;
+
 wait_failed:
        /* LCOV_EXCL_START */
-
        wl_tdm_vblank_send_done(vblank_info->resource, req_id, 0, 0, 0, ret);
        if (wait_info)
                destroy_wait(wait_info);
-
        /* LCOV_EXCL_STOP */
 }
 
 static void
-_tdm_server_vblank_cb_wait_vblank_seq(struct wl_client *client, struct wl_resource *resource,
-                                                                         uint32_t sequence, uint32_t req_id, uint32_t req_sec, uint32_t req_usec)
+_tdm_server_vblank_cb_wait_vblank(struct wl_client *client, struct wl_resource *resource,
+                                                                 uint32_t interval, uint32_t req_id, uint32_t req_sec, uint32_t req_usec)
 {
        tdm_server_vblank_info *vblank_info = wl_resource_get_user_data(resource);
-       tdm_server_output_info *output_info = vblank_info->output_info;
-       tdm_private_server *private_server = output_info->private_server;
-       tdm_server_wait_info *wait_info;
-       unsigned int enable_fake = 0;
-       tdm_error ret;
-
-       wait_info = calloc(1, sizeof * wait_info);
-       if (!wait_info) {
-               /* LCOV_EXCL_START */
-
-               TDM_ERR("alloc failed");
-               ret = TDM_ERROR_OUT_OF_MEMORY;
-               goto wait_failed;
 
-               /* LCOV_EXCL_STOP */
-       }
-
-       LIST_ADDTAIL(&wait_info->link, &private_server->wait_list);
-       wait_info->vblank_info = vblank_info;
-       wait_info->req_id = req_id;
-       wait_info->req_time = TDM_TIME(req_sec, req_usec);
-
-       if (tdm_debug_module & TDM_DEBUG_VBLANK)
-               TDM_DBG("req_id(%d) wait", req_id);
-
-       if (tdm_ttrace_module & TDM_TTRACE_SERVER_VBLANK)
-               TDM_TRACE_ASYNC_BEGIN((int)wait_info->req_time, "TDM_Server_Vblank:%u", vblank_info->stamp);
-
-       ret = tdm_vblank_wait_seq(vblank_info->vblank, req_sec, req_usec, sequence, _tdm_server_cb_vblank, wait_info);
-
-       tdm_vblank_get_enable_fake(vblank_info->vblank, &enable_fake);
-       if (!enable_fake && ret == TDM_ERROR_DPMS_OFF)
-               goto wait_failed;
-
-       TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, wait_failed);
-
-       return;
-wait_failed:
-       /* LCOV_EXCL_START */
+       _tdm_server_vblank_wait_vblank(vblank_info, VBLANK_WAIT_TYPE_INTERVAL, interval, req_id, req_sec, req_usec);
+}
 
-       wl_tdm_vblank_send_done(vblank_info->resource, req_id, 0, 0, 0, ret);
-       if (wait_info)
-               destroy_wait(wait_info);
+static void
+_tdm_server_vblank_cb_wait_vblank_seq(struct wl_client *client, struct wl_resource *resource,
+                                                                         uint32_t sequence, uint32_t req_id, uint32_t req_sec, uint32_t req_usec)
+{
+       tdm_server_vblank_info *vblank_info = wl_resource_get_user_data(resource);
 
-       /* LCOV_EXCL_STOP */
+       _tdm_server_vblank_wait_vblank(vblank_info, VBLANK_WAIT_TYPE_SEQUENCE, sequence, req_id, req_sec, req_usec);
 }
 
 static const struct wl_tdm_vblank_interface tdm_vblank_implementation = {