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

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

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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
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 #include "gpu/command_buffer/service/query_manager.h" 5 #include "gpu/command_buffer/service/query_manager.h"
6 6
7 #include "base/atomicops.h" 7 #include "base/atomicops.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 class AsyncPixelTransfersCompletedQuery 58 class AsyncPixelTransfersCompletedQuery
59 : public QueryManager::Query, 59 : public QueryManager::Query,
60 public base::SupportsWeakPtr<AsyncPixelTransfersCompletedQuery> { 60 public base::SupportsWeakPtr<AsyncPixelTransfersCompletedQuery> {
61 public: 61 public:
62 AsyncPixelTransfersCompletedQuery( 62 AsyncPixelTransfersCompletedQuery(
63 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 63 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
64 64
65 bool Begin() override; 65 bool Begin() override;
66 bool End(base::subtle::Atomic32 submit_count) override; 66 bool End(base::subtle::Atomic32 submit_count) override;
67 bool Process() override; 67 bool Process(bool did_finish) override;
68 void Destroy(bool have_context) override; 68 void Destroy(bool have_context) override;
69 69
70 protected: 70 protected:
71 ~AsyncPixelTransfersCompletedQuery() override; 71 ~AsyncPixelTransfersCompletedQuery() override;
72 72
73 scoped_refptr<AsyncPixelTransferCompletionObserverImpl> observer_; 73 scoped_refptr<AsyncPixelTransferCompletionObserverImpl> observer_;
74 }; 74 };
75 75
76 AsyncPixelTransfersCompletedQuery::AsyncPixelTransfersCompletedQuery( 76 AsyncPixelTransfersCompletedQuery::AsyncPixelTransfersCompletedQuery(
77 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 77 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset)
(...skipping 20 matching lines...) Expand all
98 98
99 // Ask AsyncPixelTransferDelegate to run completion callback after all 99 // Ask AsyncPixelTransferDelegate to run completion callback after all
100 // previous async transfers are done. No guarantee that callback is run 100 // previous async transfers are done. No guarantee that callback is run
101 // on the current thread. 101 // on the current thread.
102 manager()->decoder()->GetAsyncPixelTransferManager()->AsyncNotifyCompletion( 102 manager()->decoder()->GetAsyncPixelTransferManager()->AsyncNotifyCompletion(
103 mem_params, observer_.get()); 103 mem_params, observer_.get());
104 104
105 return AddToPendingTransferQueue(submit_count); 105 return AddToPendingTransferQueue(submit_count);
106 } 106 }
107 107
108 bool AsyncPixelTransfersCompletedQuery::Process() { 108 bool AsyncPixelTransfersCompletedQuery::Process(bool did_finish) {
109 QuerySync* sync = manager()->decoder()->GetSharedMemoryAs<QuerySync*>( 109 QuerySync* sync = manager()->decoder()->GetSharedMemoryAs<QuerySync*>(
110 shm_id(), shm_offset(), sizeof(*sync)); 110 shm_id(), shm_offset(), sizeof(*sync));
111 if (!sync) 111 if (!sync)
112 return false; 112 return false;
113 113
114 // Check if completion callback has been run. sync->process_count atomicity 114 // Check if completion callback has been run. sync->process_count atomicity
115 // is guaranteed as this is already used to notify client of a completed 115 // is guaranteed as this is already used to notify client of a completed
116 // query. 116 // query.
117 if (base::subtle::Acquire_Load(&sync->process_count) != submit_count()) 117 if (base::subtle::Acquire_Load(&sync->process_count) != submit_count())
118 return true; 118 return true;
(...skipping 15 matching lines...) Expand all
134 134
135 } // namespace 135 } // namespace
136 136
137 class AllSamplesPassedQuery : public QueryManager::Query { 137 class AllSamplesPassedQuery : public QueryManager::Query {
138 public: 138 public:
139 AllSamplesPassedQuery( 139 AllSamplesPassedQuery(
140 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset, 140 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset,
141 GLuint service_id); 141 GLuint service_id);
142 bool Begin() override; 142 bool Begin() override;
143 bool End(base::subtle::Atomic32 submit_count) override; 143 bool End(base::subtle::Atomic32 submit_count) override;
144 bool Process() override; 144 bool Process(bool did_finish) override;
145 void Destroy(bool have_context) override; 145 void Destroy(bool have_context) override;
146 146
147 protected: 147 protected:
148 ~AllSamplesPassedQuery() override; 148 ~AllSamplesPassedQuery() override;
149 149
150 private: 150 private:
151 // Service side query id. 151 // Service side query id.
152 GLuint service_id_; 152 GLuint service_id_;
153 }; 153 };
154 154
155 AllSamplesPassedQuery::AllSamplesPassedQuery( 155 AllSamplesPassedQuery::AllSamplesPassedQuery(
156 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset, 156 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset,
157 GLuint service_id) 157 GLuint service_id)
158 : Query(manager, target, shm_id, shm_offset), 158 : Query(manager, target, shm_id, shm_offset),
159 service_id_(service_id) { 159 service_id_(service_id) {
160 } 160 }
161 161
162 bool AllSamplesPassedQuery::Begin() { 162 bool AllSamplesPassedQuery::Begin() {
163 BeginQueryHelper(target(), service_id_); 163 BeginQueryHelper(target(), service_id_);
164 return true; 164 return true;
165 } 165 }
166 166
167 bool AllSamplesPassedQuery::End(base::subtle::Atomic32 submit_count) { 167 bool AllSamplesPassedQuery::End(base::subtle::Atomic32 submit_count) {
168 EndQueryHelper(target()); 168 EndQueryHelper(target());
169 return AddToPendingQueue(submit_count); 169 return AddToPendingQueue(submit_count);
170 } 170 }
171 171
172 bool AllSamplesPassedQuery::Process() { 172 bool AllSamplesPassedQuery::Process(bool did_finish) {
173 GLuint available = 0; 173 GLuint available = 0;
174 glGetQueryObjectuivARB( 174 glGetQueryObjectuivARB(
175 service_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available); 175 service_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
176 if (!available) { 176 if (!available) {
177 return true; 177 return true;
178 } 178 }
179 GLuint result = 0; 179 GLuint result = 0;
180 glGetQueryObjectuivARB( 180 glGetQueryObjectuivARB(
181 service_id_, GL_QUERY_RESULT_EXT, &result); 181 service_id_, GL_QUERY_RESULT_EXT, &result);
182 182
(...skipping 10 matching lines...) Expand all
193 AllSamplesPassedQuery::~AllSamplesPassedQuery() { 193 AllSamplesPassedQuery::~AllSamplesPassedQuery() {
194 } 194 }
195 195
196 class CommandsIssuedQuery : public QueryManager::Query { 196 class CommandsIssuedQuery : public QueryManager::Query {
197 public: 197 public:
198 CommandsIssuedQuery( 198 CommandsIssuedQuery(
199 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 199 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
200 200
201 bool Begin() override; 201 bool Begin() override;
202 bool End(base::subtle::Atomic32 submit_count) override; 202 bool End(base::subtle::Atomic32 submit_count) override;
203 bool Process() override; 203 bool Process(bool did_finish) override;
204 void Destroy(bool have_context) override; 204 void Destroy(bool have_context) override;
205 205
206 protected: 206 protected:
207 ~CommandsIssuedQuery() override; 207 ~CommandsIssuedQuery() override;
208 208
209 private: 209 private:
210 base::TimeTicks begin_time_; 210 base::TimeTicks begin_time_;
211 }; 211 };
212 212
213 CommandsIssuedQuery::CommandsIssuedQuery( 213 CommandsIssuedQuery::CommandsIssuedQuery(
214 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 214 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset)
215 : Query(manager, target, shm_id, shm_offset) { 215 : Query(manager, target, shm_id, shm_offset) {
216 } 216 }
217 217
218 bool CommandsIssuedQuery::Begin() { 218 bool CommandsIssuedQuery::Begin() {
219 begin_time_ = base::TimeTicks::HighResNow(); 219 begin_time_ = base::TimeTicks::HighResNow();
220 return true; 220 return true;
221 } 221 }
222 222
223 bool CommandsIssuedQuery::End(base::subtle::Atomic32 submit_count) { 223 bool CommandsIssuedQuery::End(base::subtle::Atomic32 submit_count) {
224 base::TimeDelta elapsed = base::TimeTicks::HighResNow() - begin_time_; 224 base::TimeDelta elapsed = base::TimeTicks::HighResNow() - begin_time_;
225 MarkAsPending(submit_count); 225 MarkAsPending(submit_count);
226 return MarkAsCompleted(elapsed.InMicroseconds()); 226 return MarkAsCompleted(elapsed.InMicroseconds());
227 } 227 }
228 228
229 bool CommandsIssuedQuery::Process() { 229 bool CommandsIssuedQuery::Process(bool did_finish) {
230 NOTREACHED(); 230 NOTREACHED();
231 return true; 231 return true;
232 } 232 }
233 233
234 void CommandsIssuedQuery::Destroy(bool /* have_context */) { 234 void CommandsIssuedQuery::Destroy(bool /* have_context */) {
235 if (!IsDeleted()) { 235 if (!IsDeleted()) {
236 MarkAsDeleted(); 236 MarkAsDeleted();
237 } 237 }
238 } 238 }
239 239
240 CommandsIssuedQuery::~CommandsIssuedQuery() { 240 CommandsIssuedQuery::~CommandsIssuedQuery() {
241 } 241 }
242 242
243 class CommandLatencyQuery : public QueryManager::Query { 243 class CommandLatencyQuery : public QueryManager::Query {
244 public: 244 public:
245 CommandLatencyQuery( 245 CommandLatencyQuery(
246 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 246 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
247 247
248 bool Begin() override; 248 bool Begin() override;
249 bool End(base::subtle::Atomic32 submit_count) override; 249 bool End(base::subtle::Atomic32 submit_count) override;
250 bool Process() override; 250 bool Process(bool did_finish) override;
251 void Destroy(bool have_context) override; 251 void Destroy(bool have_context) override;
252 252
253 protected: 253 protected:
254 ~CommandLatencyQuery() override; 254 ~CommandLatencyQuery() override;
255 }; 255 };
256 256
257 CommandLatencyQuery::CommandLatencyQuery( 257 CommandLatencyQuery::CommandLatencyQuery(
258 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 258 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset)
259 : Query(manager, target, shm_id, shm_offset) { 259 : Query(manager, target, shm_id, shm_offset) {
260 } 260 }
261 261
262 bool CommandLatencyQuery::Begin() { 262 bool CommandLatencyQuery::Begin() {
263 return true; 263 return true;
264 } 264 }
265 265
266 bool CommandLatencyQuery::End(base::subtle::Atomic32 submit_count) { 266 bool CommandLatencyQuery::End(base::subtle::Atomic32 submit_count) {
267 base::TimeDelta now = base::TimeTicks::HighResNow() - base::TimeTicks(); 267 base::TimeDelta now = base::TimeTicks::HighResNow() - base::TimeTicks();
268 MarkAsPending(submit_count); 268 MarkAsPending(submit_count);
269 return MarkAsCompleted(now.InMicroseconds()); 269 return MarkAsCompleted(now.InMicroseconds());
270 } 270 }
271 271
272 bool CommandLatencyQuery::Process() { 272 bool CommandLatencyQuery::Process(bool did_finish) {
273 NOTREACHED(); 273 NOTREACHED();
274 return true; 274 return true;
275 } 275 }
276 276
277 void CommandLatencyQuery::Destroy(bool /* have_context */) { 277 void CommandLatencyQuery::Destroy(bool /* have_context */) {
278 if (!IsDeleted()) { 278 if (!IsDeleted()) {
279 MarkAsDeleted(); 279 MarkAsDeleted();
280 } 280 }
281 } 281 }
282 282
283 CommandLatencyQuery::~CommandLatencyQuery() { 283 CommandLatencyQuery::~CommandLatencyQuery() {
284 } 284 }
285 285
286 286
287 class AsyncReadPixelsCompletedQuery 287 class AsyncReadPixelsCompletedQuery
288 : public QueryManager::Query, 288 : public QueryManager::Query,
289 public base::SupportsWeakPtr<AsyncReadPixelsCompletedQuery> { 289 public base::SupportsWeakPtr<AsyncReadPixelsCompletedQuery> {
290 public: 290 public:
291 AsyncReadPixelsCompletedQuery( 291 AsyncReadPixelsCompletedQuery(
292 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 292 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
293 293
294 bool Begin() override; 294 bool Begin() override;
295 bool End(base::subtle::Atomic32 submit_count) override; 295 bool End(base::subtle::Atomic32 submit_count) override;
296 bool Process() override; 296 bool Process(bool did_finish) override;
297 void Destroy(bool have_context) override; 297 void Destroy(bool have_context) override;
298 298
299 protected: 299 protected:
300 void Complete(); 300 void Complete();
301 ~AsyncReadPixelsCompletedQuery() override; 301 ~AsyncReadPixelsCompletedQuery() override;
302 302
303 private: 303 private:
304 bool completed_; 304 bool completed_;
305 bool complete_result_; 305 bool complete_result_;
306 }; 306 };
(...skipping 10 matching lines...) Expand all
317 } 317 }
318 318
319 bool AsyncReadPixelsCompletedQuery::End(base::subtle::Atomic32 submit_count) { 319 bool AsyncReadPixelsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
320 if (!AddToPendingQueue(submit_count)) { 320 if (!AddToPendingQueue(submit_count)) {
321 return false; 321 return false;
322 } 322 }
323 manager()->decoder()->WaitForReadPixels( 323 manager()->decoder()->WaitForReadPixels(
324 base::Bind(&AsyncReadPixelsCompletedQuery::Complete, 324 base::Bind(&AsyncReadPixelsCompletedQuery::Complete,
325 AsWeakPtr())); 325 AsWeakPtr()));
326 326
327 return Process(); 327 return Process(false);
328 } 328 }
329 329
330 void AsyncReadPixelsCompletedQuery::Complete() { 330 void AsyncReadPixelsCompletedQuery::Complete() {
331 completed_ = true; 331 completed_ = true;
332 complete_result_ = MarkAsCompleted(1); 332 complete_result_ = MarkAsCompleted(1);
333 } 333 }
334 334
335 bool AsyncReadPixelsCompletedQuery::Process() { 335 bool AsyncReadPixelsCompletedQuery::Process(bool did_finish) {
336 return !completed_ || complete_result_; 336 return !completed_ || complete_result_;
337 } 337 }
338 338
339 void AsyncReadPixelsCompletedQuery::Destroy(bool /* have_context */) { 339 void AsyncReadPixelsCompletedQuery::Destroy(bool /* have_context */) {
340 if (!IsDeleted()) { 340 if (!IsDeleted()) {
341 MarkAsDeleted(); 341 MarkAsDeleted();
342 } 342 }
343 } 343 }
344 344
345 AsyncReadPixelsCompletedQuery::~AsyncReadPixelsCompletedQuery() { 345 AsyncReadPixelsCompletedQuery::~AsyncReadPixelsCompletedQuery() {
346 } 346 }
347 347
348 348
349 class GetErrorQuery : public QueryManager::Query { 349 class GetErrorQuery : public QueryManager::Query {
350 public: 350 public:
351 GetErrorQuery( 351 GetErrorQuery(
352 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 352 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
353 353
354 bool Begin() override; 354 bool Begin() override;
355 bool End(base::subtle::Atomic32 submit_count) override; 355 bool End(base::subtle::Atomic32 submit_count) override;
356 bool Process() override; 356 bool Process(bool did_finish) override;
357 void Destroy(bool have_context) override; 357 void Destroy(bool have_context) override;
358 358
359 protected: 359 protected:
360 ~GetErrorQuery() override; 360 ~GetErrorQuery() override;
361 361
362 private: 362 private:
363 }; 363 };
364 364
365 GetErrorQuery::GetErrorQuery( 365 GetErrorQuery::GetErrorQuery(
366 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 366 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset)
367 : Query(manager, target, shm_id, shm_offset) { 367 : Query(manager, target, shm_id, shm_offset) {
368 } 368 }
369 369
370 bool GetErrorQuery::Begin() { 370 bool GetErrorQuery::Begin() {
371 return true; 371 return true;
372 } 372 }
373 373
374 bool GetErrorQuery::End(base::subtle::Atomic32 submit_count) { 374 bool GetErrorQuery::End(base::subtle::Atomic32 submit_count) {
375 MarkAsPending(submit_count); 375 MarkAsPending(submit_count);
376 return MarkAsCompleted(manager()->decoder()->GetErrorState()->GetGLError()); 376 return MarkAsCompleted(manager()->decoder()->GetErrorState()->GetGLError());
377 } 377 }
378 378
379 bool GetErrorQuery::Process() { 379 bool GetErrorQuery::Process(bool did_finish) {
380 NOTREACHED(); 380 NOTREACHED();
381 return true; 381 return true;
382 } 382 }
383 383
384 void GetErrorQuery::Destroy(bool /* have_context */) { 384 void GetErrorQuery::Destroy(bool /* have_context */) {
385 if (!IsDeleted()) { 385 if (!IsDeleted()) {
386 MarkAsDeleted(); 386 MarkAsDeleted();
387 } 387 }
388 } 388 }
389 389
390 GetErrorQuery::~GetErrorQuery() { 390 GetErrorQuery::~GetErrorQuery() {
391 } 391 }
392 392
393 class CommandsCompletedQuery : public QueryManager::Query { 393 class CommandsCompletedQuery : public QueryManager::Query {
394 public: 394 public:
395 CommandsCompletedQuery(QueryManager* manager, 395 CommandsCompletedQuery(QueryManager* manager,
396 GLenum target, 396 GLenum target,
397 int32 shm_id, 397 int32 shm_id,
398 uint32 shm_offset); 398 uint32 shm_offset);
399 399
400 // Overridden from QueryManager::Query: 400 // Overridden from QueryManager::Query:
401 bool Begin() override; 401 bool Begin() override;
402 bool End(base::subtle::Atomic32 submit_count) override; 402 bool End(base::subtle::Atomic32 submit_count) override;
403 bool Process() override; 403 bool Process(bool did_finish) override;
404 void Destroy(bool have_context) override; 404 void Destroy(bool have_context) override;
405 405
406 protected: 406 protected:
407 ~CommandsCompletedQuery() override; 407 ~CommandsCompletedQuery() override;
408 408
409 private: 409 private:
410 scoped_ptr<gfx::GLFence> fence_; 410 scoped_ptr<gfx::GLFence> fence_;
411 }; 411 };
412 412
413 CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager, 413 CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager,
414 GLenum target, 414 GLenum target,
415 int32 shm_id, 415 int32 shm_id,
416 uint32 shm_offset) 416 uint32 shm_offset)
417 : Query(manager, target, shm_id, shm_offset) {} 417 : Query(manager, target, shm_id, shm_offset) {}
418 418
419 bool CommandsCompletedQuery::Begin() { return true; } 419 bool CommandsCompletedQuery::Begin() { return true; }
420 420
421 bool CommandsCompletedQuery::End(base::subtle::Atomic32 submit_count) { 421 bool CommandsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
422 fence_.reset(gfx::GLFence::Create()); 422 fence_.reset(gfx::GLFence::Create());
423 DCHECK(fence_); 423 DCHECK(fence_);
424 return AddToPendingQueue(submit_count); 424 return AddToPendingQueue(submit_count);
425 } 425 }
426 426
427 bool CommandsCompletedQuery::Process() { 427 bool CommandsCompletedQuery::Process(bool did_finish) {
428 if (fence_ && !fence_->HasCompleted()) 428 // Note: |did_finish| guarantees that the GPU has passed the fence but
429 // we cannot assume that GLFence::HasCompleted() will return true yet as
430 // that's not guaranteed by all GLFence implementations.
431 //
432 // TODO(reveman): Add UMA stats to determine how common it is that glFinish()
433 // needs to be called for these queries to complete. crbug.com/431845
434 if (!did_finish && fence_ && !fence_->HasCompleted())
429 return true; 435 return true;
436
430 return MarkAsCompleted(0); 437 return MarkAsCompleted(0);
431 } 438 }
432 439
433 void CommandsCompletedQuery::Destroy(bool have_context) { 440 void CommandsCompletedQuery::Destroy(bool have_context) {
434 if (have_context && !IsDeleted()) { 441 if (have_context && !IsDeleted()) {
435 fence_.reset(); 442 fence_.reset();
436 MarkAsDeleted(); 443 MarkAsDeleted();
437 } 444 }
438 } 445 }
439 446
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 return false; 635 return false;
629 } 636 }
630 637
631 pending_ = false; 638 pending_ = false;
632 sync->result = result; 639 sync->result = result;
633 base::subtle::Release_Store(&sync->process_count, submit_count_); 640 base::subtle::Release_Store(&sync->process_count, submit_count_);
634 641
635 return true; 642 return true;
636 } 643 }
637 644
638 bool QueryManager::ProcessPendingQueries() { 645 bool QueryManager::ProcessPendingQueries(bool did_finish) {
639 while (!pending_queries_.empty()) { 646 while (!pending_queries_.empty()) {
640 Query* query = pending_queries_.front().get(); 647 Query* query = pending_queries_.front().get();
641 if (!query->Process()) { 648 if (!query->Process(did_finish)) {
642 return false; 649 return false;
643 } 650 }
644 if (query->pending()) { 651 if (query->pending()) {
645 break; 652 break;
646 } 653 }
647 query->RunCallbacks(); 654 query->RunCallbacks();
648 pending_queries_.pop_front(); 655 pending_queries_.pop_front();
649 } 656 }
650 657
651 return true; 658 return true;
652 } 659 }
653 660
654 bool QueryManager::HavePendingQueries() { 661 bool QueryManager::HavePendingQueries() {
655 return !pending_queries_.empty(); 662 return !pending_queries_.empty();
656 } 663 }
657 664
658 bool QueryManager::ProcessPendingTransferQueries() { 665 bool QueryManager::ProcessPendingTransferQueries() {
659 while (!pending_transfer_queries_.empty()) { 666 while (!pending_transfer_queries_.empty()) {
660 Query* query = pending_transfer_queries_.front().get(); 667 Query* query = pending_transfer_queries_.front().get();
661 if (!query->Process()) { 668 if (!query->Process(false)) {
662 return false; 669 return false;
663 } 670 }
664 if (query->pending()) { 671 if (query->pending()) {
665 break; 672 break;
666 } 673 }
667 query->RunCallbacks(); 674 query->RunCallbacks();
668 pending_transfer_queries_.pop_front(); 675 pending_transfer_queries_.pop_front();
669 } 676 }
670 677
671 return true; 678 return true;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 bool QueryManager::EndQuery(Query* query, base::subtle::Atomic32 submit_count) { 745 bool QueryManager::EndQuery(Query* query, base::subtle::Atomic32 submit_count) {
739 DCHECK(query); 746 DCHECK(query);
740 if (!RemovePendingQuery(query)) { 747 if (!RemovePendingQuery(query)) {
741 return false; 748 return false;
742 } 749 }
743 return query->End(submit_count); 750 return query->End(submit_count);
744 } 751 }
745 752
746 } // namespace gles2 753 } // namespace gles2
747 } // namespace gpu 754 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/query_manager.h ('k') | gpu/command_buffer/service/query_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698