| Index: gpu/command_buffer/service/gpu_timing.cc
|
| diff --git a/gpu/command_buffer/service/gpu_timing.cc b/gpu/command_buffer/service/gpu_timing.cc
|
| deleted file mode 100644
|
| index 6ab3e831f387515c351e1319dd584725f2533d1b..0000000000000000000000000000000000000000
|
| --- a/gpu/command_buffer/service/gpu_timing.cc
|
| +++ /dev/null
|
| @@ -1,146 +0,0 @@
|
| -// Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "gpu/command_buffer/service/gpu_timing.h"
|
| -
|
| -#include "base/time/time.h"
|
| -#include "ui/gl/gl_bindings.h"
|
| -#include "ui/gl/gl_context.h"
|
| -#include "ui/gl/gl_version_info.h"
|
| -
|
| -namespace gpu {
|
| -
|
| -GPUTimer::GPUTimer(GPUTiming* gpu_timing) : gpu_timing_(gpu_timing) {
|
| - DCHECK(gpu_timing_);
|
| - memset(queries_, 0, sizeof(queries_));
|
| - glGenQueriesARB(2, queries_);
|
| -}
|
| -
|
| -GPUTimer::~GPUTimer() {
|
| - glDeleteQueriesARB(2, queries_);
|
| -}
|
| -
|
| -void GPUTimer::Start() {
|
| - // GL_TIMESTAMP and GL_TIMESTAMP_EXT both have the same value.
|
| - glQueryCounter(queries_[0], GL_TIMESTAMP);
|
| -}
|
| -
|
| -void GPUTimer::End() {
|
| - end_requested_ = true;
|
| - offset_ = gpu_timing_->CalculateTimerOffset();
|
| - glQueryCounter(queries_[1], GL_TIMESTAMP);
|
| -}
|
| -
|
| -bool GPUTimer::IsAvailable() {
|
| - if (!gpu_timing_->IsAvailable() || !end_requested_) {
|
| - return false;
|
| - }
|
| - GLint done = 0;
|
| - glGetQueryObjectivARB(queries_[1], GL_QUERY_RESULT_AVAILABLE, &done);
|
| - return done != 0;
|
| -}
|
| -
|
| -void GPUTimer::GetStartEndTimestamps(int64* start, int64* end) {
|
| - DCHECK(start && end);
|
| - DCHECK(IsAvailable());
|
| - GLuint64 begin_stamp = 0;
|
| - GLuint64 end_stamp = 0;
|
| - // TODO(dsinclair): It's possible for the timer to wrap during the start/end.
|
| - // We need to detect if the end is less then the start and correct for the
|
| - // wrapping.
|
| - glGetQueryObjectui64v(queries_[0], GL_QUERY_RESULT, &begin_stamp);
|
| - glGetQueryObjectui64v(queries_[1], GL_QUERY_RESULT, &end_stamp);
|
| -
|
| - *start = (begin_stamp / base::Time::kNanosecondsPerMicrosecond) + offset_;
|
| - *end = (end_stamp / base::Time::kNanosecondsPerMicrosecond) + offset_;
|
| -}
|
| -
|
| -int64 GPUTimer::GetDeltaElapsed() {
|
| - int64 start = 0;
|
| - int64 end = 0;
|
| - GetStartEndTimestamps(&start, &end);
|
| - return end - start;
|
| -}
|
| -
|
| -GPUTiming::GPUTiming() : cpu_time_for_testing_() {
|
| -}
|
| -
|
| -GPUTiming::~GPUTiming() {
|
| -}
|
| -
|
| -bool GPUTiming::Initialize(gfx::GLContext* gl_context) {
|
| - DCHECK(gl_context);
|
| - DCHECK_EQ(kTimerTypeInvalid, timer_type_);
|
| -
|
| - const gfx::GLVersionInfo* version_info = gl_context->GetVersionInfo();
|
| - DCHECK(version_info);
|
| - if (version_info->is_es3 && // glGetInteger64v is supported under ES3.
|
| - gfx::g_driver_gl.ext.b_GL_EXT_disjoint_timer_query) {
|
| - timer_type_ = kTimerTypeDisjoint;
|
| - return true;
|
| - } else if (gfx::g_driver_gl.ext.b_GL_ARB_timer_query) {
|
| - timer_type_ = kTimerTypeARB;
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool GPUTiming::IsAvailable() {
|
| - return timer_type_ != kTimerTypeInvalid;
|
| -}
|
| -
|
| -const char* GPUTiming::GetTimerTypeName() const {
|
| - switch (timer_type_) {
|
| - case kTimerTypeDisjoint:
|
| - return "GL_EXT_disjoint_timer_query";
|
| - case kTimerTypeARB:
|
| - return "GL_ARB_timer_query";
|
| - default:
|
| - return "Unknown";
|
| - }
|
| -}
|
| -
|
| -bool GPUTiming::CheckAndResetTimerErrors() {
|
| - if (timer_type_ == kTimerTypeDisjoint) {
|
| - GLint disjoint_value = 0;
|
| - glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value);
|
| - return disjoint_value != 0;
|
| - } else {
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -int64 GPUTiming::CalculateTimerOffset() {
|
| - if (!offset_valid_) {
|
| - GLint64 gl_now = 0;
|
| - glGetInteger64v(GL_TIMESTAMP, &gl_now);
|
| - int64 now =
|
| - cpu_time_for_testing_.is_null()
|
| - ? base::TimeTicks::NowFromSystemTraceTime().ToInternalValue()
|
| - : cpu_time_for_testing_.Run();
|
| - offset_ = now - gl_now / base::Time::kNanosecondsPerMicrosecond;
|
| - offset_valid_ = timer_type_ == kTimerTypeARB;
|
| - }
|
| - return offset_;
|
| -}
|
| -
|
| -void GPUTiming::InvalidateTimerOffset() {
|
| - offset_valid_ = false;
|
| -}
|
| -
|
| -void GPUTiming::SetCpuTimeForTesting(
|
| - const base::Callback<int64(void)>& cpu_time) {
|
| - cpu_time_for_testing_ = cpu_time;
|
| -}
|
| -
|
| -void GPUTiming::SetOffsetForTesting(int64 offset, bool cache_it) {
|
| - offset_ = offset;
|
| - offset_valid_ = cache_it;
|
| -}
|
| -
|
| -void GPUTiming::SetTimerTypeForTesting(TimerType type) {
|
| - timer_type_ = type;
|
| -}
|
| -
|
| -} // namespace gpu
|
|
|