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 9f8ea82e2614e05861084468dd7d9a21d3984e13..c843eef68ad73a39b280cc120bc9276874d4f84b 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>
@@ -1321,6 +1322,15 @@ tdm_vblank_create(tdm_display *dpy, tdm_output *output, tdm_error *error);
 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"
index bb62f42587ca4f5d396f42815eb2373933c9077b..91d04f4e9baa8058352aead1b3fa0aaccc6b1de7 100644 (file)
@@ -714,6 +714,31 @@ tdm_vblank_destroy(tdm_vblank *vblank)
        free(private_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)
 {