From 0bf830de4e5b74b0e7f5374ab0220dc81e95950a Mon Sep 17 00:00:00 2001 From: Konstantin Drabeniuk Date: Tue, 14 Nov 2017 10:15:41 +0200 Subject: [PATCH] utests: fix errors in the vblank's test cases - set mode and dpms only for the TDMVblankWait's test cases - make commit for primary layer Change-Id: I3953fbdec743e7177b2a7725f223601bb1f5b47b Signed-off-by: Konstantin Drabeniuk --- utests/src/ut_tdm_vblank.cpp | 128 ++++++++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 43 deletions(-) diff --git a/utests/src/ut_tdm_vblank.cpp b/utests/src/ut_tdm_vblank.cpp index cde635f..746d4c7 100644 --- a/utests/src/ut_tdm_vblank.cpp +++ b/utests/src/ut_tdm_vblank.cpp @@ -38,28 +38,20 @@ class TDMVblankWithoutCreating: public ::testing::Test { protected: - tbm_bufmgr bufmgr; - tdm_display *dpy; - int output_count; - bool has_output; - tdm_output *connected_output; - const tdm_output_mode *preferred_mode; - tdm_output *disconnected_output; - tdm_output *default_output; + tbm_bufmgr bufmgr = NULL; + tdm_display *dpy = NULL; + int output_count = 0; + bool has_output = 0; + tdm_output *connected_output = NULL; + const tdm_output_mode *preferred_mode = NULL; + tdm_output *disconnected_output = NULL; + tdm_output *default_output = NULL; void SetUp(void) { tdm_output *output; tdm_output_conn_status status; tdm_error error = TDM_ERROR_NONE; - bufmgr = NULL; - dpy = NULL; - output_count = 0; - connected_output = NULL; - connected_output = NULL; - default_output = NULL; - preferred_mode = NULL; - setenv("TDM_DLOG", "1", 1); setenv("XDG_RUNTIME_DIR", ".", 1); setenv("TBM_DLOG", "1", 1); @@ -110,12 +102,6 @@ protected: if(output_modes[i].type & TDM_OUTPUT_MODE_TYPE_PREFERRED) { preferred_mode = &output_modes[i]; - error = tdm_output_set_mode(connected_output, preferred_mode); - ASSERT_TRUE(error == TDM_ERROR_NONE); - - error = tdm_output_set_dpms(connected_output, TDM_OUTPUT_DPMS_ON); - ASSERT_TRUE(error == TDM_ERROR_NONE); - default_output = connected_output; return; @@ -129,7 +115,6 @@ protected: { if (connected_output) tdm_output_set_dpms(connected_output, TDM_OUTPUT_DPMS_OFF); - if (bufmgr) tbm_bufmgr_deinit(bufmgr); if (dpy) @@ -142,38 +127,95 @@ protected: class TDMVblank: public TDMVblankWithoutCreating { protected: - tdm_vblank *con_output_vblank; - tdm_vblank *discon_output_vblank; - tdm_output *default_vblank; + tdm_vblank *con_output_vblank = NULL; + tdm_vblank *discon_output_vblank = NULL; + tdm_output *default_vblank = NULL; + int setModeAndDpms = 0; + tbm_surface_h buffer = NULL; + tdm_layer *layer = NULL; void SetUp(void) { tdm_error error; - con_output_vblank = NULL; - discon_output_vblank = NULL; - default_vblank = NULL; TDMVblankWithoutCreating::SetUp(); + if (connected_output && setModeAndDpms) { + int primary_index; + tdm_info_layer info = {0}; + + error = tdm_output_set_mode(connected_output, preferred_mode); + ASSERT_TRUE(error == TDM_ERROR_NONE); + + error = tdm_output_get_primary_index(connected_output, &primary_index); + ASSERT_TRUE(error == TDM_ERROR_NONE); + + layer = tdm_output_get_layer(connected_output, primary_index, &error); + ASSERT_TRUE(error == TDM_ERROR_NONE); + ASSERT_TRUE(layer != NULL); + + info.src_config.size.h = preferred_mode->hdisplay; + info.src_config.size.v = preferred_mode->vdisplay; + info.src_config.pos.x = 0; + info.src_config.pos.y = 0; + info.src_config.pos.w = preferred_mode->hdisplay; + info.src_config.pos.h = preferred_mode->vdisplay; + info.src_config.format = TBM_FORMAT_ARGB8888; + info.dst_pos.x = 0; + info.dst_pos.y = 0; + info.dst_pos.w = preferred_mode->hdisplay; + info.dst_pos.h = preferred_mode->vdisplay; + info.transform = TDM_TRANSFORM_NORMAL; + + error = tdm_layer_set_info(layer, &info); + ASSERT_TRUE(error == TDM_ERROR_NONE); + + error = tdm_output_set_dpms(connected_output, TDM_OUTPUT_DPMS_ON); + ASSERT_TRUE(error == TDM_ERROR_NONE); + + buffer = tbm_surface_internal_create_with_flags(preferred_mode->hdisplay, + preferred_mode->vdisplay, + TBM_FORMAT_ARGB8888, + TBM_BO_SCANOUT); + ASSERT_TRUE(buffer != NULL); + + error = tdm_layer_set_buffer(layer, buffer); + ASSERT_TRUE(error == TDM_ERROR_NONE); + + error = tdm_output_commit(connected_output, 0, NULL, NULL); + ASSERT_TRUE(error == TDM_ERROR_NONE); + /* TODO: use a commit handler instead of an usleep to wait when + * commit will be applied */ + usleep(20000); + } + if (disconnected_output) { discon_output_vblank = tdm_vblank_create(dpy, disconnected_output, &error); EXPECT_TRUE(discon_output_vblank != NULL); EXPECT_TRUE(error == TDM_ERROR_NONE); + default_vblank = discon_output_vblank; } if (connected_output) { con_output_vblank = tdm_vblank_create(dpy, connected_output, &error); EXPECT_TRUE(con_output_vblank != NULL); EXPECT_TRUE(error == TDM_ERROR_NONE); - } - - if (connected_output) - default_vblank = discon_output_vblank; - else default_vblank = con_output_vblank; + } ASSERT_TRUE(default_vblank != NULL); } + + void TearDown(void) + { + if (buffer) { + tdm_layer_unset_buffer(layer); + tdm_output_commit(connected_output, 0, NULL, NULL); + tbm_surface_destroy(buffer); + } + + TDMVblankWithoutCreating::TearDown(); + } }; class TDMVblankWait : public TDMVblank { @@ -189,15 +231,15 @@ public: utVblankHandlerIsCalled = 1; } - int utWaitVblankThreadHndlResult; + int utWaitVblankThreadHndlResult = -1; friend void *UtWaitVblankThreadHndl(void *ptr); - int utWaitVblankSeqThreadHndlResult; + int utWaitVblankSeqThreadHndlResult = -1; friend void *UtWaitVblankSeqThreadHndl(void *ptr); private: - int epFd; - int timerFd; - int tdmFd; + int epFd = -1; + int timerFd = -1; + int tdmFd = -1; static const int timeLimitSec = 1; protected: @@ -205,12 +247,9 @@ protected: { struct epoll_event ep; - epFd = -1; - timerFd = -1; utVblankHandlerIsCalled = 0; - utWaitVblankThreadHndlResult = -1; - utWaitVblankSeqThreadHndlResult = -1; + setModeAndDpms = 1; TDMVblank::SetUp(); epFd = epoll_create1(0); @@ -1296,6 +1335,9 @@ TEST_F(TDMVblankWait, VblankWaitSuccessChangeDpms) if (!con_output_vblank) return; + error = tdm_vblank_set_enable_fake(con_output_vblank, 0); + ASSERT_TRUE(error == TDM_ERROR_NONE); + error = tdm_vblank_ignore_global_fps(con_output_vblank, 0); ASSERT_TRUE(error == TDM_ERROR_NONE); -- 2.7.4