utests: fix errors in the vblank's test cases 42/160042/3
authorKonstantin Drabeniuk <k.drabeniuk@samsung.com>
Tue, 14 Nov 2017 08:15:41 +0000 (10:15 +0200)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 14 Nov 2017 09:49:37 +0000 (09:49 +0000)
- set mode and dpms only for the TDMVblankWait's test cases
- make commit for primary layer

Change-Id: I3953fbdec743e7177b2a7725f223601bb1f5b47b
Signed-off-by: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
utests/src/ut_tdm_vblank.cpp

index cde635f..746d4c7 100644 (file)
 
 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);