utest: add ut_tdm_output_hwc test case
[platform/core/uifw/libtdm.git] / utests / src / ut_tdm.h
1 #ifndef _UT_TDM_H_
2 #define _UT_TDM_H_
3
4 #include <sys/epoll.h>
5 #include <sys/timerfd.h>
6 #include <limits.h>
7 #include <vector>
8 #include <list>
9 #include <climits>
10 #include <pthread.h>
11 #include <gtest/gtest.h>
12
13 extern "C" {
14 #include <tbm_bufmgr.h>
15 #include <tbm_drm_helper.h>
16 }
17
18 #include "tdm.h"
19 #include "tdm_helper.h"
20 #include "tdm_config.h"
21 #include "tdm_log.h"
22 #include "tdm_macro.h"
23 #include "buffers.h"
24
25 #define UT_TDM_BUFFER_ENABLE
26 #define UT_TDM_CAPTURE_ENABLE
27 #define UT_TDM_CLIENT_ENABLE
28 #define UT_TDM_DISPLAY_ENABLE
29 #define UT_TDM_ENV_ENABLE
30 #define UT_TDM_EVENT_LOOP_ENABLE
31 #define UT_TDM_HELPER_ENABLE
32 #define UT_TDM_OUTPUT_HWC_ENABLE
33 //#define UT_TDM_HWC_WINDOW_ENABLE
34 #define UT_TDM_LAYER_ENABLE
35 #define UT_TDM_LOG_ENABLE
36 #define UT_TDM_OUTPUT_ENABLE
37 #define UT_TDM_PP_ENABLE
38 #define UT_TDM_VBLANK_ENABLE
39
40 #undef TDM_DBG
41 #define TDM_DBG(fmt, args...) \
42     tdm_log_print(TDM_LOG_LEVEL_DBG, fmt, ##args);
43 #undef TDM_INFO
44 #define TDM_INFO(fmt, args...) \
45     tdm_log_print(TDM_LOG_LEVEL_INFO, fmt, ##args);
46 #undef TDM_WRN
47 #define TDM_WRN(fmt, args...) \
48     tdm_log_print(TDM_LOG_LEVEL_WRN, fmt, ##args);
49 #undef TDM_ERR
50 #define TDM_ERR(fmt, args...) \
51     tdm_log_print(TDM_LOG_LEVEL_ERR, fmt, ##args);
52
53 #define TDM_UT_ENTRY() \
54     TDM_INFO("--------------------------------------------- %s", typeid(*this).name())
55
56 #define TDM_UT_CHECK_FLAG(FLAG) \
57         do {\
58                 if(!(FLAG)) \
59                         TDM_INFO("[          ] not supported");\
60         } while(0)
61
62 #define TDM_UT_SKIP_FLAG(FLAG) \
63         do {\
64                 if(!(FLAG)) {\
65                         TDM_INFO("[  SKIPPED ] not supported");\
66                         return;\
67                 }\
68         } while(0)
69
70 #define TDM_UT_NEVER_GET_HERE() \
71         do {\
72                 TDM_INFO("!!! TDM UT NEVER GET HERE !!!");\
73         } while(0)
74 #define TDM_UT_RETURN_IF_FAIL(cond) { \
75         if (!(cond)) { \
76                 TDM_ERR("[%s,%d] '%s' failed", __FUNCTION__, __LINE__, #cond); \
77                 return; \
78         } \
79 }
80 #define TDM_UT_RETURN_FALSE_IF_FAIL(cond) { \
81         if (!(cond)) { \
82                 TDM_ERR("[%s,%d] '%s' failed", __FUNCTION__, __LINE__, #cond); \
83                 return false; \
84         } \
85 }
86 #define TDM_UT_GOTO_IF_FAIL(cond, dst) { \
87         if (!(cond)) { \
88                 TDM_ERR("[%s,%d] '%s' failed", __FUNCTION__, __LINE__, #cond); \
89                 goto dst; \
90         } \
91 }
92
93 #define TDM_UT_SIZE_ALIGN(value, base) (((value) + ((base) - 1)) & ~((base) - 1))
94
95 #define TDM_UT_DUMP_DIR          "/tmp/tdm_dump"
96 #define TDM_UT_INVALID_VALUE     -42
97 #define TDM_UT_BUFFER_SIZE       256
98 #define TDM_UT_VBLANK_NAME       "ut_tdm_vblank"
99
100 using ::testing::TestWithParam;
101 using ::testing::Bool;
102 using ::testing::Values;
103 using ::testing::Combine;
104
105 class TDMEnv : public TestWithParam< ::testing::tuple<bool, bool, const char*> >
106 {
107 public:
108         void SetUp(void);
109         void TearDown(void);
110 };
111
112 class TDMDisplay : public TDMEnv
113 {
114 public:
115         tdm_display *dpy;
116         tbm_bufmgr bufmgr;
117
118         bool has_pp_cap;
119         bool has_capture_cap;
120
121         TDMDisplay();
122         void SetUp(void);
123         void TearDown(void);
124 };
125
126 class TDMOutput : public TDMDisplay
127 {
128 public:
129         bool has_outputs;
130         tdm_output **outputs;
131         int output_count;
132         TDMOutput();
133         void SetUp(void);
134         void TearDown(void);
135 };
136
137 #ifdef TIZEN_TEST_GCOV
138 extern "C" void __gcov_flush(void);
139 #endif
140
141 bool ut_tdm_buffer_create(int width, int height, tbm_format format, int flags, bool fill,
142                                                   int count, tbm_surface_h *buffers);
143
144 bool ut_tdm_output_mode_setting(tdm_output *output);
145 bool ut_tdm_output_is_async_dpms_enable(tdm_output *output);
146 bool ut_tdm_output_is_hwc_enable(tdm_output *output);
147 bool ut_tdm_output_is_aod_enable(tdm_output *output);
148 bool ut_tdm_output_is_connected(tdm_output *output);
149 bool ut_tdm_output_prepare(tdm_display *dpy, tdm_output *output);
150 bool ut_tdm_output_unset(tdm_display *dpy, tdm_output *output);
151 double ut_tdm_output_get_vblank_interval_time(tdm_output *output);
152
153 bool ut_tdm_layer_is_cursor_layer(tdm_layer *layer);
154 bool ut_tdm_layer_is_primary_layer(tdm_layer *layer);
155 bool ut_tdm_layer_is_video_layer(tdm_layer *layer);
156 bool ut_tdm_layer_prepare_buffer(tdm_layer *layer, tbm_surface_h *buffers, int buffer_count);
157 bool ut_tdm_layer_prepare_buffer_queue(tdm_layer *layer, tbm_surface_queue_h *buffer_queue);
158 bool ut_tdm_layer_fill_info(tdm_layer *layer, int w, int h, tbm_format format, tdm_info_layer *info);
159 unsigned int ut_tdm_layer_get_output_pipe(tdm_layer *layer);
160 tbm_format ut_tdm_layer_find_best_format(tdm_layer *layer);
161
162 bool ut_tdm_pp_fill_info(tbm_surface_h srcbuf, tbm_surface_h dstbuf, tdm_transform transform, tdm_info_pp *info);
163 bool ut_tdm_capture_fill_info(tdm_output *output, tbm_surface_h buffer, tdm_transform transform,
164                                                           tdm_capture_type type, int frequency, tdm_info_capture *info);
165
166
167 #endif // _UT_TDM_H_