| // 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 <stdint.h> |
| |
| #include <map> |
| #include <set> |
| |
| #include "ui/gl/gl_bindings.h" |
| |
| namespace gl { |
| class MockGLInterface; |
| |
| class GPUTimingFake { |
| public: |
| GPUTimingFake(); |
| ~GPUTimingFake(); |
| |
| void Reset(); |
| |
| // Used to set the current GPU time queries will return. |
| static int64_t GetFakeCPUTime(); // Useful for binding for Fake CPU time. |
| void SetCurrentCPUTime(int64_t current_time); |
| void SetCurrentGLTime(GLint64 current_time); |
| void SetCPUGLOffset(int64_t offset); |
| |
| // 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 ExpectGPUTimeStampQuery(MockGLInterface& gl, bool elapsed_query); |
| 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 FakeGLGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* 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; |
| static int64_t fake_cpu_time_; |
| GLint64 current_gl_time_ = 0; |
| int64_t gl_cpu_time_offset_ = 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 gl |
| |
| #endif // UI_GL_GPU_TIMING_FAKE_H_ |