Index: ui/gl/gpu_timing_fake.h |
diff --git a/ui/gl/gpu_timing_fake.h b/ui/gl/gpu_timing_fake.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..625a394d8aff7d86c2073f1751299e6a4d0f5d3a |
--- /dev/null |
+++ b/ui/gl/gpu_timing_fake.h |
@@ -0,0 +1,82 @@ |
+// Copyright 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. |
+ |
+#ifndef UI_GL_GPU_TIMING_FAKE_H_ |
+#define UI_GL_GPU_TIMING_FAKE_H_ |
+ |
+#include <map> |
+#include <set> |
+ |
+#include "ui/gl/gl_bindings.h" |
+ |
+namespace gfx { |
+class MockGLInterface; |
+ |
+class GPUTimingFake { |
+ public: |
+ GPUTimingFake(); |
+ ~GPUTimingFake(); |
+ |
+ void Reset(); |
+ |
+ // Used to set the current GPU time queries will return. |
+ void SetCurrentGLTime(GLint64 current_time); |
+ |
+ // Used to signal a disjoint occurred for disjoint timer queries. |
+ void SetDisjoint(); |
+ |
+ // GPUTimer fake queries which can be called multiple times. |
+ void ExpectGetErrorCalls(MockGLInterface& gl); |
+ void ExpectDisjointCalls(MockGLInterface& gl); |
+ void ExpectNoDisjointCalls(MockGLInterface& gl); |
+ |
+ // GPUTimer fake queries which can only be called once per setup. |
+ void ExpectGPUTimerQuery(MockGLInterface& gl, bool elapsed_query); |
+ void ExpectOffsetCalculationQuery(MockGLInterface& gl); |
+ void ExpectNoOffsetCalculationQuery(MockGLInterface& gl); |
+ |
+ // Fake GL Functions. |
+ void FakeGLGenQueries(GLsizei n, GLuint* ids); |
+ void FakeGLDeleteQueries(GLsizei n, const GLuint* ids); |
+ void FakeGLBeginQuery(GLenum target, GLuint id); |
+ void FakeGLEndQuery(GLenum target); |
+ void FakeGLGetQueryObjectiv(GLuint id, GLenum pname, GLint* params); |
+ void FakeGLQueryCounter(GLuint id, GLenum target); |
+ void FakeGLGetInteger64v(GLenum pname, GLint64 * data); |
+ void FakeGLGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params); |
+ void FakeGLGetIntegerv(GLenum pname, GLint* params); |
+ GLenum FakeGLGetError(); |
+ |
+ protected: |
+ bool disjointed_ = false; |
+ GLint64 current_time_ = 0; |
+ GLuint next_query_id_ = 0; |
+ std::set<GLuint> allocated_queries_; |
+ struct QueryResult { |
+ enum QueryResultType { |
+ kQueryResultType_Invalid, |
+ kQueryResultType_TimeStamp, |
+ kQueryResultType_Elapsed |
+ } type_ = kQueryResultType_Invalid; |
+ GLint64 begin_time_ = 0; |
+ GLint64 value_ = 0; |
+ }; |
+ std::map<GLuint, QueryResult> query_results_; |
+ struct ElapsedQuery { |
+ bool active_ = false; |
+ GLuint query_id_ = 0; |
+ GLint64 begin_time_ = 0; |
+ |
+ void Reset() { |
+ active_ = false; |
+ query_id_ = 0; |
+ begin_time_ = 0; |
+ } |
+ }; |
+ ElapsedQuery current_elapsed_query_; |
+}; |
+ |
+} // namespace gfx |
+ |
+#endif // UI_GL_GPU_TIMING_FAKE_H_ |