From f13e38c2f44fe1805f0d59cc179d8c4cb4f3e6b1 Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Wed, 8 Dec 2021 14:49:56 +0900 Subject: [PATCH] [Tizen] Move mItemsDirtyRects from Scene to SceneGraph::Scene The list is used in the update thread. So move it to SceneGraph::Scene Change-Id: Ic3b374d2e3840c05d72ed8b55697db4e5eef1f13 --- dali/internal/event/common/scene-impl.cpp | 5 -- dali/internal/event/common/scene-impl.h | 63 ---------------------- dali/internal/render/common/render-manager.cpp | 2 +- dali/internal/update/common/scene-graph-scene.cpp | 7 ++- dali/internal/update/common/scene-graph-scene.h | 64 ++++++++++++++++++++++- 5 files changed, 69 insertions(+), 72 deletions(-) diff --git a/dali/internal/event/common/scene-impl.cpp b/dali/internal/event/common/scene-impl.cpp index 7994cdf..ba88152 100644 --- a/dali/internal/event/common/scene-impl.cpp +++ b/dali/internal/event/common/scene-impl.cpp @@ -420,11 +420,6 @@ Integration::Scene::WheelEventSignalType& Scene::WheelEventSignal() return mWheelEventSignal; } -std::vector& Scene::GetItemsDirtyRects() -{ - return mItemsDirtyRects; -} - } // namespace Internal } // namespace Dali diff --git a/dali/internal/event/common/scene-impl.h b/dali/internal/event/common/scene-impl.h index 7065c16..34ab1a8 100644 --- a/dali/internal/event/common/scene-impl.h +++ b/dali/internal/event/common/scene-impl.h @@ -38,63 +38,9 @@ struct Event; namespace Internal { -//@todo Break this dependence somehow. -namespace Render -{ -class Renderer; -} - namespace SceneGraph { class Scene; - -struct DirtyRect -{ - DirtyRect(Node* node, Render::Renderer* renderer, int32_t frame, Rect& rect) - : node(node), - renderer(renderer), - frame(frame), - rect(rect), - visited(true) - { - } - - DirtyRect() - : node(nullptr), - renderer(nullptr), - frame(0), - rect(), - visited(true) - { - } - - bool operator<(const DirtyRect& rhs) const - { - if(node == rhs.node) - { - if(renderer == rhs.renderer) - { - return frame > rhs.frame; // Most recent rects come first - } - else - { - return renderer < rhs.renderer; - } - } - else - { - return node < rhs.node; - } - } - - Node* node; - Render::Renderer* renderer; - int32_t frame; - - Rect rect; - bool visited; -}; - } // namespace SceneGraph class EventProcessor; @@ -351,13 +297,6 @@ public: */ Integration::Scene::WheelEventSignalType& WheelEventSignal(); - /** - * @brief Get ItemsDirtyRects - * - * @return the ItemsDirtyRects - */ - std::vector& GetItemsDirtyRects(); - public: /** * From RenderTaskDefaults; retrieve the default root actor. @@ -436,8 +375,6 @@ private: // The wheel event signal Integration::Scene::WheelEventSignalType mWheelEventSignal; - - std::vector mItemsDirtyRects; }; } // namespace Internal diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index b9cf368..469b073 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -522,7 +522,7 @@ void RenderManager::PreRender(Integration::RenderStatus& status, Integration::Sc // Mark previous dirty rects in the sorted array. The array is already sorted by node and renderer, frame number. // so you don't need to sort: std::stable_sort(itemsDirtyRects.begin(), itemsDirtyRects.end()); - std::vector& itemsDirtyRects = sceneInternal.GetItemsDirtyRects(); + std::vector& itemsDirtyRects = sceneObject->GetItemsDirtyRects(); for(DirtyRect& dirtyRect : itemsDirtyRects) { dirtyRect.visited = false; diff --git a/dali/internal/update/common/scene-graph-scene.cpp b/dali/internal/update/common/scene-graph-scene.cpp index 55e94c7..1ad1c93 100644 --- a/dali/internal/update/common/scene-graph-scene.cpp +++ b/dali/internal/update/common/scene-graph-scene.cpp @@ -178,10 +178,15 @@ void Scene::SetRotationCompletedAcknowledgement() bool Scene::IsRotationCompletedAcknowledgementSet() { bool setRotationCompletedAcknowledgement = mRotationCompletedAcknowledgement; - mRotationCompletedAcknowledgement = false; + mRotationCompletedAcknowledgement = false; return setRotationCompletedAcknowledgement; } +std::vector& Scene::GetItemsDirtyRects() +{ + return mItemsDirtyRects; +} + } // namespace SceneGraph } // namespace Internal diff --git a/dali/internal/update/common/scene-graph-scene.h b/dali/internal/update/common/scene-graph-scene.h index 1413cbd..3337ecd 100644 --- a/dali/internal/update/common/scene-graph-scene.h +++ b/dali/internal/update/common/scene-graph-scene.h @@ -31,9 +31,62 @@ namespace Dali { namespace Internal { +namespace Render +{ +class Renderer; +} + namespace SceneGraph { class RenderInstructionContainer; +class Node; + +struct DirtyRect +{ + DirtyRect(Node* node, Render::Renderer* renderer, int32_t frame, Rect& rect) + : node(node), + renderer(renderer), + frame(frame), + rect(rect), + visited(true) + { + } + + DirtyRect() + : node(nullptr), + renderer(nullptr), + frame(0), + rect(), + visited(true) + { + } + + bool operator<(const DirtyRect& rhs) const + { + if(node == rhs.node) + { + if(renderer == rhs.renderer) + { + return frame > rhs.frame; // Most recent rects come first + } + else + { + return renderer < rhs.renderer; + } + } + else + { + return node < rhs.node; + } + } + + Node* node; + Render::Renderer* renderer; + int32_t frame; + + Rect rect; + bool visited; +}; class Scene { @@ -233,6 +286,13 @@ public: return mRoot; } + /** + * @brief Get ItemsDirtyRects + * + * @return the ItemsDirtyRects + */ + std::vector& GetItemsDirtyRects(); + private: // Render instructions describe what should be rendered during RenderManager::RenderScene() // Update manager updates instructions for the next frame while we render the current one @@ -260,8 +320,8 @@ private: Graphics::UniquePtr mRenderPassNoClear{nullptr}; ///< The render pass created to render the surface without clearing color Graphics::RenderTarget* mRenderTarget{nullptr}; ///< This is created in the event thread when surface is created/resized/replaced - // clear colors - std::vector mClearValues{}; + std::vector mClearValues{}; ///< Clear colors + std::vector mItemsDirtyRects{}; ///< Dirty rect list SceneGraph::Layer* mRoot{nullptr}; ///< Root node (root is a layer). The layer is not stored in the node memory pool. }; -- 2.7.4