hwc_window: add the buffer dump 60/148060/1
authorKonstantin Drabeniuk <k.drabeniuk@samsung.com>
Wed, 6 Sep 2017 11:20:39 +0000 (14:20 +0300)
committerKonstantin Drabeniuk <k.drabeniuk@samsung.com>
Wed, 6 Sep 2017 11:20:39 +0000 (14:20 +0300)
Change-Id: I3cc26e6e02af28a0e620527a99c128c0729ae7f5
Signed-off-by: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
include/tdm_backend.h
src/tdm.c
src/tdm_hwc_window.c
src/tdm_output.c
src/tdm_private.h

index 3ecdf92..490bef2 100644 (file)
@@ -37,6 +37,7 @@
 #define _TDM_BACKEND_H_
 
 #include <tbm_surface.h>
+#include <tbm_surface_queue.h>
 
 #include "tdm_types.h"
 
index e17b3f3..6ae0cc5 100644 (file)
--- a/src/tdm.c
+++ b/src/tdm.c
@@ -1204,6 +1204,8 @@ tdm_display_enable_dump(tdm_private_display *private_display, const char *dump_s
                        tdm_debug_dump |= TDM_DUMP_FLAG_PP;
                } else if (!strncmp(arg, "capture", 7)) {
                        tdm_debug_dump |= TDM_DUMP_FLAG_CAPTURE;
+               } else if (!strncmp(arg, "window", 6)) {
+                       tdm_debug_dump |= TDM_DUMP_FLAG_WINDOW;
                } else
                        goto done;
 
index 94ac7a2..ca64d65 100644 (file)
@@ -118,6 +118,8 @@ tdm_hwc_window_set_zpos(tdm_hwc_window *hwc_window, uint32_t zpos)
        }
 
        ret = func_hwc_window->hwc_window_set_zpos(private_hwc_window->hwc_window_backend, zpos);
+       if (ret == TDM_ERROR_NONE)
+               private_hwc_window->zpos = zpos;
 
        _pthread_mutex_unlock(&private_display->lock);
 
@@ -215,6 +217,26 @@ tdm_hwc_window_set_info(tdm_hwc_window *hwc_window, tdm_hwc_window_info *info)
        return ret;
 }
 
+static void
+_tdm_window_dump_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
+{
+       tdm_private_hwc_window *private_window = (tdm_private_hwc_window *)hwc_window;
+       tdm_private_output *private_output = private_window->private_output;
+       unsigned int pipe;
+       uint32_t zpos;
+       char fname[PATH_MAX];
+
+       pipe = private_output->pipe;
+       zpos = private_window->zpos;
+
+       snprintf(fname, sizeof(fname), "tdm_%d_win_%d", pipe, zpos);
+
+       tbm_surface_internal_dump_buffer(buffer, fname);
+       TDM_DBG("%s dump excute", fname);
+
+       return;
+}
+
 EXTERN tdm_error
 tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
 {
@@ -224,6 +246,13 @@ tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_debug_dump & TDM_DUMP_FLAG_WINDOW) {
+               char str[TDM_PATH_LEN];
+               static int i;
+               snprintf(str, TDM_PATH_LEN, "window_%d_%d_%03d",
+                                private_output->index, private_hwc_window->zpos, i++);
+               tdm_helper_dump_buffer_str(buffer, tdm_debug_dump_dir, str);
+       }
 
        func_hwc_window = &private_display->func_hwc_window;
 
@@ -233,6 +262,10 @@ tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
                return TDM_ERROR_NOT_IMPLEMENTED;
        }
 
+       /* dump buffer */
+       if (tdm_dump_enable)
+               _tdm_window_dump_buffer(hwc_window, buffer);
+
        ret = func_hwc_window->hwc_window_set_buffer(private_hwc_window->hwc_window_backend, buffer);
 
        _pthread_mutex_unlock(&private_display->lock);
index ab2d991..043074a 100644 (file)
@@ -1431,6 +1431,22 @@ tdm_output_get_target_surface_queue(tdm_output *output, tdm_error *error)
        return queue;
 }
 
+static void
+_tdm_target_window_dump_buffer(tdm_private_output *private_output, tbm_surface_h buffer)
+{
+       unsigned int pipe;
+       char fname[PATH_MAX];
+
+       pipe = private_output->pipe;
+
+       snprintf(fname, sizeof(fname), "tdm_%d_target_win", pipe);
+
+       tbm_surface_internal_dump_buffer(buffer, fname);
+       TDM_DBG("%s dump excute", fname);
+
+       return;
+}
+
 EXTERN tdm_error
 tdm_output_set_client_target_buffer(tdm_output *output, tbm_surface_h buffer,
                                                                        tdm_hwc_region damage)
@@ -1441,6 +1457,13 @@ tdm_output_set_client_target_buffer(tdm_output *output, tbm_surface_h buffer,
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_debug_dump & TDM_DUMP_FLAG_WINDOW) {
+               char str[TDM_PATH_LEN];
+               static int i;
+               snprintf(str, TDM_PATH_LEN, "target_window_%d_%03d",
+                                private_output->index, i++);
+               tdm_helper_dump_buffer_str(buffer, tdm_debug_dump_dir, str);
+       }
 
        func_output = &private_display->func_output;
 
@@ -1450,6 +1473,10 @@ tdm_output_set_client_target_buffer(tdm_output *output, tbm_surface_h buffer,
                return TDM_ERROR_NOT_IMPLEMENTED;
        }
 
+       /* dump buffer */
+       if (tdm_dump_enable)
+               _tdm_target_window_dump_buffer((tdm_private_output *)output, buffer);
+
        ret = func_output->output_set_client_target_buffer(private_output->output_backend, buffer, damage);
 
        _pthread_mutex_unlock(&private_display->lock);
index 347e501..4b23a4a 100644 (file)
@@ -110,6 +110,7 @@ enum {
        TDM_DUMP_FLAG_LAYER   = (1 << 0),
        TDM_DUMP_FLAG_PP      = (1 << 1),
        TDM_DUMP_FLAG_CAPTURE = (1 << 2),
+       TDM_DUMP_FLAG_WINDOW = (1 << 3),
 };
 
 #define TDM_DUMP_DIR    "/tmp"
@@ -259,6 +260,7 @@ struct _tdm_private_hwc_window {
        struct list_head link;
 
        int index;
+       uint32_t zpos;
 
        tdm_private_display *private_display;
        tdm_private_output *private_output;