Index: ui/gl/gpu_timing.cc |
diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc |
index 22a4a6476c8ba81ef3900cba3d6d2393c1081067..a3b697fe306b0afaaac1c48787e8049c76276163 100644 |
--- a/ui/gl/gpu_timing.cc |
+++ b/ui/gl/gpu_timing.cc |
@@ -30,6 +30,17 @@ scoped_refptr<GPUTimingClient> GPUTiming::CreateGPUTimingClient() { |
return new GPUTimingClient(this); |
} |
+uint32_t GPUTiming::GetDisjointCount() { |
+ if (timer_type_ == kTimerTypeDisjoint) { |
+ GLint disjoint_value = 0; |
+ glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value); |
+ if (disjoint_value) { |
+ disjoint_counter_++; |
+ } |
+ } |
+ return disjoint_counter_; |
+} |
+ |
GPUTimer::~GPUTimer() { |
glDeleteQueriesARB(2, queries_); |
} |
@@ -87,6 +98,7 @@ GPUTimingClient::GPUTimingClient(GPUTiming* gpu_timing) |
: gpu_timing_(gpu_timing) { |
if (gpu_timing) { |
timer_type_ = gpu_timing->GetTimerType(); |
+ disjoint_counter_ = gpu_timing_->GetDisjointCount(); |
} |
} |
@@ -111,12 +123,13 @@ const char* GPUTimingClient::GetTimerTypeName() const { |
bool GPUTimingClient::CheckAndResetTimerErrors() { |
if (timer_type_ == GPUTiming::kTimerTypeDisjoint) { |
- GLint disjoint_value = 0; |
- glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value); |
- return disjoint_value != 0; |
- } else { |
- return false; |
+ DCHECK(gpu_timing_ != nullptr); |
+ const uint32_t total_disjoint_count = gpu_timing_->GetDisjointCount(); |
+ const bool disjoint_triggered = total_disjoint_count != disjoint_counter_; |
+ disjoint_counter_ = total_disjoint_count; |
+ return disjoint_triggered; |
} |
+ return false; |
} |
int64 GPUTimingClient::CalculateTimerOffset() { |