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

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

Issue 1542513002: Switch to standard integer types in gpu/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 5 years 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 <stddef.h>
8 #include <stdint.h>
9
7 #include "base/atomicops.h" 10 #include "base/atomicops.h"
8 #include "base/bind.h" 11 #include "base/bind.h"
9 #include "base/logging.h" 12 #include "base/logging.h"
10 #include "base/memory/shared_memory.h" 13 #include "base/memory/shared_memory.h"
11 #include "base/numerics/safe_math.h" 14 #include "base/numerics/safe_math.h"
12 #include "base/synchronization/lock.h" 15 #include "base/synchronization/lock.h"
13 #include "base/time/time.h" 16 #include "base/time/time.h"
14 #include "gpu/command_buffer/common/gles2_cmd_format.h" 17 #include "gpu/command_buffer/common/gles2_cmd_format.h"
15 #include "gpu/command_buffer/service/error_state.h" 18 #include "gpu/command_buffer/service/error_state.h"
16 #include "gpu/command_buffer/service/feature_info.h" 19 #include "gpu/command_buffer/service/feature_info.h"
17 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 20 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
18 #include "ui/gl/gl_bindings.h" 21 #include "ui/gl/gl_bindings.h"
19 #include "ui/gl/gl_context.h" 22 #include "ui/gl/gl_context.h"
20 #include "ui/gl/gl_fence.h" 23 #include "ui/gl/gl_fence.h"
21 #include "ui/gl/gpu_timing.h" 24 #include "ui/gl/gpu_timing.h"
22 25
23 namespace gpu { 26 namespace gpu {
24 namespace gles2 { 27 namespace gles2 {
25 28
26 class AbstractIntegerQuery : public QueryManager::Query { 29 class AbstractIntegerQuery : public QueryManager::Query {
27 public: 30 public:
28 AbstractIntegerQuery( 31 AbstractIntegerQuery(QueryManager* manager,
29 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 32 GLenum target,
33 int32_t shm_id,
34 uint32_t shm_offset);
30 bool Begin() override; 35 bool Begin() override;
31 bool End(base::subtle::Atomic32 submit_count) override; 36 bool End(base::subtle::Atomic32 submit_count) override;
32 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 37 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
33 void Pause() override; 38 void Pause() override;
34 void Resume() override; 39 void Resume() override;
35 void Destroy(bool have_context) override; 40 void Destroy(bool have_context) override;
36 41
37 protected: 42 protected:
38 ~AbstractIntegerQuery() override; 43 ~AbstractIntegerQuery() override;
39 bool AreAllResultsAvailable(); 44 bool AreAllResultsAvailable();
40 45
41 // Service side query ids. 46 // Service side query ids.
42 std::vector<GLuint> service_ids_; 47 std::vector<GLuint> service_ids_;
43 }; 48 };
44 49
45 AbstractIntegerQuery::AbstractIntegerQuery( 50 AbstractIntegerQuery::AbstractIntegerQuery(QueryManager* manager,
46 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 51 GLenum target,
52 int32_t shm_id,
53 uint32_t shm_offset)
47 : Query(manager, target, shm_id, shm_offset) { 54 : Query(manager, target, shm_id, shm_offset) {
48 GLuint service_id = 0; 55 GLuint service_id = 0;
49 glGenQueries(1, &service_id); 56 glGenQueries(1, &service_id);
50 DCHECK_NE(0u, service_id); 57 DCHECK_NE(0u, service_id);
51 service_ids_.push_back(service_id); 58 service_ids_.push_back(service_id);
52 } 59 }
53 60
54 bool AbstractIntegerQuery::Begin() { 61 bool AbstractIntegerQuery::Begin() {
55 MarkAsActive(); 62 MarkAsActive();
56 // Delete all but the first one when beginning a new query. 63 // Delete all but the first one when beginning a new query.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 107
101 bool AbstractIntegerQuery::AreAllResultsAvailable() { 108 bool AbstractIntegerQuery::AreAllResultsAvailable() {
102 GLuint available = 0; 109 GLuint available = 0;
103 glGetQueryObjectuiv( 110 glGetQueryObjectuiv(
104 service_ids_.back(), GL_QUERY_RESULT_AVAILABLE_EXT, &available); 111 service_ids_.back(), GL_QUERY_RESULT_AVAILABLE_EXT, &available);
105 return !!available; 112 return !!available;
106 } 113 }
107 114
108 class BooleanQuery : public AbstractIntegerQuery { 115 class BooleanQuery : public AbstractIntegerQuery {
109 public: 116 public:
110 BooleanQuery( 117 BooleanQuery(QueryManager* manager,
111 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 118 GLenum target,
119 int32_t shm_id,
120 uint32_t shm_offset);
112 bool Process(bool did_finish) override; 121 bool Process(bool did_finish) override;
113 122
114 protected: 123 protected:
115 ~BooleanQuery() override; 124 ~BooleanQuery() override;
116 }; 125 };
117 126
118 BooleanQuery::BooleanQuery( 127 BooleanQuery::BooleanQuery(QueryManager* manager,
119 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 128 GLenum target,
120 : AbstractIntegerQuery(manager, target, shm_id, shm_offset) { 129 int32_t shm_id,
121 } 130 uint32_t shm_offset)
131 : AbstractIntegerQuery(manager, target, shm_id, shm_offset) {}
122 132
123 BooleanQuery::~BooleanQuery() { 133 BooleanQuery::~BooleanQuery() {
124 } 134 }
125 135
126 bool BooleanQuery::Process(bool did_finish) { 136 bool BooleanQuery::Process(bool did_finish) {
127 if (!AreAllResultsAvailable()) { 137 if (!AreAllResultsAvailable()) {
128 // Must return true to avoid generating an error at the command 138 // Must return true to avoid generating an error at the command
129 // buffer level. 139 // buffer level.
130 return true; 140 return true;
131 } 141 }
132 for (const GLuint& service_id : service_ids_) { 142 for (const GLuint& service_id : service_ids_) {
133 GLuint result = 0; 143 GLuint result = 0;
134 glGetQueryObjectuiv(service_id, GL_QUERY_RESULT_EXT, &result); 144 glGetQueryObjectuiv(service_id, GL_QUERY_RESULT_EXT, &result);
135 if (result != 0) 145 if (result != 0)
136 return MarkAsCompleted(1); 146 return MarkAsCompleted(1);
137 } 147 }
138 return MarkAsCompleted(0); 148 return MarkAsCompleted(0);
139 } 149 }
140 150
141 class SummedIntegerQuery : public AbstractIntegerQuery { 151 class SummedIntegerQuery : public AbstractIntegerQuery {
142 public: 152 public:
143 SummedIntegerQuery( 153 SummedIntegerQuery(QueryManager* manager,
144 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 154 GLenum target,
155 int32_t shm_id,
156 uint32_t shm_offset);
145 bool Process(bool did_finish) override; 157 bool Process(bool did_finish) override;
146 158
147 protected: 159 protected:
148 ~SummedIntegerQuery() override; 160 ~SummedIntegerQuery() override;
149 }; 161 };
150 162
151 SummedIntegerQuery::SummedIntegerQuery( 163 SummedIntegerQuery::SummedIntegerQuery(QueryManager* manager,
152 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 164 GLenum target,
153 : AbstractIntegerQuery(manager, target, shm_id, shm_offset) { 165 int32_t shm_id,
154 } 166 uint32_t shm_offset)
167 : AbstractIntegerQuery(manager, target, shm_id, shm_offset) {}
155 168
156 SummedIntegerQuery::~SummedIntegerQuery() { 169 SummedIntegerQuery::~SummedIntegerQuery() {
157 } 170 }
158 171
159 bool SummedIntegerQuery::Process(bool did_finish) { 172 bool SummedIntegerQuery::Process(bool did_finish) {
160 if (!AreAllResultsAvailable()) { 173 if (!AreAllResultsAvailable()) {
161 // Must return true to avoid generating an error at the command 174 // Must return true to avoid generating an error at the command
162 // buffer level. 175 // buffer level.
163 return true; 176 return true;
164 } 177 }
165 GLuint summed_result = 0; 178 GLuint summed_result = 0;
166 for (const GLuint& service_id : service_ids_) { 179 for (const GLuint& service_id : service_ids_) {
167 GLuint result = 0; 180 GLuint result = 0;
168 glGetQueryObjectuiv(service_id, GL_QUERY_RESULT_EXT, &result); 181 glGetQueryObjectuiv(service_id, GL_QUERY_RESULT_EXT, &result);
169 summed_result += result; 182 summed_result += result;
170 } 183 }
171 return MarkAsCompleted(summed_result); 184 return MarkAsCompleted(summed_result);
172 } 185 }
173 186
174 class CommandsIssuedQuery : public QueryManager::Query { 187 class CommandsIssuedQuery : public QueryManager::Query {
175 public: 188 public:
176 CommandsIssuedQuery( 189 CommandsIssuedQuery(QueryManager* manager,
177 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 190 GLenum target,
191 int32_t shm_id,
192 uint32_t shm_offset);
178 193
179 bool Begin() override; 194 bool Begin() override;
180 bool End(base::subtle::Atomic32 submit_count) override; 195 bool End(base::subtle::Atomic32 submit_count) override;
181 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 196 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
182 void Pause() override; 197 void Pause() override;
183 void Resume() override; 198 void Resume() override;
184 bool Process(bool did_finish) override; 199 bool Process(bool did_finish) override;
185 void Destroy(bool have_context) override; 200 void Destroy(bool have_context) override;
186 201
187 protected: 202 protected:
188 ~CommandsIssuedQuery() override; 203 ~CommandsIssuedQuery() override;
189 204
190 private: 205 private:
191 base::TimeTicks begin_time_; 206 base::TimeTicks begin_time_;
192 }; 207 };
193 208
194 CommandsIssuedQuery::CommandsIssuedQuery( 209 CommandsIssuedQuery::CommandsIssuedQuery(QueryManager* manager,
195 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 210 GLenum target,
196 : Query(manager, target, shm_id, shm_offset) { 211 int32_t shm_id,
197 } 212 uint32_t shm_offset)
213 : Query(manager, target, shm_id, shm_offset) {}
198 214
199 bool CommandsIssuedQuery::Begin() { 215 bool CommandsIssuedQuery::Begin() {
200 MarkAsActive(); 216 MarkAsActive();
201 begin_time_ = base::TimeTicks::Now(); 217 begin_time_ = base::TimeTicks::Now();
202 return true; 218 return true;
203 } 219 }
204 220
205 void CommandsIssuedQuery::Pause() { 221 void CommandsIssuedQuery::Pause() {
206 MarkAsPaused(); 222 MarkAsPaused();
207 } 223 }
(...skipping 22 matching lines...) Expand all
230 if (!IsDeleted()) { 246 if (!IsDeleted()) {
231 MarkAsDeleted(); 247 MarkAsDeleted();
232 } 248 }
233 } 249 }
234 250
235 CommandsIssuedQuery::~CommandsIssuedQuery() { 251 CommandsIssuedQuery::~CommandsIssuedQuery() {
236 } 252 }
237 253
238 class CommandLatencyQuery : public QueryManager::Query { 254 class CommandLatencyQuery : public QueryManager::Query {
239 public: 255 public:
240 CommandLatencyQuery( 256 CommandLatencyQuery(QueryManager* manager,
241 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 257 GLenum target,
258 int32_t shm_id,
259 uint32_t shm_offset);
242 260
243 bool Begin() override; 261 bool Begin() override;
244 bool End(base::subtle::Atomic32 submit_count) override; 262 bool End(base::subtle::Atomic32 submit_count) override;
245 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 263 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
246 void Pause() override; 264 void Pause() override;
247 void Resume() override; 265 void Resume() override;
248 bool Process(bool did_finish) override; 266 bool Process(bool did_finish) override;
249 void Destroy(bool have_context) override; 267 void Destroy(bool have_context) override;
250 268
251 protected: 269 protected:
252 ~CommandLatencyQuery() override; 270 ~CommandLatencyQuery() override;
253 }; 271 };
254 272
255 CommandLatencyQuery::CommandLatencyQuery( 273 CommandLatencyQuery::CommandLatencyQuery(QueryManager* manager,
256 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 274 GLenum target,
257 : Query(manager, target, shm_id, shm_offset) { 275 int32_t shm_id,
258 } 276 uint32_t shm_offset)
277 : Query(manager, target, shm_id, shm_offset) {}
259 278
260 bool CommandLatencyQuery::Begin() { 279 bool CommandLatencyQuery::Begin() {
261 MarkAsActive(); 280 MarkAsActive();
262 return true; 281 return true;
263 } 282 }
264 283
265 void CommandLatencyQuery::Pause() { 284 void CommandLatencyQuery::Pause() {
266 MarkAsPaused(); 285 MarkAsPaused();
267 } 286 }
268 287
(...skipping 24 matching lines...) Expand all
293 } 312 }
294 313
295 CommandLatencyQuery::~CommandLatencyQuery() { 314 CommandLatencyQuery::~CommandLatencyQuery() {
296 } 315 }
297 316
298 317
299 class AsyncReadPixelsCompletedQuery 318 class AsyncReadPixelsCompletedQuery
300 : public QueryManager::Query, 319 : public QueryManager::Query,
301 public base::SupportsWeakPtr<AsyncReadPixelsCompletedQuery> { 320 public base::SupportsWeakPtr<AsyncReadPixelsCompletedQuery> {
302 public: 321 public:
303 AsyncReadPixelsCompletedQuery( 322 AsyncReadPixelsCompletedQuery(QueryManager* manager,
304 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 323 GLenum target,
324 int32_t shm_id,
325 uint32_t shm_offset);
305 326
306 bool Begin() override; 327 bool Begin() override;
307 bool End(base::subtle::Atomic32 submit_count) override; 328 bool End(base::subtle::Atomic32 submit_count) override;
308 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 329 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
309 void Pause() override; 330 void Pause() override;
310 void Resume() override; 331 void Resume() override;
311 bool Process(bool did_finish) override; 332 bool Process(bool did_finish) override;
312 void Destroy(bool have_context) override; 333 void Destroy(bool have_context) override;
313 334
314 protected: 335 protected:
315 void Complete(); 336 void Complete();
316 ~AsyncReadPixelsCompletedQuery() override; 337 ~AsyncReadPixelsCompletedQuery() override;
317 338
318 private: 339 private:
319 bool complete_result_; 340 bool complete_result_;
320 }; 341 };
321 342
322 AsyncReadPixelsCompletedQuery::AsyncReadPixelsCompletedQuery( 343 AsyncReadPixelsCompletedQuery::AsyncReadPixelsCompletedQuery(
323 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 344 QueryManager* manager,
324 : Query(manager, target, shm_id, shm_offset), 345 GLenum target,
325 complete_result_(false) { 346 int32_t shm_id,
326 } 347 uint32_t shm_offset)
348 : Query(manager, target, shm_id, shm_offset), complete_result_(false) {}
327 349
328 bool AsyncReadPixelsCompletedQuery::Begin() { 350 bool AsyncReadPixelsCompletedQuery::Begin() {
329 MarkAsActive(); 351 MarkAsActive();
330 return true; 352 return true;
331 } 353 }
332 354
333 void AsyncReadPixelsCompletedQuery::Pause() { 355 void AsyncReadPixelsCompletedQuery::Pause() {
334 MarkAsPaused(); 356 MarkAsPaused();
335 } 357 }
336 358
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 MarkAsDeleted(); 390 MarkAsDeleted();
369 } 391 }
370 } 392 }
371 393
372 AsyncReadPixelsCompletedQuery::~AsyncReadPixelsCompletedQuery() { 394 AsyncReadPixelsCompletedQuery::~AsyncReadPixelsCompletedQuery() {
373 } 395 }
374 396
375 397
376 class GetErrorQuery : public QueryManager::Query { 398 class GetErrorQuery : public QueryManager::Query {
377 public: 399 public:
378 GetErrorQuery( 400 GetErrorQuery(QueryManager* manager,
379 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 401 GLenum target,
402 int32_t shm_id,
403 uint32_t shm_offset);
380 404
381 bool Begin() override; 405 bool Begin() override;
382 bool End(base::subtle::Atomic32 submit_count) override; 406 bool End(base::subtle::Atomic32 submit_count) override;
383 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 407 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
384 void Pause() override; 408 void Pause() override;
385 void Resume() override; 409 void Resume() override;
386 bool Process(bool did_finish) override; 410 bool Process(bool did_finish) override;
387 void Destroy(bool have_context) override; 411 void Destroy(bool have_context) override;
388 412
389 protected: 413 protected:
390 ~GetErrorQuery() override; 414 ~GetErrorQuery() override;
391 415
392 private: 416 private:
393 }; 417 };
394 418
395 GetErrorQuery::GetErrorQuery( 419 GetErrorQuery::GetErrorQuery(QueryManager* manager,
396 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 420 GLenum target,
397 : Query(manager, target, shm_id, shm_offset) { 421 int32_t shm_id,
398 } 422 uint32_t shm_offset)
423 : Query(manager, target, shm_id, shm_offset) {}
399 424
400 bool GetErrorQuery::Begin() { 425 bool GetErrorQuery::Begin() {
401 MarkAsActive(); 426 MarkAsActive();
402 return true; 427 return true;
403 } 428 }
404 429
405 void GetErrorQuery::Pause() { 430 void GetErrorQuery::Pause() {
406 MarkAsPaused(); 431 MarkAsPaused();
407 } 432 }
408 433
(...skipping 22 matching lines...) Expand all
431 } 456 }
432 } 457 }
433 458
434 GetErrorQuery::~GetErrorQuery() { 459 GetErrorQuery::~GetErrorQuery() {
435 } 460 }
436 461
437 class CommandsCompletedQuery : public QueryManager::Query { 462 class CommandsCompletedQuery : public QueryManager::Query {
438 public: 463 public:
439 CommandsCompletedQuery(QueryManager* manager, 464 CommandsCompletedQuery(QueryManager* manager,
440 GLenum target, 465 GLenum target,
441 int32 shm_id, 466 int32_t shm_id,
442 uint32 shm_offset); 467 uint32_t shm_offset);
443 468
444 // Overridden from QueryManager::Query: 469 // Overridden from QueryManager::Query:
445 bool Begin() override; 470 bool Begin() override;
446 bool End(base::subtle::Atomic32 submit_count) override; 471 bool End(base::subtle::Atomic32 submit_count) override;
447 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 472 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
448 void Pause() override; 473 void Pause() override;
449 void Resume() override; 474 void Resume() override;
450 bool Process(bool did_finish) override; 475 bool Process(bool did_finish) override;
451 void Destroy(bool have_context) override; 476 void Destroy(bool have_context) override;
452 477
453 protected: 478 protected:
454 ~CommandsCompletedQuery() override; 479 ~CommandsCompletedQuery() override;
455 480
456 private: 481 private:
457 scoped_ptr<gfx::GLFence> fence_; 482 scoped_ptr<gfx::GLFence> fence_;
458 base::TimeTicks begin_time_; 483 base::TimeTicks begin_time_;
459 }; 484 };
460 485
461 CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager, 486 CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager,
462 GLenum target, 487 GLenum target,
463 int32 shm_id, 488 int32_t shm_id,
464 uint32 shm_offset) 489 uint32_t shm_offset)
465 : Query(manager, target, shm_id, shm_offset) {} 490 : Query(manager, target, shm_id, shm_offset) {}
466 491
467 bool CommandsCompletedQuery::Begin() { 492 bool CommandsCompletedQuery::Begin() {
468 MarkAsActive(); 493 MarkAsActive();
469 begin_time_ = base::TimeTicks::Now(); 494 begin_time_ = base::TimeTicks::Now();
470 return true; 495 return true;
471 } 496 }
472 497
473 void CommandsCompletedQuery::Pause() { 498 void CommandsCompletedQuery::Pause() {
474 MarkAsPaused(); 499 MarkAsPaused();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 MarkAsDeleted(); 531 MarkAsDeleted();
507 } 532 }
508 } 533 }
509 534
510 CommandsCompletedQuery::~CommandsCompletedQuery() {} 535 CommandsCompletedQuery::~CommandsCompletedQuery() {}
511 536
512 class TimeElapsedQuery : public QueryManager::Query { 537 class TimeElapsedQuery : public QueryManager::Query {
513 public: 538 public:
514 TimeElapsedQuery(QueryManager* manager, 539 TimeElapsedQuery(QueryManager* manager,
515 GLenum target, 540 GLenum target,
516 int32 shm_id, 541 int32_t shm_id,
517 uint32 shm_offset); 542 uint32_t shm_offset);
518 543
519 // Overridden from QueryManager::Query: 544 // Overridden from QueryManager::Query:
520 bool Begin() override; 545 bool Begin() override;
521 bool End(base::subtle::Atomic32 submit_count) override; 546 bool End(base::subtle::Atomic32 submit_count) override;
522 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 547 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
523 void Pause() override; 548 void Pause() override;
524 void Resume() override; 549 void Resume() override;
525 bool Process(bool did_finish) override; 550 bool Process(bool did_finish) override;
526 void Destroy(bool have_context) override; 551 void Destroy(bool have_context) override;
527 552
528 protected: 553 protected:
529 ~TimeElapsedQuery() override; 554 ~TimeElapsedQuery() override;
530 555
531 private: 556 private:
532 scoped_ptr<gfx::GPUTimer> gpu_timer_; 557 scoped_ptr<gfx::GPUTimer> gpu_timer_;
533 }; 558 };
534 559
535 TimeElapsedQuery::TimeElapsedQuery(QueryManager* manager, 560 TimeElapsedQuery::TimeElapsedQuery(QueryManager* manager,
536 GLenum target, 561 GLenum target,
537 int32 shm_id, 562 int32_t shm_id,
538 uint32 shm_offset) 563 uint32_t shm_offset)
539 : Query(manager, target, shm_id, shm_offset), 564 : Query(manager, target, shm_id, shm_offset),
540 gpu_timer_(manager->CreateGPUTimer(true)) { 565 gpu_timer_(manager->CreateGPUTimer(true)) {}
541 }
542 566
543 bool TimeElapsedQuery::Begin() { 567 bool TimeElapsedQuery::Begin() {
544 // Reset the disjoint value before the query begins if it is safe. 568 // Reset the disjoint value before the query begins if it is safe.
545 SafelyResetDisjointValue(); 569 SafelyResetDisjointValue();
546 MarkAsActive(); 570 MarkAsActive();
547 gpu_timer_->Start(); 571 gpu_timer_->Start();
548 return true; 572 return true;
549 } 573 }
550 574
551 bool TimeElapsedQuery::End(base::subtle::Atomic32 submit_count) { 575 bool TimeElapsedQuery::End(base::subtle::Atomic32 submit_count) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 void TimeElapsedQuery::Destroy(bool have_context) { 608 void TimeElapsedQuery::Destroy(bool have_context) {
585 gpu_timer_->Destroy(have_context); 609 gpu_timer_->Destroy(have_context);
586 } 610 }
587 611
588 TimeElapsedQuery::~TimeElapsedQuery() {} 612 TimeElapsedQuery::~TimeElapsedQuery() {}
589 613
590 class TimeStampQuery : public QueryManager::Query { 614 class TimeStampQuery : public QueryManager::Query {
591 public: 615 public:
592 TimeStampQuery(QueryManager* manager, 616 TimeStampQuery(QueryManager* manager,
593 GLenum target, 617 GLenum target,
594 int32 shm_id, 618 int32_t shm_id,
595 uint32 shm_offset); 619 uint32_t shm_offset);
596 620
597 // Overridden from QueryManager::Query: 621 // Overridden from QueryManager::Query:
598 bool Begin() override; 622 bool Begin() override;
599 bool End(base::subtle::Atomic32 submit_count) override; 623 bool End(base::subtle::Atomic32 submit_count) override;
600 bool QueryCounter(base::subtle::Atomic32 submit_count) override; 624 bool QueryCounter(base::subtle::Atomic32 submit_count) override;
601 void Pause() override; 625 void Pause() override;
602 void Resume() override; 626 void Resume() override;
603 bool Process(bool did_finish) override; 627 bool Process(bool did_finish) override;
604 void Destroy(bool have_context) override; 628 void Destroy(bool have_context) override;
605 629
606 protected: 630 protected:
607 ~TimeStampQuery() override; 631 ~TimeStampQuery() override;
608 632
609 private: 633 private:
610 scoped_ptr<gfx::GPUTimer> gpu_timer_; 634 scoped_ptr<gfx::GPUTimer> gpu_timer_;
611 }; 635 };
612 636
613 TimeStampQuery::TimeStampQuery(QueryManager* manager, 637 TimeStampQuery::TimeStampQuery(QueryManager* manager,
614 GLenum target, 638 GLenum target,
615 int32 shm_id, 639 int32_t shm_id,
616 uint32 shm_offset) 640 uint32_t shm_offset)
617 : Query(manager, target, shm_id, shm_offset), 641 : Query(manager, target, shm_id, shm_offset),
618 gpu_timer_(manager->CreateGPUTimer(false)) {} 642 gpu_timer_(manager->CreateGPUTimer(false)) {}
619 643
620 bool TimeStampQuery::Begin() { 644 bool TimeStampQuery::Begin() {
621 NOTREACHED(); 645 NOTREACHED();
622 return false; 646 return false;
623 } 647 }
624 648
625 bool TimeStampQuery::End(base::subtle::Atomic32 submit_count) { 649 bool TimeStampQuery::End(base::subtle::Atomic32 submit_count) {
626 NOTREACHED(); 650 NOTREACHED();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 pending_queries_.clear(); 738 pending_queries_.clear();
715 pending_transfer_queries_.clear(); 739 pending_transfer_queries_.clear();
716 active_queries_.clear(); 740 active_queries_.clear();
717 while (!queries_.empty()) { 741 while (!queries_.empty()) {
718 Query* query = queries_.begin()->second.get(); 742 Query* query = queries_.begin()->second.get();
719 query->Destroy(have_context); 743 query->Destroy(have_context);
720 queries_.erase(queries_.begin()); 744 queries_.erase(queries_.begin());
721 } 745 }
722 } 746 }
723 747
724 void QueryManager::SetDisjointSync(int32 shm_id, uint32 shm_offset) { 748 void QueryManager::SetDisjointSync(int32_t shm_id, uint32_t shm_offset) {
725 DCHECK(disjoint_notify_shm_id_ == -1); 749 DCHECK(disjoint_notify_shm_id_ == -1);
726 DCHECK(shm_id != -1); 750 DCHECK(shm_id != -1);
727 751
728 DisjointValueSync* sync = decoder_->GetSharedMemoryAs<DisjointValueSync*>( 752 DisjointValueSync* sync = decoder_->GetSharedMemoryAs<DisjointValueSync*>(
729 shm_id, shm_offset, sizeof(*sync)); 753 shm_id, shm_offset, sizeof(*sync));
730 DCHECK(sync); 754 DCHECK(sync);
731 sync->Reset(); 755 sync->Reset();
732 disjoints_notified_ = 0; 756 disjoints_notified_ = 0;
733 757
734 disjoint_notify_shm_id_ = shm_id; 758 disjoint_notify_shm_id_ = shm_id;
735 disjoint_notify_shm_offset_ = shm_offset; 759 disjoint_notify_shm_offset_ = shm_offset;
736 } 760 }
737 761
738 QueryManager::Query* QueryManager::CreateQuery( 762 QueryManager::Query* QueryManager::CreateQuery(GLenum target,
739 GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset) { 763 GLuint client_id,
764 int32_t shm_id,
765 uint32_t shm_offset) {
740 scoped_refptr<Query> query; 766 scoped_refptr<Query> query;
741 switch (target) { 767 switch (target) {
742 case GL_COMMANDS_ISSUED_CHROMIUM: 768 case GL_COMMANDS_ISSUED_CHROMIUM:
743 query = new CommandsIssuedQuery(this, target, shm_id, shm_offset); 769 query = new CommandsIssuedQuery(this, target, shm_id, shm_offset);
744 break; 770 break;
745 case GL_LATENCY_QUERY_CHROMIUM: 771 case GL_LATENCY_QUERY_CHROMIUM:
746 query = new CommandLatencyQuery(this, target, shm_id, shm_offset); 772 query = new CommandLatencyQuery(this, target, shm_id, shm_offset);
747 break; 773 break;
748 case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM: 774 case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
749 query = new AsyncReadPixelsCompletedQuery( 775 query = new AsyncReadPixelsCompletedQuery(
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 915
890 void QueryManager::SafelyResetDisjointValue() { 916 void QueryManager::SafelyResetDisjointValue() {
891 // It is only safe to reset the disjoint value is there is no active 917 // It is only safe to reset the disjoint value is there is no active
892 // elapsed timer and we are not continually updating the disjoint value. 918 // elapsed timer and we are not continually updating the disjoint value.
893 if (!update_disjoints_continually_ && !GetActiveQuery(GL_TIME_ELAPSED)) { 919 if (!update_disjoints_continually_ && !GetActiveQuery(GL_TIME_ELAPSED)) {
894 // Reset the error state without storing the result. 920 // Reset the error state without storing the result.
895 gpu_timing_client_->CheckAndResetTimerErrors(); 921 gpu_timing_client_->CheckAndResetTimerErrors();
896 } 922 }
897 } 923 }
898 924
899 QueryManager::Query::Query( 925 QueryManager::Query::Query(QueryManager* manager,
900 QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) 926 GLenum target,
927 int32_t shm_id,
928 uint32_t shm_offset)
901 : manager_(manager), 929 : manager_(manager),
902 target_(target), 930 target_(target),
903 shm_id_(shm_id), 931 shm_id_(shm_id),
904 shm_offset_(shm_offset), 932 shm_offset_(shm_offset),
905 submit_count_(0), 933 submit_count_(0),
906 query_state_(kQueryState_Initialize), 934 query_state_(kQueryState_Initialize),
907 deleted_(false) { 935 deleted_(false) {
908 DCHECK(manager); 936 DCHECK(manager);
909 manager_->StartTracking(this); 937 manager_->StartTracking(this);
910 } 938 }
(...skipping 17 matching lines...) Expand all
928 // The query is getting deleted, either by the client or 956 // The query is getting deleted, either by the client or
929 // because the context was lost. Call any outstanding 957 // because the context was lost. Call any outstanding
930 // callbacks to avoid leaks. 958 // callbacks to avoid leaks.
931 RunCallbacks(); 959 RunCallbacks();
932 if (manager_) { 960 if (manager_) {
933 manager_->StopTracking(this); 961 manager_->StopTracking(this);
934 manager_ = NULL; 962 manager_ = NULL;
935 } 963 }
936 } 964 }
937 965
938 bool QueryManager::Query::MarkAsCompleted(uint64 result) { 966 bool QueryManager::Query::MarkAsCompleted(uint64_t result) {
939 UnmarkAsPending(); 967 UnmarkAsPending();
940 QuerySync* sync = manager_->decoder_->GetSharedMemoryAs<QuerySync*>( 968 QuerySync* sync = manager_->decoder_->GetSharedMemoryAs<QuerySync*>(
941 shm_id_, shm_offset_, sizeof(*sync)); 969 shm_id_, shm_offset_, sizeof(*sync));
942 if (!sync) { 970 if (!sync) {
943 return false; 971 return false;
944 } 972 }
945 973
946 sync->result = result; 974 sync->result = result;
947 base::subtle::Release_Store(&sync->process_count, submit_count_); 975 base::subtle::Release_Store(&sync->process_count, submit_count_);
948 976
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 for (std::pair<const GLenum, scoped_refptr<Query> >& it : active_queries_) { 1123 for (std::pair<const GLenum, scoped_refptr<Query> >& it : active_queries_) {
1096 if (it.second->IsPaused()) { 1124 if (it.second->IsPaused()) {
1097 it.second->Resume(); 1125 it.second->Resume();
1098 DCHECK(it.second->IsActive()); 1126 DCHECK(it.second->IsActive());
1099 } 1127 }
1100 } 1128 }
1101 } 1129 }
1102 1130
1103 } // namespace gles2 1131 } // namespace gles2
1104 } // namespace gpu 1132 } // 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