e_hwc_windows: support dump_buffers of winfo 60/197660/3
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 15 Jan 2019 04:58:41 +0000 (13:58 +0900)
committerchangyeon lee <cyeon.lee@samsung.com>
Thu, 17 Jan 2019 07:16:10 +0000 (07:16 +0000)
Change-Id: Ibe2efc397aa3760457f44a33dda4159b210f66c4

src/bin/e_hwc_window.c
src/bin/e_hwc_window.h
src/bin/e_hwc_windows.c
src/bin/e_hwc_windows.h
src/bin/e_info_server.c

index 638baa415367f54292f70bdc828560d9a3cd1938..6767cf6278d39bda0e3ef784daa7a86112ddd1e3 100644 (file)
@@ -1728,3 +1728,24 @@ e_hwc_window_trace_debug(Eina_Bool onoff)
    ehw_trace = onoff;
    INF("EHW: hwc trace_debug is %s", onoff?"ON":"OFF");
 }
+
+EINTERN void
+e_hwc_window_commit_data_buffer_dump(E_Hwc_Window *hwc_window)
+{
+   char fname[64];
+
+   EINA_SAFETY_ON_FALSE_RETURN(hwc_window);
+
+   if (!hwc_window->commit_data) return;
+   if (!hwc_window->commit_data->buffer.tsurface) return;
+
+   if (hwc_window->is_target)
+     snprintf(fname, sizeof(fname), "hwc_commit_composite_%p",
+              hwc_window);
+   else
+     snprintf(fname, sizeof(fname), "hwc_commit_0x%08x_%p",
+              e_client_util_win_get(hwc_window->ec), hwc_window);
+
+   tbm_surface_internal_dump_buffer(hwc_window->commit_data->buffer.tsurface,
+                                    fname);
+}
index 13d643ef7d8f60e2bc1aa24b5d7a609f910e49ac..6531450e697d3c4b9552338883b0da95be4990d4 100644 (file)
@@ -186,6 +186,7 @@ EINTERN E_Hwc_Window_Hook *e_hwc_window_hook_add(E_Hwc_Window_Hook_Point hookpoi
 EINTERN void               e_hwc_window_hook_del(E_Hwc_Window_Hook *ch);
 
 EINTERN void               e_hwc_window_trace_debug(Eina_Bool onoff);
+EINTERN void               e_hwc_window_commit_data_buffer_dump(E_Hwc_Window *hwc_window);
 
 #endif // E_HWC_WINDOW_H
 #endif
index 6eb217b409c7c603c7913777c3358e51ea0be569..2a7cba68b38c509b80b4baec202d44e5694327d6 100644 (file)
@@ -46,6 +46,7 @@
    while (0)
 
 static Eina_Bool ehws_trace = EINA_TRUE;
+static Eina_Bool ehws_dump_enable = EINA_FALSE;
 static uint64_t ehws_rendered_windows_key;
 #define EHWS_RENDERED_WINDOWS_KEY  (unsigned long)(&ehws_rendered_windows_key)
 
@@ -186,6 +187,9 @@ _e_hwc_windows_commit_data_aquire(E_Hwc *hwc)
      {
         if (!e_hwc_window_commit_data_acquire(hwc_window)) continue;
 
+        if (ehws_dump_enable)
+          e_hwc_window_commit_data_buffer_dump(hwc_window);
+
         /* send frame event enlightenment doesn't send frame event in nocomp */
         if (hwc_window->ec)
           e_pixmap_image_clear(hwc_window->ec->pixmap, 1);
@@ -2328,3 +2332,19 @@ e_hwc_windows_trace_debug(Eina_Bool onoff)
    e_hwc_window_queue_trace_debug(onoff);
    INF("EHWS: hwc trace_debug is %s", onoff?"ON":"OFF");
 }
+
+EINTERN void
+e_hwc_windows_dump_start(void)
+{
+   if (ehws_dump_enable) return;
+
+   ehws_dump_enable = EINA_TRUE;
+}
+
+EINTERN void
+e_hwc_windows_dump_stop(void)
+{
+   if (!ehws_dump_enable) return;
+
+   ehws_dump_enable = EINA_FALSE;
+}
index 8b6ee9d6baca1b18d296ee23a4fe97b2bf87aa7f..9a2b5c4e296ab7fb4fddf1c8277ebbd787ced6e5 100644 (file)
@@ -17,6 +17,8 @@ EINTERN void                 e_hwc_windows_zoom_unset(E_Hwc *hwc);
 EINTERN Eina_Bool            e_hwc_windows_fps_get(E_Hwc *hwc, double *fps);
 
 EINTERN void                 e_hwc_windows_trace_debug(Eina_Bool onoff);
+EINTERN void                 e_hwc_windows_dump_start(void);
+EINTERN void                 e_hwc_windows_dump_stop(void);
 
 #endif
 #endif
index 355e39240926dc8c1a1b0f4d7f88e1311c1f8ad2..bea55c600588459b58194aad6cdb58a09018ea7d 100644 (file)
@@ -3853,6 +3853,7 @@ _e_info_server_cb_buffer_dump(const Eldbus_Service_Interface *iface EINA_UNUSED,
              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_dump_start();
              E_LIST_HANDLER_APPEND(e_info_dump_hdlrs, E_EVENT_CLIENT_BUFFER_CHANGE,
                                _e_info_server_cb_buffer_change, NULL);
           }
@@ -3867,6 +3868,7 @@ _e_info_server_cb_buffer_dump(const Eldbus_Service_Interface *iface EINA_UNUSED,
           }
         e_info_server_hook_call(E_INFO_SERVER_HOOK_BUFFER_DUMP_BEGIN);
         tdm_helper_dump_stop();
+        e_hwc_windows_dump_stop();
         tbm_surface_internal_dump_end();
 
         eldbus_message_arguments_append(reply, "is", ret, (e_info_dump_path ?: "nopath"));