Chromium Code Reviews| Index: ui/gl/gpu_timing.cc |
| diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc |
| index c90225434d6fddbcdc42cbe8306ab2ef98186ca2..30037c618dc3cfcc7cc8a53f381455f1be812fc1 100644 |
| --- a/ui/gl/gpu_timing.cc |
| +++ b/ui/gl/gpu_timing.cc |
| @@ -313,6 +313,7 @@ GPUTimingImpl::GPUTimingImpl(GLContextReal* context) { |
| timer_type_ = GPUTiming::kTimerTypeARB; |
| } else if (context->HasExtension("GL_EXT_timer_query")) { |
| timer_type_ = GPUTiming::kTimerTypeEXT; |
| + force_time_elapsed_query_ = true; |
| } |
| } |
| @@ -375,8 +376,7 @@ void GPUTimingImpl::EndElapsedTimeQuery(scoped_refptr<QueryResult> result) { |
| } |
| scoped_refptr<QueryResult> GPUTimingImpl::DoTimeStampQuery() { |
| - DCHECK(timer_type_ == GPUTiming::kTimerTypeDisjoint || |
| - timer_type_ == GPUTiming::kTimerTypeARB); |
| + DCHECK(timer_type_ != GPUTiming::kTimerTypeInvalid); |
| if (force_time_elapsed_query_) { |
| // Replace with elapsed timer queries instead. |
| @@ -476,8 +476,18 @@ void GPUTimer::Destroy(bool have_context) { |
| } |
| } |
| +void GPUTimer::QueryTimeStamp() { |
| + DCHECK(!end_requested_); |
|
piman
2015/07/16 01:05:53
We can QueryCounter multiple times on the same que
David Yen
2015/07/16 20:21:12
Ah yes, GPUTimer has originally always been one us
|
| + DCHECK(gpu_timing_client_->gpu_timing_); |
| + DCHECK(!time_stamp_result_.get() && !elapsed_timer_result_.get()); |
|
piman
2015/07/16 01:05:53
same here.
David Yen
2015/07/16 20:21:12
Done.
|
| + end_requested_ = true; |
| + time_stamp_result_ = gpu_timing_client_->gpu_timing_->DoTimeStampQuery(); |
| +} |
| + |
| void GPUTimer::Start() { |
| + DCHECK(!end_requested_); |
|
piman
2015/07/16 01:05:53
Is this valid? It looks like for the GL_TIME_ELAPS
David Yen
2015/07/16 20:21:12
Done.
|
| DCHECK(gpu_timing_client_->gpu_timing_); |
| + DCHECK(!time_stamp_result_.get() && !elapsed_timer_result_.get()); |
|
piman
2015/07/16 01:05:53
Same here wrt !elapsed_timer_result_.get()
David Yen
2015/07/16 20:21:12
Done.
|
| if (!use_elapsed_timer_) |
| time_stamp_result_ = gpu_timing_client_->gpu_timing_->DoTimeStampQuery(); |
| @@ -486,6 +496,7 @@ void GPUTimer::Start() { |
| } |
| void GPUTimer::End() { |
| + DCHECK(!end_requested_); |
| DCHECK(elapsed_timer_result_.get()); |
| end_requested_ = true; |
| gpu_timing_client_->gpu_timing_->EndElapsedTimeQuery(elapsed_timer_result_); |
| @@ -495,12 +506,17 @@ bool GPUTimer::IsAvailable() { |
| if (!end_requested_) |
| return false; |
| if (!end_available_) { |
| - DCHECK(elapsed_timer_result_.get()); |
| - if (elapsed_timer_result_->IsAvailable()) { |
| - end_available_ = true; |
| + scoped_refptr<QueryResult> result = |
| + elapsed_timer_result_.get() ? |
| + elapsed_timer_result_ : |
| + time_stamp_result_; |
| + |
| + DCHECK(result.get()); |
| + if (result->IsAvailable()) { |
| + end_available_ = true; |
|
piman
2015/07/16 01:05:53
nit: indent looks wrong
David Yen
2015/07/16 20:21:12
No longer relevant as this section has been rewrit
|
| } else { |
| gpu_timing_client_->gpu_timing_->UpdateQueryResults(); |
| - end_available_ = elapsed_timer_result_->IsAvailable(); |
| + end_available_ = result->IsAvailable(); |
| } |
| } |
| return end_available_; |
| @@ -508,24 +524,24 @@ bool GPUTimer::IsAvailable() { |
| void GPUTimer::GetStartEndTimestamps(int64* start, int64* end) { |
| DCHECK(start && end); |
| - DCHECK(elapsed_timer_result_.get()); |
| + DCHECK(elapsed_timer_result_.get() || time_stamp_result_.get()); |
| DCHECK(IsAvailable()); |
| - if (time_stamp_result_.get()) { |
| - DCHECK(time_stamp_result_->IsAvailable()); |
| - const int64_t time_stamp = time_stamp_result_->GetStartValue(); |
| - *start = time_stamp; |
| - *end = time_stamp + elapsed_timer_result_->GetDelta(); |
| - } else { |
| - // Use estimation from elasped timer results. |
| - *start = elapsed_timer_result_->GetStartValue(); |
| - *end = elapsed_timer_result_->GetEndValue(); |
| - } |
| + const int64_t time_stamp = time_stamp_result_.get() ? |
| + time_stamp_result_->GetStartValue() : |
| + elapsed_timer_result_->GetStartValue(); |
| + const int64_t elapsed_time = elapsed_timer_result_.get() ? |
| + elapsed_timer_result_->GetDelta() : |
| + 0; |
| + |
| + *start = time_stamp; |
| + *end = time_stamp + elapsed_time; |
| } |
| int64 GPUTimer::GetDeltaElapsed() { |
| - DCHECK(elapsed_timer_result_.get()); |
| DCHECK(IsAvailable()); |
| - return elapsed_timer_result_->GetDelta(); |
| + if (elapsed_timer_result_.get()) |
| + return elapsed_timer_result_->GetDelta(); |
| + return 0; |
| } |
| GPUTimer::GPUTimer(scoped_refptr<GPUTimingClient> gpu_timing_client, |