From 51581c27efa2b95edc721bbd01280d1abfe0cb58 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Wed, 5 Aug 2020 09:28:47 +0900 Subject: [PATCH 01/16] DSZone: remove unnecessary header file Change-Id: I9872f0178555ec0c0be18014c1577b0801944023 --- src/DSZone/DSZone.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/DSZone/DSZone.h b/src/DSZone/DSZone.h index 4a39c0a..4de5a00 100644 --- a/src/DSZone/DSZone.h +++ b/src/DSZone/DSZone.h @@ -1,8 +1,6 @@ #ifndef __DS_ZONE_H__ #define __DS_ZONE_H__ -#include "wayland-server-core.h" - #include #include "DSWindow.h" #include "DSWindowShell.h" -- 2.7.4 From ac36ce13172ee28e132dfab59f9bc065c98b3641 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Wed, 5 Aug 2020 09:33:09 +0900 Subject: [PATCH 02/16] DSWaylandExtension: change log level in init() Change-Id: I84e24c8aac3f95177dff8fbf9cbf9a9941ca3239 --- src/DSWaylandExtension/DSWaylandExtension.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DSWaylandExtension/DSWaylandExtension.cpp b/src/DSWaylandExtension/DSWaylandExtension.cpp index c1e3661..bc6e57c 100644 --- a/src/DSWaylandExtension/DSWaylandExtension.cpp +++ b/src/DSWaylandExtension/DSWaylandExtension.cpp @@ -42,7 +42,7 @@ bool DSWaylandExtensionPrivate::init(DSWaylandCompositor *compositor) return false; } - DSLOG_ERR("DSWaylandExtension", "Initialize succeed"); + DSLOG_INF("DSWaylandExtension", "Initialize succeed"); return true; } -- 2.7.4 From 389adc9d7793f11f15b0d29ca2dc027467aac964 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 5 Aug 2020 13:46:10 +0900 Subject: [PATCH 03/16] DSWaylandSurface: add checking client attach null buffer Change-Id: I6e03e7390c6a8fb7cd6a2334e6edfabf4ab4f164 --- src/DSWaylandServer/DSWaylandSurface.cpp | 12 ++++++++---- src/DSWindow/DSWindow.cpp | 12 +++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/DSWaylandServer/DSWaylandSurface.cpp b/src/DSWaylandServer/DSWaylandSurface.cpp index 450b4af..d521d70 100644 --- a/src/DSWaylandServer/DSWaylandSurface.cpp +++ b/src/DSWaylandServer/DSWaylandSurface.cpp @@ -17,7 +17,7 @@ DSWaylandSurfaceCommitInfoPrivate::~DSWaylandSurfaceCommitInfoPrivate() std::shared_ptr DSWaylandSurfaceCommitInfoPrivate::getBuffer() { - return bufferRef->refDSBufferGet(); + return bufferRef ? bufferRef->refDSBufferGet() : nullptr; } //////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -78,14 +78,18 @@ void DSWaylandSurfacePrivate::surface_destroy(Resource *resource) void DSWaylandSurfacePrivate::surface_attach(Resource *resource, struct ::wl_resource *buffer, int32_t x, int32_t y) { DSWaylandSurfaceCommitInfoPrivate *commitInfoPendingPriv = DSWaylandSurfaceCommitInfoPrivate::getPrivate(__commitInfoPending.get()); - std::shared_ptr dsBuffer = __bufferManager->getDSBuffer(buffer); + std::shared_ptr dsBuffer; commitInfoPendingPriv->attach.x = x; commitInfoPendingPriv->attach.y = y; commitInfoPendingPriv->attach.buffer = buffer; - commitInfoPendingPriv->bufferRef.reset(nullptr); - commitInfoPendingPriv->bufferRef = std::make_unique(dsBuffer); + + if (buffer) { + dsBuffer = __bufferManager->getDSBuffer(buffer); + commitInfoPendingPriv->bufferRef = std::make_unique(dsBuffer); + + } } void DSWaylandSurfacePrivate::surface_damage(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) diff --git a/src/DSWindow/DSWindow.cpp b/src/DSWindow/DSWindow.cpp index 365d0f0..9ac15bf 100644 --- a/src/DSWindow/DSWindow.cpp +++ b/src/DSWindow/DSWindow.cpp @@ -84,12 +84,14 @@ void DSWindowPrivate::__onSurfaceCommitted(std::shared_ptr buffer = waylandSurfaceCommitInfo->getBuffer(); - std::shared_ptr bufferSize = buffer->getSize(); - __w = bufferSize->w; - __h = bufferSize->h; + if (buffer) { + std::shared_ptr bufferSize = buffer->getSize(); + __w = bufferSize->w; + __h = bufferSize->h; - // emit a signal of the size changed - pub->__sizeChangedSignal.emit(bufferSize); + // emit a signal of the size changed + pub->__sizeChangedSignal.emit(bufferSize); + } // TODO: get more information from waylandSurfaceCommitInfo. ex) damageSurface, damageBuffer, transform, scale and so on } -- 2.7.4 From b89058e0d0f529b51fd0572126610f62954b2c6c Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Wed, 5 Aug 2020 10:41:54 +0900 Subject: [PATCH 04/16] DSInput: fix print() to leave log with DSLOG_INF() Change-Id: I7fc012304253843352cbeeef13f9bd6fb343be41 Signed-off-by: Sung-Jin Park --- src/DSInput/DSInput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DSInput/DSInput.cpp b/src/DSInput/DSInput.cpp index 817755a..eb93266 100644 --- a/src/DSInput/DSInput.cpp +++ b/src/DSInput/DSInput.cpp @@ -353,7 +353,7 @@ DSInputDevice::~DSInputDevice() void DSInputDevice::print() { - std::cout << "DeviceInfo: " << "name: " << getName() << ", identifier: " << getIdentifier() << ", class: " << getClass() << ", subclass: " << getSubclass() << std::endl; + DSLOG_INF("DSInputDevice", "DeviceInfo: name: %s, identifier: %s , class: %d, subclass: %d", getName().c_str(), getIdentifier().c_str(), getClass(), getSubclass()); } bool DSInputDevice::operator==(DSInputDevice& device) -- 2.7.4 From c7d313a61cd9847e1638de3a1dc882d1dc966637 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Wed, 5 Aug 2020 14:23:09 +0900 Subject: [PATCH 05/16] DSWaylandSeat: add APIs (getName/getPointer/getKeyboard/getTouch) Change-Id: I98c9acfeda2dda7fdec3add446ac0d48aa3f4894 Signed-off-by: Sung-Jin Park --- src/DSWaylandServer/DSWaylandSeat.cpp | 25 ++++++++++++++++++ src/DSWaylandServer/DSWaylandSeat.h | 9 +++++++ tests/DSWaylandSeat-test.cpp | 49 +++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) diff --git a/src/DSWaylandServer/DSWaylandSeat.cpp b/src/DSWaylandServer/DSWaylandSeat.cpp index 6a46cc6..93d7474 100644 --- a/src/DSWaylandServer/DSWaylandSeat.cpp +++ b/src/DSWaylandServer/DSWaylandSeat.cpp @@ -172,4 +172,29 @@ void DSWaylandSeat::setName(std::string name) priv->__seatName = name; } +std::string DSWaylandSeat::getName() +{ + DS_GET_PRIV(DSWaylandSeat); + + return priv->__seatName; +} + +DSWaylandPointer *DSWaylandSeat::getPointer() +{ + DS_GET_PRIV(DSWaylandSeat); + return priv->__pointer; +} + +DSWaylandKeyboard *DSWaylandSeat::getKeyboard() +{ + DS_GET_PRIV(DSWaylandSeat); + return priv->__keyboard; +} + +DSWaylandTouch *DSWaylandSeat::getTouch() +{ + DS_GET_PRIV(DSWaylandSeat); + return priv->__touch; +} + } diff --git a/src/DSWaylandServer/DSWaylandSeat.h b/src/DSWaylandServer/DSWaylandSeat.h index 55b93d6..a2ecd07 100644 --- a/src/DSWaylandServer/DSWaylandSeat.h +++ b/src/DSWaylandServer/DSWaylandSeat.h @@ -9,6 +9,10 @@ namespace display_server class DSWaylandSeatPrivate; class DSWaylandCompositor; +class DSWaylandPointer; +class DSWaylandKeyboard; +class DSWaylandTouch; + class DS_DECL_EXPORT DSWaylandSeat : public DSObject { DS_PIMPL_USE_PRIVATE(DSWaylandSeat); @@ -32,6 +36,11 @@ public: void setCapability(DSWaylandSeat::seatCapability cap); DSWaylandSeat::seatCapability getCapability(void); void setName(std::string name); + std::string getName(); + + DSWaylandPointer *getPointer(); + DSWaylandKeyboard *getKeyboard(); + DSWaylandTouch *getTouch(); protected: diff --git a/tests/DSWaylandSeat-test.cpp b/tests/DSWaylandSeat-test.cpp index cae51ab..d4bf446 100644 --- a/tests/DSWaylandSeat-test.cpp +++ b/tests/DSWaylandSeat-test.cpp @@ -65,3 +65,52 @@ TEST_F(DSWaylandSeatTest, SetUpdateGetCapabilities) } } +TEST_F(DSWaylandSeatTest, SetGetName) +{ + DSWaylandCompositor *comp = DSWaylandCompositor::getInstance(); + EXPECT_TRUE(comp != nullptr); + + if (comp) + { + DSWaylandSeat *seat = new DSWaylandSeat(comp, DSWaylandSeat::capDefault); + EXPECT_TRUE(seat != nullptr); + + if (seat) + { + std::string sName{"seat0"}; + std::string gName; + + seat->setName(sName); + gName = seat->getName(); + EXPECT_TRUE(gName.compare(std::string{"seat0"}) == 0); + + delete seat; + } + + DSWaylandCompositor::releaseInstance(); + } +} + +TEST_F(DSWaylandSeatTest, getKeyboardPointerTouch) +{ + DSWaylandCompositor *comp = DSWaylandCompositor::getInstance(); + EXPECT_TRUE(comp != nullptr); + + if (comp) + { + DSWaylandSeat *seat = new DSWaylandSeat(comp, DSWaylandSeat::capDefault); + EXPECT_TRUE(seat != nullptr); + + if (seat) + { + EXPECT_TRUE(seat->getPointer () != nullptr); + EXPECT_TRUE(seat->getKeyboard () != nullptr); + EXPECT_TRUE(seat->getTouch () != nullptr); + + delete seat; + } + + DSWaylandCompositor::releaseInstance(); + } +} + -- 2.7.4 From 3a77a31bfc7391254c4d666d38370150bc4dc466 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Wed, 5 Aug 2020 14:24:53 +0900 Subject: [PATCH 06/16] DSWaylandServer: add getFocus()/setFocus() APIs for DSWaylandPointer/Keyboard/Touch Change-Id: I2ab9eac5d708a906acd8ef0c44c375d169555a7f Signed-off-by: Sung-Jin Park --- src/DSWaylandServer/DSWaylandKeyboard.cpp | 13 ++++++++++++ src/DSWaylandServer/DSWaylandKeyboard.h | 3 +++ src/DSWaylandServer/DSWaylandKeyboardPrivate.h | 13 ++++++++++++ src/DSWaylandServer/DSWaylandPointer.cpp | 15 +++++++++++++- src/DSWaylandServer/DSWaylandPointer.h | 3 +++ src/DSWaylandServer/DSWaylandPointerPrivate.h | 28 +++++++++++++++++++++----- src/DSWaylandServer/DSWaylandTouch.cpp | 15 +++++++++++++- src/DSWaylandServer/DSWaylandTouch.h | 3 +++ src/DSWaylandServer/DSWaylandTouchPrivate.h | 24 ++++++++++++++++++---- tests/DSWaylandKeyboard-test.cpp | 22 ++++++++++++++++++++ tests/DSWaylandPointer-test.cpp | 22 ++++++++++++++++++++ tests/DSWaylandTouch-test.cpp | 22 ++++++++++++++++++++ 12 files changed, 172 insertions(+), 11 deletions(-) diff --git a/src/DSWaylandServer/DSWaylandKeyboard.cpp b/src/DSWaylandServer/DSWaylandKeyboard.cpp index f6e505f..3dc8880 100644 --- a/src/DSWaylandServer/DSWaylandKeyboard.cpp +++ b/src/DSWaylandServer/DSWaylandKeyboard.cpp @@ -10,6 +10,7 @@ DSWaylandKeyboardPrivate::DSWaylandKeyboardPrivate(DSWaylandSeat *seat, DSWaylan : DSObjectPrivate(keyboard), __p_ptr(keyboard), __seat(seat), + __waylandSurface(nullptr), __repeatRate(0), __repeatDelay(0) { @@ -92,4 +93,16 @@ void DSWaylandKeyboard::addClient(DSWaylandClient *client, uint32_t id, int vers priv->add(client->wlClient(), id, version); } +void DSWaylandKeyboard::setFocus(DSWaylandSurface *waylandSurface) +{ + DS_GET_PRIV(DSWaylandKeyboard); + priv->__waylandSurface = waylandSurface; +} + +DSWaylandSurface *DSWaylandKeyboard::getFocus() +{ + DS_GET_PRIV(DSWaylandKeyboard); + return priv->__waylandSurface; +} + } diff --git a/src/DSWaylandServer/DSWaylandKeyboard.h b/src/DSWaylandServer/DSWaylandKeyboard.h index 62a3c1f..c927100 100644 --- a/src/DSWaylandServer/DSWaylandKeyboard.h +++ b/src/DSWaylandServer/DSWaylandKeyboard.h @@ -10,6 +10,7 @@ namespace display_server class DSWaylandSeat; class DSWaylandKeyboardPrivate; class DSWaylandClient; +class DSWaylandSurface; class DS_DECL_EXPORT DSWaylandKeyboard : public DSObject { @@ -26,6 +27,8 @@ public: uint32_t repeatDelay(void); void addClient(DSWaylandClient *client, uint32_t id, int version); + void setFocus(DSWaylandSurface *waylandSurface); + DSWaylandSurface *getFocus(); protected: diff --git a/src/DSWaylandServer/DSWaylandKeyboardPrivate.h b/src/DSWaylandServer/DSWaylandKeyboardPrivate.h index ecb34af..1946d7f 100644 --- a/src/DSWaylandServer/DSWaylandKeyboardPrivate.h +++ b/src/DSWaylandServer/DSWaylandKeyboardPrivate.h @@ -10,6 +10,8 @@ namespace display_server { class DSWaylandSeat; +class DSWaylandSurface; + class DS_DECL_EXPORT DSWaylandKeyboardPrivate : public DSObjectPrivate, public DSWaylandServer::wl_keyboard { DS_PIMPL_USE_PUBLIC(DSWaylandKeyboard); @@ -25,8 +27,19 @@ protected: virtual void keyboard_destroy_resource(Resource *resource); virtual void keyboard_release(Resource *resource); + /* APIs must be provided */ + /* + void sendKeymap(struct ::wl_client *client, uint32_t format, int32_t fd, uint32_t size); + void sendEnter(struct ::wl_client *client, uint32_t serial, struct ::wl_resource *surface, const std::string &keys); + void sendLeave(struct ::wl_client *client, uint32_t serial, struct ::wl_resource *surface); + void sendKey(struct ::wl_client *client, uint32_t serial, uint32_t time, uint32_t key, uint32_t state); + void sendModifiers(struct ::wl_client *client, uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group); + void sendRepeat_info(struct ::wl_client *client, int32_t rate, int32_t delay); + */ + private: DSWaylandSeat *__seat; + DSWaylandSurface *__waylandSurface; uint32_t __repeatRate; uint32_t __repeatDelay; diff --git a/src/DSWaylandServer/DSWaylandPointer.cpp b/src/DSWaylandServer/DSWaylandPointer.cpp index 0261306..adc314c 100644 --- a/src/DSWaylandServer/DSWaylandPointer.cpp +++ b/src/DSWaylandServer/DSWaylandPointer.cpp @@ -9,7 +9,8 @@ namespace display_server DSWaylandPointerPrivate::DSWaylandPointerPrivate(DSWaylandSeat *seat, DSWaylandPointer *pointer) : DSObjectPrivate(pointer), __p_ptr(pointer), - __seat(seat) + __seat(seat), + __waylandSurface(nullptr) { wl_pointer(); } @@ -67,4 +68,16 @@ void DSWaylandPointer::addClient(DSWaylandClient *client, uint32_t id, int versi priv->add(client->wlClient(), id, version); } +void DSWaylandPointer::setFocus(DSWaylandSurface *waylandSurface) +{ + DS_GET_PRIV(DSWaylandPointer); + priv->__waylandSurface = waylandSurface; +} + +DSWaylandSurface *DSWaylandPointer::getFocus() +{ + DS_GET_PRIV(DSWaylandPointer); + return priv->__waylandSurface; +} + } \ No newline at end of file diff --git a/src/DSWaylandServer/DSWaylandPointer.h b/src/DSWaylandServer/DSWaylandPointer.h index d788796..5d528e7 100644 --- a/src/DSWaylandServer/DSWaylandPointer.h +++ b/src/DSWaylandServer/DSWaylandPointer.h @@ -10,6 +10,7 @@ namespace display_server class DSWaylandSeat; class DSWaylandPointerPrivate; class DSWaylandClient; +class DSWaylandSurface; class DS_DECL_EXPORT DSWaylandPointer : public DSObject { @@ -21,6 +22,8 @@ public: DSWaylandSeat *seat(); void addClient(DSWaylandClient *client, uint32_t id, int version); + void setFocus(DSWaylandSurface *waylandSurface); + DSWaylandSurface *getFocus(); protected: diff --git a/src/DSWaylandServer/DSWaylandPointerPrivate.h b/src/DSWaylandServer/DSWaylandPointerPrivate.h index 6c4b530..320d78a 100644 --- a/src/DSWaylandServer/DSWaylandPointerPrivate.h +++ b/src/DSWaylandServer/DSWaylandPointerPrivate.h @@ -18,14 +18,32 @@ public: ~DSWaylandPointerPrivate() override; protected: - //virtual Resource *pointer_allocate(); - void pointer_bind_resource(Resource *resource) override; - void pointer_destroy_resource(Resource *resource) override; - void pointer_set_cursor(Resource *resource, uint32_t serial, struct ::wl_resource *surface, int32_t hotspot_x, int32_t hotspot_y) override; - void pointer_release(Resource *resource) override; + //virtual Resource *pointer_allocate(); + void pointer_bind_resource(Resource *resource) override; + void pointer_destroy_resource(Resource *resource) override; + void pointer_set_cursor(Resource *resource, uint32_t serial, struct ::wl_resource *surface, int32_t hotspot_x, int32_t hotspot_y) override; + void pointer_release(Resource *resource) override; + + /* APIs must be provided */ + /* + void sendEnter(struct ::wl_client *client, uint32_t serial, struct ::wl_resource *surface, wl_fixed_t surface_x, wl_fixed_t surface_y); + void sendLeave(struct ::wl_client *client, uint32_t serial, struct ::wl_resource *surface); + void sendMotion(struct ::wl_client *client, uint32_t time, wl_fixed_t surface_x, wl_fixed_t surface_y); + void sendButton(struct ::wl_client *client, uint32_t serial, uint32_t time, uint32_t button, uint32_t state); + */ + + /* APIs don't need to provide */ + /* + void sendAxis(struct ::wl_resource *resource, uint32_t time, uint32_t axis, wl_fixed_t value); + void send_frame(struct ::wl_resource *resource); + void send_axis_source(struct ::wl_resource *resource, uint32_t axis_source); + void send_axis_stop(struct ::wl_resource *resource, uint32_t time, uint32_t axis); + void send_axis_discrete(struct ::wl_resource *resource, uint32_t axis, int32_t discrete); + */ private: DSWaylandSeat *__seat; + DSWaylandSurface *__waylandSurface; }; } diff --git a/src/DSWaylandServer/DSWaylandTouch.cpp b/src/DSWaylandServer/DSWaylandTouch.cpp index 5af72f2..eb8a954 100644 --- a/src/DSWaylandServer/DSWaylandTouch.cpp +++ b/src/DSWaylandServer/DSWaylandTouch.cpp @@ -8,7 +8,8 @@ namespace display_server { DSWaylandTouchPrivate::DSWaylandTouchPrivate(DSWaylandSeat *seat, DSWaylandTouch *touch) : DSObjectPrivate(touch), __p_ptr(touch), - __seat(seat) + __seat(seat), + __waylandSurface(nullptr) { wl_touch(); } @@ -61,4 +62,16 @@ void DSWaylandTouch::addClient(DSWaylandClient *client, uint32_t id, int version priv->add(client->wlClient(), id, version); } +void DSWaylandTouch::setFocus(DSWaylandSurface *waylandSurface) +{ + DS_GET_PRIV(DSWaylandTouch); + priv->__waylandSurface = waylandSurface; +} + +DSWaylandSurface *DSWaylandTouch::getFocus() +{ + DS_GET_PRIV(DSWaylandTouch); + return priv->__waylandSurface; +} + } \ No newline at end of file diff --git a/src/DSWaylandServer/DSWaylandTouch.h b/src/DSWaylandServer/DSWaylandTouch.h index eab11ea..c2d62b9 100644 --- a/src/DSWaylandServer/DSWaylandTouch.h +++ b/src/DSWaylandServer/DSWaylandTouch.h @@ -10,6 +10,7 @@ namespace display_server class DSWaylandSeat; class DSWaylandTouchPrivate; class DSWaylandClient; +class DSWaylandSurface; class DS_DECL_EXPORT DSWaylandTouch : public DSObject { @@ -21,6 +22,8 @@ public: DSWaylandSeat *seat(); void addClient(DSWaylandClient *client, uint32_t id, int version); + void setFocus(DSWaylandSurface *waylandSurface); + DSWaylandSurface *getFocus(); protected: diff --git a/src/DSWaylandServer/DSWaylandTouchPrivate.h b/src/DSWaylandServer/DSWaylandTouchPrivate.h index 3dd6031..5444bf2 100644 --- a/src/DSWaylandServer/DSWaylandTouchPrivate.h +++ b/src/DSWaylandServer/DSWaylandTouchPrivate.h @@ -20,13 +20,29 @@ public: //TODO protected: - //virtual Resource *touch_allocate(); - virtual void touch_bind_resource(Resource *resource); - virtual void touch_destroy_resource(Resource *resource); - virtual void touch_release(Resource *resource); + //virtual Resource *touch_allocate(); + virtual void touch_bind_resource(Resource *resource); + virtual void touch_destroy_resource(Resource *resource); + virtual void touch_release(Resource *resource); + + /* APIs must be provided */ + /* + void sendDown(struct ::wl_client *client, uint32_t serial, uint32_t time, struct ::wl_resource *surface, int32_t id, wl_fixed_t x, wl_fixed_t y); + void sendUp(struct ::wl_client *client, uint32_t serial, uint32_t time, int32_t id); + void sendMotion(struct ::wl_client *client, uint32_t time, int32_t id, wl_fixed_t x, wl_fixed_t y); + void sendFrame(struct ::wl_client *client); + void sendCancel(struct ::wl_client *client); + */ + + /* APIs don't need to provide */ + /* + void send_shape(struct ::wl_resource *resource, int32_t id, wl_fixed_t major, wl_fixed_t minor); + void send_orientation(struct ::wl_resource *resource, int32_t id, wl_fixed_t orientation); + */ private: DSWaylandSeat *__seat; + DSWaylandSurface *__waylandSurface; }; } diff --git a/tests/DSWaylandKeyboard-test.cpp b/tests/DSWaylandKeyboard-test.cpp index 4701297..3769679 100644 --- a/tests/DSWaylandKeyboard-test.cpp +++ b/tests/DSWaylandKeyboard-test.cpp @@ -1,6 +1,7 @@ #include "libds-tests.h" #include "DSWaylandKeyboard.h" #include "DSWaylandSeat.h" +#include "DSWaylandSurface.h" using namespace display_server; @@ -9,9 +10,11 @@ class DSWaylandKeyboardTest : public ::testing::Test public: void SetUp(void) override { + setenv("XDG_RUNTIME_DIR", "/run", 1); } void TearDown(void) override { + unsetenv("XDG_RUNTIME_DIR"); } }; @@ -65,3 +68,22 @@ TEST_F(DSWaylandKeyboardTest, SetGetRepeatRateDelay) delete keyboard; } } + +TEST_F(DSWaylandKeyboardTest, SetGetFocus) +{ + auto keyboard = new DSWaylandKeyboard(nullptr); + EXPECT_TRUE(keyboard != nullptr); + + if (keyboard) + { + auto waylandSurface = std::make_unique(); + EXPECT_TRUE(waylandSurface != nullptr); + + if (waylandSurface) + { + keyboard->setFocus(waylandSurface.get()); + EXPECT_TRUE(waylandSurface.get() == keyboard->getFocus()); + } + } +} + diff --git a/tests/DSWaylandPointer-test.cpp b/tests/DSWaylandPointer-test.cpp index 24281fd..d79bb97 100644 --- a/tests/DSWaylandPointer-test.cpp +++ b/tests/DSWaylandPointer-test.cpp @@ -1,6 +1,7 @@ #include "libds-tests.h" #include "DSWaylandPointer.h" #include "DSWaylandSeat.h" +#include "DSWaylandSurface.h" using namespace display_server; @@ -9,9 +10,11 @@ class DSWaylandPointerTest : public ::testing::Test public: void SetUp(void) override { + setenv("XDG_RUNTIME_DIR", "/run", 1); } void TearDown(void) override { + unsetenv("XDG_RUNTIME_DIR"); } }; @@ -45,3 +48,22 @@ TEST_F(DSWaylandPointerTest, GetSeat) delete seat; } } + +TEST_F(DSWaylandPointerTest, SetGetFocus) +{ + auto pointer = new DSWaylandPointer(nullptr); + EXPECT_TRUE(pointer != nullptr); + + if (pointer) + { + auto waylandSurface = std::make_unique(); + EXPECT_TRUE(waylandSurface != nullptr); + + if (waylandSurface) + { + pointer->setFocus(waylandSurface.get()); + EXPECT_TRUE(waylandSurface.get() == pointer->getFocus()); + } + } +} + diff --git a/tests/DSWaylandTouch-test.cpp b/tests/DSWaylandTouch-test.cpp index 3fe8b85..9f6a7b0 100644 --- a/tests/DSWaylandTouch-test.cpp +++ b/tests/DSWaylandTouch-test.cpp @@ -1,6 +1,7 @@ #include "libds-tests.h" #include "DSWaylandTouch.h" #include "DSWaylandSeat.h" +#include "DSWaylandSurface.h" using namespace display_server; @@ -9,9 +10,11 @@ class DSWaylandTouchTest : public ::testing::Test public: void SetUp(void) override { + setenv("XDG_RUNTIME_DIR", "/run", 1); } void TearDown(void) override { + unsetenv("XDG_RUNTIME_DIR"); } }; @@ -45,3 +48,22 @@ TEST_F(DSWaylandTouchTest, GetSeat) delete seat; } } + +TEST_F(DSWaylandTouchTest, SetGetFocus) +{ + auto touch = new DSWaylandTouch(nullptr); + EXPECT_TRUE(touch != nullptr); + + if (touch) + { + auto waylandSurface = std::make_unique(); + EXPECT_TRUE(waylandSurface != nullptr); + + if (waylandSurface) + { + touch->setFocus(waylandSurface.get()); + EXPECT_TRUE(waylandSurface.get() == touch->getFocus()); + } + } +} + -- 2.7.4 From 7d18e2970cac4dfd5b2cf37fa00abcf356443614 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Tue, 28 Jul 2020 20:46:32 +0900 Subject: [PATCH 07/16] Add build dependencies to use dali libs. Change-Id: I05a09166de68211cff88c201d8c0ff4770da5bf6 Signed-off-by: Joonbum Ko --- packaging/libds.spec | 4 ++++ src/meson.build | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packaging/libds.spec b/packaging/libds.spec index e82c1d9..9e330b4 100644 --- a/packaging/libds.spec +++ b/packaging/libds.spec @@ -27,6 +27,10 @@ BuildRequires: pkgconfig(ecore-evas) BuildRequires: pkgconfig(libinput) BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(xkbcommon) +BuildRequires: pkgconfig(dali2-core) +BuildRequires: pkgconfig(dali2-adaptor) +BuildRequires: pkgconfig(dali2-toolkit) +BuildRequires: pkgconfig(dali2-extension) # For samples and tests BuildRequires: pkgconfig(wayland-client) diff --git a/src/meson.build b/src/meson.build index 5fdf1c9..c6ac5dd 100644 --- a/src/meson.build +++ b/src/meson.build @@ -182,6 +182,11 @@ input_method_dep = dependency('input-method-server') text_dep = dependency('text-server') tizen_launch_dep = dependency('tizen-launch-server') +dali_core_dep = dependency('dali2-core') +dali_adaptor_dep = dependency('dali2-adaptor') +dali_toolkit_dep = dependency('dali2-toolkit') + +dali_deps = [dali_core_dep, dali_adaptor_dep, dali_toolkit_dep] tizen_ext_deps = [tizen_ext_dep, input_method_dep, text_dep, tizen_launch_dep, tizen_surface_dep] tizen_ext_deps = [tizen_ext_deps, xdg_shell_unstable_v6_dep, xdg_shell_dep] libds_deps = [ecore_dep] @@ -219,7 +224,7 @@ libds_include_dirs = include_directories( libds_lib = shared_library( 'ds', libds_srcs, - dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep], + dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps], include_directories : [libds_include_dirs], version : meson.project_version(), install : true @@ -228,7 +233,7 @@ libds_lib = shared_library( libds_static_lib = static_library( 'ds', libds_srcs, - dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep], + dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps], include_directories : [libds_include_dirs], install : true ) -- 2.7.4 From 22f2172e545ea47da3363786e5eed0fe4be1afd0 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Mon, 27 Jul 2020 20:44:28 +0900 Subject: [PATCH 08/16] Implemented initial phase to use dali render engine. Change-Id: I8456a0573aa17933f3666ccc40bde3cc8b45f968 Signed-off-by: Joonbum Ko --- src/DSRender/DSRenderEngineDaliImpl.cpp | 31 ++++++++++++++++++++++++++++--- src/DSRender/DSRenderEngineDaliImpl.h | 10 +++++++++- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/DSRender/DSRenderEngineDaliImpl.cpp b/src/DSRender/DSRenderEngineDaliImpl.cpp index 02245a6..42a00c5 100644 --- a/src/DSRender/DSRenderEngineDaliImpl.cpp +++ b/src/DSRender/DSRenderEngineDaliImpl.cpp @@ -2,15 +2,38 @@ #include "DSRenderViewDaliImpl.h" #include "DSDebugLog.h" +using namespace Dali; + namespace display_server { DSRenderEngineDaliImpl::DSRenderEngineDaliImpl(std::shared_ptr bufferQueue) : __bufferQueue{bufferQueue} -{} +{ + void *nativeBufferQueue = __bufferQueue->getNativeBufferQueue(); + __offscreenApplication = OffscreenApplication::New(nativeBufferQueue, true); + + __offscreenApplication.InitSignal().Connect(this, &DSRenderEngineDaliImpl::onInitialize); + + __offscreenApplication.Run(); +} DSRenderEngineDaliImpl::~DSRenderEngineDaliImpl() -{} +{ +} + +void DSRenderEngineDaliImpl::onInitialize() +{ + /* for testing -- begin -- */ + OffscreenWindow window = __offscreenApplication.GetWindow(); + + window.SetBackgroundColor(Color::YELLOW); + + Toolkit::TextLabel textlabel = Toolkit::TextLabel::New("Hello libDS"); + textlabel.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER); + window.Add(textlabel); + /* for testing -- end -- */ +} std::shared_ptr DSRenderEngineDaliImpl::makeRenderView(std::shared_ptr window) { @@ -21,7 +44,9 @@ std::shared_ptr DSRenderEngineDaliImpl::makeRenderView(std::shared bool DSRenderEngineDaliImpl::renderFrame() { - return false; + Adaptor::Get().RenderOnce(); + + return true; } } // namespace display_server diff --git a/src/DSRender/DSRenderEngineDaliImpl.h b/src/DSRender/DSRenderEngineDaliImpl.h index 2b101e1..b3940d1 100644 --- a/src/DSRender/DSRenderEngineDaliImpl.h +++ b/src/DSRender/DSRenderEngineDaliImpl.h @@ -4,10 +4,15 @@ #include "IDSRenderEngine.h" #include "IDSBufferQueue.h" +#include +#include +#include +#include + namespace display_server { -class DSRenderEngineDaliImpl : public IDSRenderEngine +class DSRenderEngineDaliImpl : public IDSRenderEngine, public Dali::ConnectionTracker { public: DSRenderEngineDaliImpl(std::shared_ptr bufferQueue); @@ -16,8 +21,11 @@ public: std::shared_ptr makeRenderView(std::shared_ptr window) override; bool renderFrame() override; + void onInitialize(); + private: std::shared_ptr __bufferQueue; + Dali::OffscreenApplication __offscreenApplication; }; } -- 2.7.4 From 19886929a01d4e4e2ddf846a788db5a182beddf4 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Thu, 30 Jul 2020 16:43:27 +0900 Subject: [PATCH 09/16] DSRenderViewDaliImpl: Implemented initial dali render view. Change-Id: I2962cfa9cec012f46c57006c7ea36ca53840a18a Signed-off-by: Joonbum Ko --- src/DSRender/DSRenderEngineDaliImpl.cpp | 11 +++-- src/DSRender/DSRenderViewDaliImpl.cpp | 86 +++++++++++++++++++++++++++++++-- src/DSRender/DSRenderViewDaliImpl.h | 10 +++- 3 files changed, 97 insertions(+), 10 deletions(-) diff --git a/src/DSRender/DSRenderEngineDaliImpl.cpp b/src/DSRender/DSRenderEngineDaliImpl.cpp index 42a00c5..c61a8e3 100644 --- a/src/DSRender/DSRenderEngineDaliImpl.cpp +++ b/src/DSRender/DSRenderEngineDaliImpl.cpp @@ -2,16 +2,18 @@ #include "DSRenderViewDaliImpl.h" #include "DSDebugLog.h" +#include + using namespace Dali; namespace display_server { DSRenderEngineDaliImpl::DSRenderEngineDaliImpl(std::shared_ptr bufferQueue) - : __bufferQueue{bufferQueue} + : __bufferQueue(bufferQueue) { - void *nativeBufferQueue = __bufferQueue->getNativeBufferQueue(); - __offscreenApplication = OffscreenApplication::New(nativeBufferQueue, true); + tbm_surface_queue_h nativeBufferQueue = (tbm_surface_queue_h)bufferQueue->getNativeBufferQueue(); + __offscreenApplication = OffscreenApplication::New((nativeBufferQueue), true); __offscreenApplication.InitSignal().Connect(this, &DSRenderEngineDaliImpl::onInitialize); @@ -26,7 +28,6 @@ void DSRenderEngineDaliImpl::onInitialize() { /* for testing -- begin -- */ OffscreenWindow window = __offscreenApplication.GetWindow(); - window.SetBackgroundColor(Color::YELLOW); Toolkit::TextLabel textlabel = Toolkit::TextLabel::New("Hello libDS"); @@ -37,7 +38,7 @@ void DSRenderEngineDaliImpl::onInitialize() std::shared_ptr DSRenderEngineDaliImpl::makeRenderView(std::shared_ptr window) { - std::shared_ptr renderView = std::make_shared(window); + std::shared_ptr renderView = std::make_shared(window, __offscreenApplication.GetWindow()); return renderView; } diff --git a/src/DSRender/DSRenderViewDaliImpl.cpp b/src/DSRender/DSRenderViewDaliImpl.cpp index 685fd48..55dcd14 100644 --- a/src/DSRender/DSRenderViewDaliImpl.cpp +++ b/src/DSRender/DSRenderViewDaliImpl.cpp @@ -1,18 +1,96 @@ #include "DSRenderViewDaliImpl.h" +using namespace Dali; + namespace display_server { -DSRenderViewDaliImpl::DSRenderViewDaliImpl(std::shared_ptr window) +const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( + attribute mediump vec2 aPosition;\n + varying mediump vec2 vTexCoord;\n + uniform highp mat4 uMvpMatrix;\n + uniform mediump vec3 uSize;\n + varying mediump vec2 sTexCoordRect;\n + void main()\n + {\n + gl_Position = uMvpMatrix * vec4(aPosition * uSize.xy, 0.0, 1.0);\n + vTexCoord = aPosition + vec2(0.5);\n + }\n +); + +const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( + uniform lowp vec4 uColor;\n + varying mediump vec2 vTexCoord;\n + uniform samplerExternalOES sTexture;\n + void main()\n + {\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n + }\n +); + +Geometry DSRenderViewDaliImpl::CreateTexturedQuad() +{ + struct Vertex + { + Vector2 position; + Vector2 texCoord; + }; + + static const Vertex data[] = { { Vector2(-0.5f, -0.5f), Vector2(0.0f, 0.0f) }, + { Vector2(0.5f, -0.5f), Vector2(1.0f, 0.0f) }, + { Vector2(-0.5f, 0.5f), Vector2(0.0f, 1.0f) }, + { Vector2(0.5f, 0.5f), Vector2(1.0f, 1.0f) } }; + + PropertyBuffer vertexBuffer; + Property::Map vertexFormat; + vertexFormat["aPosition"] = Property::VECTOR2; + vertexFormat["aTexCoord"] = Property::VECTOR2; + + //Create a vertex buffer for vertex positions and texture coordinates + vertexBuffer = PropertyBuffer::New(vertexFormat); + vertexBuffer.SetData(data, 4u); + + //Create the geometry + Geometry geometry = Geometry::New(); + geometry.AddVertexBuffer(vertexBuffer); + geometry.SetType(Geometry::TRIANGLE_STRIP); + + return geometry; +} + +DSRenderViewDaliImpl::DSRenderViewDaliImpl(std::shared_ptr window, Dali::OffscreenWindow offscreenWindow) : __window(window) -{} +{ + std::string fragmentShader = "#extension GL_OES_EGL_image_external:require\n"; + fragmentShader += FRAGMENT_SHADER; + Dali::Shader __shader = Shader::New(VERTEX_SHADER, fragmentShader); + Dali::Geometry __geometry = DSRenderViewDaliImpl::CreateTexturedQuad(); + + __renderer = Renderer::New(__geometry, __shader); + __textureViewActor = Actor::New(); + + __textureViewActor.AddRenderer(__renderer); + offscreenWindow.Add(__textureViewActor); +} DSRenderViewDaliImpl::~DSRenderViewDaliImpl() -{} +{ +} bool DSRenderViewDaliImpl::setBuffer(std::shared_ptr buffer) { - return false; + void *nativeBuffer = buffer->getNativeBuffer(); + + NativeImageSourcePtr nativeImageSource = NativeImageSource::New(Any(nativeBuffer)); + + Texture nativeTexture = Texture::New(*nativeImageSource); + + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture(0u, nativeTexture); + + __renderer.SetTextures(textureSet); + + return true; } } // namespace display_server diff --git a/src/DSRender/DSRenderViewDaliImpl.h b/src/DSRender/DSRenderViewDaliImpl.h index d66b59f..19ce433 100644 --- a/src/DSRender/DSRenderViewDaliImpl.h +++ b/src/DSRender/DSRenderViewDaliImpl.h @@ -3,19 +3,27 @@ #include "DSRenderView.h" +#include +#include +#include + namespace display_server { class DSRenderViewDaliImpl : public DSRenderView { public: - DSRenderViewDaliImpl(std::shared_ptr window); + DSRenderViewDaliImpl(std::shared_ptr window, Dali::OffscreenWindow offscreenWindow); ~DSRenderViewDaliImpl(); bool setBuffer(std::shared_ptr buffer) override; + Dali::Geometry CreateTexturedQuad(); + private: std::shared_ptr __window; + Dali::Renderer __renderer; + Dali::Actor __textureViewActor; }; } -- 2.7.4 From 759c488f8852f6a36d47c318e31fd4e438cbcb2f Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Thu, 30 Jul 2020 16:47:39 +0900 Subject: [PATCH 10/16] DSRenderEngineDaliImpl-test: Add DSEventLoop to test dali renderer. Change-Id: I7d0a35c6b3ec57a7faa2240eb9a02df8334a301f Signed-off-by: Joonbum Ko --- tests/DSRenderEngineDaliImpl-test.cpp | 43 ++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/tests/DSRenderEngineDaliImpl-test.cpp b/tests/DSRenderEngineDaliImpl-test.cpp index daca8a1..f03edfe 100644 --- a/tests/DSRenderEngineDaliImpl-test.cpp +++ b/tests/DSRenderEngineDaliImpl-test.cpp @@ -2,6 +2,8 @@ #include "DSRenderEngineDaliImpl.h" #include "DSBufferQueueTBMImpl.h" #include "DSBufferTBMImpl.h" +#include "DSEventLoop.h" +#include using namespace display_server; @@ -10,9 +12,29 @@ class DSRenderEngineDaliTest : public ::testing::Test { public: void SetUp(void) override - {} + { + Ecore_Timer *timer = nullptr; + __eventLoop = DSEventLoop::getInstance(); + double delayInSecond = 0.1; + auto timerCb = [](void *data) -> Eina_Bool { + DSEventLoop *loop = (DSEventLoop *)data; + EXPECT_TRUE(loop->quit() == true); + return EINA_FALSE; + }; + + timer = ecore_timer_loop_add(delayInSecond, timerCb, __eventLoop); + EXPECT_TRUE(timer != nullptr); + + __eventLoop->run(); + } void TearDown(void) override - {} + { + __eventLoop->quit(); + DSEventLoop::releaseInstance(); + } + +private: + DSEventLoop *__eventLoop; }; TEST_F(DSRenderEngineDaliTest, RenderEngine_Create) @@ -47,4 +69,19 @@ TEST_F(DSRenderEngineDaliTest, RenderView_SetBuffer) EXPECT_TRUE(renderView != nullptr); auto buffer = std::make_shared(100, 100, IDSBuffer::FORMAT_ARGB8888); EXPECT_TRUE(renderView->setBuffer(buffer)); -} \ No newline at end of file +} + +TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderFrame) +{ + auto bufferQueue = std::make_shared(3, 100, 100, IDSBuffer::FORMAT_ARGB8888); + EXPECT_TRUE(bufferQueue != nullptr); + auto renderEngine = std::make_unique(bufferQueue); + EXPECT_TRUE(renderEngine != nullptr); + auto window = std::make_shared(); + EXPECT_TRUE(window != nullptr); + auto renderView = renderEngine->makeRenderView(window); + EXPECT_TRUE(renderView != nullptr); + auto buffer = std::make_shared (100, 100, IDSBuffer::FORMAT_ARGB8888); + EXPECT_TRUE(renderView->setBuffer(buffer)); + EXPECT_TRUE(renderEngine->renderFrame()); +} -- 2.7.4 From 406718813f8875e95faceba2b62fb238f39fbf2f Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Fri, 31 Jul 2020 15:25:24 +0900 Subject: [PATCH 11/16] DSRenderEngineDaliImpl-test: Add a TC to test texture mapping. Change-Id: I97fcf518b9ea0cbd3c2a60655e524d6dd5fd516f Signed-off-by: Joonbum Ko --- tests/DSRenderEngineDaliImpl-test.cpp | 106 ++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tests/DSRenderEngineDaliImpl-test.cpp b/tests/DSRenderEngineDaliImpl-test.cpp index f03edfe..6f35f9f 100644 --- a/tests/DSRenderEngineDaliImpl-test.cpp +++ b/tests/DSRenderEngineDaliImpl-test.cpp @@ -5,6 +5,15 @@ #include "DSEventLoop.h" #include +#include "DSDisplayDeviceTDMImpl.h" +#include "DSDisplayDeviceOutputTDMImpl.h" + +#include +#include + +#include + +//#include 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 displayDevice = std::make_unique(); + std::list> outputList = displayDevice->getOutputList(); + EXPECT_TRUE(outputList.size() != 0); + + IDSDisplayDeviceOutput::ConnectorType connType; + IDSDisplayDeviceOutput::ConnectState connState; + std::shared_ptr deviceHWC; + std::shared_ptr deviceHWCWindow; + + //eldbus_init(); + + for (std::shared_ptr 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(bufferQueue); + EXPECT_TRUE(renderEngine != nullptr); + auto window = std::make_shared(); + 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 (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); + } +} -- 2.7.4 From 6336f63927c033d8043ba72c286a0fd70a4290f2 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Fri, 31 Jul 2020 17:36:09 +0900 Subject: [PATCH 12/16] Add eldbus dependency for testing. Change-Id: I57389ee0e0bd14c09367dedd048b728c77ba24ac Signed-off-by: Joonbum Ko --- packaging/libds.spec | 1 + src/meson.build | 5 +++-- tests/DSRenderEngineDaliImpl-test.cpp | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packaging/libds.spec b/packaging/libds.spec index 9e330b4..c0fdaad 100644 --- a/packaging/libds.spec +++ b/packaging/libds.spec @@ -24,6 +24,7 @@ BuildRequires: pkgconfig(xdg-shell-unstable-v6-server) BuildRequires: pkgconfig(xdg-shell-server) BuildRequires: pkgconfig(ecore) BuildRequires: pkgconfig(ecore-evas) +BuildRequires: pkgconfig(eldbus) BuildRequires: pkgconfig(libinput) BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(xkbcommon) diff --git a/src/meson.build b/src/meson.build index c6ac5dd..fc3efbb 100644 --- a/src/meson.build +++ b/src/meson.build @@ -173,6 +173,7 @@ wayland_dep = dependency('wayland-server') libinput_dep = dependency('libinput') libudev_dep = dependency('libudev') xkbcommon_dep = dependency('xkbcommon') +eldbus_dep = dependency('eldbus') tizen_ext_dep = dependency('tizen-extension-server') xdg_shell_unstable_v6_dep = dependency('xdg-shell-unstable-v6-server') @@ -224,7 +225,7 @@ libds_include_dirs = include_directories( libds_lib = shared_library( 'ds', libds_srcs, - dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps], + dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps, eldbus_dep], include_directories : [libds_include_dirs], version : meson.project_version(), install : true @@ -233,7 +234,7 @@ libds_lib = shared_library( libds_static_lib = static_library( 'ds', libds_srcs, - dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps], + dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps, eldbus_dep], include_directories : [libds_include_dirs], install : true ) diff --git a/tests/DSRenderEngineDaliImpl-test.cpp b/tests/DSRenderEngineDaliImpl-test.cpp index 6f35f9f..61ac29a 100644 --- a/tests/DSRenderEngineDaliImpl-test.cpp +++ b/tests/DSRenderEngineDaliImpl-test.cpp @@ -13,7 +13,7 @@ #include -//#include +#include using namespace display_server; @@ -137,7 +137,7 @@ TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderOnlyOneFrame) std::shared_ptr deviceHWC; std::shared_ptr deviceHWCWindow; - //eldbus_init(); + eldbus_init(); for (std::shared_ptr output : outputList) { connType = output->getConnectType(); -- 2.7.4 From 19d39e8c7ea8a49258620f59bfd8803c1c11902e Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Tue, 4 Aug 2020 10:59:24 +0900 Subject: [PATCH 13/16] DSRenderEngineDaliImpl-test: Give time sleep to wait to call eglSwapBuffers. - It is temporary patch for testing it. so, it will be deprecated. Change-Id: If56bf95713377a36be0192c626c8f1027282891d Signed-off-by: Joonbum Ko --- tests/DSRenderEngineDaliImpl-test.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/DSRenderEngineDaliImpl-test.cpp b/tests/DSRenderEngineDaliImpl-test.cpp index 61ac29a..30230ff 100644 --- a/tests/DSRenderEngineDaliImpl-test.cpp +++ b/tests/DSRenderEngineDaliImpl-test.cpp @@ -176,6 +176,8 @@ TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderOnlyOneFrame) EXPECT_TRUE(renderView->setBuffer(imageSourceBuffer)); EXPECT_TRUE(renderEngine->renderFrame()); + usleep(1000000); + EXPECT_TRUE(bufferQueue->canAcquireBuffer(true)); auto buffer = bufferQueue->acquireBuffer(); @@ -188,6 +190,6 @@ TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderOnlyOneFrame) // commit EXPECT_TRUE(deviceHWC->commit()); - usleep(10000000); + usleep(1000000); } } -- 2.7.4 From 4135a9721da04804f2a2e3058d3f79fd3e9e2abd Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Wed, 5 Aug 2020 15:28:44 +0900 Subject: [PATCH 14/16] DSRenderEngineDaliImpl-test: Set color value to the correct color index Change-Id: I25f3ace0e5d564b01805a5a729dd0609ae68fb76 Signed-off-by: Joonbum Ko --- tests/DSRenderEngineDaliImpl-test.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/DSRenderEngineDaliImpl-test.cpp b/tests/DSRenderEngineDaliImpl-test.cpp index 30230ff..d5519f5 100644 --- a/tests/DSRenderEngineDaliImpl-test.cpp +++ b/tests/DSRenderEngineDaliImpl-test.cpp @@ -61,9 +61,9 @@ public: { for (int i = 0; i < w; i++) { - ptr[0] = r; + ptr[0] = b; ptr[1] = g; - ptr[2] = b; + ptr[2] = r; ptr[3] = a; ptr += 4; } @@ -183,8 +183,6 @@ TEST_F(DSRenderEngineDaliTest, RenderEngine_RenderOnlyOneFrame) 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 -- 2.7.4 From e762904b0e4039c2ed037a1d915b9e26b4fb6b90 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Wed, 5 Aug 2020 15:30:16 +0900 Subject: [PATCH 15/16] DSRenderEngineDaliImpl: Added properties to actor. Change-Id: Ic5b7cb40c03baf052bbc2ef9f6398bcef909b6a5 Signed-off-by: Joonbum Ko --- src/DSRender/DSRenderEngineDaliImpl.cpp | 7 +++++++ src/DSRender/DSRenderViewDaliImpl.cpp | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/DSRender/DSRenderEngineDaliImpl.cpp b/src/DSRender/DSRenderEngineDaliImpl.cpp index c61a8e3..ccc053a 100644 --- a/src/DSRender/DSRenderEngineDaliImpl.cpp +++ b/src/DSRender/DSRenderEngineDaliImpl.cpp @@ -2,6 +2,8 @@ #include "DSRenderViewDaliImpl.h" #include "DSDebugLog.h" +#include + #include using namespace Dali; @@ -32,6 +34,11 @@ void DSRenderEngineDaliImpl::onInitialize() Toolkit::TextLabel textlabel = Toolkit::TextLabel::New("Hello libDS"); textlabel.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER); + textlabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + textlabel.SetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false); + textlabel.SetProperty(Actor::Property::POSITION, Vector3( 0.0f, 0.0f, 0.0f )); + textlabel.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE); + textlabel.SetProperty(Toolkit::TextLabel::Property::POINT_SIZE, 30.f); window.Add(textlabel); /* for testing -- end -- */ } diff --git a/src/DSRender/DSRenderViewDaliImpl.cpp b/src/DSRender/DSRenderViewDaliImpl.cpp index 55dcd14..23536c9 100644 --- a/src/DSRender/DSRenderViewDaliImpl.cpp +++ b/src/DSRender/DSRenderViewDaliImpl.cpp @@ -1,4 +1,5 @@ #include "DSRenderViewDaliImpl.h" +#include using namespace Dali; @@ -70,6 +71,14 @@ DSRenderViewDaliImpl::DSRenderViewDaliImpl(std::shared_ptr window, Dal __textureViewActor = Actor::New(); __textureViewActor.AddRenderer(__renderer); + + // belows for testing // + __textureViewActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + __textureViewActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER); + __textureViewActor.SetProperty(Actor::Property::POSITION, Vector3( 0.0f, 100.f, 0.0f )); + __textureViewActor.SetProperty(Actor::Property::SIZE, Vector2(500, 500)); + + offscreenWindow.Add(__textureViewActor); } @@ -79,7 +88,7 @@ DSRenderViewDaliImpl::~DSRenderViewDaliImpl() bool DSRenderViewDaliImpl::setBuffer(std::shared_ptr buffer) { - void *nativeBuffer = buffer->getNativeBuffer(); + tbm_surface_h nativeBuffer = (tbm_surface_h)buffer->getNativeBuffer(); NativeImageSourcePtr nativeImageSource = NativeImageSource::New(Any(nativeBuffer)); -- 2.7.4 From a327c2ace27b0127a9ae9924d83c06edb026d2f9 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Wed, 5 Aug 2020 15:31:05 +0900 Subject: [PATCH 16/16] DSRenderEngineDaliImpl: Changed default bg color to TRANSPARENT. Change-Id: I42f5c4b075ee4c4b66d818c73bcbfb9313cfb942 Signed-off-by: Joonbum Ko --- src/DSRender/DSRenderEngineDaliImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DSRender/DSRenderEngineDaliImpl.cpp b/src/DSRender/DSRenderEngineDaliImpl.cpp index ccc053a..fa39a88 100644 --- a/src/DSRender/DSRenderEngineDaliImpl.cpp +++ b/src/DSRender/DSRenderEngineDaliImpl.cpp @@ -30,7 +30,7 @@ void DSRenderEngineDaliImpl::onInitialize() { /* for testing -- begin -- */ OffscreenWindow window = __offscreenApplication.GetWindow(); - window.SetBackgroundColor(Color::YELLOW); + window.SetBackgroundColor(Color::TRANSPARENT); Toolkit::TextLabel textlabel = Toolkit::TextLabel::New("Hello libDS"); textlabel.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER); -- 2.7.4