Revert "[Tizen] Add codes for Dali Windows Backend"
[platform/core/uifw/dali-core.git] / dali / internal / render / common / render-tracker.h
1 #ifndef __DALI_INTERNAL_RENDER_RENDER_TRACKER_H
2 #define __DALI_INTERNAL_RENDER_RENDER_TRACKER_H
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 #include <dali/integration-api/gl-sync-abstraction.h>
22 #include <dali/internal/common/message.h>
23
24 namespace Dali
25 {
26 namespace Internal
27 {
28 namespace Render
29 {
30
31 /**
32  * This class is used to communicate with Fence Sync objects, keeping access solely in
33  * the RenderThread to avoid having mutual exclusion locks or messages back to the UpdateThread.
34  */
35 class RenderTracker
36 {
37 public:
38   /**
39    * Constructor
40    */
41   RenderTracker();
42
43   /**
44    * Destructor
45    */
46   ~RenderTracker();
47
48   /**
49    * Creates a sync object for this tracker. Will delete any existing sync object.
50    */
51   void CreateSyncObject( Integration::GlSyncAbstraction& glSyncAbstraction );
52
53   /**
54    * Check the GL Sync objects. This is called from Render Thread.
55    * If the GlSyncObject has been triggered, then atomically set the sync trigger
56    */
57   void PollSyncObject();
58
59   /**
60    * Check the sync trigger. This is called from Update Thread, so atomically reads the sync trigger
61    * It clears the sync trigger if it was set.
62    * @return true if the tracker has been synced
63    */
64   bool IsSynced();
65
66   /**
67    * Atomically reset the sync trigger. This may be called from any thread
68    */
69   void ResetSyncFlag();
70
71   /**
72    * Atomically sets the sync trigger. This may be called from any thread
73    */
74   void SetSyncFlag();
75
76 private:
77
78   Integration::GlSyncAbstraction* mGlSyncAbstraction;      // The sync abstraction
79   Integration::GlSyncAbstraction::SyncObject* mSyncObject; // Associated sync object
80   volatile int mSyncTrigger;                               // Trigger that update thread can read
81
82 };
83
84 } // Render
85
86 } // Internal
87
88 } // Dali
89
90
91 #endif // __DALI_INTERNAL_RENDER_RENDER_TRACKER_H