Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Side by Side Diff: gpu/command_buffer/service/query_manager.h

Issue 184223003: gpu: Use explicit atomics instead of assuming that 32bit read/writes are atomic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-upload Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <vector> 9 #include <vector>
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 54 }
55 55
56 uint32 shm_offset() const { 56 uint32 shm_offset() const {
57 return shm_offset_; 57 return shm_offset_;
58 } 58 }
59 59
60 // Returns false if shared memory for sync is invalid. 60 // Returns false if shared memory for sync is invalid.
61 virtual bool Begin() = 0; 61 virtual bool Begin() = 0;
62 62
63 // Returns false if shared memory for sync is invalid. 63 // Returns false if shared memory for sync is invalid.
64 virtual bool End(uint32 submit_count) = 0; 64 virtual bool End(int32 submit_count) = 0;
65 65
66 // Returns false if shared memory for sync is invalid. 66 // Returns false if shared memory for sync is invalid.
67 virtual bool Process() = 0; 67 virtual bool Process() = 0;
68 68
69 virtual void Destroy(bool have_context) = 0; 69 virtual void Destroy(bool have_context) = 0;
70 70
71 void AddCallback(base::Closure callback); 71 void AddCallback(base::Closure callback);
72 72
73 protected: 73 protected:
74 virtual ~Query(); 74 virtual ~Query();
75 75
76 QueryManager* manager() const { 76 QueryManager* manager() const {
77 return manager_; 77 return manager_;
78 } 78 }
79 79
80 void MarkAsDeleted() { 80 void MarkAsDeleted() {
81 deleted_ = true; 81 deleted_ = true;
82 } 82 }
83 83
84 // Returns false if shared memory for sync is invalid. 84 // Returns false if shared memory for sync is invalid.
85 bool MarkAsCompleted(uint64 result); 85 bool MarkAsCompleted(uint64 result);
86 86
87 void MarkAsPending(uint32 submit_count) { 87 void MarkAsPending(int32 submit_count) {
88 DCHECK(!pending_); 88 DCHECK(!pending_);
89 pending_ = true; 89 pending_ = true;
90 submit_count_ = submit_count; 90 submit_count_ = submit_count;
91 } 91 }
92 92
93 void UnmarkAsPending() { 93 void UnmarkAsPending() {
94 DCHECK(pending_); 94 DCHECK(pending_);
95 pending_ = false; 95 pending_ = false;
96 } 96 }
97 97
98 // Returns false if shared memory for sync is invalid. 98 // Returns false if shared memory for sync is invalid.
99 bool AddToPendingQueue(uint32 submit_count) { 99 bool AddToPendingQueue(int32 submit_count) {
100 return manager_->AddPendingQuery(this, submit_count); 100 return manager_->AddPendingQuery(this, submit_count);
101 } 101 }
102 102
103 // Returns false if shared memory for sync is invalid. 103 // Returns false if shared memory for sync is invalid.
104 bool AddToPendingTransferQueue(uint32 submit_count) { 104 bool AddToPendingTransferQueue(int32 submit_count) {
105 return manager_->AddPendingTransferQuery(this, submit_count); 105 return manager_->AddPendingTransferQuery(this, submit_count);
106 } 106 }
107 107
108 void BeginQueryHelper(GLenum target, GLuint id) { 108 void BeginQueryHelper(GLenum target, GLuint id) {
109 manager_->BeginQueryHelper(target, id); 109 manager_->BeginQueryHelper(target, id);
110 } 110 }
111 111
112 void EndQueryHelper(GLenum target) { 112 void EndQueryHelper(GLenum target) {
113 manager_->EndQueryHelper(target); 113 manager_->EndQueryHelper(target);
114 } 114 }
115 115
116 uint32 submit_count() const { 116 int32 submit_count() const {
117 return submit_count_; 117 return submit_count_;
118 } 118 }
119 119
120 private: 120 private:
121 friend class QueryManager; 121 friend class QueryManager;
122 friend class QueryManagerTest; 122 friend class QueryManagerTest;
123 friend class base::RefCounted<Query>; 123 friend class base::RefCounted<Query>;
124 124
125 void RunCallbacks(); 125 void RunCallbacks();
126 126
127 // The manager that owns this Query. 127 // The manager that owns this Query.
128 QueryManager* manager_; 128 QueryManager* manager_;
129 129
130 // The type of query. 130 // The type of query.
131 GLenum target_; 131 GLenum target_;
132 132
133 // The shared memory used with this Query. 133 // The shared memory used with this Query.
134 int32 shm_id_; 134 int32 shm_id_;
135 uint32 shm_offset_; 135 uint32 shm_offset_;
136 136
137 // Count to set process count do when completed. 137 // Count to set process count do when completed.
138 uint32 submit_count_; 138 int32 submit_count_;
139 139
140 // True if in the queue. 140 // True if in the queue.
141 bool pending_; 141 bool pending_;
142 142
143 // True if deleted. 143 // True if deleted.
144 bool deleted_; 144 bool deleted_;
145 145
146 // List of callbacks to run when result is available. 146 // List of callbacks to run when result is available.
147 std::vector<base::Closure> callbacks_; 147 std::vector<base::Closure> callbacks_;
148 }; 148 };
(...skipping 13 matching lines...) Expand all
162 // Gets the query info for the given query. 162 // Gets the query info for the given query.
163 Query* GetQuery(GLuint client_id); 163 Query* GetQuery(GLuint client_id);
164 164
165 // Removes a query info for the given query. 165 // Removes a query info for the given query.
166 void RemoveQuery(GLuint client_id); 166 void RemoveQuery(GLuint client_id);
167 167
168 // Returns false if any query is pointing to invalid shared memory. 168 // Returns false if any query is pointing to invalid shared memory.
169 bool BeginQuery(Query* query); 169 bool BeginQuery(Query* query);
170 170
171 // Returns false if any query is pointing to invalid shared memory. 171 // Returns false if any query is pointing to invalid shared memory.
172 bool EndQuery(Query* query, uint32 submit_count); 172 bool EndQuery(Query* query, int32 submit_count);
173 173
174 // Processes pending queries. Returns false if any queries are pointing 174 // Processes pending queries. Returns false if any queries are pointing
175 // to invalid shared memory. 175 // to invalid shared memory.
176 bool ProcessPendingQueries(); 176 bool ProcessPendingQueries();
177 177
178 // True if there are pending queries. 178 // True if there are pending queries.
179 bool HavePendingQueries(); 179 bool HavePendingQueries();
180 180
181 // Processes pending transfer queries. Returns false if any queries are 181 // Processes pending transfer queries. Returns false if any queries are
182 // pointing to invalid shared memory. 182 // pointing to invalid shared memory.
(...skipping 10 matching lines...) Expand all
193 void StartTracking(Query* query); 193 void StartTracking(Query* query);
194 void StopTracking(Query* query); 194 void StopTracking(Query* query);
195 195
196 // Wrappers for BeginQueryARB and EndQueryARB to hide differences between 196 // Wrappers for BeginQueryARB and EndQueryARB to hide differences between
197 // ARB_occlusion_query2 and EXT_occlusion_query_boolean. 197 // ARB_occlusion_query2 and EXT_occlusion_query_boolean.
198 void BeginQueryHelper(GLenum target, GLuint id); 198 void BeginQueryHelper(GLenum target, GLuint id);
199 void EndQueryHelper(GLenum target); 199 void EndQueryHelper(GLenum target);
200 200
201 // Adds to queue of queries waiting for completion. 201 // Adds to queue of queries waiting for completion.
202 // Returns false if any query is pointing to invalid shared memory. 202 // Returns false if any query is pointing to invalid shared memory.
203 bool AddPendingQuery(Query* query, uint32 submit_count); 203 bool AddPendingQuery(Query* query, int32 submit_count);
204 204
205 // Adds to queue of transfer queries waiting for completion. 205 // Adds to queue of transfer queries waiting for completion.
206 // Returns false if any query is pointing to invalid shared memory. 206 // Returns false if any query is pointing to invalid shared memory.
207 bool AddPendingTransferQuery(Query* query, uint32 submit_count); 207 bool AddPendingTransferQuery(Query* query, int32 submit_count);
208 208
209 // Removes a query from the queue of pending queries. 209 // Removes a query from the queue of pending queries.
210 // Returns false if any query is pointing to invalid shared memory. 210 // Returns false if any query is pointing to invalid shared memory.
211 bool RemovePendingQuery(Query* query); 211 bool RemovePendingQuery(Query* query);
212 212
213 // Returns a target used for the underlying GL extension 213 // Returns a target used for the underlying GL extension
214 // used to emulate a query. 214 // used to emulate a query.
215 GLenum AdjustTargetForEmulation(GLenum target); 215 GLenum AdjustTargetForEmulation(GLenum target);
216 216
217 // Used to validate shared memory and get GL errors. 217 // Used to validate shared memory and get GL errors.
(...skipping 17 matching lines...) Expand all
235 // Async pixel transfer queries waiting for completion. 235 // Async pixel transfer queries waiting for completion.
236 QueryQueue pending_transfer_queries_; 236 QueryQueue pending_transfer_queries_;
237 237
238 DISALLOW_COPY_AND_ASSIGN(QueryManager); 238 DISALLOW_COPY_AND_ASSIGN(QueryManager);
239 }; 239 };
240 240
241 } // namespace gles2 241 } // namespace gles2
242 } // namespace gpu 242 } // namespace gpu
243 243
244 #endif // GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_ 244 #endif // GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698