vblank: get the client pid of a vblank object. 18/165218/5
authorBoram Park <boram1288.park@samsung.com>
Wed, 27 Dec 2017 05:57:36 +0000 (14:57 +0900)
committerBoram Park <boram1288.park@samsung.com>
Thu, 28 Dec 2017 07:38:39 +0000 (16:38 +0900)
Change-Id: I7fa29f1b03720ec93344893ea8a8bf3e0c8a6c72

include/tdm.h
src/tdm_vblank.c

index 9f8ea82..c843eef 100644 (file)
@@ -37,6 +37,7 @@
 #define _TDM_H_
 
 #include <stdint.h>
+#include <sys/types.h>
 #include <tbm_surface.h>
 #include <tbm_surface_queue.h>
 #include <tbm_surface_internal.h>
@@ -1322,6 +1323,15 @@ void
 tdm_vblank_destroy(tdm_vblank *vblank);
 
 /**
+ * @brief Get the client PID for a vblank object
+ * @param[in] vblank A vblank object
+ * @param[out] pid PID of vblank's client
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_vblank_get_client_pid(tdm_vblank *vblank, pid_t *pid);
+
+/**
  * @brief Set the name to a vblank object
  * @details The default name is "unknown"
  * @param[in] vblank A vblank object
index bb62f42..91d04f4 100644 (file)
@@ -715,6 +715,31 @@ tdm_vblank_destroy(tdm_vblank *vblank)
 }
 
 EXTERN tdm_error
+tdm_vblank_get_client_pid(tdm_vblank *vblank, pid_t *pid)
+{
+       tdm_private_vblank *private_vblank = vblank;
+       struct wl_client *client;
+
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valid(vblank), TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(pid != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       if (!private_vblank->resource) {
+               *pid = 0;
+               return TDM_ERROR_NONE;
+       }
+
+       client = wl_resource_get_client(private_vblank->resource);
+       if (!client) {
+               *pid = 0;
+               return TDM_ERROR_NONE;
+       }
+
+       wl_client_get_credentials(client, pid, NULL, NULL);
+
+       return TDM_ERROR_NONE;
+}
+
+EXTERN tdm_error
 tdm_vblank_set_name(tdm_vblank *vblank, const char *name)
 {
        tdm_private_vblank *private_vblank = vblank;