X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Frender-tasks%2Fscene-graph-render-task-list.cpp;h=255b1b04e52fb58dc2f6769a880aafa5b0869402;hb=6c595946e2d7dddcefa616dfaaed623d23d5242b;hp=618c01e48eecc89b5bc21e4f0346a1fe6ca5cbae;hpb=4db25a3da1c48b1c45b2d73a4aaf4945e7e40ca8;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/render-tasks/scene-graph-render-task-list.cpp b/dali/internal/update/render-tasks/scene-graph-render-task-list.cpp index 618c01e..255b1b0 100644 --- a/dali/internal/update/render-tasks/scene-graph-render-task-list.cpp +++ b/dali/internal/update/render-tasks/scene-graph-render-task-list.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -19,52 +19,94 @@ #include // INTERNAL INCLUDES -#include -#include +#include +#include ///< For AddInitializeResetter -namespace Dali +namespace //Unnamed namespace +{ +//Memory pool used to allocate new RenderTaskLists. Memory used by this pool will be released when shutting down DALi +Dali::Internal::MemoryPoolObjectAllocator& GetRenderTaskListMemoryPool() { + static Dali::Internal::MemoryPoolObjectAllocator gRenderTaskListMemoryPool; + return gRenderTaskListMemoryPool; +} +} // unnamed namespace +namespace Dali +{ namespace Internal { - namespace SceneGraph { +RenderTaskList* RenderTaskList::New() +{ + return new(GetRenderTaskListMemoryPool().AllocateRawThreadSafe()) RenderTaskList(); +} -RenderTaskList::RenderTaskList(CompleteStatusManager& completeStatusManager) -: mNotificationObject( NULL ), - mCompleteStatusManager( completeStatusManager ) +RenderTaskList::RenderTaskList() +: mNotificationObject(nullptr), + mResetterManager(nullptr), + mRenderMessageDispatcher(nullptr), + mOverlayRenderTask(nullptr) { } -RenderTaskList::~RenderTaskList() +RenderTaskList::~RenderTaskList() = default; + +void RenderTaskList::operator delete(void* ptr) { + GetRenderTaskListMemoryPool().FreeThreadSafe(static_cast(ptr)); } -void RenderTaskList::AddTask( RenderTask* newTask ) +void RenderTaskList::Initialize(ResetterManager& resetterManager, RenderMessageDispatcher& renderMessageDispatcher) { - DALI_ASSERT_DEBUG( newTask != NULL && "SceneGraph RenderTask is null"); + mResetterManager = &resetterManager; + mRenderMessageDispatcher = &renderMessageDispatcher; +} + +void RenderTaskList::AddTask(OwnerPointer& newTask) +{ + DALI_ASSERT_DEBUG(newTask && "SceneGraph RenderTask is null"); + DALI_ASSERT_DEBUG(mRenderMessageDispatcher != NULL && "RenderMessageDispatcher is null"); + + newTask->Initialize(*mResetterManager, *mRenderMessageDispatcher); + + if(mOverlayRenderTask && mRenderTasks[mRenderTasks.Size() - 1] == mOverlayRenderTask) + { + mRenderTasks.Insert(mRenderTasks.End() - 1, newTask.Release()); + } + else + { + mRenderTasks.PushBack(newTask.Release()); + } +} - // mRenderTasks container takes ownership - mRenderTasks.PushBack( newTask ); - newTask->SetCompleteStatusManager( &mCompleteStatusManager ); +void RenderTaskList::AddOverlayTask(OwnerPointer& newTask) +{ + AddTask(newTask); + mOverlayRenderTask = mRenderTasks[mRenderTasks.Size() - 1]; } -void RenderTaskList::RemoveTask( RenderTask* task ) +void RenderTaskList::RemoveTask(RenderTask* task) { RenderTaskContainer::ConstIterator end = mRenderTasks.End(); - for ( RenderTaskContainer::Iterator iter = mRenderTasks.Begin(); iter != end; ++iter ) + for(RenderTaskContainer::Iterator iter = mRenderTasks.Begin(); iter != end; ++iter) { - if ( *iter == task ) + if(*iter == task) { // Destroy the task - mRenderTasks.Erase( iter ); + mRenderTasks.Erase(iter); break; // we're finished } } } +uint32_t RenderTaskList::GetTaskCount() +{ + return static_cast(mRenderTasks.Count()); +} + RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks() { return mRenderTasks; @@ -75,18 +117,21 @@ const RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks() const return mRenderTasks; } -void RenderTaskList::SetCompleteNotificationInterface( CompleteNotificationInterface* object ) +void RenderTaskList::SetCompleteNotificationInterface(CompleteNotificationInterface* object) { - mNotificationObject = object; } CompleteNotificationInterface* RenderTaskList::GetCompleteNotificationInterface() { - return mNotificationObject; } +uint32_t RenderTaskList::GetMemoryPoolCapacity() +{ + return GetRenderTaskListMemoryPool().GetCapacity(); +} + } // namespace SceneGraph } // namespace Internal