1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sub license, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
15 * The above copyright notice and this permission notice (including the
16 * next paragraph) shall be included in all copies or substantial portions
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 **************************************************************************/
29 #include "gtest/gtest.h"
31 #include "stub_pthread.h"
32 #include "stub_tdm_display.h"
33 #include "stub_stdlib.h"
34 #include "stub_unistd.h"
35 #include "stub_tdm_event_loop.h"
36 #include "stub_tdm_thread.h"
38 #include "stub_tdm_event_loop.h"
39 #include "stub_tdm_helper.h"
41 #include <sys/types.h>
43 extern "C" const char*
44 tdm_server_get_client_name(pid_t pid)
50 #include "tdm_vblank.c"
52 static void _init_test()
54 stub_tdm_helper_init();
55 stub_tdm_event_loop_init();
57 stub_tdm_thread_init();
58 stub_tdm_event_loop_init();
61 stub_tdm_display_init();
63 vblank_list_inited = 0;
64 tdm_debug_module = TDM_DEBUG_VBLANK;
69 /* tdm_vblank_create() */
71 TEST(tdm_vblank_create, error_dpy_is_null)
74 tdm_private_output output;
79 vblank = tdm_vblank_create(NULL, &output, &error);
81 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
82 ASSERT_TRUE(vblank == NULL);
85 TEST(tdm_vblank_create, error_output_is_null)
88 tdm_private_display display;
93 vblank = tdm_vblank_create(&display, NULL, &error);
95 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
96 ASSERT_TRUE(vblank == NULL);
99 TEST(tdm_vblank_create, error_list_inited_mutex_init)
102 tdm_private_display display;
103 tdm_private_output output;
108 PTHREAD_MUTEX_INIT_ERROR = -1;
110 vblank = tdm_vblank_create(&display, &output, &error);
112 ASSERT_EQ(error, TDM_ERROR_OPERATION_FAILED);
113 ASSERT_TRUE(vblank == NULL);
116 TEST(tdm_vblank_create, error_mode_is_null)
119 tdm_private_display display;
120 tdm_private_output output;
125 stub_tdm_output_get_mode_error = 1;
127 vblank = tdm_vblank_create(&display, &output, &error);
129 ASSERT_EQ(error, TDM_ERROR_OPERATION_FAILED);
130 ASSERT_TRUE(vblank == NULL);
133 TEST(tdm_vblank_create, error_calloc_error)
136 tdm_private_display display;
137 tdm_private_output output;
144 vblank = tdm_vblank_create(&display, &output, &error);
146 ASSERT_EQ(error, TDM_ERROR_OUT_OF_MEMORY);
147 ASSERT_TRUE(vblank == NULL);
150 TEST(tdm_vblank_create, success_vblank_create)
152 tdm_private_vblank *vblank;
153 tdm_private_display display;
154 tdm_private_output output;
156 tdm_private_vblank *find_item;
157 tdm_private_vblank *tmp;
162 (tdm_private_vblank *) tdm_vblank_create(&display, &output, &error);
164 ASSERT_EQ(error, TDM_ERROR_NONE);
165 ASSERT_TRUE(vblank != NULL);
166 ASSERT_TRUE(stub_tdm_output_change_handler == _tdm_vblank_cb_output_change);
167 ASSERT_EQ(vblank->stamp, stamp);
168 ASSERT_EQ(vblank->owner_tid, stub_syscall_return_value);
169 ASSERT_TRUE(vblank->dpy == &display);
170 ASSERT_TRUE(vblank->output == &output);
171 ASSERT_EQ(vblank->dpms, stub_tdm_dpms_returned_value);
172 ASSERT_EQ(vblank->vrefresh, stub_tdm_mode.vrefresh);
173 ASSERT_EQ(vblank->HW_vblank_gap, 1.0 / vblank->vrefresh);
174 ASSERT_EQ(vblank->check_HW_or_SW, 1);
175 ASSERT_EQ(vblank->fps, stub_tdm_mode.vrefresh);
176 ASSERT_TRUE(LIST_IS_EMPTY(&vblank->HW_wait_list));
177 ASSERT_TRUE(LIST_IS_EMPTY(&vblank->SW_wait_list));
178 // LIST_FOR_EACH_ENTRY_SAFE(find_item, tmp, &vblank_list, link) {
179 // if (find_item == vblank)
183 // ASSERT_TRUE(find_item != NULL);
184 // ASSERT_TRUE(LIST_IS_EMPTY(&valid_wait_list));
188 /* tdm_vblank_destroy() */
190 //TEST(tdm_vblank_destroy, success_vblank_destroy)
192 // tdm_private_vblank *vblank;
193 // int SW_timer = 10;
194 // tdm_vblank_wait_info *hw_vblank_wait_info;
195 // tdm_vblank_wait_info *sw_vblank_wait_info;
199 // vblank = (tdm_private_vblank *) calloc(1, sizeof *vblank);
200 // hw_vblank_wait_info =
201 // (tdm_vblank_wait_info *) calloc(1, sizeof *hw_vblank_wait_info);
202 // sw_vblank_wait_info =
203 // (tdm_vblank_wait_info *) calloc(1, sizeof *sw_vblank_wait_info);
205 //// LIST_INITHEAD(&vblank_list);
206 //// LIST_ADD(&vblank->link, &vblank_list);
208 // vblank->SW_timer = &SW_timer;
210 // LIST_INITHEAD(&hw_vblank_wait_info->valid_link);
211 // LIST_INITHEAD(&vblank->HW_wait_list);
212 // LIST_ADD(&hw_vblank_wait_info->link, &vblank->HW_wait_list);
214 // LIST_INITHEAD(&sw_vblank_wait_info->valid_link);
215 // LIST_INITHEAD(&vblank->SW_wait_list);
216 // LIST_ADD(&sw_vblank_wait_info->link, &vblank->SW_wait_list);
218 // tdm_vblank_destroy(vblank);
220 //// ASSERT_TRUE(LIST_IS_EMPTY(&vblank_list));
221 // ASSERT_TRUE(stub_tdm_event_loop_removed_source == &SW_timer);
222 // ASSERT_TRUE(stub_tdm_output_change_handler == _tdm_vblank_cb_output_change);
223 // ASSERT_TRUE(LIST_IS_EMPTY(&vblank->HW_wait_list));
224 // ASSERT_TRUE(LIST_IS_EMPTY(&vblank->SW_wait_list));
225 // ASSERT_EQ(FREE_CALLED, 1);
228 /* tdm_vblank_set_fps() */
230 TEST(tdm_vblank_set_fps, error_vblank_is_null)
236 error = tdm_vblank_set_fps(NULL, 5);
238 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
241 TEST(tdm_vblank_set_fps, error_fps_is_0)
244 tdm_private_vblank vblank;
248 error = tdm_vblank_set_fps(&vblank, 0);
250 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
253 TEST(tdm_vblank_set_fps, success_fps_is_already_set)
256 tdm_private_vblank vblank;
257 unsigned int fps = 60;
263 error = tdm_vblank_set_fps(&vblank, fps);
265 ASSERT_EQ(error, TDM_ERROR_NONE);
266 ASSERT_EQ(vblank.fps, fps);
269 TEST(tdm_vblank_set_fps, success_set_fps)
272 tdm_private_vblank vblank;
273 unsigned int fps = 60;
277 vblank.fps = fps - 10;
279 error = tdm_vblank_set_fps(&vblank, fps);
281 ASSERT_EQ(error, TDM_ERROR_NONE);
282 ASSERT_EQ(vblank.fps, fps);
283 ASSERT_EQ(vblank.check_HW_or_SW, 1);
286 /* tdm_vblank_set_offset() */
288 TEST(tdm_vblank_set_offset, error_vblank_is_null)
294 error = tdm_vblank_set_offset(NULL, 1);
296 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
299 TEST(tdm_vblank_set_offset, success_offset_is_already_set)
302 tdm_private_vblank vblank;
307 vblank.offset = offset;
309 error = tdm_vblank_set_offset(&vblank, offset);
311 ASSERT_EQ(error, TDM_ERROR_NONE);
312 ASSERT_EQ(vblank.offset, offset);
315 TEST(tdm_vblank_set_offset, success_vblank_set_offset)
318 tdm_private_vblank vblank;
323 vblank.offset = offset - 64;
325 error = tdm_vblank_set_offset(&vblank, offset);
327 ASSERT_EQ(error, TDM_ERROR_NONE);
328 ASSERT_EQ(vblank.offset, offset);
329 ASSERT_EQ(vblank.check_HW_or_SW, 1);
332 /* tdm_vblank_set_enable_fake() */
334 TEST(tdm_vblank_set_enable_fake, error_vblank_is_null)
340 error = tdm_vblank_set_enable_fake(NULL, 1);
342 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
345 TEST(tdm_vblank_set_enable_fake, success_enable_fake_is_already_set)
348 tdm_private_vblank vblank;
349 int enable_fake = 256;
353 vblank.enable_fake = enable_fake;
355 error = tdm_vblank_set_enable_fake(&vblank, enable_fake);
357 ASSERT_EQ(error, TDM_ERROR_NONE);
358 ASSERT_EQ(vblank.enable_fake, enable_fake);
361 TEST(tdm_vblank_set_enable_fake, success_vblank_set_enable_fake)
364 tdm_private_vblank vblank;
365 int enable_fake = 256;
369 vblank.enable_fake = enable_fake - 64;
371 error = tdm_vblank_set_enable_fake(&vblank, enable_fake);
373 ASSERT_EQ(error, TDM_ERROR_NONE);
374 ASSERT_EQ(vblank.enable_fake, enable_fake);
377 /* tdm_vblank_get_enable_fake() */
379 TEST(tdm_vblank_get_enable_fake, error_vblank_is_null)
381 unsigned int enable_fake;
385 tdm_vblank_get_enable_fake(NULL, &enable_fake);
387 ASSERT_EQ(enable_fake, 0);
390 TEST(tdm_vblank_get_enable_fake, success_vblank_get_enable_fake)
392 tdm_private_vblank vblank;
393 unsigned int enable_fake;
397 vblank.enable_fake = 15;
399 tdm_vblank_get_enable_fake(&vblank, &enable_fake);
401 ASSERT_EQ(enable_fake, vblank.enable_fake);
404 /* tdm_vblank_cb_vblank_SW() */
406 TEST(tdm_vblank_cb_vblank_SW, error_vblank_is_null_and_vblank_stamp_less_0)
412 error = tdm_vblank_cb_vblank_SW(NULL, -1);
414 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
417 TEST(tdm_vblank_cb_vblank_SW, success_vblank_is_null_and_not_on_vblank_list)
423 // LIST_INITHEAD(&vblank_list);
425 error = tdm_vblank_cb_vblank_SW(NULL, 5);
427 ASSERT_EQ(error, TDM_ERROR_NONE);
430 TEST(tdm_vblank_cb_vblank_SW, success_not_in_display_thread)
433 tdm_private_vblank vblank;
434 tdm_thread_cb_vblank_sw *vblank_sw;
435 tdm_private_display display;
439 vblank.owner_tid = 10;
441 vblank.dpy = &display;
443 stub_syscall_return_value = vblank.owner_tid - 1;
445 error = tdm_vblank_cb_vblank_SW(&vblank, 5);
447 vblank_sw = (tdm_thread_cb_vblank_sw *) stub_tdm_thread_send_cb_buff;
449 ASSERT_EQ(error, TDM_ERROR_NONE);
450 ASSERT_EQ(vblank_sw->base.length, sizeof(tdm_thread_cb_vblank_sw));
451 ASSERT_EQ(vblank_sw->base.type, TDM_THREAD_CB_VBLANK_SW);
452 ASSERT_DOUBLE_EQ(vblank_sw->vblank_stamp, vblank.stamp);
455 TEST(tdm_vblank_cb_vblank_SW, success_SW_wait_list_is_empty)
458 tdm_private_vblank vblank;
462 vblank.owner_tid = 10;
464 stub_syscall_return_value = vblank.owner_tid;
466 LIST_INITHEAD(&vblank.SW_wait_list);
468 error = tdm_vblank_cb_vblank_SW(&vblank, 5);
470 ASSERT_EQ(error, TDM_ERROR_OPERATION_FAILED);
473 TEST(tdm_vblank_cb_vblank_SW, success_vblank_cb_vblank_SW)
476 tdm_private_vblank vblank;
477 tdm_vblank_wait_info *first_wait_info;
478 tdm_vblank_wait_info *wait_info;
483 (tdm_vblank_wait_info *) calloc(1, sizeof *first_wait_info);
484 wait_info = (tdm_vblank_wait_info *) calloc(1, sizeof *wait_info);
486 vblank.owner_tid = 10;
488 stub_syscall_return_value = vblank.owner_tid;
490 LIST_INITHEAD(&vblank.SW_wait_list);
491 LIST_INITHEAD(&first_wait_info->valid_link);
492 LIST_INITHEAD(&wait_info->valid_link);
494 LIST_ADD(&wait_info->link, &vblank.SW_wait_list);
495 LIST_ADD(&first_wait_info->link, &vblank.SW_wait_list);
497 vblank.last_seq = 20;
498 first_wait_info->target_seq = 19;
499 wait_info->target_seq = 21;
501 first_wait_info->target_time = 5;
502 wait_info->target_time = 5;
504 first_wait_info->func = stub_tdm_vblank_handler;
505 wait_info->func = stub_tdm_vblank_handler;
507 error = tdm_vblank_cb_vblank_SW(&vblank, 5);
509 ASSERT_EQ(error, TDM_ERROR_NONE);
510 ASSERT_EQ(FREE_CALLED, 1);
511 ASSERT_EQ(stub_tdm_vblank_handler_call_count, 2);
514 TEST(tdm_vblank_cb_vblank_SW, success_vblank_cb_vblank_SW_2)
517 tdm_private_vblank vblank;
518 tdm_vblank_wait_info *first_wait_info;
519 tdm_vblank_wait_info *wait_info;
524 (tdm_vblank_wait_info *) calloc(1, sizeof *first_wait_info);
525 wait_info = (tdm_vblank_wait_info *) calloc(1, sizeof *wait_info);
527 vblank.owner_tid = 10;
529 stub_syscall_return_value = vblank.owner_tid;
531 LIST_INITHEAD(&vblank.SW_wait_list);
532 LIST_INITHEAD(&first_wait_info->valid_link);
533 LIST_INITHEAD(&wait_info->valid_link);
535 LIST_ADD(&wait_info->link, &vblank.SW_wait_list);
536 LIST_ADD(&first_wait_info->link, &vblank.SW_wait_list);
538 vblank.last_seq = 20;
539 first_wait_info->target_seq = 19;
540 wait_info->target_seq = 21;
542 first_wait_info->target_time = 5;
543 wait_info->target_time = 10;
545 first_wait_info->func = stub_tdm_vblank_handler;
546 wait_info->func = stub_tdm_vblank_handler;
548 error = tdm_vblank_cb_vblank_SW(&vblank, 5);
550 ASSERT_EQ(error, TDM_ERROR_NONE);
551 ASSERT_EQ(FREE_CALLED, 1);
552 ASSERT_EQ(stub_tdm_vblank_handler_call_count, 1);
555 /* tdm_vblank_wait() */
557 TEST(tdm_vblank_wait, error_vblank_is_null)
563 error = tdm_vblank_wait(NULL, 1, 1, 1, stub_tdm_vblank_handler, NULL);
565 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
568 TEST(tdm_vblank_wait, error_func_is_null)
571 tdm_private_vblank vblank;
575 error = tdm_vblank_wait(&vblank, 1, 1, 1, NULL, NULL);
577 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
580 TEST(tdm_vblank_wait, error_not_in_display_thread)
583 tdm_private_vblank vblank;
587 vblank.owner_tid = 10;
589 stub_syscall_return_value = vblank.owner_tid - 1;
591 error = tdm_vblank_wait(&vblank, 1, 1, 1, stub_tdm_vblank_handler, NULL);
593 ASSERT_EQ(error, TDM_ERROR_BAD_REQUEST);
596 TEST(tdm_vblank_wait, error_dpms_is_off_and_enable_fake_is_0)
599 tdm_private_vblank vblank;
603 vblank.owner_tid = 10;
604 vblank.dpms = TDM_OUTPUT_DPMS_OFF;
605 vblank.enable_fake = 0;
607 stub_syscall_return_value = vblank.owner_tid;
609 error = tdm_vblank_wait(&vblank, 1, 1, 1, stub_tdm_vblank_handler, NULL);
611 ASSERT_EQ(error, TDM_ERROR_DPMS_OFF);
614 TEST(tdm_vblank_wait, error_calloc)
617 tdm_private_vblank vblank;
621 vblank.owner_tid = 10;
622 vblank.dpms = TDM_OUTPUT_DPMS_ON;
624 stub_syscall_return_value = vblank.owner_tid;
628 error = tdm_vblank_wait(&vblank, 1, 1, 1, stub_tdm_vblank_handler, NULL);
630 ASSERT_EQ(error, TDM_ERROR_OUT_OF_MEMORY);
633 //TEST(tdm_vblank_wait, error_vblank_wait_HW_and_vblank_wait_SW)
636 // tdm_private_vblank vblank;
637 // int SW_timer = 10;
641 // LIST_INITHEAD(&vblank.HW_wait_list);
642 // LIST_INITHEAD(&vblank.SW_wait_list);
644 // vblank.owner_tid = 10;
645 // vblank.dpms = TDM_OUTPUT_DPMS_ON;
646 // vblank.check_HW_or_SW = 1;
647 // vblank.vrefresh = 60;
649 // vblank.offset = 1;
650 // vblank.last_time = 0;
651 // vblank.SW_timer = &SW_timer;
653 // stub_syscall_return_value = vblank.owner_tid;
654 // stub_tdm_output_wait_vblank_error = 1;
655 // stub_tdm_event_loop_source_timer_update_error = 1;
657 // error = tdm_vblank_wait(&vblank, 0, 0, 1, stub_tdm_vblank_handler, NULL);
659 // ASSERT_EQ(error, TDM_ERROR_OPERATION_FAILED);
662 //TEST(tdm_vblank_wait, error_vblank_wait_SW)
665 // tdm_private_vblank vblank;
666 // int SW_timer = 10;
670 // LIST_INITHEAD(&vblank.HW_wait_list);
671 // LIST_INITHEAD(&vblank.SW_wait_list);
673 // vblank.owner_tid = 10;
674 // vblank.dpms = TDM_OUTPUT_DPMS_ON;
675 // vblank.check_HW_or_SW = 1;
676 // vblank.vrefresh = 60;
678 // vblank.offset = 1;
679 // vblank.last_time = 0;
680 // vblank.SW_timer = &SW_timer;
682 // stub_syscall_return_value = vblank.owner_tid;
683 // stub_tdm_event_loop_source_timer_update_error = 1;
685 // error = tdm_vblank_wait(&vblank, 0, 0, 1, stub_tdm_vblank_handler, NULL);
687 // ASSERT_EQ(error, TDM_ERROR_OPERATION_FAILED);
690 TEST(tdm_vblank_wait, success_vblank_wait_SW)
693 tdm_private_vblank vblank;
698 LIST_INITHEAD(&vblank.HW_wait_list);
699 LIST_INITHEAD(&vblank.SW_wait_list);
701 vblank.owner_tid = 10;
702 vblank.enable_fake = 1;
703 vblank.dpms = TDM_OUTPUT_DPMS_OFF;
704 vblank.check_HW_or_SW = 1;
705 vblank.vrefresh = 60;
708 vblank.last_time = 0;
709 vblank.SW_timer = &SW_timer;
711 stub_syscall_return_value = vblank.owner_tid;
713 error = tdm_vblank_wait(&vblank, 0, 0, 1, stub_tdm_vblank_handler, NULL);
715 ASSERT_EQ(error, TDM_ERROR_NONE);
718 TEST(tdm_vblank_wait, success_vblank_wait_HW)
721 tdm_private_vblank vblank;
726 LIST_INITHEAD(&vblank.HW_wait_list);
727 LIST_INITHEAD(&vblank.SW_wait_list);
729 vblank.owner_tid = 10;
730 vblank.dpms = TDM_OUTPUT_DPMS_ON;
731 vblank.check_HW_or_SW = 1;
732 vblank.vrefresh = 60;
735 vblank.last_time = 0;
736 vblank.SW_timer = &SW_timer;
738 stub_syscall_return_value = vblank.owner_tid;
740 error = tdm_vblank_wait(&vblank, 0, 0, 1, stub_tdm_vblank_handler, NULL);
742 ASSERT_EQ(error, TDM_ERROR_NONE);
745 /* tdm_vblank_wait_seq() */
747 TEST(tdm_vblank_wait_seq, error_vblank_is_null)
753 error = tdm_vblank_wait_seq(NULL, 1, 1, 1, stub_tdm_vblank_handler, NULL);
755 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
758 TEST(tdm_vblank_wait_seq, error_func_is_null)
761 tdm_private_vblank vblank;
765 error = tdm_vblank_wait_seq(&vblank, 1, 1, 1, NULL, NULL);
767 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
770 TEST(tdm_vblank_wait_seq, success_last_seq_is_0)
773 tdm_private_vblank vblank;
778 LIST_INITHEAD(&vblank.HW_wait_list);
779 LIST_INITHEAD(&vblank.SW_wait_list);
782 vblank.owner_tid = 10;
783 vblank.dpms = TDM_OUTPUT_DPMS_ON;
784 vblank.check_HW_or_SW = 1;
785 vblank.vrefresh = 60;
788 vblank.last_time = 0;
789 vblank.SW_timer = &SW_timer;
791 stub_syscall_return_value = vblank.owner_tid;
794 tdm_vblank_wait_seq(&vblank, 0, 0, 1, stub_tdm_vblank_handler, NULL);
796 ASSERT_EQ(error, TDM_ERROR_NONE);
799 TEST(tdm_vblank_wait_seq,
800 success_sequence_greater_last_seq_and_seq_target_less_curr)
803 tdm_private_vblank vblank;
808 vblank.vblank_gap = 0;
810 stub_tdm_helper_get_time_ret_val = 100;
813 tdm_vblank_wait_seq(&vblank, 0, 0, 5, stub_tdm_vblank_handler, NULL);
815 ASSERT_EQ(error, TDM_ERROR_NONE);
816 ASSERT_EQ(stub_tdm_vblank_handler_call_count, 1);
819 TEST(tdm_vblank_wait_seq, success_target_is_too_close_to_current)
822 tdm_private_vblank vblank;
827 vblank.vblank_gap = 0;
829 stub_tdm_helper_get_time_ret_val = vblank.last_time - 0.0001;
832 tdm_vblank_wait_seq(&vblank, 0, 0, 5, stub_tdm_vblank_handler, NULL);
834 ASSERT_EQ(error, TDM_ERROR_NONE);
835 ASSERT_EQ(stub_tdm_vblank_handler_call_count, 1);
838 TEST(tdm_vblank_wait_seq, success_sequence_greater_last_seq)
841 tdm_private_vblank vblank;
846 LIST_INITHEAD(&vblank.HW_wait_list);
847 LIST_INITHEAD(&vblank.SW_wait_list);
850 vblank.owner_tid = 10;
851 vblank.dpms = TDM_OUTPUT_DPMS_ON;
852 vblank.check_HW_or_SW = 1;
853 vblank.vrefresh = 60;
856 vblank.last_time = 1;
857 vblank.SW_timer = &SW_timer;
858 vblank.vblank_gap = 0;
860 stub_syscall_return_value = vblank.owner_tid;
862 stub_tdm_helper_get_time_ret_val = vblank.last_time - 0.5;
865 tdm_vblank_wait_seq(&vblank, 0, 0, 5, stub_tdm_vblank_handler, NULL);
867 ASSERT_EQ(error, TDM_ERROR_NONE);
870 TEST(tdm_vblank_wait_seq,
871 success_last_seq_is_not_0_and_no_sequence_greater_last_seq)
874 tdm_private_vblank vblank;
875 unsigned int sequence = TDM_VBLANK_UINT_1Q + 100;
879 vblank.last_seq = sequence + 100;
880 vblank.vblank_gap = 0;
882 stub_tdm_helper_get_time_ret_val = vblank.last_time - 0.0001;
885 tdm_vblank_wait_seq(&vblank, 0, 0, sequence, stub_tdm_vblank_handler,
888 ASSERT_EQ(error, TDM_ERROR_NONE);
889 ASSERT_EQ(stub_tdm_vblank_handler_call_count, 1);