Make requested property basis resetter capacity as zero 39/323939/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 9 May 2025 09:32:45 +0000 (18:32 +0900)
committerEunki Hong <eunkiki.hong@samsung.com>
Fri, 9 May 2025 10:09:05 +0000 (10:09 +0000)
Since clear & rehash is heavyer than swap(), let we call it if we use
temperal copy, and use it.

Change-Id: I28cfd928c55d6ca10a165c26ebf4ded824da8df8
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/internal/update/manager/update-manager.cpp

index ea217c109f32ce29b81265847ee8f54236d37414..a1fe66904c63d249e537fcf01c97b4988ad734cc 100644 (file)
@@ -940,7 +940,6 @@ void UpdateManager::ResetProperties(BufferIndex bufferIndex)
   // (Since requested property base doesn't consider the lifecycle of PropertyBase,
   // It might be invalid after the previous update finished)
   DALI_ASSERT_DEBUG(mImpl->resetRequestedPropertyBases.empty() && "Reset to base values requested during the previous update!");
-  mImpl->resetRequestedPropertyBases.clear();
 
   // Reset node properties
   mImpl->nodeResetters.RequestResetToBaseValues();
@@ -952,11 +951,18 @@ void UpdateManager::ResetProperties(BufferIndex bufferIndex)
   mImpl->propertyResetters.RequestResetToBaseValues();
 
   // Actual reset to base values here
-  for(auto&& propertyBase : mImpl->resetRequestedPropertyBases)
+  if(!mImpl->resetRequestedPropertyBases.empty())
   {
-    propertyBase->ResetToBaseValue(bufferIndex);
+    decltype(mImpl->resetRequestedPropertyBases) propertyBaseList;
+
+    // Ensure to reset list as zero capacity (Since std::unordered_set::clear() is slow if capacity is not zero)
+    propertyBaseList.swap(mImpl->resetRequestedPropertyBases);
+
+    for(auto&& propertyBase : propertyBaseList)
+    {
+      propertyBase->ResetToBaseValue(bufferIndex);
+    }
   }
-  mImpl->resetRequestedPropertyBases.clear();
 
   // Clear all root nodes dirty flags
   for(auto& scene : mImpl->scenes)