e_info: add hwc_wins option to dump of winfo 73/198773/4
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 29 Jan 2019 08:20:38 +0000 (17:20 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Thu, 7 Feb 2019 06:13:44 +0000 (15:13 +0900)
Change-Id: Icfcb139f2a62b36e29a2b76d01090c54d6dcad96

src/bin/e_info_client.c
src/bin/e_info_server.c
src/bin/e_info_shared_types.h

index 00b3836ffbf4408cbad7d62dd404aced4ea5c843..cdd77996b5d303138cc206eb511289d32aa6aee4 100644 (file)
@@ -1467,7 +1467,7 @@ _e_info_client_proc_wins_shot(int argc, char **argv)
    char *directory = NULL;
    char *type = NULL;
 
-   if (eina_streq(argv[2], "topvwins") || eina_streq(argv[2], "ns"))
+   if (eina_streq(argv[2], "topvwins") || eina_streq(argv[2], "ns") || eina_streq(argv[2], "hwc_wins"))
      {
         if (argc == 3)
           directory = _directory_make(argv[2], NULL);
index 191d122083521947f7f6805aa840a86565de273d..82a500cffc3adfcca707ebc27397767a5bbdd22c 100644 (file)
@@ -2661,6 +2661,68 @@ static void _e_info_server_cb_wins_dump_ns(const char *dir)
      }
 }
 
+static void _e_info_server_cb_wins_dump_hwc_wins(const char *dir)
+{
+   E_Comp_Screen *e_comp_screen = NULL;
+   E_Output *output = NULL;
+   E_Hwc_Window *hwc_window = NULL;
+   E_Hwc *hwc = NULL;
+   Eina_List *o = NULL, *oo = NULL;
+   Eina_List *l = NULL, *ll = NULL;
+
+   e_comp_screen = e_comp->e_comp_screen;
+   if (!e_comp_screen) return;
+
+   EINA_LIST_FOREACH_SAFE(e_comp_screen->outputs, o, oo, output)
+     {
+        if (!output) continue;
+        if (!output->config.enabled) continue;
+        if (!output->tdm_hwc) continue;
+
+         hwc = output->hwc;
+
+         EINA_LIST_FOREACH_SAFE(hwc->hwc_windows, l, ll, hwc_window)
+           {
+              char fname[PATH_MAX];
+              tbm_format fmt;
+
+              if (!hwc_window) continue;
+              if (!hwc_window->display.buffer.tsurface) continue;
+
+              fmt = tbm_surface_get_format(hwc_window->display.buffer.tsurface);
+              switch (fmt)
+                {
+                 case TBM_FORMAT_ARGB8888:
+                 case TBM_FORMAT_XRGB8888:
+                  if (hwc_window->is_target)
+                    snprintf(fname, sizeof(fname), "compositor_hwin_%p_tbm_%p", hwc_window, hwc_window->display.buffer.tsurface);
+                  else
+                    snprintf(fname, sizeof(fname), "0x%08zx_hwin_%p_tbm_%p", e_client_util_win_get(hwc_window->ec),
+                             hwc_window, hwc_window->display.buffer.tsurface);
+
+                  tbm_surface_internal_capture_buffer(hwc_window->display.buffer.tsurface, dir, fname, "png");
+                  break;
+                 case TBM_FORMAT_YUV420:
+                 case TBM_FORMAT_YVU420:
+                 case TBM_FORMAT_NV12:
+                 case TBM_FORMAT_NV21:
+                 case TBM_FORMAT_YUYV:
+                 case TBM_FORMAT_UYVY:
+                  if (hwc_window->is_target)
+                    snprintf(fname, sizeof(fname), "compositor_hwin_%p_tbm_%p", hwc_window, hwc_window->display.buffer.tsurface);
+                  else
+                    snprintf(fname, sizeof(fname), "0x%08zx_hwin_%p_tbm_%p", e_client_util_win_get(hwc_window->ec),
+                             hwc_window, hwc_window->display.buffer.tsurface);
+
+                  tbm_surface_internal_capture_buffer(hwc_window->display.buffer.tsurface, dir, fname, "yuv");
+                  break;
+                 default:
+                  break;
+                }
+           }
+     }
+}
+
 static Eldbus_Message *
 _e_info_server_cb_wins_dump(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
 {
@@ -2678,6 +2740,8 @@ _e_info_server_cb_wins_dump(const Eldbus_Service_Interface *iface EINA_UNUSED, c
      _e_info_server_cb_wins_dump_topvwins(dir);
    else if (!e_util_strcmp(type, "ns"))
      _e_info_server_cb_wins_dump_ns(dir);
+   else if (!e_util_strcmp(type, "hwc_wins"))
+     _e_info_server_cb_wins_dump_hwc_wins(dir);
 
    return reply;
 }
index 75c0838fd072a9a1e66375209b8d82c139aa5e5a..4b3a26c8783e10c62ea815ca37074f8fd504075a 100644 (file)
@@ -209,7 +209,8 @@ typedef enum
 #define USAGE_DUMPIMAGE                                                  \
    "[Option..] [DIR]\n"                                                  \
    "\ttopvwins     : Dump buffer commit on top visible clients\n"        \
-   "\tns           : Dump native surfaces set on clients\n"
+   "\tns           : Dump native surfaces set on clients\n"              \
+   "\thwc_wins     : Dump buffer displayed by hwc_windows\n"
 
 /* -------------------------------------------------------------------------- */
 /* FORCE_VISIBLE                                                              */