X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fvector-animation-manager.cpp;h=430a0c56040798c9bb9318495ab265aba19eaab9;hb=HEAD;hp=59cd4baa63afd0640c92487215aa1a1ccc127ed0;hpb=cc5cc405aa45b6581343dbcd13668f1c1a35ebeb;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp index 59cd4ba..54227af 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp @@ -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 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES #include @@ -37,11 +38,12 @@ namespace Debug::Filter* gVectorAnimationLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_VECTOR_ANIMATION"); #endif +DALI_INIT_TRACE_FILTER(gTraceFilter, DALI_TRACE_IMAGE_PERFORMANCE_MARKER, false); + } // unnamed namespace VectorAnimationManager::VectorAnimationManager() : mEventCallbacks(), - mLifecycleObservers(), mVectorAnimationThread(nullptr), mProcessorRegistered(false) { @@ -49,31 +51,11 @@ VectorAnimationManager::VectorAnimationManager() VectorAnimationManager::~VectorAnimationManager() { - mEventCallbacks.clear(); + mEventCallbacks.Clear(); if(mProcessorRegistered && Adaptor::IsAvailable()) { - 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); + Adaptor::Get().UnregisterProcessorOnce(*this, true); } } @@ -89,47 +71,57 @@ VectorAnimationThread& VectorAnimationManager::GetVectorAnimationThread() void VectorAnimationManager::RegisterEventCallback(CallbackBase* callback) { - mEventCallbacks.emplace_back(std::unique_ptr(callback)); + mEventCallbacks.PushBack(callback); ///< Take ownership of callback. if(!mProcessorRegistered) { - Adaptor::Get().RegisterProcessor(*this, true); // Use post processor to trigger after layoutting + Adaptor::Get().RegisterProcessorOnce(*this, true); // Use post processor to trigger after layoutting mProcessorRegistered = true; } } void VectorAnimationManager::UnregisterEventCallback(CallbackBase* callback) { - auto iter = std::find_if(mEventCallbacks.begin(), - mEventCallbacks.end(), - [callback](const std::unique_ptr& element) { - return element.get() == callback; - }); - if(iter != mEventCallbacks.end()) + auto iter = mEventCallbacks.Find(callback); + if(iter != mEventCallbacks.End()) { - mEventCallbacks.erase(iter); - - if(mEventCallbacks.empty()) - { - if(Adaptor::IsAvailable()) - { - Adaptor::Get().UnregisterProcessor(*this, true); - mProcessorRegistered = false; - } - } + mEventCallbacks.Erase(iter); } } void VectorAnimationManager::Process(bool postProcessor) { +#ifdef TRACE_ENABLED + if(gTraceFilter && gTraceFilter->IsTraceEnabled()) + { + if(mEventCallbacks.Count() > 0u) + { + std::ostringstream oss; + oss << "[" << mEventCallbacks.Count() << "]"; + DALI_TRACE_BEGIN_WITH_MESSAGE(gTraceFilter, "DALI_VECTOR_ANIMATION_MANAGER_PROCESS", oss.str().c_str()); + } + } +#endif + + mProcessorRegistered = false; + for(auto&& iter : mEventCallbacks) { CallbackBase::Execute(*iter); } - mEventCallbacks.clear(); - Adaptor::Get().UnregisterProcessor(*this, true); - mProcessorRegistered = false; +#ifdef TRACE_ENABLED + if(gTraceFilter && gTraceFilter->IsTraceEnabled()) + { + if(mEventCallbacks.Count() > 0u) + { + std::ostringstream oss; + oss << "[" << mEventCallbacks.Count() << "]"; + DALI_TRACE_END_WITH_MESSAGE(gTraceFilter, "DALI_VECTOR_ANIMATION_MANAGER_PROCESS", oss.str().c_str()); + } + } +#endif + mEventCallbacks.Clear(); } } // namespace Internal