e_info: add select window option in dump_buffers 06/242506/3 accepted/tizen/unified/20200828.121346 submit/tizen/20200828.082550
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 27 Aug 2020 08:22:28 +0000 (17:22 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Fri, 28 Aug 2020 08:23:54 +0000 (08:23 +0000)
-w [Win_Id] : dump sepecific window
-w server   : dump only server
-w client   : dump only client

Change-Id: I8e54ebe09b74dff8e45e61a623892fc8913d9c25

src/bin/e_info_client.c
src/bin/e_info_server.c

index 1c867081d466c3a627dc62b4ba37ea974db480a1..5fc10c9f348cadc889d361ee1574d5f084521dc7 100644 (file)
@@ -2475,6 +2475,7 @@ _e_info_client_proc_transform_set(int argc, char **argv)
   "  enlightenment_info -dump_buffers 1 -c 60 -p /test : start dump buffer with 60 buffers to '/test/dump_xxxx' folder\n" \
   "  enlightenment_info -dump_buffers 0                : stop dump buffer (store dump files to dump path)\n" \
   "  enlightenment_info -dump_buffers 1 -s 0.5         : start dump buffer with 0.5 scale factor\n" \
+  "  enlightenment_info -dump_buffers 1 -w Wind_ID or server or client : start dump buffer with specific window or server or client\n" \
   "  enlightenment_info -dump_selected_buffers Win_ID(from enlightenment_info -topvwins)   : dump Win_ID(store dump files to dump path)\n" \
 
 static char *
@@ -2869,6 +2870,7 @@ finish:
 static void
 _e_info_client_proc_buffer_shot(int argc, char **argv)
 {
+   const char *win_id = "";
    int dumprun = 0;
    int count = 100;
    int i;
@@ -2942,12 +2944,24 @@ _e_info_client_proc_buffer_shot(int argc, char **argv)
                continue;
             }
 
+          if (eina_streq(argv[i], "-w"))
+            {
+               if (++i >= argc)
+                 {
+                    printf("Error: -w requires argument\n");
+                    goto err;
+                 }
+
+               win_id = argv[i];
+               continue;
+            }
+
           goto err;
      }
 
    if (!_e_info_client_eldbus_message_with_args_timeout("dump_buffers", _cb_buffer_shot,
-                                                        ELDBUS_TIMEOUT_INFINITE, "iisdi",
-                                                        dumprun, count, path, scale, mark))
+                                                        ELDBUS_TIMEOUT_INFINITE, "iisdis",
+                                                        dumprun, count, path, scale, mark, win_id))
      {
         printf("dump_buffers fail (%d)\n", dumprun);
         return;
index c10957bd63eb48e6c4acf7b6d2b1c0d49b489268..e7fc2ad93e4b10e0275b4a621271066f56cdfaef 100644 (file)
@@ -59,6 +59,8 @@ static int           e_info_dump_count;
 static int           e_info_dump_mark;
 static int           e_info_dump_mark_count;
 static int           e_info_dump_remote_surface = 0;
+static int           e_info_dump_server_or_client = 0; // 1: server 2: client
+static uint64_t      e_info_dump_win_id = 0;
 
 //FILE pointer for protocol_trace
 static FILE *log_fp_ptrace = NULL;
@@ -4281,6 +4283,9 @@ _e_info_server_cb_buffer_change(void *data, int type, void *event)
           }
      }
 
+   if ((e_info_dump_win_id) && (e_info_dump_win_id != e_client_util_win_get(ec)))
+     return ECORE_CALLBACK_PASS_ON;
+
    buffer = e_pixmap_resource_get(ec->pixmap);
    if (!buffer) return ECORE_CALLBACK_PASS_ON;
 
@@ -4410,11 +4415,12 @@ _e_info_server_cb_buffer_dump(const Eldbus_Service_Interface *iface EINA_UNUSED,
    Eldbus_Message *reply;
    int start = 0;
    int count = 0;
-   const char *path = NULL;
+   const char *path = NULL, *win_id_s = NULL;
+   unsigned long tmp = 0;
    double scale;
-   int ret = 0;
+   Eina_Bool ret;
 
-   if (!eldbus_message_arguments_get(msg, "iisdi", &start, &count, &path, &scale, &e_info_dump_mark))
+   if (!eldbus_message_arguments_get(msg, "iisdis", &start, &count, &path, &scale, &e_info_dump_mark, &win_id_s))
      {
         return eldbus_message_error_new(msg, GET_CALL_MSG_ARG_ERR,
                                         "dump_buffers: an attempt to get arguments from method call message failed");
@@ -4426,50 +4432,86 @@ _e_info_server_cb_buffer_dump(const Eldbus_Service_Interface *iface EINA_UNUSED,
      {
         if (e_info_dump_running == 1)
           {
-             eldbus_message_arguments_append(reply, "is", ret, (e_info_dump_path ?: "nopath"));
+             eldbus_message_arguments_append(reply, "is", 0, (e_info_dump_path ?: "nopath"));
              return reply;
           }
+
+        if (e_util_strcmp(win_id_s, ""))
+          {
+             if (!e_util_strcmp(win_id_s, "server"))
+               e_info_dump_server_or_client = 1;
+             else if (!e_util_strcmp(win_id_s, "client"))
+               e_info_dump_server_or_client = 2;
+             else
+               {
+                  if (strlen(win_id_s) >= 2 && win_id_s[0] == '0' && win_id_s[1] == 'x')
+                    ret = e_util_string_to_ulong(win_id_s, &tmp, 16);
+                  else
+                    ret = e_util_string_to_ulong(win_id_s, &tmp, 10);
+                  if (!ret)
+                    {
+                       eldbus_message_arguments_append(reply, "is", -1, (e_info_dump_path ?: "nopath"));
+                       return reply;
+                    }
+
+                  e_info_dump_server_or_client = 2;
+                  e_info_dump_win_id = (uint64_t)tmp;
+               }
+          }
+
         e_info_dump_running = 1;
         e_info_dump_mark_count = 0;
         e_info_dump_count = 1;
         e_info_dump_path = _e_info_server_dump_directory_make(path);
+
         if (e_info_dump_path == NULL)
           {
              e_info_dump_running = 0;
              e_info_dump_count = 0;
+             e_info_dump_win_id = 0;
+             e_info_dump_server_or_client = 0;
              ERR("dump_buffers start fail\n");
-             ret = -1;
+             eldbus_message_arguments_append(reply, "is", -1, (e_info_dump_path ?: "nopath"));
+             return reply;
           }
+
+        /* start dump */
+        if (scale > 0.0)
+          tbm_surface_internal_dump_with_scale_start(e_info_dump_path,
+                                                     e_comp->w,
+                                                     e_comp->h,
+                                                     count, scale);
         else
+          tbm_surface_internal_dump_start(e_info_dump_path, e_comp->w, e_comp->h, count);
+
+        if (e_info_dump_server_or_client != 2)
           {
-             /* start dump */
-             if (scale > 0.0)
-               tbm_surface_internal_dump_with_scale_start(e_info_dump_path,
-                                                          e_comp->w,
-                                                          e_comp->h,
-                                                          count, scale);
-             else
-                tbm_surface_internal_dump_start(e_info_dump_path, e_comp->w, e_comp->h, count);
              tdm_helper_dump_start(e_info_dump_path, &e_info_dump_count);
              e_hwc_windows_debug_dump_start();
+          }
+
+        if (e_info_dump_server_or_client != 1)
+          {
              E_LIST_HANDLER_APPEND(e_info_dump_hdlrs, E_EVENT_CLIENT_BUFFER_CHANGE,
-                               _e_info_server_cb_buffer_change, NULL);
+                                   _e_info_server_cb_buffer_change, NULL);
           }
-          eldbus_message_arguments_append(reply, "is", ret, (e_info_dump_path ?: "nopath"));
+
+        eldbus_message_arguments_append(reply, "is", 0, (e_info_dump_path ?: "nopath"));
      }
    else
      {
         if (e_info_dump_running == 0)
           {
-             eldbus_message_arguments_append(reply, "is", ret, (e_info_dump_path ?: "nopath"));
+             eldbus_message_arguments_append(reply, "is", 0, (e_info_dump_path ?: "nopath"));
              return reply;
           }
+
         e_info_server_hook_call(E_INFO_SERVER_HOOK_BUFFER_DUMP_BEGIN);
         tdm_helper_dump_stop();
         e_hwc_windows_debug_dump_stop();
         tbm_surface_internal_dump_end();
 
-        eldbus_message_arguments_append(reply, "is", ret, (e_info_dump_path ?: "nopath"));
+        eldbus_message_arguments_append(reply, "is", 0, (e_info_dump_path ?: "nopath"));
 
         E_FREE_LIST(e_info_dump_hdlrs, ecore_event_handler_del);
         e_info_dump_hdlrs = NULL;
@@ -4481,6 +4523,8 @@ _e_info_server_cb_buffer_dump(const Eldbus_Service_Interface *iface EINA_UNUSED,
         e_info_dump_count = 0;
         e_info_dump_running = 0;
         e_info_dump_mark_count = 0;
+        e_info_dump_server_or_client = 0;
+        e_info_dump_win_id = 0;
         e_info_server_hook_call(E_INFO_SERVER_HOOK_BUFFER_DUMP_END);
      }
 
@@ -6875,7 +6919,7 @@ static const Eldbus_Method methods[] = {
    { "bgcolor_set", ELDBUS_ARGS({"iiii", "bgcolor_set"}), NULL, _e_info_server_cb_bgcolor_set, 0},
    { "punch", ELDBUS_ARGS({"iiiiiiiii", "punch_geometry"}), NULL, _e_info_server_cb_punch, 0},
    { "transform_message", ELDBUS_ARGS({"siiiiiiii", "transform_message"}), NULL, e_info_server_cb_transform_message, 0},
-   { "dump_buffers", ELDBUS_ARGS({"iisdi", "dump_buffers"}), ELDBUS_ARGS({"is", "dump_buffers reply"}), _e_info_server_cb_buffer_dump, 0 },
+   { "dump_buffers", ELDBUS_ARGS({"iisdis", "dump_buffers"}), ELDBUS_ARGS({"is", "dump_buffers reply"}), _e_info_server_cb_buffer_dump, 0 },
    { "dump_selected_buffers", ELDBUS_ARGS({"ss", "dump_selected_buffers"}), ELDBUS_ARGS({"s", "result of dump"}), _e_info_server_cb_selected_buffer_dump, 0 },
    { "dump_screen", ELDBUS_ARGS({"s", "dump_screen"}), NULL, _e_info_server_cb_screen_dump, 0 },
    { "output_mode", ELDBUS_ARGS({SIGNATURE_OUTPUT_MODE_CLIENT, "output mode"}), ELDBUS_ARGS({"a("SIGNATURE_OUTPUT_MODE_SERVER")", "array of ec"}), _e_info_server_cb_output_mode, 0 },