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 **************************************************************************/
37 class TDMHwc : public TDMOutput
49 error = TDM_ERROR_NONE;
52 void TDMHwc::SetUp(void)
57 void TDMHwc::TearDown(void)
59 TDMOutput::TearDown();
63 _tc_tdm_hwc_commit_cb(tdm_hwc *hwc, unsigned int sequence,
64 unsigned int tv_sec, unsigned int tv_usec,
67 bool *done = (bool*)user_data;
72 /* tdm_hwc_window * tdm_hwc_create_window(tdm_output *output, tdm_error *error); */
73 TEST_P(TDMHwc, CreateWindowFailNull)
75 TDM_UT_SKIP_FLAG(has_outputs);
77 EXPECT_EQ(NULL, tdm_hwc_create_window(NULL, &error));
78 EXPECT_NE(TDM_ERROR_NONE, error);
81 TEST_P(TDMHwc, CreateWindowSuccessful)
83 TDM_UT_SKIP_FLAG(has_outputs);
87 tdm_hwc_window * hw = NULL;
89 for (int o = 0; o < output_count; o++) {
90 hwc = tdm_output_get_hwc(outputs[o], &error);
92 hw = tdm_hwc_create_window(hwc, &error);
93 EXPECT_EQ(TDM_ERROR_NONE, error);
94 tdm_hwc_window_destroy(hw);
96 EXPECT_EQ(NULL, tdm_hwc_create_window(hwc, &error));
97 EXPECT_NE(TDM_ERROR_NONE, error);
102 /* tdm_hwc_get_supported_formats() */
103 TEST_P(TDMHwc, GetSupportedFormatsFailNull)
105 TDM_UT_SKIP_FLAG(has_outputs);
109 error = tdm_hwc_get_video_supported_formats(NULL, NULL, NULL);
110 EXPECT_NE(TDM_ERROR_NONE, error);
113 TEST_P(TDMHwc, GetSupportedFormatsSuccessful)
115 TDM_UT_SKIP_FLAG(has_outputs);
118 tdm_error error = TDM_ERROR_NONE;
119 const tbm_format *formats;
122 for (int o = 0; o < output_count; o++) {
123 hwc = tdm_output_get_hwc(outputs[o], &error);
125 error = tdm_hwc_get_video_supported_formats(hwc, &formats, &count);
126 if (error != TDM_ERROR_NOT_IMPLEMENTED) {
127 EXPECT_EQ(TDM_ERROR_NONE, error);
129 EXPECT_NE(NULL, formats);
132 error = tdm_hwc_get_video_supported_formats(hwc, &formats, &count);
133 EXPECT_NE(TDM_ERROR_NONE, error);
139 /* tdm_hwc_get_video_available_properties() */
140 TEST_P(TDMHwc, GetAvailableVideoPropertiesFailNull)
142 TDM_UT_SKIP_FLAG(has_outputs);
145 tdm_error error = TDM_ERROR_NONE;
146 const tdm_prop *props;
149 for (int o = 0; o < output_count; o++) {
150 hwc = tdm_output_get_hwc(outputs[o], &error);
152 error = tdm_hwc_get_video_available_properties(NULL, &props, &count);
153 EXPECT_NE(TDM_ERROR_NONE, error);
155 error = tdm_hwc_get_video_available_properties(hwc, NULL, &count);
156 EXPECT_NE(TDM_ERROR_NONE, error);
158 error = tdm_hwc_get_video_available_properties(hwc, &props, NULL);
159 EXPECT_NE(TDM_ERROR_NONE, error);
161 error = tdm_hwc_get_video_available_properties(hwc, &props, &count);
162 EXPECT_NE(TDM_ERROR_NONE, error);
167 TEST_P(TDMHwc, GetAvailableVideoPropertiesSuccess)
169 TDM_UT_SKIP_FLAG(has_outputs);
172 tdm_error error = TDM_ERROR_NONE;
173 const tdm_prop *props;
176 for (int o = 0; o < output_count; o++) {
177 hwc = tdm_output_get_hwc(outputs[o], &error);
179 error = tdm_hwc_get_video_available_properties(hwc, &props, &count);
180 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
182 error = tdm_hwc_get_video_available_properties(hwc, &props, &count);
183 EXPECT_NE(TDM_ERROR_NONE, error);
188 /* tdm_hwc_get_capabilities() */
189 TEST_P(TDMHwc, GetAvailableCapabilitiesFailNull)
191 TDM_UT_SKIP_FLAG(has_outputs);
194 tdm_error error = TDM_ERROR_NONE;
195 tdm_hwc_capability hwc_caps;
197 for (int o = 0; o < output_count; o++) {
198 hwc = tdm_output_get_hwc(outputs[o], &error);
200 error = tdm_hwc_get_capabilities(NULL, &hwc_caps);
201 EXPECT_NE(TDM_ERROR_NONE, error);
203 error = tdm_hwc_get_capabilities(hwc, NULL);
204 EXPECT_NE(TDM_ERROR_NONE, error);
206 error = tdm_hwc_get_capabilities(hwc, &hwc_caps);
207 EXPECT_NE(TDM_ERROR_NONE, error);
212 TEST_P(TDMHwc, GetAvailableCapabilitiesSuccess)
214 TDM_UT_SKIP_FLAG(has_outputs);
217 tdm_error error = TDM_ERROR_NONE;
218 tdm_hwc_capability hwc_caps;
220 for (int o = 0; o < output_count; o++) {
221 hwc = tdm_output_get_hwc(outputs[o], &error);
223 error = tdm_hwc_get_capabilities(hwc, &hwc_caps);
224 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
226 error = tdm_hwc_get_capabilities(hwc, &hwc_caps);
227 EXPECT_NE(TDM_ERROR_NONE, error);
232 /* tdm_hwc_get_available_properties() */
233 TEST_P(TDMHwc, GetAvailablePropertiesFailNullWin)
235 TDM_UT_SKIP_FLAG(has_outputs);
238 tdm_error error = TDM_ERROR_NONE;
239 const tdm_prop *props;
242 for (int o = 0; o < output_count; o++) {
243 hwc = tdm_output_get_hwc(outputs[o], &error);
245 error = tdm_hwc_get_available_properties(NULL, &props, &count);
246 EXPECT_NE(TDM_ERROR_NONE, error);
248 error = tdm_hwc_get_available_properties(hwc, NULL, &count);
249 EXPECT_NE(TDM_ERROR_NONE, error);
251 error = tdm_hwc_get_available_properties(hwc, &props, NULL);
252 EXPECT_NE(TDM_ERROR_NONE, error);
254 error = tdm_hwc_get_available_properties(hwc, &props, &count);
255 EXPECT_NE(TDM_ERROR_NONE, error);
260 TEST_P(TDMHwc, GetAvailablePropertiesSuccess)
262 TDM_UT_SKIP_FLAG(has_outputs);
265 tdm_error error = TDM_ERROR_NONE;
266 const tdm_prop *props;
269 for (int o = 0; o < output_count; o++) {
270 hwc = tdm_output_get_hwc(outputs[o], &error);
272 error = tdm_hwc_get_available_properties(hwc, &props, &count);
273 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
275 error = tdm_hwc_get_available_properties(hwc, &props, &count);
276 EXPECT_NE(TDM_ERROR_NONE, error);
282 /* tdm_hwc_get_client_target_buffer_queue() */
283 TEST_P(TDMHwc, GetClientTargetBufferQueueFailNullObject)
285 TDM_UT_SKIP_FLAG(has_outputs);
288 tdm_error error = TDM_ERROR_NONE;
289 tbm_surface_queue_h queue = NULL;
291 for (int o = 0; o < output_count; o++) {
292 hwc = tdm_output_get_hwc(outputs[o], &error);
294 queue = tdm_hwc_get_client_target_buffer_queue(NULL, &error);
295 EXPECT_NE(TDM_ERROR_NONE, error);
296 EXPECT_EQ(NULL, queue);
298 queue = tdm_hwc_get_client_target_buffer_queue(NULL, NULL);
299 EXPECT_EQ(NULL, queue);
301 EXPECT_EQ(NULL, queue);
306 TEST_P(TDMHwc, GetClientTargetBufferQueueFailNoHwc)
308 TDM_UT_SKIP_FLAG(has_outputs);
311 tdm_error error = TDM_ERROR_NONE;
312 tbm_surface_queue_h queue = NULL;
314 for (int o = 0; o < output_count; o++) {
315 hwc = tdm_output_get_hwc(outputs[o], &error);
317 queue = tdm_hwc_get_client_target_buffer_queue(hwc, &error);
318 EXPECT_NE(TDM_ERROR_NONE, error);
319 EXPECT_EQ(NULL, queue);
321 queue = tdm_hwc_get_client_target_buffer_queue(hwc, &error);
322 EXPECT_NE(TDM_ERROR_NONE, error);
323 EXPECT_EQ(NULL, queue);
328 TEST_P(TDMHwc, GetClientTargetBufferQueueSuccessful)
330 TDM_UT_SKIP_FLAG(has_outputs);
333 tdm_error error = TDM_ERROR_NONE;
334 tbm_surface_queue_h queue = NULL;
336 for (int o = 0; o < output_count; o++) {
337 if (tc_tdm_output_is_connected(outputs[o]) == false)
339 EXPECT_EQ(tc_tdm_output_prepare(dpy, outputs[o], true), true);
340 hwc = tdm_output_get_hwc(outputs[o], &error);
342 queue = tdm_hwc_get_client_target_buffer_queue(hwc, &error);
343 tbm_surface_queue_destroy(queue);
344 EXPECT_EQ(TDM_ERROR_NONE, error);
345 EXPECT_NE(NULL, queue);
347 queue = tdm_hwc_get_client_target_buffer_queue(hwc, NULL);
348 tbm_surface_queue_destroy(queue);
349 EXPECT_EQ(TDM_ERROR_NONE, error);
350 EXPECT_NE(NULL, queue);
352 queue = tdm_hwc_get_client_target_buffer_queue(hwc, &error);
353 EXPECT_NE(TDM_ERROR_NONE, error);
354 EXPECT_EQ(NULL, queue);
356 queue = tdm_hwc_get_client_target_buffer_queue(hwc, NULL);
357 EXPECT_NE(TDM_ERROR_NONE, error);
358 EXPECT_EQ(NULL, queue);
363 /* tdm_hwc_set_client_target_buffer() */
364 TEST_P(TDMHwc, SetClientTargetBufferFailNullOutput)
366 TDM_UT_SKIP_FLAG(has_outputs);
368 tdm_region damage = {.num_rects = 0, .rects = NULL};
369 tbm_surface_h target_buff = NULL;
371 target_buff = tbm_surface_internal_create_with_flags(720, 1024,
372 TBM_FORMAT_ARGB8888, TBM_BO_DEFAULT);
373 EXPECT_NE(NULL, target_buff);
375 error = tdm_hwc_set_client_target_buffer(NULL, target_buff, damage);
376 tbm_surface_internal_destroy(target_buff);
377 EXPECT_NE(TDM_ERROR_NONE, error);
380 TEST_P(TDMHwc, SetClientTargetBufferSuccessfulSetBuff)
382 TDM_UT_SKIP_FLAG(has_outputs);
385 tdm_error error = TDM_ERROR_NONE;
386 tdm_region damage = {.num_rects = 0, .rects = NULL};
387 const tdm_output_mode *mode = NULL;
388 tbm_surface_h target_buff = NULL;
390 for (int o = 0; o < output_count; o++) {
391 if (tc_tdm_output_is_connected(outputs[o]) == false)
393 EXPECT_EQ(tc_tdm_output_prepare(dpy, outputs[o], true), true);
394 hwc = tdm_output_get_hwc(outputs[o], &error);
396 EXPECT_EQ(tdm_output_get_mode(outputs[o], &mode), TDM_ERROR_NONE);
397 EXPECT_NE(mode, NULL);
398 target_buff = tbm_surface_internal_create_with_flags(mode->hdisplay, mode->vdisplay,
399 TBM_FORMAT_ARGB8888, TBM_BO_DEFAULT);
400 EXPECT_NE(NULL, target_buff);
402 error = tdm_hwc_set_client_target_buffer(hwc, target_buff, damage);
403 tbm_surface_internal_destroy(target_buff);
404 EXPECT_EQ(TDM_ERROR_NONE, error);
406 error = tdm_hwc_set_client_target_buffer(hwc, target_buff, damage);
407 EXPECT_NE(TDM_ERROR_NONE, error);
412 TEST_P(TDMHwc, SetClientTargetBufferSuccessfulResetBuff)
414 TDM_UT_SKIP_FLAG(has_outputs);
417 tdm_error error = TDM_ERROR_NONE;
418 tdm_region damage = {.num_rects = 0, .rects = NULL};
420 for (int o = 0; o < output_count; o++) {
421 if (tc_tdm_output_is_connected(outputs[o]) == false)
423 EXPECT_EQ(tc_tdm_output_prepare(dpy, outputs[o], true), true);
424 hwc = tdm_output_get_hwc(outputs[o], &error);
426 error = tdm_hwc_set_client_target_buffer(hwc, NULL, damage);
427 EXPECT_EQ(TDM_ERROR_NONE, error);
429 error = tdm_hwc_set_client_target_buffer(hwc, NULL, damage);
430 EXPECT_NE(TDM_ERROR_NONE, error);
435 /* tdm_hwc_validate() */
436 TEST_P(TDMHwc, ValidateFailNull)
438 TDM_UT_SKIP_FLAG(has_outputs);
441 tdm_error error = TDM_ERROR_NONE;
444 error = tdm_hwc_validate(NULL, NULL, 0, &num_types);
445 EXPECT_NE(TDM_ERROR_NONE, error);
447 for (int o = 0; o < output_count; o++) {
448 hwc = tdm_output_get_hwc(outputs[o], &error);
450 error = tdm_hwc_validate(hwc, NULL, 0, NULL);
451 EXPECT_NE(TDM_ERROR_NONE, error);
453 error = tdm_hwc_validate(hwc, NULL, 0, NULL);
454 EXPECT_NE(TDM_ERROR_NONE, error);
459 /* tdm_hwc_get_changed_composition_types() */
460 TEST_P(TDMHwc, GetChangedCompositionTypesFailNull)
462 TDM_UT_SKIP_FLAG(has_outputs);
465 tdm_error error = TDM_ERROR_NONE;
466 uint32_t num_elements;
468 error = tdm_hwc_get_changed_composition_types(NULL, &num_elements, NULL, NULL);
469 EXPECT_NE(TDM_ERROR_NONE, error);
471 for (int o = 0; o < output_count; o++) {
472 hwc = tdm_output_get_hwc(outputs[o], &error);
474 error = tdm_hwc_get_changed_composition_types(hwc, NULL, NULL, NULL);
475 EXPECT_NE(TDM_ERROR_NONE, error);
477 error = tdm_hwc_get_changed_composition_types(hwc, NULL, NULL, NULL);
478 EXPECT_NE(TDM_ERROR_NONE, error);
483 /* tdm_error tdm_hwc_accept_validation() */
484 TEST_P(TDMHwc, AcceptChangesFailNull)
486 TDM_UT_SKIP_FLAG(has_outputs);
488 error = tdm_hwc_accept_validation(NULL);
489 EXPECT_NE(TDM_ERROR_NONE, error);
492 TEST_P(TDMHwc, AcceptChangesFailNoHwc)
495 tdm_error error = TDM_ERROR_NONE;
497 for (int o = 0; o < output_count; o++) {
498 hwc = tdm_output_get_hwc(outputs[o], &error);
500 error = tdm_hwc_accept_validation(hwc);
501 EXPECT_EQ(TDM_ERROR_NONE, error);
503 error = tdm_hwc_accept_validation(hwc);
504 EXPECT_NE(TDM_ERROR_NONE, error);
509 TEST_P(TDMHwc, AcceptChangesSuccessful)
511 TDM_UT_SKIP_FLAG(has_outputs);
514 tdm_error error = TDM_ERROR_NONE;
515 tdm_hwc_window *hwc_wnds[HWC_WIN_NUM];
516 tdm_hwc_window **changed_hwc_window = NULL;
517 tdm_hwc_window_composition *composition_types = NULL;
519 uint32_t get_num = 0;
521 for (int o = 0; o < output_count; o++) {
522 if (tc_tdm_output_is_connected(outputs[o]) == false)
524 EXPECT_EQ(tc_tdm_output_prepare(dpy, outputs[o], true), true);
525 hwc = tdm_output_get_hwc(outputs[o], &error);
527 for (int w = 0; w < HWC_WIN_NUM; w++) {
528 hwc_wnds[w] = tdm_hwc_create_window(hwc, &error);
529 EXPECT_EQ(TDM_ERROR_NONE, error);
530 error = tdm_hwc_window_set_composition_type(hwc_wnds[w], TDM_HWC_WIN_COMPOSITION_DEVICE);
531 EXPECT_EQ(TDM_ERROR_NONE, error);
534 error = tdm_hwc_validate(hwc, hwc_wnds, HWC_WIN_NUM, &num_types);
535 EXPECT_EQ(TDM_ERROR_NONE, error);
538 changed_hwc_window = (tdm_hwc_window **)calloc(num_types, sizeof(tdm_hwc_window *));
539 composition_types = (tdm_hwc_window_composition *)calloc(num_types, sizeof(tdm_hwc_window_composition));
542 error = tdm_hwc_get_changed_composition_types(hwc, &get_num, changed_hwc_window, composition_types);
543 EXPECT_EQ(TDM_ERROR_NONE, error);
544 EXPECT_EQ(get_num, num_types);
546 error = tdm_hwc_accept_validation(hwc);
547 EXPECT_EQ(TDM_ERROR_NONE, error);
549 free(composition_types);
550 free(changed_hwc_window);
553 for (int w = 0; w < HWC_WIN_NUM; w++)
554 tdm_hwc_window_destroy(hwc_wnds[w]);
556 EXPECT_EQ(TDM_ERROR_NONE, error);
561 /* tdm_error tdm_hwc_commit() */
562 TEST_P(TDMHwc, CommitFailNull)
564 TDM_UT_SKIP_FLAG(has_outputs);
566 error = tdm_hwc_commit(NULL, 1, NULL, NULL);
567 EXPECT_NE(TDM_ERROR_NONE, error);
570 TEST_P(TDMHwc, CommitSuccessful)
572 TDM_UT_SKIP_FLAG(has_outputs);
575 tdm_error error = TDM_ERROR_NONE;
576 tdm_hwc_window *hwc_wnds[HWC_WIN_NUM];
577 tdm_hwc_window **changed_hwc_window = NULL;
578 tdm_hwc_window_composition *composition_types = NULL;
580 uint32_t get_num = 0;
582 for (int o = 0; o < output_count; o++) {
583 if (tc_tdm_output_is_connected(outputs[o]) == false)
585 EXPECT_EQ(tc_tdm_output_prepare(dpy, outputs[o], true), true);
586 hwc = tdm_output_get_hwc(outputs[o], &error);
588 for (int w = 0; w < HWC_WIN_NUM; w++) {
589 hwc_wnds[w] = tdm_hwc_create_window(hwc, &error);
590 EXPECT_EQ(TDM_ERROR_NONE, error);
591 error = tdm_hwc_window_set_composition_type(hwc_wnds[w], TDM_HWC_WIN_COMPOSITION_DEVICE);
592 EXPECT_EQ(TDM_ERROR_NONE, error);
595 error = tdm_hwc_validate(hwc, hwc_wnds, HWC_WIN_NUM, &num_types);
596 EXPECT_EQ(TDM_ERROR_NONE, error);
599 changed_hwc_window = (tdm_hwc_window **)calloc(num_types, sizeof(tdm_hwc_window *));
600 composition_types = (tdm_hwc_window_composition *)calloc(num_types, sizeof(tdm_hwc_window_composition));
603 error = tdm_hwc_get_changed_composition_types(hwc, &get_num, changed_hwc_window, composition_types);
604 EXPECT_EQ(TDM_ERROR_NONE, error);
605 EXPECT_EQ(get_num, num_types);
607 error = tdm_hwc_accept_validation(hwc);
608 EXPECT_EQ(TDM_ERROR_NONE, error);
610 free(composition_types);
611 free(changed_hwc_window);
614 error = tdm_hwc_commit(hwc, 0, _tc_tdm_hwc_commit_cb, NULL);
615 EXPECT_EQ(TDM_ERROR_NONE, error);
617 for (int w = 0; w < HWC_WIN_NUM; w++)
618 tdm_hwc_window_destroy(hwc_wnds[w]);
620 EXPECT_EQ(TDM_ERROR_NONE, error);
625 /* tdm_hwc_set_property() */
626 TEST_P(TDMHwc, SetPropertyFailNull)
628 TDM_UT_SKIP_FLAG(has_outputs);
631 tdm_error error = TDM_ERROR_NONE;
636 for (int o = 0; o < output_count; o++) {
637 hwc = tdm_output_get_hwc(outputs[o], &error);
639 error = tdm_hwc_set_property(NULL, 0, value);
640 EXPECT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
642 error = tdm_hwc_set_property(hwc, 0, value);
643 EXPECT_NE(TDM_ERROR_NONE, error);
648 TEST_P(TDMHwc, SetPropertySuccess)
650 TDM_UT_SKIP_FLAG(has_outputs);
653 tdm_error error = TDM_ERROR_NONE;
654 const tdm_prop *props;
660 for (int o = 0; o < output_count; o++) {
661 hwc = tdm_output_get_hwc(outputs[o], &error);
663 error = tdm_hwc_get_available_properties(hwc, &props, &count);
664 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
667 error = tdm_hwc_set_property(hwc, 0, value);
668 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
670 error = tdm_hwc_set_property(hwc, props[0].id, value);
671 EXPECT_EQ(TDM_ERROR_NONE, error);
674 error = tdm_hwc_set_property(hwc, 0, value);
675 EXPECT_NE(TDM_ERROR_NONE, error);
680 /* tdm_hwc_get_property() */
681 TEST_P(TDMHwc, GetPropertyFailNull)
683 TDM_UT_SKIP_FLAG(has_outputs);
686 tdm_error error = TDM_ERROR_NONE;
689 for (int o = 0; o < output_count; o++) {
690 hwc = tdm_output_get_hwc(outputs[o], &error);
692 error = tdm_hwc_get_property(NULL, 0, &value);
693 EXPECT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
695 error = tdm_hwc_get_property(hwc, 0, &value);
696 EXPECT_NE(TDM_ERROR_NONE, error);
701 TEST_P(TDMHwc, GetPropertySuccess)
703 TDM_UT_SKIP_FLAG(has_outputs);
706 tdm_error error = TDM_ERROR_NONE;
707 const tdm_prop *props;
711 for (int o = 0; o < output_count; o++) {
712 hwc = tdm_output_get_hwc(outputs[o], &error);
715 error = tdm_hwc_get_available_properties(hwc, &props, &count);
716 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
719 error = tdm_hwc_get_property(hwc, 0, &value);
720 EXPECT_TRUE(TDM_ERROR_NONE == error || TDM_ERROR_NOT_IMPLEMENTED == error);
722 error = tdm_hwc_get_property(hwc, props[0].id, &value);
723 EXPECT_EQ(TDM_ERROR_NONE, error);
726 error = tdm_hwc_get_property(hwc, 0, &value);
727 EXPECT_NE(TDM_ERROR_NONE, error);
732 #ifdef TDM_UT_TEST_WITH_PARAMS
733 INSTANTIATE_TEST_CASE_P(TDMHwcParams,
735 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
737 INSTANTIATE_TEST_CASE_P(TDMHwcParams,
739 Values(TDM_DEFAULT_MODULE));