1 #ifndef __DALI_INTERNAL_UPDATE_MESSAGE_QUEUE_H__
2 #define __DALI_INTERNAL_UPDATE_MESSAGE_QUEUE_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/internal/common/buffer-index.h>
23 #include <dali/internal/update/common/scene-graph-buffers.h>
30 class RenderController;
39 class SceneGraphBuffers;
47 * Used by UpdateManager to receive messages from the event-thread.
54 * Create a new UpdateMessageQueue.
55 * @param[in] renderController After messages are flushed, we request a render from the RenderController.
56 * @param[in] sceneGraphBuffers Used to keep track of which buffers are being written or read.
58 MessageQueue( Integration::RenderController& renderController,
59 const SceneGraph::SceneGraphBuffers& sceneGraphBuffers );
67 * Inform the queue that event processing has started
69 void EventProcessingStarted();
72 * Reserve space for a message
73 * @param[in] size the message size with respect to the size of type 'char'
74 * @param[in] updateScene If set to true, denotes that the message will cause the scene graph node tree to require an update
75 * @return A pointer to the first char allocated for the message
77 unsigned int* ReserveMessageSlot( unsigned int size, bool updateScene );
80 * Flushes the message queue
81 * @return true if there are messages to process
85 // Exclusive to UpdateManager
88 * Called once per update; process the previously flushed messages.
89 * @param updateBufferIndex to use
91 void ProcessMessages( BufferIndex updateBufferIndex );
94 * Query whether the queue was empty this frame.
96 bool WasEmpty() const;
99 * Query whether the queue contains at least one message that requires that the scene-graph
100 * node tree be updated.
101 * @return A flag, true if the scene graph needs an update
103 bool IsSceneUpdateRequired() const;
108 * Helper to call Process and destructor on each queued message
109 * @param[in] minorQueue The queue to process.
111 void ProcessMinorQueue( char* minorQueue );
116 MessageQueue ( const MessageQueue& rhs );
117 MessageQueue& operator=( const MessageQueue& rhs );
125 } // namespace Update
127 } // namespace Internal
131 #endif // __DALI_INTERNAL_UPDATE_MESSAGE_QUEUE_H__