}
}
+TEST_P(TDMOutput, OutputWaitVblankBeforeDpmsOff)
+{
+ TDM_UT_SKIP_FLAG(has_outputs);
+
+ for (int o = 0; o < output_count; o++) {
+ if (!ut_tdm_output_is_connected(outputs[o]))
+ continue;
+
+ ASSERT_TRUE(ut_tdm_output_prepare(dpy, outputs[o]) == true);
+
+ for (int t = 0; t < 10; t++) {
+ bool done = false;
+
+ ASSERT_TRUE(tdm_output_wait_vblank(outputs[o], 1, 0, _ut_tdm_output_done_cb, &done) == TDM_ERROR_NONE);
+ if (t == 9)
+ ASSERT_TRUE(tdm_output_set_dpms(outputs[o], TDM_OUTPUT_DPMS_OFF) == TDM_ERROR_NONE);
+ while(!done)
+ ASSERT_TRUE(tdm_display_handle_events(dpy) == TDM_ERROR_NONE);
+ }
+ }
+}
+
TEST_P(TDMOutput, OutputRemoveVblankHandler)
{
TDM_UT_SKIP_FLAG(has_outputs);
}
}
+TEST_P(TDMVblank, VblankWaitBeforeDpmsOff)
+{
+ TDM_UT_SKIP_FLAG(has_outputs);
+
+ ASSERT_TRUE(TestPrepareOutput() == true);
+ ASSERT_TRUE(TestCreateVblanks() == true);
+
+ for (int v = 0; v < vblank_count; v++) {
+ unsigned int temp = 0;
+ tdm_error ret;
+ tdm_output *output = tdm_vblank_get_output(vblanks[v], &ret);
+ ASSERT_TRUE(ret == TDM_ERROR_NONE);
+
+ if (!ut_tdm_output_is_connected(output))
+ continue;
+
+ ASSERT_TRUE(ut_tdm_output_unset(dpy, output) == true);
+
+ ASSERT_TRUE(tdm_vblank_wait(vblanks[v], 0, 0, 1, _ut_tdm_vblank_cb, &temp) == TDM_ERROR_NONE);
+
+ ASSERT_TRUE(tdm_output_set_dpms(output, TDM_OUTPUT_DPMS_OFF) == TDM_ERROR_NONE);
+
+ while (temp == 0)
+ ASSERT_TRUE(tdm_display_handle_events(dpy) == TDM_ERROR_NONE);
+ }
+}
+
TEST_P(TDMVblank, VblankWaitSetEnableFakeDpmsOff)
{
TDM_UT_SKIP_FLAG(has_outputs);