1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
6 * Contact: Andrii Sokolenko <a.sokolenko@samsung.com>
7 * Contact: Roman Marchenko <r.marchenko@samsung.com>
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the
11 * "Software"), to deal in the Software without restriction, including
12 * without limitation the rights to use, copy, modify, merge, publish,
13 * distribute, sub license, and/or sell copies of the Software, and to
14 * permit persons to whom the Software is furnished to do so, subject to
15 * the following conditions:
17 * The above copyright notice and this permission notice (including the
18 * next paragraph) shall be included in all copies or substantial portions
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 **************************************************************************/
35 class TDMBuffer : public TDMDisplay
44 TDMBuffer::TDMBuffer()
49 void TDMBuffer::SetUp(void)
53 buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
54 ASSERT_NE(buffer, NULL);
57 void TDMBuffer::TearDown(void)
60 tbm_surface_destroy(buffer);
63 TDMDisplay::TearDown();
67 ut_tdm_buffer_create(int width, int height, tbm_format format, int flags, bool fill, int count, tbm_surface_h *buffers)
69 TDM_UT_GOTO_IF_FAIL(width > 0, failed);
70 TDM_UT_GOTO_IF_FAIL(height > 0, failed);
72 for (int b = 0; b < count; b++) {
73 buffers[b] = tbm_surface_internal_create_with_flags(width, height, format, flags);
74 TDM_UT_GOTO_IF_FAIL(buffers[b] != NULL, failed);
76 tdm_test_buffer_fill(buffers[b], PATTERN_SMPTE);
78 TDM_INFO("creating buffer(%p) done: width(%d) height(%d), format(%c%c%c%c) flags(%x) fill(%d), count(%d)",
79 buffers[b], width, height, FOURCC_STR(format), flags, fill, count);
84 for (int b = 0; b < count; b++) {
86 tbm_surface_destroy(buffers[b]);
93 TEST_P(TDMBuffer, BufferRefBackend)
95 ASSERT_EQ(tdm_buffer_ref_backend(buffer), buffer);
96 tdm_buffer_unref_backend(buffer);
99 TEST_P(TDMBuffer, BufferRefBackendNullOBject)
101 ASSERT_EQ(tdm_buffer_ref_backend(NULL), NULL);
104 TEST_P(TDMBuffer, BufferUnrefBackend)
106 tdm_buffer_unref_backend(buffer);
109 TEST_P(TDMBuffer, BufferUnrefBackendNullOBject)
111 tdm_buffer_unref_backend(NULL);
115 _ut_tdm_buffer_destroy_cb(tbm_surface_h buffer, void *user_data)
117 bool *done = (bool*)user_data;
122 TEST_P(TDMBuffer, BufferAddDestroyHandler)
125 ASSERT_EQ(tdm_buffer_add_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, &done), TDM_ERROR_NONE);
126 tbm_surface_destroy(buffer);
128 ASSERT_EQ(done, true);
131 TEST_P(TDMBuffer, BufferAddDestroyHandlerTwice)
133 ASSERT_EQ(tdm_buffer_add_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, NULL), TDM_ERROR_NONE);
134 ASSERT_EQ(tdm_buffer_add_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, NULL), TDM_ERROR_BAD_REQUEST);
137 TEST_P(TDMBuffer, BufferAddDestroyHandlerNullObject)
139 ASSERT_EQ(tdm_buffer_add_destroy_handler(NULL, _ut_tdm_buffer_destroy_cb, NULL), TDM_ERROR_INVALID_PARAMETER);
142 TEST_P(TDMBuffer, BufferAddDestroyHandlerNullOther)
144 ASSERT_EQ(tdm_buffer_add_destroy_handler(buffer, NULL, NULL), TDM_ERROR_INVALID_PARAMETER);
147 TEST_P(TDMBuffer, BufferRemoveDestroyHandler)
150 ASSERT_EQ(tdm_buffer_add_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, &done), TDM_ERROR_NONE);
151 tdm_buffer_remove_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, &done);
152 tbm_surface_destroy(buffer);
154 ASSERT_EQ(done, false);
157 TEST_P(TDMBuffer, BufferRemoveDestroyHandlerDifferentData)
160 ASSERT_EQ(tdm_buffer_add_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, &done), TDM_ERROR_NONE);
161 tdm_buffer_remove_destroy_handler(buffer, _ut_tdm_buffer_destroy_cb, NULL);
162 tbm_surface_destroy(buffer);
164 ASSERT_EQ(done, true);
167 TEST_P(TDMBuffer, BufferRemoveDestroyHandlerNullObject)
169 tdm_buffer_remove_destroy_handler(NULL, _ut_tdm_buffer_destroy_cb, NULL);
172 TEST_P(TDMBuffer, BufferRemoveDestroyHandlerNullOther)
174 tdm_buffer_remove_destroy_handler(buffer, NULL, NULL);
178 _ut_tdm_buffer_release_cb(tbm_surface_h buffer, void *user_data)
180 bool *done = (bool*)user_data;
185 TEST_P(TDMBuffer, BufferAddReleaseHandler)
188 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb, &done), TDM_ERROR_NONE);
189 tdm_buffer_ref_backend(buffer);
190 ASSERT_EQ(done, false);
191 tdm_buffer_unref_backend(buffer);
192 ASSERT_EQ(done, true);
195 TEST_P(TDMBuffer, BufferAddReleaseHandlerTwice)
197 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb, NULL), TDM_ERROR_NONE);
198 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb, NULL), TDM_ERROR_BAD_REQUEST);
201 TEST_P(TDMBuffer, BufferAddReleaseHandlerNullObject)
204 ASSERT_EQ(tdm_buffer_add_release_handler(NULL, _ut_tdm_buffer_release_cb, &done), TDM_ERROR_INVALID_PARAMETER);
205 ASSERT_EQ(done, false);
208 TEST_P(TDMBuffer, BufferAddReleaseHandlerNullOther)
210 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, NULL, NULL), TDM_ERROR_INVALID_PARAMETER);
213 TEST_P(TDMBuffer, BufferRemoveReleaseHandler)
216 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb, &done), TDM_ERROR_NONE);
217 tdm_buffer_ref_backend(buffer);
218 ASSERT_EQ(done, false);
219 tdm_buffer_remove_release_handler(buffer, _ut_tdm_buffer_release_cb, &done);
220 tdm_buffer_unref_backend(buffer);
221 ASSERT_EQ(done, false);
224 TEST_P(TDMBuffer, BufferRemoveReleaseHandlerDifferentData)
227 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb, &done), TDM_ERROR_NONE);
228 tdm_buffer_ref_backend(buffer);
229 ASSERT_EQ(done, false);
230 tdm_buffer_remove_release_handler(buffer, _ut_tdm_buffer_release_cb, NULL);
231 tdm_buffer_unref_backend(buffer);
232 ASSERT_EQ(done, true);
236 _ut_tdm_buffer_release_cb2(tbm_surface_h buffer, void *user_data)
238 bool *done = (bool*)user_data;
241 tdm_buffer_remove_release_handler(buffer, _ut_tdm_buffer_release_cb2, user_data);
244 TEST_P(TDMBuffer, BufferRemoveReleaseHandlerInHandler)
247 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb2, &done), TDM_ERROR_NONE);
248 tdm_buffer_ref_backend(buffer);
249 ASSERT_EQ(done, false);
250 tdm_buffer_unref_backend(buffer);
251 ASSERT_EQ(done, true);
254 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb2, &done), TDM_ERROR_NONE);
255 tdm_buffer_ref_backend(buffer);
256 ASSERT_EQ(done, false);
257 tdm_buffer_unref_backend(buffer);
258 ASSERT_EQ(done, true);
261 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb2, &done), TDM_ERROR_NONE);
262 tdm_buffer_ref_backend(buffer);
263 ASSERT_EQ(done, false);
264 tdm_buffer_unref_backend(buffer);
265 ASSERT_EQ(done, true);
268 TEST_P(TDMBuffer, BufferRemoveReleaseHandlerNullObject)
271 ASSERT_EQ(tdm_buffer_add_release_handler(buffer, _ut_tdm_buffer_release_cb, &done), TDM_ERROR_NONE);
272 tdm_buffer_ref_backend(buffer);
273 ASSERT_EQ(done, false);
274 tdm_buffer_remove_release_handler(NULL, _ut_tdm_buffer_release_cb, &done);
275 tdm_buffer_unref_backend(buffer);
276 ASSERT_EQ(done, true);
279 TEST_P(TDMBuffer, BufferRemoveReleaseHandlerNullOther)
281 tdm_buffer_remove_release_handler(buffer, NULL, NULL);
284 TEST_P(TDMBuffer, BufferRemoveReleaseHandlerNoAdd)
286 tdm_buffer_remove_release_handler(buffer, _ut_tdm_buffer_release_cb, NULL);
289 #ifdef TDM_UT_TEST_WITH_PARAMS
290 INSTANTIATE_TEST_CASE_P(TDMBufferParams,
292 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
294 INSTANTIATE_TEST_CASE_P(TDMBufferParams,
296 Values(TDM_DEFAULT_MODULE));