DSRenderEngineDaliImpl-test: Add a TC to test texture mapping. 39/241739/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Fri, 31 Jul 2020 06:25:24 +0000 (15:25 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 20 Aug 2020 10:09:56 +0000 (19:09 +0900)
Change-Id: I97fcf518b9ea0cbd3c2a60655e524d6dd5fd516f
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
tests/DSRenderEngineDaliImpl-test.cpp

index f03edfe..6f35f9f 100644 (file)
@@ -5,6 +5,15 @@
 #include "DSEventLoop.h"
 #include <Ecore.h>
 
+#include "DSDisplayDeviceTDMImpl.h"
+#include "DSDisplayDeviceOutputTDMImpl.h"
+
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
+
+#include <unistd.h>
+
+//#include <Eldbus.h>
 
 using namespace display_server;
 
@@ -26,11 +35,42 @@ public:
                EXPECT_TRUE(timer != nullptr);
 
                __eventLoop->run();
+
+               setenv("XDG_RUNTIME_DIR", "/run", 1);
+               setenv("TBM_DISPLAY_SERVER", "1", 1);
        }
        void TearDown(void) override
        {
                __eventLoop->quit();
                DSEventLoop::releaseInstance();
+
+               unsetenv("XDG_RUNTIME_DIR");
+               unsetenv("TBM_DISPLAY_SERVER");
+       }
+
+       tbm_surface_h createTbmTexture(int w, int h, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+       {
+               tbm_surface_h tbmSurface;
+               tbm_surface_info_s tbmSurface_info;
+
+               tbmSurface = tbm_surface_create(w, h, TBM_FORMAT_ARGB8888);
+               tbm_surface_map(tbmSurface, TBM_SURF_OPTION_WRITE | TBM_SURF_OPTION_READ, &tbmSurface_info);
+
+               unsigned char *ptr = tbmSurface_info.planes[0].ptr;
+               for (int j = 0; j < h; j++)
+               {
+                       for (int i = 0; i < w; i++)
+                       {
+                               ptr[0] = r;
+                               ptr[1] = g;
+                               ptr[2] = b;
+                               ptr[3] = a;
+                               ptr += 4;
+                       }
+               }
+               tbm_surface_unmap(tbmSurface);
+
+               return tbmSurface;
        }
 
 private:
@@ -85,3 +125,69 @@ TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderFrame)
        EXPECT_TRUE(renderView->setBuffer(buffer));
        EXPECT_TRUE(renderEngine->renderFrame());
 }
+
+TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderOnlyOneFrame)
+{
+       std::unique_ptr<IDSDisplayDevice> displayDevice = std::make_unique<DSDisplayDeviceTDMImpl>();
+       std::list<std::shared_ptr<IDSDisplayDeviceOutput>> outputList = displayDevice->getOutputList();
+       EXPECT_TRUE(outputList.size() != 0);
+
+       IDSDisplayDeviceOutput::ConnectorType connType;
+       IDSDisplayDeviceOutput::ConnectState connState;
+       std::shared_ptr<IDSDisplayDeviceHWC> deviceHWC;
+       std::shared_ptr<IDSDisplayDeviceHWCWindow> deviceHWCWindow;
+
+       //eldbus_init();
+
+       for (std::shared_ptr<IDSDisplayDeviceOutput> output : outputList) {
+               connType = output->getConnectType();
+               EXPECT_TRUE(connType <= IDSDisplayDeviceOutput::TYPE_DSI);
+               connState = output->getConnectState();
+               EXPECT_TRUE(connState <= IDSDisplayDeviceOutput::STATE_MODESET);
+               if (connState == IDSDisplayDeviceOutput::STATE_DISCONNECTED)
+                       continue;
+
+               auto bestMode = (output->getAvailableModes()).front();
+               EXPECT_TRUE(output->setMode(bestMode) == true);
+               EXPECT_TRUE(output->getMode() == bestMode);
+
+               deviceHWC = output->getHWC();
+               EXPECT_TRUE(deviceHWC != nullptr);
+
+               auto bufferQueue = deviceHWC->getTargetBufferQueue();
+               EXPECT_TRUE(deviceHWC != nullptr);
+
+               auto renderEngine = std::make_unique<DSRenderEngineDaliImpl>(bufferQueue);
+               EXPECT_TRUE(renderEngine != nullptr);
+               auto window = std::make_shared<DSWindow>();
+               EXPECT_TRUE(window != nullptr);
+               auto renderView = renderEngine->makeRenderView(window);
+               EXPECT_TRUE(renderView != nullptr);
+
+               deviceHWCWindow = deviceHWC->makeHWCWindow(window);
+               EXPECT_TRUE(deviceHWC != nullptr);
+               EXPECT_TRUE(deviceHWC->addVisibleHWCWindow(deviceHWCWindow));
+
+               tbm_surface_h tbmTexture = DSRenderEngineDaliTest::createTbmTexture(
+                                                                       100, 100, 255, 0, 0, 255);
+               EXPECT_TRUE(tbmTexture != nullptr);
+
+               auto imageSourceBuffer = std::make_shared<DSBufferTBMImpl> (100, 100, IDSBuffer::FORMAT_ARGB8888, tbmTexture);
+               EXPECT_TRUE(renderView->setBuffer(imageSourceBuffer));
+               EXPECT_TRUE(renderEngine->renderFrame());
+
+               EXPECT_TRUE(bufferQueue->canAcquireBuffer(true));
+
+               auto buffer = bufferQueue->acquireBuffer();
+               EXPECT_TRUE(buffer != nullptr);
+
+               tbm_surface_internal_capture_buffer((tbm_surface_h)buffer->getNativeBuffer(), "/home/owner/media/OSA", "redImg", "png");
+
+               EXPECT_TRUE(deviceHWC->setTargetBuffer(buffer));
+
+               // commit
+               EXPECT_TRUE(deviceHWC->commit());
+
+               usleep(10000000);
+       }
+}