Ensure AnimatedVectorImageVisual doesn't hang app
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / animated-vector-image / vector-animation-manager.cpp
index 8e47d81..ad56227 100644 (file)
@@ -45,6 +45,7 @@ Debug::Filter* gVectorAnimationLogFilter = Debug::Filter::New( Debug::NoLogging,
 
 VectorAnimationManager::VectorAnimationManager()
 : mEventCallbacks(),
+  mLifecycleObservers(),
   mVectorAnimationThread( nullptr ),
   mProcessorRegistered( false )
 {
@@ -62,6 +63,26 @@ VectorAnimationManager::~VectorAnimationManager()
   {
     Adaptor::Get().UnregisterProcessor( *this );
   }
+
+  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()