Cache traveler only if the node was child of root node 36/305936/2
authorEunki Hong <eunkiki.hong@samsung.com>
Wed, 14 Feb 2024 02:29:48 +0000 (11:29 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Thu, 15 Feb 2024 09:20:52 +0000 (18:20 +0900)
To avoid cache node infinitly, let we cache only if the node was child of root.
If then, we don't worry about memory increasement.

Change-Id: I8a97a84f6dc6721ca185241f76df5e968f02161a
Signed-off-by: Eunki Hong <eunkiki.hong@samsung.com>
dali/internal/update/manager/scene-graph-traveler.cpp
dali/internal/update/manager/scene-graph-traveler.h

index 048a9e3..95805f3 100644 (file)
@@ -72,11 +72,7 @@ SceneGraph::Node* SceneGraphTraveler::FindNode(uint32_t id)
         auto iter = mTravledNodeMap.find(iterateNodeId);
         if(iter != mTravledNodeMap.end())
         {
-          // iter->second could be nullptr if it was failed item before.
-          if(iter->second != nullptr)
-          {
-            isNodeUnderRootNode = true;
-          }
+          isNodeUnderRootNode = true;
           break;
         }
         nodeStack.push_back({iterateNodeId, iterateNode});
@@ -86,13 +82,13 @@ SceneGraph::Node* SceneGraphTraveler::FindNode(uint32_t id)
       }
 
       // Store current found result.
-      for(auto&& idPair : nodeStack)
-      {
-        mTravledNodeMap.insert({idPair.first, isNodeUnderRootNode ? idPair.second : nullptr});
-      }
-
+      // Note : We don't cache failed cases, to avoid memory increasement.
       if(isNodeUnderRootNode)
       {
+        for(auto&& idPair : nodeStack)
+        {
+          mTravledNodeMap.insert({idPair.first, idPair.second});
+        }
         node = currentNode;
       }
     }
index 3f45c47..10a6cdd 100644 (file)
@@ -106,7 +106,6 @@ private:
   SceneGraph::Node& mRootNode;
 
   std::unordered_map<uint32_t, SceneGraph::Node*> mTravledNodeMap; ///< Used to store cached pointers to already searched for Nodes.
-                                                                   ///< If node is not under root node, it will store nullptr.
 
   bool mInvalidated : 1; ///< True if root node was destroyed.
 };