/*
- * Copyright (c) 2020 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.
#include <dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.h>
// EXTERNAL INCLUDES
-#include <dali/integration-api/debug.h>
#include <dali/integration-api/adaptor-framework/adaptor.h>
+#include <dali/integration-api/debug.h>
+#include <dali/integration-api/trace.h>
// INTERNAL INCLUDES
#include <dali-toolkit/internal/visuals/animated-vector-image/vector-animation-thread.h>
namespace Dali
{
-
namespace Toolkit
{
-
namespace Internal
{
-
namespace
{
-
#if defined(DEBUG_ENABLED)
-Debug::Filter* gVectorAnimationLogFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_VECTOR_ANIMATION" );
+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(),
- mVectorAnimationThread( nullptr ),
- mProcessorRegistered( false )
+ mVectorAnimationThread(nullptr),
+ mProcessorRegistered(false)
{
}
VectorAnimationManager::~VectorAnimationManager()
{
- for( auto&& iter : mEventCallbacks )
- {
- delete iter;
- }
mEventCallbacks.clear();
- if( mProcessorRegistered )
+ if(mProcessorRegistered && Adaptor::IsAvailable())
{
- Adaptor::Get().UnregisterProcessor( *this );
+ Adaptor::Get().UnregisterProcessor(*this, true);
}
}
VectorAnimationThread& VectorAnimationManager::GetVectorAnimationThread()
{
- if( !mVectorAnimationThread )
+ if(!mVectorAnimationThread)
{
- mVectorAnimationThread = std::unique_ptr< VectorAnimationThread >( new VectorAnimationThread() );
+ mVectorAnimationThread = std::unique_ptr<VectorAnimationThread>(new VectorAnimationThread());
mVectorAnimationThread->Start();
}
return *mVectorAnimationThread;
}
-void VectorAnimationManager::RegisterEventCallback( CallbackBase* callback )
+void VectorAnimationManager::RegisterEventCallback(CallbackBase* callback)
{
- mEventCallbacks.push_back( callback );
+ mEventCallbacks.emplace_back(std::unique_ptr<Dali::CallbackBase>(callback));
- if( !mProcessorRegistered )
+ if(!mProcessorRegistered)
{
- Adaptor::Get().RegisterProcessor( *this );
+ Adaptor::Get().RegisterProcessor(*this, true); // Use post processor to trigger after layoutting
mProcessorRegistered = true;
}
}
-void VectorAnimationManager::UnregisterEventCallback( CallbackBase* callback )
+void VectorAnimationManager::UnregisterEventCallback(CallbackBase* callback)
{
- auto iter = std::find( mEventCallbacks.begin(), mEventCallbacks.end(), callback );
- if( iter != mEventCallbacks.end() )
+ auto iter = std::find_if(mEventCallbacks.begin(),
+ mEventCallbacks.end(),
+ [callback](const std::unique_ptr<CallbackBase>& element) {
+ return element.get() == callback;
+ });
+ if(iter != mEventCallbacks.end())
{
- mEventCallbacks.erase( iter );
+ mEventCallbacks.erase(iter);
- if( mEventCallbacks.empty() )
+ if(mEventCallbacks.empty())
{
- if( Adaptor::IsAvailable() )
+ if(Adaptor::IsAvailable())
{
- Adaptor::Get().UnregisterProcessor( *this );
+ Adaptor::Get().UnregisterProcessor(*this, true);
mProcessorRegistered = false;
}
}
}
}
-void VectorAnimationManager::Process()
+void VectorAnimationManager::Process(bool postProcessor)
{
- for( auto&& iter : mEventCallbacks )
+#ifdef TRACE_ENABLED
+ if(gTraceFilter && gTraceFilter->IsTraceEnabled())
{
- CallbackBase::Execute( *iter );
- delete iter;
+ if(mEventCallbacks.size() > 0u)
+ {
+ std::ostringstream oss;
+ oss << "[" << mEventCallbacks.size() << "]";
+ DALI_TRACE_BEGIN_WITH_MESSAGE(gTraceFilter, "DALI_VECTOR_ANIMATION_MANAGER_PROCESS", oss.str().c_str());
+ }
}
+#endif
+
+ for(auto&& iter : mEventCallbacks)
+ {
+ CallbackBase::Execute(*iter);
+ }
+
+#ifdef TRACE_ENABLED
+ if(gTraceFilter && gTraceFilter->IsTraceEnabled())
+ {
+ if(mEventCallbacks.size() > 0u)
+ {
+ std::ostringstream oss;
+ oss << "[" << mEventCallbacks.size() << "]";
+ DALI_TRACE_END_WITH_MESSAGE(gTraceFilter, "DALI_VECTOR_ANIMATION_MANAGER_PROCESS", oss.str().c_str());
+ }
+ }
+#endif
mEventCallbacks.clear();
- Adaptor::Get().UnregisterProcessor( *this );
+ Adaptor::Get().UnregisterProcessor(*this, true);
mProcessorRegistered = false;
}