display: add tdm_display_find_output 59/171059/2
authorBoram Park <boram1288.park@samsung.com>
Mon, 26 Feb 2018 06:35:34 +0000 (15:35 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 26 Feb 2018 23:50:59 +0000 (08:50 +0900)
Change-Id: I78c86c27e3f6c8c0cbf31d04455c3024d936e9a5

include/tdm.h
src/tdm_display.c
src/tdm_server.c

index 09a0f7b..7d8ed4d 100644 (file)
@@ -207,6 +207,16 @@ tdm_output *
 tdm_display_get_output(tdm_display *dpy, int index, tdm_error *error);
 
 /**
+ * @brief Find a output object which has the given name.
+ * @param[in] dpy A display object
+ * @param[in] name The name of a output object
+ * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @return A output object if success. Otherwise, NULL.
+ */
+tdm_output *
+tdm_display_find_output(tdm_display *dpy, const char *name, tdm_error *error);
+
+/**
  * @brief Create a pp object.
  * @param[in] dpy A display object
  * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
index d2fba50..cd6e81e 100644 (file)
@@ -343,6 +343,37 @@ tdm_display_get_output(tdm_display *dpy, int index, tdm_error *error)
        return NULL;
 }
 
+EXTERN tdm_output *
+tdm_display_find_output(tdm_display *dpy, const char *name, tdm_error *error)
+{
+       tdm_private_backend *private_backend = NULL;
+       tdm_private_output *private_output = NULL;
+
+       DISPLAY_FUNC_ENTRY_ERROR();
+
+       if (!strncasecmp(name, "primary", 7) || !strncasecmp(name, "default", 7)) {
+               return tdm_display_get_output(dpy, 0, error);
+       }
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       if (error)
+               *error = TDM_ERROR_NONE;
+
+       LIST_FOR_EACH_ENTRY(private_backend, &private_display->backend_list, link) {
+               LIST_FOR_EACH_ENTRY(private_output, &private_backend->output_list, link) {
+                       if (strncmp(private_output->caps.model, name, TDM_NAME_LEN))
+                               continue;
+                       _pthread_mutex_unlock(&private_display->lock);
+                       return private_output;
+               }
+       }
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return NULL;
+}
+
 EXTERN tdm_error
 tdm_display_get_fd(tdm_display *dpy, int *fd)
 {
index 1bb5683..968a6ed 100644 (file)
@@ -121,45 +121,6 @@ _tdm_server_get_process_name(pid_t pid, char *name, unsigned int size)
        fclose(h);
 }
 
-static tdm_output*
-_tdm_server_find_output(tdm_private_server *private_server, const char *name)
-{
-       tdm_private_loop *private_loop = private_server->private_loop;
-       tdm_output *found = NULL;
-
-       if (!strncasecmp(name, "primary", 7) || !strncasecmp(name, "default", 7))
-               found = tdm_display_get_output(private_loop->dpy, 0, NULL);
-
-       if (!found) {
-               int count = 0, i;
-
-               tdm_display_get_output_count(private_loop->dpy, &count);
-
-               for (i = 0; i < count; i++) {
-                       tdm_output *output = tdm_display_get_output(private_loop->dpy, i, NULL);
-                       tdm_output_conn_status status;
-                       const char *model = NULL;
-                       tdm_error ret;
-
-                       ret = tdm_output_get_conn_status(output, &status);
-                       if (ret || status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED)
-                               continue;
-
-                       ret = tdm_output_get_model_info(output, NULL, &model, NULL);
-                       if (ret || !model)
-                               continue;
-
-                       if (strncmp(model, name, TDM_NAME_LEN))
-                               continue;
-
-                       found = output;
-                       break;
-               }
-       }
-
-       return found;
-}
-
 /* LCOV_EXCL_START */
 static void
 _tdm_server_send_done(tdm_server_wait_info *wait_info, tdm_error error,
@@ -636,7 +597,7 @@ _tdm_server_cb_create_output(struct wl_client *client, struct wl_resource *resou
        tdm_output_conn_status status = TDM_OUTPUT_CONN_STATUS_DISCONNECTED;
        tdm_error ret;
 
-       output = _tdm_server_find_output(private_server, name);
+       output = tdm_display_find_output(private_server->private_loop->dpy, name, NULL);
        if (!output) {
                /* LCOV_EXCL_START */