Fix build error of maybe-uninitialized
[platform/core/uifw/libtdm.git] / haltests / src / tc_tdm_helper.cpp
1 /**************************************************************************
2  *
3  * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
4  *
5  * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
6  * Contact: Andrii Sokolenko <a.sokolenko@samsung.com>
7  * Contact: Roman Marchenko <r.marchenko@samsung.com>
8  *
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:
16  *
17  * The above copyright notice and this permission notice (including the
18  * next paragraph) shall be included in all copies or substantial portions
19  * of the Software.
20  *
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.
28  *
29 **************************************************************************/
30
31 #include "tc_tdm.h"
32
33 /* LCOV_EXCL_START */
34
35 class TDMHelper : public TDMOutput
36 {
37 public:
38         TDMHelper();
39         void SetUp(void);
40         void TearDown(void);
41 };
42
43 TDMHelper::TDMHelper()
44 {
45 }
46
47 void TDMHelper::SetUp(void)
48 {
49         TDMOutput::SetUp();
50 }
51
52 void TDMHelper::TearDown(void)
53 {
54         TDMOutput::TearDown();
55 }
56
57 TEST_P(TDMHelper, HelperGetTime)
58 {
59         EXPECT_GT(tdm_helper_get_time(), 0.0);
60 }
61
62 TEST_P(TDMHelper, HelperDumpBufferXR24)
63 {
64         tbm_surface_h buffer;
65
66         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_XRGB8888);
67         EXPECT_NE(buffer, NULL);
68
69         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
70
71         char filename[256];
72         snprintf(filename, sizeof filename, "/tmp/%s.png", typeid(*this).name());
73         tdm_helper_dump_buffer(buffer, (const char*)filename);
74
75         tbm_surface_destroy(buffer);
76 }
77
78 TEST_P(TDMHelper, HelperDumpBufferAR24)
79 {
80         tbm_surface_h buffer;
81
82         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
83         EXPECT_NE(buffer, NULL);
84
85         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
86
87         char filename[256];
88         snprintf(filename, sizeof filename, "/tmp/%s.png", typeid(*this).name());
89         tdm_helper_dump_buffer(buffer, (const char*)filename);
90
91         tbm_surface_destroy(buffer);
92 }
93
94 TEST_P(TDMHelper, HelperDumpBufferNullObject)
95 {
96         char filename[256];
97         snprintf(filename, sizeof filename, "/tmp/%s.png", typeid(*this).name());
98         tdm_helper_dump_buffer(NULL, (const char*)filename);
99 }
100
101 TEST_P(TDMHelper, HelperDumpBufferNullOther)
102 {
103         tbm_surface_h buffer = (tbm_surface_h)TDM_UT_INVALID_VALUE;
104         tdm_helper_dump_buffer(buffer, NULL);
105 }
106
107 TEST_P(TDMHelper, HelperClearBufferPos)
108 {
109         tbm_surface_h buffer;
110         tdm_pos pos = {.x = 40, .y = 40, .w = TDM_UT_BUFFER_SIZE - 80, .h = TDM_UT_BUFFER_SIZE - 80};
111
112         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
113         EXPECT_NE(buffer, NULL);
114
115         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
116
117         tdm_helper_clear_buffer_pos(buffer, &pos);
118
119         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
120
121         tbm_surface_destroy(buffer);
122 }
123
124 TEST_P(TDMHelper, HelperClearBufferColor)
125 {
126         tbm_surface_h buffer;
127         tdm_pos pos = {.x = 40, .y = 40, .w = TDM_UT_BUFFER_SIZE - 80, .h = TDM_UT_BUFFER_SIZE - 80};
128         unsigned int color = 0xffffff00;
129
130         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
131         EXPECT_NE(buffer, NULL);
132
133         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
134
135         tdm_helper_clear_buffer_color(buffer, &pos, color);
136
137         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
138
139         tbm_surface_destroy(buffer);
140 }
141
142 TEST_P(TDMHelper, HelperClearBufferARGB)
143 {
144         tbm_surface_h buffer;
145
146         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
147         EXPECT_NE(buffer, NULL);
148
149         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
150
151         tdm_helper_clear_buffer(buffer);
152
153         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
154
155         tbm_surface_destroy(buffer);
156 }
157
158 TEST_P(TDMHelper, HelperClearBufferXRGB)
159 {
160         tbm_surface_h buffer;
161
162         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_XRGB8888);
163         EXPECT_NE(buffer, NULL);
164
165         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
166
167         tdm_helper_clear_buffer(buffer);
168
169         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
170
171         tbm_surface_destroy(buffer);
172 }
173
174 TEST_P(TDMHelper, HelperClearBufferYUV420)
175 {
176         tbm_surface_h buffer;
177
178         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_YUV420);
179         EXPECT_NE(buffer, NULL);
180
181         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
182
183         tdm_helper_clear_buffer(buffer);
184
185         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
186
187         tbm_surface_destroy(buffer);
188 }
189
190 TEST_P(TDMHelper, HelperClearBufferNV12)
191 {
192         tbm_surface_h buffer;
193
194         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_NV12);
195         EXPECT_NE(buffer, NULL);
196
197         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
198
199         tdm_helper_clear_buffer(buffer);
200
201         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
202
203         tbm_surface_destroy(buffer);
204 }
205
206 TEST_P(TDMHelper, HelperClearBufferNV21)
207 {
208         tbm_surface_h buffer;
209
210         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_NV21);
211         EXPECT_NE(buffer, NULL);
212
213         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
214
215         tdm_helper_clear_buffer(buffer);
216
217         tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
218
219         tbm_surface_destroy(buffer);
220 }
221
222 TEST_P(TDMHelper, HelperGetBufferFullSize)
223 {
224         tbm_surface_h buffer;
225         int w = TDM_UT_INVALID_VALUE, h = TDM_UT_INVALID_VALUE;
226
227         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
228         EXPECT_NE(buffer, NULL);
229
230         tdm_helper_get_buffer_full_size(buffer, &w, &h);
231         EXPECT_NE(w, TDM_UT_INVALID_VALUE);
232         EXPECT_GE(w, tbm_surface_get_width(buffer));
233         EXPECT_NE(h, TDM_UT_INVALID_VALUE);
234         EXPECT_GE(h, tbm_surface_get_height(buffer));
235
236         tbm_surface_destroy(buffer);
237 }
238
239 TEST_P(TDMHelper, HelperConvertBufferRotate0)
240 {
241         tbm_surface_h buffer, temp;
242         tdm_pos sp, dp;
243
244         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
245         EXPECT_NE(buffer, NULL);
246         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
247
248         temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
249         EXPECT_NE(temp, NULL);
250
251         sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
252         dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
253
254         EXPECT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_NORMAL, 0), TDM_ERROR_NONE);
255
256         tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
257
258         tbm_surface_destroy(buffer);
259         tbm_surface_destroy(temp);
260 }
261
262 TEST_P(TDMHelper, HelperConvertBufferRotate0Flip)
263 {
264         tbm_surface_h buffer, temp;
265         tdm_pos sp, dp;
266
267         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
268         EXPECT_NE(buffer, NULL);
269         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
270
271         temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
272         EXPECT_NE(temp, NULL);
273
274         sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
275         dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
276
277         EXPECT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_FLIPPED, 0), TDM_ERROR_NONE);
278
279         tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
280
281         tbm_surface_destroy(buffer);
282         tbm_surface_destroy(temp);
283 }
284
285 TEST_P(TDMHelper, HelperConvertBufferRotate90)
286 {
287         tbm_surface_h buffer, temp;
288         tdm_pos sp, dp;
289
290         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
291         EXPECT_NE(buffer, NULL);
292         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
293
294         temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
295         EXPECT_NE(temp, NULL);
296
297         sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
298         dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
299
300         EXPECT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_90, 0), TDM_ERROR_NONE);
301
302         tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
303
304         tbm_surface_destroy(buffer);
305         tbm_surface_destroy(temp);
306 }
307
308 TEST_P(TDMHelper, HelperConvertBufferRotate180)
309 {
310         tbm_surface_h buffer, temp;
311         tdm_pos sp, dp;
312
313         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
314         EXPECT_NE(buffer, NULL);
315         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
316
317         temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
318         EXPECT_NE(temp, NULL);
319
320         sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
321         dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
322
323         EXPECT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_180, 0), TDM_ERROR_NONE);
324
325         tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
326
327         tbm_surface_destroy(buffer);
328         tbm_surface_destroy(temp);
329 }
330
331 TEST_P(TDMHelper, HelperConvertBufferRotate270)
332 {
333         tbm_surface_h buffer, temp;
334         tdm_pos sp, dp;
335
336         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
337         EXPECT_NE(buffer, NULL);
338         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
339
340         temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
341         EXPECT_NE(temp, NULL);
342
343         sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
344         dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
345
346         EXPECT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_270, 0), TDM_ERROR_NONE);
347
348         tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
349
350         tbm_surface_destroy(buffer);
351         tbm_surface_destroy(temp);
352 }
353
354 TEST_P(TDMHelper, HelperConvertBufferYUV420)
355 {
356         tbm_surface_h buffer, temp;
357         tdm_pos sp, dp;
358
359         buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_YUV420);
360         EXPECT_NE(buffer, NULL);
361         tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
362
363         temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_YUV420);
364         EXPECT_NE(temp, NULL);
365
366         sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
367         dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
368
369         EXPECT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_NORMAL, 0), TDM_ERROR_OPERATION_FAILED);
370
371         tbm_surface_destroy(buffer);
372         tbm_surface_destroy(temp);
373 }
374
375 TEST_P(TDMHelper, HelperGetFD)
376 {
377         int fd = tdm_helper_get_fd("TDM_DRM_MASTER_FD");
378         EXPECT_GE(fd, 0);
379         close(fd);
380         fd = tdm_helper_get_fd("BLURBLUR");
381         EXPECT_EQ(fd, -1);
382 }
383
384 TEST_P(TDMHelper, HelperSetFD)
385 {
386         tdm_helper_set_fd("TDM_DRM_MASTER_FD", -1);
387         tdm_helper_set_fd("BLURBLUR", -1);
388 }
389
390 TEST_P(TDMHelper, HelperDumpStart)
391 {
392         char path[256];
393         int count = 0;
394         snprintf(path, sizeof path, "blurblur");
395         tdm_helper_dump_start(path, &count);
396         tdm_helper_dump_stop();
397 }
398
399 static void
400 _tc_tdm_helper_capture_cb(tbm_surface_h buffer, void *user_data)
401 {
402 }
403
404 TEST_P(TDMHelper, HelperCaptureOutput)
405 {
406         tdm_error ret;
407         tdm_output *output;
408
409         for (int o = 0; o < output_count; o++) {
410                 tbm_surface_h dump;
411
412                 output = tdm_display_get_output(dpy, o, &ret);
413                 EXPECT_EQ(ret, TDM_ERROR_NONE);
414                 EXPECT_NE(output, NULL);
415
416                 if (!tc_tdm_output_is_connected(output))
417                         continue;
418
419                 if (tc_tdm_output_is_hwc_enable(outputs[o]))
420                         TDM_UT_SKIP_FLAG(0);
421
422                 EXPECT_EQ(tc_tdm_output_prepare(dpy, output, true), true);
423
424                 dump = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
425                 EXPECT_NE(dump, NULL);
426
427                 EXPECT_EQ(tdm_helper_capture_output(output, dump, 0, 0, TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE,
428                                                                                         _tc_tdm_helper_capture_cb, NULL), TDM_ERROR_NONE);
429
430                 tdm_helper_dump_buffer_str(dump, NULL, (char*)typeid(*this).name());
431
432                 tbm_surface_destroy(dump);
433         }
434 }
435
436
437 TEST_P(TDMHelper, HelperCaptureOutputNullObject)
438 {
439         tbm_surface_h dump = (tbm_surface_h)TDM_UT_INVALID_VALUE;
440
441         EXPECT_EQ(tdm_helper_capture_output(NULL, dump, 0, 0, TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE,
442                                                                                 _tc_tdm_helper_capture_cb, NULL), TDM_ERROR_INVALID_PARAMETER);
443 }
444
445 TEST_P(TDMHelper, HelperCaptureOutputNullOther)
446 {
447         for (int o = 0; o < output_count; o++) {
448                 tdm_error ret;
449                 tdm_output *output = tdm_display_get_output(dpy, o, &ret);
450                 EXPECT_EQ(ret, TDM_ERROR_NONE);
451                 EXPECT_NE(output, NULL);
452                 tdm_helper_output_commit_per_vblank_enabled(output);
453         }
454
455         tbm_surface_h dump = (tbm_surface_h)TDM_UT_INVALID_VALUE;
456
457         EXPECT_EQ(tdm_helper_capture_output(NULL, dump, 0, 0, TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE,
458                                                                                 _tc_tdm_helper_capture_cb, NULL), TDM_ERROR_INVALID_PARAMETER);
459 }
460
461 TEST_P(TDMHelper, HelperGetDisplayInformation)
462 {
463         char reply[8192];
464         int len = sizeof reply;
465
466         for (int o = 0; o < output_count; o++) {
467                 tdm_error ret;
468                 tdm_output *output = tdm_display_get_output(dpy, o, &ret);
469                 EXPECT_EQ(ret, TDM_ERROR_NONE);
470                 EXPECT_NE(output, NULL);
471                 if (!tc_tdm_output_is_connected(output))
472                         continue;
473                 EXPECT_EQ(tc_tdm_output_prepare(dpy, output, true), true);
474         }
475
476         tdm_helper_get_display_information(dpy, reply, &len);
477         TDM_INFO("%s", reply);
478 }
479
480 TEST_P(TDMHelper, HelperGetDisplayInformationNullObject)
481 {
482         char reply[8192];
483         int len = sizeof reply;
484
485         tdm_helper_get_display_information(NULL, reply, &len);
486 }
487
488 TEST_P(TDMHelper, HelperGetDisplayInformationNullOther)
489 {
490         tdm_helper_get_display_information(dpy, NULL, NULL);
491 }
492
493 TEST_P(TDMHelper, HelperCommitPerVblankEnabled)
494 {
495         EXPECT_EQ(tdm_helper_commit_per_vblank_enabled(dpy), 0);
496 }
497
498 TEST_P(TDMHelper, HelperCommitPerVblankEnabledNullOBject)
499 {
500         EXPECT_EQ(tdm_helper_commit_per_vblank_enabled(NULL), 0);
501 }
502
503 TEST_P(TDMHelper, HelperOutputCommitPerVblankEnabledNullObject)
504 {
505         EXPECT_EQ(tdm_helper_output_commit_per_vblank_enabled(NULL), -1);
506 }
507
508 #ifdef TDM_UT_TEST_WITH_PARAMS
509 INSTANTIATE_TEST_CASE_P(TDMHelperParams,
510                                                 TDMHelper,
511                                                 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
512 #else
513 INSTANTIATE_TEST_CASE_P(TDMHelperParams,
514                                                 TDMHelper,
515                                                 Values(TDM_DEFAULT_MODULE));
516 #endif
517
518 /* LCOV_EXCL_END */