From 5386777db17fb5cae23d590784931ce4aa15e4d6 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Thu, 9 Jul 2020 20:38:35 +0900 Subject: [PATCH] DSOutput: change the DSOutput into IDSOutput make the DSOutput be the interface for hiding the internal information like IDSDisplayDeviceOutput interface. Change-Id: I48f28eea03e3179e6bb221401c901c7c3f7d77d8 --- samples/exampleCompositor.cpp | 10 ++--- src/DSCompositor/DSCompositor.h | 6 +-- src/DSDisplayArea/DSDisplayArea.cpp | 8 ++-- src/DSDisplayArea/DSDisplayArea.h | 6 +-- src/DSDisplayArea/DSDisplayAreaPrivate.h | 10 ++--- src/DSOutput/DSOutput.cpp | 28 -------------- src/DSOutput/DSOutput.h | 26 ------------- src/DSOutput/DSOutputImpl.cpp | 64 ++++++++++++++++++++++++++++++++ src/DSOutput/DSOutputImpl.h | 30 +++++++++++++++ src/DSOutput/IDSOutput.h | 21 +++++++++++ src/meson.build | 2 +- tests/DSCanvas-test.cpp | 8 +++- tests/DSCompositor-test.cpp | 4 +- tests/DSDisplayArea-test.cpp | 12 +++++- tests/DSOutput-test.cpp | 28 -------------- tests/DSOutputImpl-test.cpp | 36 ++++++++++++++++++ tests/meson.build | 2 +- 17 files changed, 192 insertions(+), 109 deletions(-) delete mode 100644 src/DSOutput/DSOutput.cpp delete mode 100644 src/DSOutput/DSOutput.h create mode 100644 src/DSOutput/DSOutputImpl.cpp create mode 100644 src/DSOutput/DSOutputImpl.h create mode 100644 src/DSOutput/IDSOutput.h delete mode 100644 tests/DSOutput-test.cpp create mode 100644 tests/DSOutputImpl-test.cpp diff --git a/samples/exampleCompositor.cpp b/samples/exampleCompositor.cpp index a53ea35..6fd2a2e 100644 --- a/samples/exampleCompositor.cpp +++ b/samples/exampleCompositor.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -35,8 +35,8 @@ using namespace display_server; // DSCompositor listen signals. OutputAdd/Remove/ResolutionSet and InputAdd/Remove. // compositor->connectSignal(DSOuptut::ADD_SIGNAL, DSCompositor::OutputAdd); -// compositor->connectSignal(DSOutput::REMOVE_SIGNAL, DSCompositor::OutputRemove); -// compositor->connectSignal(DSOutput::RESOLUTION_SET_SIGNAL, DSCompositor::OutputResolutionSet); +// compositor->connectSignal(IDSOutput::REMOVE_SIGNAL, DSCompositor::OutputRemove); +// compositor->connectSignal(IDSOutput::RESOLUTION_SET_SIGNAL, DSCompositor::OutputResolutionSet); // compositor->connectSignal(DSInput::ADD_SIGNAL, DSCompositor::InputAdd); // compositor->connectSignal(DSInput::REMOVE_SIGNAL, DSCompositor::InputRemove); @@ -69,7 +69,7 @@ public: __canvas->attachDisplayArea(__displayArea); } - void _onOutputAdded(std::shared_ptr output) override + void _onOutputAdded(std::shared_ptr output) override { // set the resolution. output->applyResolutionAuto(); @@ -80,7 +80,7 @@ public: __displayArea->setSize(output->getResolutionWidth(), output->getResolutionHeight()); } - void _onOutputRemoved(std::shared_ptr output) override + void _onOutputRemoved(std::shared_ptr output) override { __displayArea.reset(); // delete shared_ptr } diff --git a/src/DSCompositor/DSCompositor.h b/src/DSCompositor/DSCompositor.h index 5963cce..4d9ae43 100644 --- a/src/DSCompositor/DSCompositor.h +++ b/src/DSCompositor/DSCompositor.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include @@ -24,8 +24,8 @@ public: protected: virtual void _onPrepareCanvas() = 0; - virtual void _onOutputAdded(std::shared_ptr output) = 0; - virtual void _onOutputRemoved(std::shared_ptr output) = 0; + virtual void _onOutputAdded(std::shared_ptr output) = 0; + virtual void _onOutputRemoved(std::shared_ptr output) = 0; virtual void _onInputAdded(std::shared_ptr input) = 0; virtual void _onInputRemoved(std::shared_ptr input) = 0; }; diff --git a/src/DSDisplayArea/DSDisplayArea.cpp b/src/DSDisplayArea/DSDisplayArea.cpp index 52c4e0a..32c931f 100644 --- a/src/DSDisplayArea/DSDisplayArea.cpp +++ b/src/DSDisplayArea/DSDisplayArea.cpp @@ -5,7 +5,7 @@ namespace display_server { -DSDisplayArea::DSDisplayArea(std::shared_ptr output) +DSDisplayArea::DSDisplayArea(std::shared_ptr output) : _d_ptr(std::make_unique(this, output)) {} @@ -46,14 +46,14 @@ int DSDisplayArea::getHeight() return priv->getHeight(); } -std::shared_ptr DSDisplayArea::getOutput() +std::shared_ptr DSDisplayArea::getOutput() { DS_GET_PRIV(DSDisplayArea); return priv->getOutput(); } -DSDisplayAreaPrivate::DSDisplayAreaPrivate(DSDisplayArea *p_ptr, std::shared_ptr output) +DSDisplayAreaPrivate::DSDisplayAreaPrivate(DSDisplayArea *p_ptr, std::shared_ptr output) : DSObjectPrivate(p_ptr), __p_ptr(p_ptr), __output(output), @@ -98,7 +98,7 @@ int DSDisplayAreaPrivate::getHeight() return __height; } -std::shared_ptr DSDisplayAreaPrivate::getOutput() +std::shared_ptr DSDisplayAreaPrivate::getOutput() { return __output; } diff --git a/src/DSDisplayArea/DSDisplayArea.h b/src/DSDisplayArea/DSDisplayArea.h index 6c1f1bf..84543c4 100644 --- a/src/DSDisplayArea/DSDisplayArea.h +++ b/src/DSDisplayArea/DSDisplayArea.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include namespace display_server @@ -14,14 +14,14 @@ class DSDisplayArea : public DSObject { DS_PIMPL_USE_PRIVATE(DSDisplayArea); public: - explicit DSDisplayArea(std::shared_ptr output); + explicit DSDisplayArea(std::shared_ptr output); virtual ~DSDisplayArea(); bool setPosition(int x, int y); bool setSize(int width, int height); int getWidth(); int getHeight(); - std::shared_ptr getOutput(); + std::shared_ptr getOutput(); }; } diff --git a/src/DSDisplayArea/DSDisplayAreaPrivate.h b/src/DSDisplayArea/DSDisplayAreaPrivate.h index 761c03b..e397b2d 100644 --- a/src/DSDisplayArea/DSDisplayAreaPrivate.h +++ b/src/DSDisplayArea/DSDisplayAreaPrivate.h @@ -2,7 +2,7 @@ #define __DS_DISPLAY_AREA_PRIVATE_H__ #include "DSDisplayArea.h" -#include +#include #include namespace display_server @@ -13,7 +13,7 @@ class DSDisplayAreaPrivate : public DSObjectPrivate DS_PIMPL_USE_PUBLIC(DSDisplayArea); public: DSDisplayAreaPrivate() = delete; - DSDisplayAreaPrivate(DSDisplayArea *p_ptr, std::shared_ptr output); + DSDisplayAreaPrivate(DSDisplayArea *p_ptr, std::shared_ptr output); virtual ~DSDisplayAreaPrivate(); bool setPosition(int x, int y); @@ -21,11 +21,11 @@ public: int getWidth(); int getHeight(); - bool setOutput(std::shared_ptr output); - std::shared_ptr getOutput(); + bool setOutput(std::shared_ptr output); + std::shared_ptr getOutput(); private: - std::shared_ptr __output; + std::shared_ptr __output; int __x, __y; int __width, __height; }; diff --git a/src/DSOutput/DSOutput.cpp b/src/DSOutput/DSOutput.cpp deleted file mode 100644 index 095fc9c..0000000 --- a/src/DSOutput/DSOutput.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "DSOutput.h" - -namespace display_server -{ -DSOutput::DSOutput() - : __resolutionWidth{0}, - __resolutionHeight{0} -{} - -DSOutput::~DSOutput() -{} - -int DSOutput::getResolutionWidth() -{ - return __resolutionWidth; -} - -int DSOutput::getResolutionHeight() -{ - return __resolutionHeight; -} - -bool DSOutput::applyResolutionAuto() -{ - return false; -} - -} // namespace display_server diff --git a/src/DSOutput/DSOutput.h b/src/DSOutput/DSOutput.h deleted file mode 100644 index 2587ca6..0000000 --- a/src/DSOutput/DSOutput.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _DSOUTPUT_H_ -#define _DSOUTPUT_H_ - -#include - -namespace display_server -{ - -class DSOutput -{ -public: - DSOutput(); - virtual ~DSOutput(); - - int getResolutionWidth(); - int getResolutionHeight(); - bool applyResolutionAuto(); - -private: - int __resolutionWidth; - int __resolutionHeight; -}; - -} - -#endif diff --git a/src/DSOutput/DSOutputImpl.cpp b/src/DSOutput/DSOutputImpl.cpp new file mode 100644 index 0000000..ac43483 --- /dev/null +++ b/src/DSOutput/DSOutputImpl.cpp @@ -0,0 +1,64 @@ +#include "DSOutputImpl.h" +#include "DSDebugLog.h" + +namespace display_server +{ + +DSOutputImpl::DSOutputImpl(std::shared_ptr displayDeviceOutput) + : __resolutionWidth{0}, + __resolutionHeight{0}, + __displayDeviceOutput{displayDeviceOutput} +{} + +DSOutputImpl::~DSOutputImpl() +{} + +int DSOutputImpl::getResolutionWidth() +{ + return __resolutionWidth; +} + +int DSOutputImpl::getResolutionHeight() +{ + return __resolutionHeight; +} + +bool DSOutputImpl::applyResolutionAuto() +{ + if (!__displayDeviceOutput) { + DSLOG_ERR("DSOutputImpl", "__displayDeviceOutput is null."); + return false; + } + + std::list> modes = __displayDeviceOutput->getAvailableModes(); + if (modes.empty()) { + DSLOG_ERR("DSOutputImpl", "modes are empty."); + return false; + } + + auto bestMode = modes.front(); + if (!bestMode) { + DSLOG_ERR("DSOutputImpl", "bestMode is null."); + return false; + } + + if (!__displayDeviceOutput->setMode(bestMode)) { + DSLOG_ERR("DSOutputImpl", "output->setMode(bestMode) fails."); + return false; + } + + return true; +} + +std::shared_ptr DSOutputImpl::getDisplayBufferQueue() +{ + std::shared_ptr displayDeviceHWC = __displayDeviceOutput->getHWC(); + if (!displayDeviceHWC) { + DSLOG_ERR("DSOutputImpl", "displayDeviceHWC is NULL."); + return nullptr; + } + + return displayDeviceHWC->getTargetBufferQueue(); +} + +} // namespace display_server diff --git a/src/DSOutput/DSOutputImpl.h b/src/DSOutput/DSOutputImpl.h new file mode 100644 index 0000000..a16c546 --- /dev/null +++ b/src/DSOutput/DSOutputImpl.h @@ -0,0 +1,30 @@ +#ifndef __I_DS_OUTPUT_IMPL_H__ +#define __I_DS_OUTPUT_IMPL_H__ + +#include "IDSOutput.h" +#include "IDSDisplayDeviceOutput.h" + +namespace display_server +{ + +class DSOutputImpl : public IDSOutput +{ +public: + DSOutputImpl(std::shared_ptr displayDeviceOutput); + ~DSOutputImpl(); + + int getResolutionWidth() override; + int getResolutionHeight() override; + bool applyResolutionAuto() override; + + std::shared_ptr getDisplayBufferQueue(); + +private: + int __resolutionWidth; + int __resolutionHeight; + std::shared_ptr __displayDeviceOutput; +}; + +} + +#endif \ No newline at end of file diff --git a/src/DSOutput/IDSOutput.h b/src/DSOutput/IDSOutput.h new file mode 100644 index 0000000..c3c8fc5 --- /dev/null +++ b/src/DSOutput/IDSOutput.h @@ -0,0 +1,21 @@ +#ifndef __I_DS_OUTPUT_H__ +#define __I_DS_OUTPUT_H__ + +#include + +namespace display_server +{ + +class IDSOutput +{ +public: + virtual ~IDSOutput() = default; + + virtual int getResolutionWidth() = 0; + virtual int getResolutionHeight() = 0; + virtual bool applyResolutionAuto() = 0; +}; + +} + +#endif \ No newline at end of file diff --git a/src/meson.build b/src/meson.build index 7b24fbd..c1063be 100644 --- a/src/meson.build +++ b/src/meson.build @@ -24,7 +24,7 @@ libds_srcs = [ 'DSObject/DSObject.h', 'DSObject/DSObjectPrivate.cpp', 'DSObject/DSObjectPrivate.h', - 'DSOutput/DSOutput.cpp', + 'DSOutput/DSOutputImpl.cpp', 'DSPolicyArea/DSPolicyArea.cpp', 'DSProperty/DSProperty.cpp', 'DSProperty/DSProperty.h', diff --git a/tests/DSCanvas-test.cpp b/tests/DSCanvas-test.cpp index 3850ba5..5256163 100644 --- a/tests/DSCanvas-test.cpp +++ b/tests/DSCanvas-test.cpp @@ -1,5 +1,9 @@ #include "libds-tests.h" #include "DSCanvas.h" +#include "IDSOutput.h" +#include "DSOutputImpl.h" +#include "IDSDisplayDeviceOutput.h" +#include "DSDisplayDeviceOutputTDMImpl.h" using namespace display_server; @@ -31,7 +35,9 @@ TEST_F(DSCanvasTest, displayArea_Negetive1) { std::unique_ptr canvas = std::make_unique(); EXPECT_TRUE(canvas != nullptr); - auto output = std::make_shared(); + auto displayDeviceOutput = std::make_shared(); + EXPECT_TRUE(displayDeviceOutput != nullptr); + auto output = std::make_shared(displayDeviceOutput); EXPECT_TRUE(output != nullptr); auto displayArea = std::make_shared(output); EXPECT_TRUE(displayArea != nullptr); diff --git a/tests/DSCompositor-test.cpp b/tests/DSCompositor-test.cpp index 8404f23..15bf9fc 100644 --- a/tests/DSCompositor-test.cpp +++ b/tests/DSCompositor-test.cpp @@ -27,10 +27,10 @@ public: void _onPrepareCanvas() override {} - void _onOutputAdded(std::shared_ptr output) override + void _onOutputAdded(std::shared_ptr output) override {} - void _onOutputRemoved(std::shared_ptr output) override + void _onOutputRemoved(std::shared_ptr output) override {} void _onInputAdded(std::shared_ptr input) override diff --git a/tests/DSDisplayArea-test.cpp b/tests/DSDisplayArea-test.cpp index 1361d83..2cbc48c 100644 --- a/tests/DSDisplayArea-test.cpp +++ b/tests/DSDisplayArea-test.cpp @@ -1,5 +1,9 @@ #include "libds-tests.h" #include "DSDisplayArea.h" +#include "IDSOutput.h" +#include "DSOutputImpl.h" +#include "IDSDisplayDeviceOutput.h" +#include "DSDisplayDeviceOutputTDMImpl.h" using namespace display_server; @@ -19,7 +23,9 @@ public: TEST_F(DSDisplayAreaTest, NewDSDisplayArea) { - auto output = std::make_shared(); + auto displayDeviceOutput = std::make_shared(); + EXPECT_TRUE(displayDeviceOutput != nullptr); + auto output = std::make_shared(displayDeviceOutput); EXPECT_TRUE(output != nullptr); auto displayArea = std::make_unique(output); @@ -28,7 +34,9 @@ TEST_F(DSDisplayAreaTest, NewDSDisplayArea) TEST_F(DSDisplayAreaTest, BasicMethods) { - auto output = std::make_shared(); + auto displayDeviceOutput = std::make_shared(); + EXPECT_TRUE(displayDeviceOutput != nullptr); + auto output = std::make_shared(displayDeviceOutput); EXPECT_TRUE(output != nullptr); auto displayArea = std::make_unique(output); diff --git a/tests/DSOutput-test.cpp b/tests/DSOutput-test.cpp deleted file mode 100644 index 9ac5a15..0000000 --- a/tests/DSOutput-test.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "libds-tests.h" -#include "DSOutput.h" - -using namespace display_server; - -class DSOutputTest : public ::testing::Test -{ -public: - void SetUp(void) override - {} - void TearDown(void) override - {} -}; - -TEST_F(DSOutputTest, NewDSOutput) -{ - std::shared_ptr output = std::make_shared(); - EXPECT_TRUE(output != nullptr); -} - -TEST_F(DSOutputTest, BasicMethods) -{ - DSOutput output; - - EXPECT_TRUE(output.getResolutionWidth() != 0); - EXPECT_TRUE(output.getResolutionHeight() != 0); - EXPECT_TRUE(output.applyResolutionAuto() == true); -} diff --git a/tests/DSOutputImpl-test.cpp b/tests/DSOutputImpl-test.cpp new file mode 100644 index 0000000..6e49d3f --- /dev/null +++ b/tests/DSOutputImpl-test.cpp @@ -0,0 +1,36 @@ +#include "libds-tests.h" +#include "IDSOutput.h" +#include "DSOutputImpl.h" +#include "IDSDisplayDeviceOutput.h" +#include "DSDisplayDeviceOutputTDMImpl.h" + +using namespace display_server; + +class DSOutputTest : public ::testing::Test +{ +public: + void SetUp(void) override + {} + void TearDown(void) override + {} +}; + +TEST_F(DSOutputTest, NewDSOutput) +{ + auto displayDeviceOutput = std::make_shared(); + EXPECT_TRUE(displayDeviceOutput != nullptr); + auto output = std::make_shared(displayDeviceOutput); + EXPECT_TRUE(output != nullptr); +} + +TEST_F(DSOutputTest, BasicMethods) +{ + auto displayDeviceOutput = std::make_shared(); + EXPECT_TRUE(displayDeviceOutput != nullptr); + auto output = std::make_shared(displayDeviceOutput); + EXPECT_TRUE(output != nullptr); + + EXPECT_TRUE(output->getResolutionWidth() != 0); + EXPECT_TRUE(output->getResolutionHeight() != 0); + EXPECT_TRUE(output->applyResolutionAuto() == true); +} diff --git a/tests/meson.build b/tests/meson.build index a0991d3..08ee43a 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -6,7 +6,7 @@ libds_tests_srcs = [ 'DSRenderEngineEcoreEvasImpl-test.cpp', 'DSRenderEngineDaliImpl-test.cpp', 'DSCompositor-test.cpp', - 'DSOutput-test.cpp', + 'DSOutputImpl-test.cpp', 'DSInput-test.cpp', 'DSCanvas-test.cpp', 'DSSeat-test.cpp', -- 2.7.4