Remove TextureManager / VectorAnimationManaver lifecycle observing 23/310023/4
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 19 Apr 2024 07:43:38 +0000 (16:43 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Fri, 19 Apr 2024 08:03:55 +0000 (17:03 +0900)
Since we can use Dali::Adaptor::IsAvailable(), we don't need to check
whether manager itself is alive or not.

Since both of them are member value of VisualFactoryCache, and VisualFactory
is singletone class what will be destructed at Adaptor stop timing,
Dali::Adaptor::IsAvailabe() is enough.

Add/Remove observer will give some overhead for usual cases.
So just remove it, and check adaptor vailables intead.

Change-Id: Ib26df2d607d2871626cda956d86524f74afd424b
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-toolkit/internal/texture-manager/texture-manager-impl.cpp
dali-toolkit/internal/texture-manager/texture-manager-impl.h
dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp
dali-toolkit/internal/visuals/animated-image/image-cache.cpp
dali-toolkit/internal/visuals/animated-image/image-cache.h
dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp
dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp
dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp
dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h
dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp
dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.h

index ef2e759337abab2b63381d9cae8716e23b043971..f3b5028c97de003d5b201ab1a675140954dc57a9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -102,7 +102,6 @@ TextureManager::MaskingData::MaskingData()
 TextureManager::TextureManager(bool loadYuvPlanes)
 : mTextureCacheManager(),
   mAsyncLoader(std::unique_ptr<TextureAsyncLoadingHelper>(new TextureAsyncLoadingHelper(*this))),
-  mLifecycleObservers(),
   mLoadQueue(),
   mLoadingQueueTextureId(INVALID_TEXTURE_ID),
   mRemoveQueue(),
@@ -120,11 +119,6 @@ TextureManager::~TextureManager()
     Adaptor::Get().UnregisterProcessor(*this, true);
     mRemoveProcessorRegistered = false;
   }
-
-  for(auto iter = mLifecycleObservers.Begin(), endIter = mLifecycleObservers.End(); iter != endIter; ++iter)
-  {
-    (*iter)->TextureManagerDestroyed();
-  }
 }
 
 TextureSet TextureManager::LoadAnimatedImageTexture(
@@ -872,29 +866,6 @@ void TextureManager::LoadImageSynchronously(
   }
 }
 
-void TextureManager::AddObserver(TextureManager::LifecycleObserver& observer)
-{
-  // make sure an observer doesn't observe the same object twice
-  // otherwise it will get multiple calls to ObjectDestroyed()
-  DALI_ASSERT_DEBUG(mLifecycleObservers.End() == std::find(mLifecycleObservers.Begin(), mLifecycleObservers.End(), &observer));
-  mLifecycleObservers.PushBack(&observer);
-}
-
-void TextureManager::RemoveObserver(TextureManager::LifecycleObserver& observer)
-{
-  // Find the observer...
-  auto endIter = mLifecycleObservers.End();
-  for(auto iter = mLifecycleObservers.Begin(); iter != endIter; ++iter)
-  {
-    if((*iter) == &observer)
-    {
-      mLifecycleObservers.Erase(iter);
-      break;
-    }
-  }
-  DALI_ASSERT_DEBUG(endIter != mLifecycleObservers.End());
-}
-
 void TextureManager::LoadOrQueueTexture(TextureManager::TextureInfo& textureInfo, TextureUploadObserver* observer)
 {
   switch(textureInfo.loadState)
index fdae67aee57501798ee8bba88e49a51a33cd25e2..f4608930e006a0581de98868dc3ca3ed3ebe5191 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_TEXTURE_MANAGER_IMPL_H
 
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -84,17 +84,6 @@ public:
   };
   using MaskingDataPointer = std::unique_ptr<MaskingData>;
 
-  /**
-   * Class to provide lifecycle event on destruction of texture manager.
-   */
-  struct LifecycleObserver
-  {
-    /**
-     * Called shortly before the texture manager is destroyed.
-     */
-    virtual void TextureManagerDestroyed() = 0;
-  };
-
   /**
    * Constructor.
    *
@@ -227,19 +216,6 @@ public:
     const TextureManager::ReloadPolicy reloadPolicy,
     TextureManager::MultiplyOnLoad&    preMultiplyOnLoad);
 
-  /**
-   * Add an observer to the object.
-   * @param[in] observer The observer to add.
-   */
-  void AddObserver(TextureManager::LifecycleObserver& observer);
-
-  /**
-   * Remove an observer from the object
-   * @pre The observer has already been added.
-   * @param[in] observer The observer to remove.
-   */
-  void RemoveObserver(TextureManager::LifecycleObserver& observer);
-
   /**
    * @brief Returns the geometry associated with texture.
    * @param[in] textureId Id of the texture
@@ -675,8 +651,7 @@ private:
 private:                                    // Member Variables:
   TextureCacheManager mTextureCacheManager; ///< Manager the life-cycle and caching of Textures
 
-  std::unique_ptr<TextureAsyncLoadingHelper> mAsyncLoader;        ///< The Asynchronous image loader used to provide all local async loads
-  Dali::Vector<LifecycleObserver*>           mLifecycleObservers; ///< Lifecycle observers of texture manager
+  std::unique_ptr<TextureAsyncLoadingHelper> mAsyncLoader; ///< The Asynchronous image loader used to provide all local async loads
 
   Dali::Vector<QueueElement> mLoadQueue;             ///< Queue of textures to load after NotifyObservers
   TextureManager::TextureId  mLoadingQueueTextureId; ///< TextureId when it is loading. it causes Load Textures to be queued.
index adf8da8b6975e3e9810998c21b0ca48b23b3842c..508a50e46d5759677c202106dc2a2d7694b8cce2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
 #include <dali-toolkit/internal/visuals/image-atlas-manager.h> // For ImageAtlasManagerPtr
 
 // EXTERNAL HEADERS
+#include <dali/integration-api/adaptor-framework/adaptor.h>
 #include <dali/integration-api/debug.h>
 
 namespace Dali
@@ -165,7 +166,7 @@ void FixedImageCache::MakeReady(bool wasReady, uint32_t frameIndex, bool preMult
 
 void FixedImageCache::ClearCache()
 {
-  if(mTextureManagerAlive)
+  if(Dali::Adaptor::IsAvailable())
   {
     for(std::size_t i = 0; i < mImageUrls.size(); ++i)
     {
@@ -185,7 +186,7 @@ void FixedImageCache::LoadComplete(bool loadSuccess, TextureInformation textureI
 {
   if(loadSuccess)
   {
-    mLoadState           = TextureManager::LoadState::LOAD_FINISHED;
+    mLoadState               = TextureManager::LoadState::LOAD_FINISHED;
     bool isCurrentFrameReady = IsFrameReady(mCurrentFrameIndex);
     if(!mRequestingLoad)
     {
index 2fda611800ecee10da60723289d7b2240debcc0f..ece9014ea7ff0f60423d0c7a43e2a71b30e91ea8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -42,23 +42,12 @@ ImageCache::ImageCache(TextureManager&                     textureManager,
   mInterval(interval),
   mLoadState(TextureManager::LoadState::NOT_STARTED),
   mRequestingLoad(false),
-  mPreMultiplyOnLoad(preMultiplyOnLoad),
-  mTextureManagerAlive(true)
+  mPreMultiplyOnLoad(preMultiplyOnLoad)
 {
-  mTextureManager.AddObserver(*this);
 }
 
 ImageCache::~ImageCache()
 {
-  if(mTextureManagerAlive)
-  {
-    mTextureManager.RemoveObserver(*this);
-  }
-}
-
-void ImageCache::TextureManagerDestroyed()
-{
-  mTextureManagerAlive = false;
 }
 
 void ImageCache::SetInterval(uint32_t interval)
index c40a8959ca5510746e730a440f97fb4e0e21d0e5..aee80b27514901a40392ffbeaf63cbfc0d78d5de 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_IMAGE_CACHE_H
 
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@ namespace Toolkit
 {
 namespace Internal
 {
-class ImageCache : public TextureManager::LifecycleObserver
+class ImageCache
 {
 public:
   /**
@@ -137,11 +137,6 @@ public:
   virtual void SetInterval(uint32_t interval);
 
 private:
-  /**
-   * @brief Called before the texture manager is destroyed.
-   */
-  void TextureManagerDestroyed() final;
-
   void AllocateMaskData();
 
 protected:
@@ -156,7 +151,6 @@ protected:
   TextureManager::LoadState           mLoadState;
   bool                                mRequestingLoad : 1;
   bool                                mPreMultiplyOnLoad : 1;
-  bool                                mTextureManagerAlive : 1;
 };
 
 } // namespace Internal
index 370a6787360b67cc652f978692df14ce080d7059..f2d7275564dcb9ef1b47a8735bfeca2fa3c5e1d0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
 // INTERNAL HEADERS
 #include <dali-toolkit/devel-api/image-loader/texture-manager.h>
 #include <dali-toolkit/internal/visuals/image-atlas-manager.h> // For ImageAtlasManagerPtr
+#include <dali/integration-api/adaptor-framework/adaptor.h>
 #include <dali/integration-api/debug.h>
 
 namespace
@@ -306,7 +307,7 @@ void RollingAnimatedImageCache::PopFrontCache()
 
 void RollingAnimatedImageCache::ClearCache()
 {
-  while(mTextureManagerAlive && !mQueue.IsEmpty())
+  while(Dali::Adaptor::IsAvailable() && !mQueue.IsEmpty())
   {
     PopFrontCache();
   }
index 0bb1629558663470cc94470aeabc37d684507f15..06c57f2ec4649da3a3f215b0b37c280702f71221 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 // INTERNAL HEADERS
 #include <dali-toolkit/internal/visuals/image-atlas-manager.h> // For ImageAtlasManagerPtr
-#include <dali/integration-api/debug.h>
 
 // EXTERNAL HEADERS
+#include <dali/integration-api/adaptor-framework/adaptor.h>
+#include <dali/integration-api/debug.h>
 
 namespace
 {
@@ -220,7 +221,7 @@ void RollingImageCache::PopFrontCache()
 
 void RollingImageCache::ClearCache()
 {
-  while(mTextureManagerAlive && !mQueue.IsEmpty())
+  while(Dali::Adaptor::IsAvailable() && !mQueue.IsEmpty())
   {
     PopFrontCache();
   }
index 3a1f180ce3ce2695b2bd2dd17d7f2a6d38e80eb3..668bcc959181631c97dc40b7f6ee5c45f6998cc0 100644 (file)
@@ -101,7 +101,6 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual(VisualFactoryCache& factory
   mLastSentPlayStateId(0u),
   mLoadFailed(false),
   mRendererAdded(false),
-  mCoreShutdown(false),
   mRedrawInScalingDown(true),
   mEnableFrameCache(false),
   mUseNativeImage(false),
@@ -116,7 +115,7 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual(VisualFactoryCache& factory
 
 AnimatedVectorImageVisual::~AnimatedVectorImageVisual()
 {
-  if(!mCoreShutdown)
+  if(Dali::Adaptor::IsAvailable())
   {
     if(mImageUrl.IsBufferResource())
     {
@@ -124,9 +123,6 @@ AnimatedVectorImageVisual::~AnimatedVectorImageVisual()
       textureManager.RemoveEncodedImageBuffer(mImageUrl.GetUrl());
     }
 
-    auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager();
-    vectorAnimationManager.RemoveObserver(*this);
-
     if(mEventCallback)
     {
       mFactoryCache.GetVectorAnimationManager().UnregisterEventCallback(mEventCallback);
@@ -139,12 +135,6 @@ AnimatedVectorImageVisual::~AnimatedVectorImageVisual()
   }
 }
 
-void AnimatedVectorImageVisual::VectorAnimationManagerDestroyed()
-{
-  // Core is shutting down. Don't talk to the plugin any more.
-  mCoreShutdown = true;
-}
-
 void AnimatedVectorImageVisual::GetNaturalSize(Vector2& naturalSize)
 {
   if(mDesiredSize.GetWidth() > 0 && mDesiredSize.GetHeight() > 0)
@@ -451,9 +441,6 @@ void AnimatedVectorImageVisual::OnInitialize(void)
   mVectorAnimationTask->KeepRasterizedBuffer(mEnableFrameCache);
   mVectorAnimationTask->RequestLoad(mImageUrl, encodedImageBuffer, IsSynchronousLoadingRequired());
 
-  auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager();
-  vectorAnimationManager.AddObserver(*this);
-
   Shader shader = GenerateShader();
 
   Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY);
@@ -630,7 +617,7 @@ void AnimatedVectorImageVisual::OnDoAction(const Property::Index actionId, const
     }
     case DevelAnimatedVectorImageVisual::Action::FLUSH:
     {
-      if(DALI_LIKELY(!mCoreShutdown))
+      if(DALI_LIKELY(Dali::Adaptor::IsAvailable()))
       {
         SendAnimationData();
       }
@@ -817,7 +804,7 @@ void AnimatedVectorImageVisual::StopAnimation()
 
 void AnimatedVectorImageVisual::TriggerVectorRasterization()
 {
-  if(!mEventCallback && !mCoreShutdown)
+  if(!mEventCallback && Dali::Adaptor::IsAvailable())
   {
     mEventCallback               = MakeCallback(this, &AnimatedVectorImageVisual::OnProcessEvents);
     auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager();
index 2cc43bf75089f6e443250fcf6e2faf804911b829..748f427b0cec84d770c3046132e7b7a73e933965 100644 (file)
@@ -53,7 +53,7 @@ using AnimatedVectorImageVisualPtr = IntrusivePtr<AnimatedVectorImageVisual>;
  * | url                      | STRING           |
  *
  */
-class AnimatedVectorImageVisual : public Visual::Base, public ConnectionTracker, public VectorAnimationManager::LifecycleObserver
+class AnimatedVectorImageVisual : public Visual::Base, public ConnectionTracker
 {
 public:
   /**
@@ -99,12 +99,6 @@ public: // from Visual
    */
   void EnablePreMultipliedAlpha(bool preMultiplied) override;
 
-protected: // From VectorAnimationManager::LifecycleObserver:
-  /**
-   * @copydoc VectorAnimationManager::LifecycleObserver::VectorAnimationManagerDestroyed()
-   */
-  void VectorAnimationManagerDestroyed() override;
-
 protected:
   /**
    * @brief Constructor.
@@ -257,7 +251,6 @@ private:
 
   bool mLoadFailed : 1;
   bool mRendererAdded : 1;
-  bool mCoreShutdown : 1;
   bool mRedrawInScalingDown : 1;
   bool mEnableFrameCache : 1;
   bool mUseNativeImage : 1;
index fda5168c0ef031355ba0bebc6b271dc11b4a64a8..430a0c56040798c9bb9318495ab265aba19eaab9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,7 +44,6 @@ DALI_INIT_TRACE_FILTER(gTraceFilter, DALI_TRACE_IMAGE_PERFORMANCE_MARKER, false)
 
 VectorAnimationManager::VectorAnimationManager()
 : mEventCallbacks(),
-  mLifecycleObservers(),
   mVectorAnimationThread(nullptr),
   mProcessorRegistered(false)
 {
@@ -58,26 +57,6 @@ VectorAnimationManager::~VectorAnimationManager()
   {
     Adaptor::Get().UnregisterProcessor(*this, true);
   }
-
-  for(auto observer : mLifecycleObservers)
-  {
-    observer->VectorAnimationManagerDestroyed();
-  }
-}
-
-void VectorAnimationManager::AddObserver(VectorAnimationManager::LifecycleObserver& observer)
-{
-  DALI_ASSERT_DEBUG(mLifecycleObservers.end() == std::find(mLifecycleObservers.begin(), mLifecycleObservers.end(), &observer));
-  mLifecycleObservers.push_back(&observer);
-}
-
-void VectorAnimationManager::RemoveObserver(VectorAnimationManager::LifecycleObserver& observer)
-{
-  auto iterator = std::find(mLifecycleObservers.begin(), mLifecycleObservers.end(), &observer);
-  if(iterator != mLifecycleObservers.end())
-  {
-    mLifecycleObservers.erase(iterator);
-  }
 }
 
 VectorAnimationThread& VectorAnimationManager::GetVectorAnimationThread()
index c3cba215d64b5e08bcd6a58ffd3ad2f90ecdff31..98794715da5cb8839c2031ddb015e125fce5cef0 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_VECTOR_ANIMATION_MANAGER_H
 
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,11 +40,6 @@ class VectorAnimationThread;
 class VectorAnimationManager : public Integration::Processor
 {
 public:
-  struct LifecycleObserver
-  {
-    virtual void VectorAnimationManagerDestroyed() = 0;
-  };
-
   /**
    * @brief Constructor.
    */
@@ -55,18 +50,6 @@ public:
    */
   ~VectorAnimationManager() override;
 
-  /**
-   * Add a lifecycle observer
-   * @param[in] observer The object watching this one
-   */
-  void AddObserver(LifecycleObserver& observer);
-
-  /**
-   * Remove a lifecycle observer
-   * @param[in] observer The object watching this one
-   */
-  void RemoveObserver(LifecycleObserver& observer);
-
   /**
    * Get the vector animation thread.
    * @return A raw pointer pointing to the vector animation thread.
@@ -111,7 +94,6 @@ private:
 
 private:
   std::vector<std::unique_ptr<CallbackBase>> mEventCallbacks;
-  std::vector<LifecycleObserver*>            mLifecycleObservers;
   std::unique_ptr<VectorAnimationThread>     mVectorAnimationThread;
   bool                                       mProcessorRegistered;
 };