1 #include "gtest/gtest.h"
7 #include "tdm_config.h"
8 #include "tdm_backend.h"
9 #include "tbm_bufmgr.h"
10 #include "tbm_surface.h"
11 #include "tbm_surface_internal.h"
12 #include "tbm_drm_helper.h"
15 class TDMBuffer: public ::testing::Test
18 static tbm_bufmgr tbm_bufmgr_s;
21 tbm_surface_h surface;
25 static void SetEnv(void)
27 setenv("XDG_RUNTIME_DIR", "/run", 1);
28 setenv("TBM_DISPLAY_SERVER", "1", 1);
29 tdm_config_set_int(TDM_CONFIG_KEY_DEBUG_DLOG, 1);
30 tdm_config_set_int(TDM_CONFIG_KEY_GENERAL_THREAD, 1);
31 tdm_config_set_int(TDM_CONFIG_KEY_GENERAL_COMMIT_PER_VBLANK, 0);
34 static void UnsetEnv(void)
36 unsetenv("XDG_RUNTIME_DIR");
37 unsetenv("TBM_DISPLAY_SERVER");
40 static void SetUpTestCase()
43 tbm_bufmgr_s = tbm_bufmgr_init(-1);
44 ASSERT_FALSE(tbm_bufmgr_s == NULL);
45 master_fd = tbm_drm_helper_get_master_fd();
48 static void TearDownTestCase()
50 tbm_bufmgr_deinit(tbm_bufmgr_s);
54 int temp_master_fd = tbm_drm_helper_get_master_fd();
55 EXPECT_EQ(temp_master_fd, -1) << "Fatal Error. Can't deinit tdm/tbm" << std::endl;
56 if (temp_master_fd > -1)
65 surface = tbm_surface_create(256, 256, TBM_FORMAT_ARGB8888);
66 ASSERT_TRUE(surface != NULL);
71 while (tbm_surface_internal_is_valid(surface))
72 tbm_surface_destroy(surface);
77 tbm_bufmgr TDMBuffer::tbm_bufmgr_s = NULL;
78 int TDMBuffer::master_fd = -42;
81 static int handler_is_called = 0;
82 static void release_handler(tbm_surface_h buffer, void *user_data)
84 if (user_data == &handler_is_called)
85 handler_is_called = 1;
87 static void destroy_handler(tbm_surface_h buffer, void *user_data)
89 if (user_data == &handler_is_called)
90 handler_is_called = 1;
93 /* tbm_surface_h tdm_buffer_ref_backend(tbm_surface_h buffer) */
94 TEST_F(TDMBuffer, RefFailNULL)
96 tbm_surface_h buffer = NULL;
98 buffer = tdm_buffer_ref_backend(NULL);
99 ASSERT_EQ(NULL, buffer);
102 TEST_F(TDMBuffer, RefSuccessful)
104 tbm_surface_h buffer = NULL;
106 buffer = tdm_buffer_ref_backend(surface);
107 ASSERT_EQ(buffer, surface);
109 buffer = tdm_buffer_ref_backend(surface);
110 ASSERT_EQ(buffer, surface);
114 /* void tdm_buffer_unref_backend(tbm_surface_h buffer) */
115 TEST_F(TDMBuffer, UnrefFailNULL)
117 tdm_buffer_unref_backend(NULL);
120 TEST_F(TDMBuffer, UnrefSuccessfulTwoRefUnref)
122 tbm_surface_h buffer = NULL;
124 buffer = tdm_buffer_ref_backend(surface);
125 ASSERT_EQ(buffer, surface);
126 buffer = tdm_buffer_ref_backend(surface);
127 ASSERT_EQ(buffer, surface);
130 tdm_buffer_unref_backend(surface);
131 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));
134 tdm_buffer_unref_backend(surface);
135 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));
138 TEST_F(TDMBuffer, UnrefSuccessfulWithoutRef)
140 tdm_buffer_unref_backend(surface);
141 ASSERT_FALSE(tbm_surface_internal_is_valid(surface));
144 TEST_F(TDMBuffer, UnrefSuccessfulOneRefTwoUnref)
146 tbm_surface_h buffer = NULL;
148 buffer = tdm_buffer_ref_backend(surface);
149 ASSERT_EQ(buffer, surface);
151 tdm_buffer_unref_backend(surface);
152 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));
154 tdm_buffer_unref_backend(surface);
155 ASSERT_FALSE(tbm_surface_internal_is_valid(surface));
158 /* tdm_error tdm_buffer_add_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data) */
159 TEST_F(TDMBuffer, AddReleaseHandlerFailNULL)
161 error = tdm_buffer_add_release_handler(NULL, release_handler, &handler_is_called);
162 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
164 error = tdm_buffer_add_release_handler(surface, NULL, &handler_is_called);
165 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
168 TEST_F(TDMBuffer, AddReleaseHandlerSuccessful)
170 error = tdm_buffer_add_release_handler(surface, release_handler, &handler_is_called);
171 ASSERT_EQ(TDM_ERROR_NONE, error);
173 handler_is_called = 0;
174 tdm_buffer_unref_backend(surface);
175 ASSERT_TRUE(handler_is_called);
179 /* void tdm_buffer_remove_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data) */
180 TEST_F(TDMBuffer, RemoveReleaseHandlerFailNULL)
182 tdm_buffer_remove_release_handler(NULL, release_handler, &handler_is_called);
184 tdm_buffer_remove_release_handler(surface, NULL, &handler_is_called);
187 TEST_F(TDMBuffer, RemoveReleaseHandlerFailWithoutAdd)
189 tdm_buffer_remove_release_handler(surface, release_handler, &handler_is_called);
192 TEST_F(TDMBuffer, RemoveReleaseHandlerSuccessful)
194 error = tdm_buffer_add_release_handler(surface, release_handler, &handler_is_called);
195 ASSERT_EQ(TDM_ERROR_NONE, error);
197 tdm_buffer_remove_release_handler(surface, release_handler, &handler_is_called);
199 handler_is_called = 0;
200 tdm_buffer_unref_backend(surface);
201 ASSERT_FALSE(handler_is_called);
204 /* tdm_error tdm_buffer_add_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data) */
205 TEST_F(TDMBuffer, AddDestroyHandlerFailNULL)
207 error = tdm_buffer_add_destroy_handler(NULL, destroy_handler, &handler_is_called);
208 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
210 error = tdm_buffer_add_destroy_handler(surface, NULL, &handler_is_called);
211 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
214 TEST_F(TDMBuffer, AddDestroyHandlerSuccessful)
216 error = tdm_buffer_add_destroy_handler(surface, destroy_handler, &handler_is_called);
217 ASSERT_EQ(TDM_ERROR_NONE, error);
219 handler_is_called = 0;
220 tbm_surface_internal_unref(surface);
221 ASSERT_TRUE(handler_is_called);
225 /* void tdm_buffer_remove_destroy_handler() */
226 TEST_F(TDMBuffer, RemoveDestroyHandlerFailNULL)
228 tdm_buffer_remove_destroy_handler(NULL, release_handler, &handler_is_called);
230 tdm_buffer_remove_destroy_handler(surface, NULL, &handler_is_called);
233 TEST_F(TDMBuffer, RemoveDestroyHandlerFailWithoutAdd)
235 tdm_buffer_remove_destroy_handler(surface, release_handler, &handler_is_called);
238 TEST_F(TDMBuffer, RemoveDestroyHandlerSuccessful)
240 error = tdm_buffer_add_destroy_handler(surface, release_handler, &handler_is_called);
241 ASSERT_EQ(TDM_ERROR_NONE, error);
243 tdm_buffer_remove_destroy_handler(surface, release_handler, &handler_is_called);
245 handler_is_called = 0;
246 tbm_surface_internal_unref(surface);
247 ASSERT_FALSE(handler_is_called);