ASSERT_EQ(tdm_output_get_pipe(output, &pipe), TDM_ERROR_NONE);
+ TDM_UT_INFO("* testing for (output: %d, layer: %d)", pipe, l);
+
ASSERT_EQ(tdm_layer_get_buffer_flags(layer, &flags), TDM_ERROR_NONE);
ASSERT_EQ(tdm_output_get_mode(output, &mode), TDM_ERROR_NONE);
ASSERT_NE(mode, NULL);
for (int f = 0; f < format_count; f++) {
retry:
- TDM_UT_INFO("* testing for %c%c%c%c", FOURCC_STR(formats[f]));
+ TDM_UT_INFO("** testing for %c%c%c%c", FOURCC_STR(formats[f]));
ASSERT_EQ(ut_tdm_buffer_create(mode->hdisplay, mode->vdisplay, formats[f], flags | TBM_BO_SCANOUT, true, 3, buffers), true);
/* set buffer & commit for TDM_UT_BACKEND_TEST_CNT times */
ASSERT_EQ(tdm_output_get_pipe(output, &pipe), TDM_ERROR_NONE);
+ TDM_UT_INFO("* testing for (output: %d, layer: %d)", pipe, l);
+
ASSERT_EQ(tdm_layer_get_buffer_flags(layer, &flags), TDM_ERROR_NONE);
ASSERT_EQ(tdm_output_get_mode(output, &mode), TDM_ERROR_NONE);
ASSERT_NE(mode, NULL);
int w = mode->hdisplay - diffw * (f + 1);
int h = mode->vdisplay - diffh * (f + 1);
retry:
- TDM_UT_INFO("* testing for %c%c%c%c", FOURCC_STR(formats[f]));
+ TDM_UT_INFO("** testing for %c%c%c%c", FOURCC_STR(formats[f]));
ASSERT_EQ(ut_tdm_buffer_create(w, h, formats[f], flags | TBM_BO_SCANOUT, true, 3, buffers), true);
/* set buffer & commit for TDM_UT_BACKEND_TEST_CNT times */
ASSERT_EQ(tdm_output_get_pipe(output, &pipe), TDM_ERROR_NONE);
+ TDM_UT_INFO("* testing for (output: %d, layer: %d)", pipe, l);
+
ASSERT_EQ(tdm_layer_get_buffer_flags(layer, &flags), TDM_ERROR_NONE);
ASSERT_EQ(tdm_output_get_mode(output, &mode), TDM_ERROR_NONE);
ASSERT_NE(mode, NULL);
for (int f = 0; f < format_count; f++) {
retry:
- TDM_UT_INFO("* testing for %c%c%c%c", FOURCC_STR(formats[f]));
+ TDM_UT_INFO("** testing for %c%c%c%c", FOURCC_STR(formats[f]));
ASSERT_EQ(ut_tdm_buffer_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, formats[f], flags | TBM_BO_SCANOUT, true, 3, buffers), true);
/* set buffer & commit for TDM_UT_BACKEND_TEST_CNT times */
continue;
}
+ TDM_UT_INFO("* testing for (output: %d, layer: %d)", pipe, l);
+
ASSERT_EQ(tdm_layer_get_buffer_flags(layer, &flags), TDM_ERROR_NONE);
ASSERT_EQ(tdm_output_get_mode(output, &mode), TDM_ERROR_NONE);
ASSERT_NE(mode, NULL);
for (int f = 0; f < format_count; f++) {
retry:
- TDM_UT_INFO("* testing for %c%c%c%c", FOURCC_STR(formats[f]));
+ TDM_UT_INFO("** testing for %c%c%c%c", FOURCC_STR(formats[f]));
ASSERT_EQ(ut_tdm_buffer_create(mode->hdisplay, mode->vdisplay, formats[f], flags | TBM_BO_SCANOUT, true, 3, buffers), true);
tdm_info_layer info;
TDM_UT_PIPE_MSG_NONE,
TDM_UT_PIPE_MSG_REPLY,
TDM_UT_PIPE_MSG_SERVER_READY,
+ TDM_UT_PIPE_MSG_SERVER_FAILED,
TDM_UT_PIPE_MSG_DPMS_ON,
TDM_UT_PIPE_MSG_DPMS_OFF,
TDM_UT_PIPE_MSG_TERMINATE_SERVER,
void TDMClient::TearDown(void)
{
- ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_ON), true);
-
if (vblank)
tdm_client_vblank_destroy(vblank);
if (client)
{
tdm_error ret;
tdm_output *output;
+ tdm_output_dpms dpms;
output = tdm_display_find_output(dpy, "primary", &ret);
TDM_UT_RETURN_FALSE_IF_FAIL(ret == TDM_ERROR_NONE);
TDM_UT_RETURN_FALSE_IF_FAIL(output != NULL);
+ TDM_UT_RETURN_FALSE_IF_FAIL(tdm_output_get_dpms(output, &dpms) == TDM_ERROR_NONE);
+
switch (msg) {
case TDM_UT_PIPE_MSG_DPMS_ON:
- TDM_UT_RETURN_FALSE_IF_FAIL(tdm_output_set_dpms(output, TDM_OUTPUT_DPMS_ON) == TDM_ERROR_NONE);
+ if (dpms != TDM_OUTPUT_DPMS_ON)
+ TDM_UT_RETURN_FALSE_IF_FAIL(tdm_output_set_dpms(output, TDM_OUTPUT_DPMS_ON) == TDM_ERROR_NONE);
break;
case TDM_UT_PIPE_MSG_DPMS_OFF:
- TDM_UT_RETURN_FALSE_IF_FAIL(tdm_output_set_dpms(output, TDM_OUTPUT_DPMS_OFF) == TDM_ERROR_NONE);
+ if (dpms != TDM_OUTPUT_DPMS_OFF)
+ TDM_UT_RETURN_FALSE_IF_FAIL(tdm_output_set_dpms(output, TDM_OUTPUT_DPMS_OFF) == TDM_ERROR_NONE);
break;
default:
break;
int output_count = 0;
dpy = tdm_display_init(&ret);
- TDM_UT_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, done);
- TDM_UT_GOTO_IF_FAIL(dpy != NULL, done);
+ TDM_UT_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, failed);
+ TDM_UT_GOTO_IF_FAIL(dpy != NULL, failed);
- TDM_UT_GOTO_IF_FAIL(tdm_display_get_output_count(dpy, &output_count) == TDM_ERROR_NONE, done);
+ TDM_UT_GOTO_IF_FAIL(tdm_display_get_output_count(dpy, &output_count) == TDM_ERROR_NONE, failed);
for (int o = 0; o < output_count; o++) {
tdm_output *output = tdm_display_get_output(dpy, o, &ret);
- TDM_UT_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, done);
- TDM_UT_GOTO_IF_FAIL(output != NULL, done);
+ TDM_UT_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, failed);
+ TDM_UT_GOTO_IF_FAIL(output != NULL, failed);
if (!ut_tdm_output_is_connected(output))
continue;
- TDM_UT_GOTO_IF_FAIL(ut_tdm_output_prepare(dpy, output, true) == true, done);
+ TDM_UT_GOTO_IF_FAIL(ut_tdm_output_prepare(dpy, output, true) == true, failed);
}
TDM_UT_GOTO_IF_FAIL(_ut_tdm_pipe_write_msg(pipe_parent[1], -1, TDM_UT_PIPE_MSG_SERVER_READY) == true, done);
done:
if (dpy)
tdm_display_deinit(dpy);
+ return;
+
+failed:
+ TDM_UT_GOTO_IF_FAIL(_ut_tdm_pipe_write_msg(pipe_parent[1], -1, TDM_UT_PIPE_MSG_SERVER_FAILED) == true, done);
+ TDM_INFO("*** server failed ***");
+
+ if (dpy)
+ tdm_display_deinit(dpy);
+ return;
+
+}
+
+static void _ut_tdm_client_sig_handler(int sig)
+{
+ TDM_UT_ERR("got signal: %d", sig);
+ kill(TDMClient::server_pid, 9);
+ abort();
}
static pid_t
TDM_UT_GOTO_IF_FAIL(pipe(pipe_child) == 0, failed);
signal(SIGCHLD, SIG_IGN);
+ signal(SIGSEGV, _ut_tdm_client_sig_handler);
+
prctl(PR_SET_PDEATHSIG, SIGHUP);
pid = fork();
ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
ASSERT_EQ(dpms, TDM_OUTPUT_DPMS_OFF);
+
+ ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_ON), true);
+ while (dpms != TDM_OUTPUT_DPMS_ON)
+ ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
}
TEST_P(TDMClient, ClientOutputAddChangeHandlerTwice)
ASSERT_EQ(tdm_client_handle_events_timeout(client, 3000), TDM_ERROR_NONE);
ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
}
+
+ ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_ON), true);
+ while (dpms != TDM_OUTPUT_DPMS_ON)
+ ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
}
TEST_P(TDMClient, ClientOutputRemoveChangeHandlerNullObject)
}
}
-TEST_P(TDMClient, ClientVblankWaitNullObject)
-{
- unsigned int cur_seq = 0;
-
- ASSERT_EQ(tdm_client_vblank_wait(NULL, 1, _ut_tdm_client_vblank_cb3, &cur_seq), TDM_ERROR_INVALID_PARAMETER);
-}
-
-TEST_P(TDMClient, ClientVblankWaitNullOther)
-{
- ASSERT_EQ(PrepareClient(), true);
- ASSERT_EQ(PrepareOutput(), true);
- ASSERT_EQ(PrepareVblank(), true);
-
- ASSERT_EQ(tdm_client_vblank_wait(vblank, 1, NULL, NULL), TDM_ERROR_INVALID_PARAMETER);
-}
-
-TEST_P(TDMClient, ClientVblankWaitDpmsOff)
-{
- tdm_output_dpms dpms = (tdm_output_dpms)TDM_UT_INVALID_VALUE;
-
- ASSERT_EQ(PrepareClient(), true);
- ASSERT_EQ(PrepareOutput(), true);
- ASSERT_EQ(PrepareVblank(), true);
-
- ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_OFF), true);
- while (dpms != TDM_OUTPUT_DPMS_OFF)
- ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
- ASSERT_EQ(dpms, TDM_OUTPUT_DPMS_OFF);
-
- ASSERT_EQ(tdm_client_vblank_wait(vblank, 1, _ut_tdm_client_vblank_cb2, NULL), TDM_ERROR_DPMS_OFF);
-}
-
-TEST_P(TDMClient, ClientVblankWaitSetEnableFakeDpmsOff)
-{
- tdm_output_dpms dpms = (tdm_output_dpms)TDM_UT_INVALID_VALUE;
- bool done;
-
- ASSERT_EQ(PrepareClient(), true);
- ASSERT_EQ(PrepareOutput(), true);
- ASSERT_EQ(PrepareVblank(), true);
-
- ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_OFF), true);
- while (dpms != TDM_OUTPUT_DPMS_OFF)
- ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
-
- ASSERT_EQ(tdm_client_vblank_set_enable_fake(vblank, 1), TDM_ERROR_NONE);
-
- done = false;
- ASSERT_EQ(tdm_client_vblank_wait(vblank, 1, _ut_tdm_client_vblank_cb2, &done), TDM_ERROR_NONE);
-
- while (!done)
- ASSERT_EQ(tdm_client_handle_events_timeout(client, 3000), TDM_ERROR_NONE);
-}
-
TEST_P(TDMClient, ClientVblankWaitSetOffset)
{
bool done;
#endif
+TEST_P(TDMClient, ClientVblankWaitNullObject)
+{
+ unsigned int cur_seq = 0;
+
+ ASSERT_EQ(tdm_client_vblank_wait(NULL, 1, _ut_tdm_client_vblank_cb3, &cur_seq), TDM_ERROR_INVALID_PARAMETER);
+}
+
+TEST_P(TDMClient, ClientVblankWaitNullOther)
+{
+ ASSERT_EQ(PrepareClient(), true);
+ ASSERT_EQ(PrepareOutput(), true);
+ ASSERT_EQ(PrepareVblank(), true);
+
+ ASSERT_EQ(tdm_client_vblank_wait(vblank, 1, NULL, NULL), TDM_ERROR_INVALID_PARAMETER);
+}
+
+TEST_P(TDMClient, ClientVblankWaitDpmsOff)
+{
+ tdm_output_dpms dpms = (tdm_output_dpms)TDM_UT_INVALID_VALUE;
+
+ ASSERT_EQ(PrepareClient(), true);
+ ASSERT_EQ(PrepareOutput(), true);
+ ASSERT_EQ(PrepareVblank(), true);
+
+ ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_OFF), true);
+ while (dpms != TDM_OUTPUT_DPMS_OFF)
+ ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
+ ASSERT_EQ(dpms, TDM_OUTPUT_DPMS_OFF);
+
+ ASSERT_EQ(tdm_client_vblank_wait(vblank, 1, _ut_tdm_client_vblank_cb2, NULL), TDM_ERROR_DPMS_OFF);
+
+ ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_ON), true);
+ while (dpms != TDM_OUTPUT_DPMS_ON)
+ ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
+}
+
+TEST_P(TDMClient, ClientVblankWaitSetEnableFakeDpmsOff)
+{
+ tdm_output_dpms dpms = (tdm_output_dpms)TDM_UT_INVALID_VALUE;
+ bool done;
+
+ ASSERT_EQ(PrepareClient(), true);
+ ASSERT_EQ(PrepareOutput(), true);
+ ASSERT_EQ(PrepareVblank(), true);
+
+ ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_OFF), true);
+ while (dpms != TDM_OUTPUT_DPMS_OFF)
+ ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
+
+ ASSERT_EQ(tdm_client_vblank_set_enable_fake(vblank, 1), TDM_ERROR_NONE);
+
+ done = false;
+ ASSERT_EQ(tdm_client_vblank_wait(vblank, 1, _ut_tdm_client_vblank_cb2, &done), TDM_ERROR_NONE);
+
+ while (!done)
+ ASSERT_EQ(tdm_client_handle_events_timeout(client, 3000), TDM_ERROR_NONE);
+
+ ASSERT_EQ(_ut_tdm_pipe_write_msg(pipe_child[1], pipe_parent[0], TDM_UT_PIPE_MSG_DPMS_ON), true);
+ while (dpms != TDM_OUTPUT_DPMS_ON)
+ ASSERT_EQ(tdm_client_output_get_dpms(output, &dpms), TDM_ERROR_NONE);
+}
+
#ifdef TDM_UT_TEST_WITH_PARAMS
INSTANTIATE_TEST_CASE_P(TDMClientParams,
TDMClient,