surface_queue: use MONOTOINIC timer in pthread_cond
[platform/core/uifw/libtbm.git] / src / tbm_bufmgr.c
index 8f39d72..c92e0ea 100644 (file)
@@ -50,7 +50,7 @@ int b_dump_queue;
 static pthread_mutex_t gLock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t tbm_bufmgr_lock = PTHREAD_MUTEX_INITIALIZER;
 static double scale_factor = 0;
-static void _tbm_bufmgr_mutex_unlock(void);
+void _tbm_bufmgr_mutex_unlock(void);
 
 //#define TBM_BUFMGR_INIT_TIME
 
@@ -110,7 +110,7 @@ _tbm_bufmgr_mutex_init(void)
        return true;
 }
 
-static void
+void
 _tbm_bufmgr_mutex_lock(void)
 {
        if (!_tbm_bufmgr_mutex_init()) {
@@ -121,7 +121,7 @@ _tbm_bufmgr_mutex_lock(void)
        pthread_mutex_lock(&tbm_bufmgr_lock);
 }
 
-static void
+void
 _tbm_bufmgr_mutex_unlock(void)
 {
        pthread_mutex_unlock(&tbm_bufmgr_lock);
@@ -179,6 +179,8 @@ _tbm_util_get_appname_from_pid(long pid, char *str)
        FILE *fp;
        int len;
 
+       if (pid <= 0) return;
+
        snprintf(fn_cmdline, sizeof(fn_cmdline), "/proc/%ld/cmdline", pid);
 
        fp = fopen(fn_cmdline, "r");
@@ -721,6 +723,7 @@ tbm_bufmgr_debug_tbm_info_get(tbm_bufmgr bufmgr)
        int c = 0;
        int size;
        tbm_error_e error;
+       long pid = 0;
 
        pthread_mutex_lock(&gLock);
        _tbm_set_last_result(TBM_ERROR_NONE);
@@ -741,10 +744,11 @@ tbm_bufmgr_debug_tbm_info_get(tbm_bufmgr bufmgr)
        }
 
        TBM_SNRPRINTF(str, len, c, "\n");
-       _tbm_util_get_appname_from_pid(getpid(), app_name);
+       pid = syscall(SYS_getpid);
+       _tbm_util_get_appname_from_pid(pid, app_name);
        _tbm_util_get_appname_brief(app_name);
-       TBM_SNRPRINTF(str, len, c, "============TBM DEBUG: %s(%d)===========================\n",
-                 app_name, getpid());
+       TBM_SNRPRINTF(str, len, c, "============TBM DEBUG: %s(%ld)===========================\n",
+                 app_name, pid);
 
        snprintf(title, 255, "%s", "no  surface     refcnt  width  height  bpp  size    n_b  n_p  flags  format    app_name       ");
 
@@ -765,18 +769,22 @@ tbm_bufmgr_debug_tbm_info_get(tbm_bufmgr bufmgr)
 
                LIST_FOR_EACH_ENTRY(surf, &bufmgr->surf_list, item_link) {
                        char data[512] = {0,};
-                       unsigned int pid;
+                       unsigned int surf_pid = 0;
                        int i;
 
-                       pid = _tbm_surface_internal_get_debug_pid(surf);
-                       if (!pid) {
+                       surf_pid = _tbm_surface_internal_get_debug_pid(surf);
+                       if (!surf_pid) {
                                /* if pid is null, set the self_pid */
-                               pid = getpid();
+                               surf_pid = syscall(SYS_getpid);;
                        }
 
                        memset(app_name, 0x0, 255 * sizeof(char));
-                       _tbm_util_get_appname_from_pid(pid, app_name);
-                       _tbm_util_get_appname_brief(app_name);
+                       if (geteuid() == 0) {
+                               _tbm_util_get_appname_from_pid(surf_pid, app_name);
+                               _tbm_util_get_appname_brief(app_name);
+                       } else {
+                               snprintf(app_name, sizeof(app_name), "%d", surf_pid);
+                       }
 
                        snprintf(data, 255, "%-2d  %-9p    %-4d  %-5u  %-6u  %-3u  %-6u   %-2d   %-2d    %-3d  %-8s  %-15s",
                                  ++surf_cnt,