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=71f5ada00b6ce9c5e857ba416e0a4a08320d2d07;hpb=5c66381841dd4dfd82c5a118d34104a00a2e0e1c;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 71f5ada..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,68 +1,112 @@ -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // CLASS HEADER #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() +: mNotificationObject(nullptr), + mResetterManager(nullptr), + mRenderMessageDispatcher(nullptr), + mOverlayRenderTask(nullptr) +{ +} + +RenderTaskList::~RenderTaskList() = default; -RenderTaskList::RenderTaskList(CompleteStatusManager& completeStatusManager) -: mCompleteStatusManager( completeStatusManager ) +void RenderTaskList::operator delete(void* ptr) { + GetRenderTaskListMemoryPool().FreeThreadSafe(static_cast(ptr)); } -RenderTaskList::~RenderTaskList() +void RenderTaskList::Initialize(ResetterManager& resetterManager, RenderMessageDispatcher& renderMessageDispatcher) { + mResetterManager = &resetterManager; + 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"); + + 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; @@ -73,6 +117,21 @@ const RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks() const return mRenderTasks; } +void RenderTaskList::SetCompleteNotificationInterface(CompleteNotificationInterface* object) +{ + mNotificationObject = object; +} + +CompleteNotificationInterface* RenderTaskList::GetCompleteNotificationInterface() +{ + return mNotificationObject; +} + +uint32_t RenderTaskList::GetMemoryPoolCapacity() +{ + return GetRenderTaskListMemoryPool().GetCapacity(); +} + } // namespace SceneGraph } // namespace Internal