X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Frender-tasks%2Fscene-graph-render-task-list.cpp;h=edbbe4a69e74c7c5d134a7444df4f5730f780e2d;hb=eacc080fe975c523d722dd17c044652317ddd6e8;hp=618c01e48eecc89b5bc21e4f0346a1fe6ca5cbae;hpb=8f2c7a1c1ad470b02521b862607a60d966e217f1;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..edbbe4a 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) 2022 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,88 @@ #include // INTERNAL INCLUDES -#include -#include +#include -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 gRenderTaskListMemoryPool; + +} // unnamed namespace +namespace Dali +{ namespace Internal { - namespace SceneGraph { +RenderTaskList* RenderTaskList::New() +{ + return new(gRenderTaskListMemoryPool.AllocateRawThreadSafe()) RenderTaskList(); +} + +RenderTaskList::RenderTaskList() +: mNotificationObject(nullptr), + mRenderMessageDispatcher(nullptr), + mOverlayRenderTask(nullptr) +{ +} + +RenderTaskList::~RenderTaskList() = default; -RenderTaskList::RenderTaskList(CompleteStatusManager& completeStatusManager) -: mNotificationObject( NULL ), - mCompleteStatusManager( completeStatusManager ) +void RenderTaskList::operator delete(void* ptr) { + gRenderTaskListMemoryPool.FreeThreadSafe(static_cast(ptr)); } -RenderTaskList::~RenderTaskList() +void RenderTaskList::SetRenderMessageDispatcher(RenderMessageDispatcher* renderMessageDispatcher) { + mRenderMessageDispatcher = renderMessageDispatcher; } -void RenderTaskList::AddTask( RenderTask* newTask ) +void RenderTaskList::AddTask(OwnerPointer& newTask) { - DALI_ASSERT_DEBUG( newTask != NULL && "SceneGraph RenderTask is null"); + DALI_ASSERT_DEBUG(newTask && "SceneGraph RenderTask is null"); + DALI_ASSERT_DEBUG(mRenderMessageDispatcher != NULL && "RenderMessageDispatcher is null"); - // mRenderTasks container takes ownership - mRenderTasks.PushBack( newTask ); - newTask->SetCompleteStatusManager( &mCompleteStatusManager ); + newTask->Initialize(*mRenderMessageDispatcher); + + if(mOverlayRenderTask && mRenderTasks[mRenderTasks.Size() - 1] == mOverlayRenderTask) + { + mRenderTasks.Insert(mRenderTasks.End() - 1, newTask.Release()); + } + else + { + mRenderTasks.PushBack(newTask.Release()); + } } -void RenderTaskList::RemoveTask( RenderTask* task ) +void RenderTaskList::AddOverlayTask(OwnerPointer& newTask) +{ + AddTask(newTask); + mOverlayRenderTask = mRenderTasks[mRenderTasks.Size() - 1]; +} + +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 +111,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 gRenderTaskListMemoryPool.GetCapacity(); +} + } // namespace SceneGraph } // namespace Internal