show the trace log according to the tbm resources 14/173714/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 8 Mar 2018 03:50:46 +0000 (12:50 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 23 Mar 2018 09:34:04 +0000 (18:34 +0900)
Change-Id: I625fc3df4528680fa2f9e4ff21b68f6d0d6e0a81

src/wayland-tbm-client.c
src/wayland-tbm-int.h
src/wayland-tbm-monitor-server.c
src/wayland-tbm-util.c

index 847344b22f769784db084dcccb2a63b3655b5236..af68a84cafb8bebec98c005c7115ef5d344a2155 100644 (file)
@@ -331,7 +331,9 @@ void _waylend_tbm_monitor_client_trace(int argc, char *argv[],
 {
        int st;
 
-       st = _waylend_tbm_util_trace(_waylend_tbm_util_proc_state_parse(argv[1]), tbm_client->bufmgr);
+       st = _waylend_tbm_util_trace(_waylend_tbm_util_proc_state_parse(argv[1]),
+                                                               _waylend_tbm_util_resource_parse(argv[2]),
+                                                               tbm_client->bufmgr);
        WL_TBM_MONITOR_SNPRINTF(reply, *len, "client(%d): trace state: %s\n", getpid() ,
                                                        st ? "on" : "off");
 }
index 6ca7c0683bcc47e7491595629fdf632f40a10fe7..65f22969da659172cb80577b0cdae1d6f219bc7b 100644 (file)
@@ -122,6 +122,16 @@ typedef enum {
        WL_TBM_MONITOR_PROC_STATE_UNKNOWN,
 } WL_TBM_MONITOR_PROC_STATE;
 
+typedef enum {
+       WL_TBM_MONITOR_RES_BO,
+       WL_TBM_MONITOR_RES_SURFACE_INTERNAL,
+       WL_TBM_MONITOR_RES_SURFACE,
+       WL_TBM_MONITOR_RES_SURFACE_QUEUE,
+       WL_TBM_MONITOR_RES_WL_TBM,
+       WL_TBM_MONITOR_RES_ALL,
+       WL_TBM_MONITOR_RES_UNKNOWN,
+} WL_TBM_MONITOR_RES;
+
 #define WL_TBM_MONITOR_REPLY_MSG_LEN   8192
 #define WL_TBM_MONITOR_ARGS_MAX                        12
 #define WL_TBM_MONITOR_PATH_LEN                        256
@@ -188,6 +198,9 @@ _wayland_tbm_util_show_path_parse(char * path_str, char * cwd, struct wayland_tb
 WL_TBM_MONITOR_PROC_STATE
 _waylend_tbm_util_proc_state_parse(char * str);
 
+WL_TBM_MONITOR_RES
+_waylend_tbm_util_resource_parse(char * str);
+
 int
 _waylend_tbm_util_dump_queue(WL_TBM_MONITOR_PROC_STATE cmd, tbm_bufmgr bufmgr, double scale);
 
@@ -195,7 +208,7 @@ void
 _waylend_tbm_util_dump_snapshot(tbm_bufmgr bufmgr, double scale, char *path);
 
 int
-_waylend_tbm_util_trace(WL_TBM_MONITOR_PROC_STATE cmd, tbm_bufmgr bufmgr);
+_waylend_tbm_util_trace(WL_TBM_MONITOR_PROC_STATE cmd, WL_TBM_MONITOR_RES res, tbm_bufmgr bufmgr);
 
 char *
 _wayland_tbm_dump_directory_make(void);
index cf8525811af2345807ca2da395e0e39503c6c67c..50fb459ccc723d6c5e790affccdab4d733144111 100644 (file)
@@ -337,6 +337,7 @@ _waylend_tbm_monitor_server_trace(struct wayland_tbm_monitore_request *r)
 
        struct wayland_tbm_monitor_target target = {.all = 1, .server = 1, .pid = {0} };
        WL_TBM_MONITOR_PROC_STATE cmd;
+       WL_TBM_MONITOR_RES res;
        int st;
 
        cmd = _waylend_tbm_util_proc_state_parse(r->argv[1]);
@@ -347,13 +348,20 @@ _waylend_tbm_monitor_server_trace(struct wayland_tbm_monitore_request *r)
                return;
        }
 
-       if (!_waylend_tbm_util_target_parse(r->argv[2], &target)) {
-               _wayland_tbm_monitor_request_printf(r, "'%s' - unknown target for -trace\n", r->argv[2]);
+       res = _waylend_tbm_util_resource_parse(r->argv[2]);
+       if (res == WL_TBM_MONITOR_RES_UNKNOWN) {
+               _wayland_tbm_monitor_request_printf(r, "'%s' - unknown resource for -trace\n", r->argv[2]);
+               _wayland_tbm_monitor_server_usage(r);
+               return;
+       }
+
+       if (!_waylend_tbm_util_target_parse(r->argv[3], &target)) {
+               _wayland_tbm_monitor_request_printf(r, "'%s' - unknown target for -trace\n", r->argv[3]);
                return;
        }
 
        if (target.server) {
-               st = _waylend_tbm_util_trace(cmd, r->tbm_srv->bufmgr);
+               st = _waylend_tbm_util_trace(cmd, res, r->tbm_srv->bufmgr);
                _wayland_tbm_monitor_request_printf(r, "server: trace state: %s\n", st ? "on" : "off");
        }
 
@@ -455,12 +463,20 @@ static struct {
        {
                "trace",
                _waylend_tbm_monitor_server_trace,
-               "trace the changes or the information of the tbm_bo (command: on | off | status)"
+               "trace the changes or the information of the tbm resources (command: on | off | status)\n"
+               "\t\t the trace log is shown through the dlog message with \"TBM\" tag."
                ,
                "<cmd> [<resource>] [<target>]\n"
                "\t""  <cmd>\n"
                "\t""    on | off             - turn on/off the trace\n"
                "\t""    status               - show status of all targets\n"
+               "\t""  <cmd>\n"
+               "\t""    tbm_bo               - tbm_bo resource trace\n"
+               "\t""    tbm_surface_internal - tbm_surface_internal resource trace\n"
+               "\t""    tbm_surface          - tbm_surface resource trace\n"
+               "\t""    tbm_surface_queue    - tbm_surface_queue resource trace\n"
+               "\t""    wl_tbm               - wl_tbm resource trace\n"
+               "\t""    all                  - all resources trace\n"
                "\t""  <target>\n"
                "\t""    all                  - clients and server(by default)\n"
                "\t""    server,<pid>,...     - list of targets"
index 4d63a56c64e7b8e2b8523669588dca1854809e8d..37dbfeb6c6ebf65720675ab6624c02502fc39e98 100644 (file)
@@ -130,6 +130,26 @@ _waylend_tbm_util_proc_state_parse(char *str)
        return WL_TBM_MONITOR_PROC_STATE_UNKNOWN;
 }
 
+WL_TBM_MONITOR_RES
+_waylend_tbm_util_resource_parse(char * str)
+{
+       if (str == NULL)
+               return WL_TBM_MONITOR_RES_UNKNOWN;
+       if (!strncmp(str, "tbm_bo", 6))
+               return WL_TBM_MONITOR_RES_BO;
+       if (!strncmp(str, "tbm_surface_internal", 19))
+               return WL_TBM_MONITOR_RES_SURFACE_INTERNAL;
+       if (!strncmp(str, "tbm_surface", 11))
+               return WL_TBM_MONITOR_RES_SURFACE;
+       if (!strncmp(str, "tbm_surface_queue", 17))
+               return WL_TBM_MONITOR_RES_SURFACE_QUEUE;
+       if (!strncmp(str, "wl_tbm", 6))
+               return WL_TBM_MONITOR_RES_WL_TBM;
+       if (!strncmp(str, "all", 3))
+               return WL_TBM_MONITOR_RES_ALL;
+       return WL_TBM_MONITOR_RES_UNKNOWN;
+}
+
 int
 _wayland_tbm_util_show_path_parse(char * path_str, char * cwd, struct wayland_tbm_monitor_path *path)
 {
@@ -162,16 +182,51 @@ _wayland_tbm_util_show_path_parse(char * path_str, char * cwd, struct wayland_tb
 
 
 int
-_waylend_tbm_util_trace(WL_TBM_MONITOR_PROC_STATE cmd, tbm_bufmgr bufmgr)
+_waylend_tbm_util_trace(WL_TBM_MONITOR_PROC_STATE cmd, WL_TBM_MONITOR_RES res, tbm_bufmgr bufmgr)
 {
-       if (!bTrace && cmd == WL_TBM_MONITOR_PROC_STATE_ON) {
-               tbm_bufmgr_debug_trace(bufmgr, 1);
-               bTrace = 1;
-       } else if (bTrace && cmd == WL_TBM_MONITOR_PROC_STATE_OFF) {
-               tbm_bufmgr_debug_trace(bufmgr, 0);
-               bTrace = 0;
+       int ret = 0;
+
+       if (cmd == WL_TBM_MONITOR_PROC_STATE_ON) {
+               if (res == WL_TBM_MONITOR_RES_BO)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_BO, 1);
+               if (res == WL_TBM_MONITOR_RES_SURFACE_INTERNAL)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_INTERNAL, 1);
+               if (res == WL_TBM_MONITOR_RES_SURFACE)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE, 1);
+               if (res == WL_TBM_MONITOR_RES_SURFACE_QUEUE)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_QUEUE, 1);
+               if (res == WL_TBM_MONITOR_RES_WL_TBM)
+                       bTrace = 1;
+               if (res == WL_TBM_MONITOR_RES_ALL) {
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_BO, 1);
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_INTERNAL, 1);
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE, 1);
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_QUEUE, 1);
+                       bTrace = 1;
+               }
+               ret = 1;
+       } else if (cmd == WL_TBM_MONITOR_PROC_STATE_OFF) {
+               if (res == WL_TBM_MONITOR_RES_BO)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_BO, 0);
+               if (res == WL_TBM_MONITOR_RES_SURFACE_INTERNAL)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_INTERNAL, 0);
+               if (res == WL_TBM_MONITOR_RES_SURFACE)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE, 0);
+               if (res == WL_TBM_MONITOR_RES_SURFACE_QUEUE)
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_QUEUE, 0);
+               if (res == WL_TBM_MONITOR_RES_WL_TBM)
+                       bTrace = 0;
+               if (res == WL_TBM_MONITOR_RES_ALL) {
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_BO, 0);
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_INTERNAL, 0);
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE, 0);
+                       tbm_bufmgr_debug_set_trace_mask(bufmgr, TBM_BUFGMR_DEBUG_TRACE_SURFACE_QUEUE, 0);
+                       bTrace = 0;
+               }
+               ret = 0;
        }
-       return bTrace;
+
+       return ret;
 }
 void
 _waylend_tbm_util_dump_snapshot(tbm_bufmgr bufmgr, double scale, char *path)