03c39fd98f12d733f79a248f1781326c626ae3cd
[platform/core/uifw/dali-core.git] / dali / internal / update / render-tasks / scene-graph-render-task-list.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/internal/update/render-tasks/scene-graph-render-task-list.h>
20
21 // INTERNAL INCLUDES
22 #include <dali/internal/common/memory-pool-object-allocator.h>
23
24 namespace //Unnamed namespace
25 {
26 //Memory pool used to allocate new RenderTaskLists. Memory used by this pool will be released when shutting down DALi
27 Dali::Internal::MemoryPoolObjectAllocator<Dali::Internal::SceneGraph::RenderTaskList> gRenderTaskListMemoryPool;
28
29 } // unnamed namespace
30
31 namespace Dali
32 {
33 namespace Internal
34 {
35 namespace SceneGraph
36 {
37 RenderTaskList* RenderTaskList::New()
38 {
39   return new(gRenderTaskListMemoryPool.AllocateRawThreadSafe()) RenderTaskList();
40 }
41
42 RenderTaskList::RenderTaskList()
43 : mNotificationObject(nullptr),
44   mRenderMessageDispatcher(nullptr)
45 {
46 }
47
48 RenderTaskList::~RenderTaskList() = default;
49
50 void RenderTaskList::operator delete(void* ptr)
51 {
52   gRenderTaskListMemoryPool.FreeThreadSafe(static_cast<RenderTaskList*>(ptr));
53 }
54
55 void RenderTaskList::SetRenderMessageDispatcher(RenderMessageDispatcher* renderMessageDispatcher)
56 {
57   mRenderMessageDispatcher = renderMessageDispatcher;
58 }
59
60 void RenderTaskList::AddTask(OwnerPointer<RenderTask>& newTask)
61 {
62   DALI_ASSERT_DEBUG(newTask && "SceneGraph RenderTask is null");
63   DALI_ASSERT_DEBUG(mRenderMessageDispatcher != NULL && "RenderMessageDispatcher is null");
64
65   newTask->Initialize(*mRenderMessageDispatcher);
66   // mRenderTasks container takes ownership
67   mRenderTasks.PushBack(newTask.Release());
68 }
69
70 void RenderTaskList::RemoveTask(RenderTask* task)
71 {
72   RenderTaskContainer::ConstIterator end = mRenderTasks.End();
73   for(RenderTaskContainer::Iterator iter = mRenderTasks.Begin(); iter != end; ++iter)
74   {
75     if(*iter == task)
76     {
77       // Destroy the task
78       mRenderTasks.Erase(iter);
79
80       break; // we're finished
81     }
82   }
83 }
84
85 uint32_t RenderTaskList::GetTaskCount()
86 {
87   return static_cast<uint32_t>(mRenderTasks.Count());
88 }
89
90 RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks()
91 {
92   return mRenderTasks;
93 }
94
95 const RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks() const
96 {
97   return mRenderTasks;
98 }
99
100 void RenderTaskList::SetCompleteNotificationInterface(CompleteNotificationInterface* object)
101 {
102   mNotificationObject = object;
103 }
104
105 CompleteNotificationInterface* RenderTaskList::GetCompleteNotificationInterface()
106 {
107   return mNotificationObject;
108 }
109
110 uint32_t RenderTaskList::GetMemoryPoolCapacity()
111 {
112   return gRenderTaskListMemoryPool.GetCapacity();
113 }
114
115 } // namespace SceneGraph
116
117 } // namespace Internal
118
119 } // namespace Dali