#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;
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:
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);
+ }
+}