Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(689)

Side by Side Diff: gpu/command_buffer/service/gpu_tracer_unittest.cc

Issue 509723002: Added support for GPU Tracing on mobile devices which support it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplified and collapsed glGetQueryObject bindings Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gpu/command_buffer/service/gpu_tracer.cc ('k') | ui/gl/generate_bindings.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <set> 6 #include <set>
7 7
8 #include "gpu/command_buffer/service/gpu_service_test.h" 8 #include "gpu/command_buffer/service/gpu_service_test.h"
9 #include "gpu/command_buffer/service/gpu_tracer.h" 9 #include "gpu/command_buffer/service/gpu_tracer.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 void Reset() { 45 void Reset() {
46 current_time_ = 0; 46 current_time_ = 0;
47 next_query_id_ = 23; 47 next_query_id_ = 23;
48 alloced_queries_.clear(); 48 alloced_queries_.clear();
49 query_timestamp_.clear(); 49 query_timestamp_.clear();
50 } 50 }
51 51
52 void SetCurrentGLTime(GLint64 current_time) { current_time_ = current_time; } 52 void SetCurrentGLTime(GLint64 current_time) { current_time_ = current_time; }
53 53
54 void GenQueries(GLsizei n, GLuint* ids) { 54 void GenQueriesARB(GLsizei n, GLuint* ids) {
55 for (GLsizei i = 0; i < n; i++) { 55 for (GLsizei i = 0; i < n; i++) {
56 ids[i] = next_query_id_++; 56 ids[i] = next_query_id_++;
57 alloced_queries_.insert(ids[i]); 57 alloced_queries_.insert(ids[i]);
58 } 58 }
59 } 59 }
60 60
61 void DeleteQueries(GLsizei n, const GLuint* ids) { 61 void DeleteQueriesARB(GLsizei n, const GLuint* ids) {
62 for (GLsizei i = 0; i < n; i++) { 62 for (GLsizei i = 0; i < n; i++) {
63 alloced_queries_.erase(ids[i]); 63 alloced_queries_.erase(ids[i]);
64 query_timestamp_.erase(ids[i]); 64 query_timestamp_.erase(ids[i]);
65 } 65 }
66 } 66 }
67 67
68 void GetQueryObjectiv(GLuint id, GLenum pname, GLint* params) { 68 void GetQueryObjectiv(GLuint id, GLenum pname, GLint* params) {
69 switch (pname) { 69 switch (pname) {
70 case GL_QUERY_RESULT_AVAILABLE: { 70 case GL_QUERY_RESULT_AVAILABLE: {
71 std::map<GLuint, GLint64>::iterator it = query_timestamp_.find(id); 71 std::map<GLuint, GLint64>::iterator it = query_timestamp_.find(id);
(...skipping 30 matching lines...) Expand all
102 } 102 }
103 } 103 }
104 104
105 protected: 105 protected:
106 GLint64 current_time_; 106 GLint64 current_time_;
107 GLuint next_query_id_; 107 GLuint next_query_id_;
108 std::set<GLuint> alloced_queries_; 108 std::set<GLuint> alloced_queries_;
109 std::map<GLuint, GLint64> query_timestamp_; 109 std::map<GLuint, GLint64> query_timestamp_;
110 }; 110 };
111 111
112 class GpuTracerTest : public GpuServiceTest { 112 class BaseGpuTracerTest : public GpuServiceTest {
113 public: 113 public:
114 GpuTracerTest() {} 114 BaseGpuTracerTest() {}
115 115
116 /////////////////////////////////////////////////////////////////////////// 116 ///////////////////////////////////////////////////////////////////////////
117 117
118 protected: 118 void DoTraceTest() {
119 virtual void SetUp() {
120 GpuServiceTest::SetUp();
121 gl_fake_queries_.Reset();
122 }
123
124 virtual void TearDown() {
125 gl_.reset();
126 gl_fake_queries_.Reset();
127 GpuServiceTest::TearDown();
128 }
129
130 void SetupTimerQueryMocks() {
131 // Delegate query APIs used by GPUTrace to a GlFakeQueries
132 EXPECT_CALL(*gl_, GenQueries(_, NotNull())).Times(AtLeast(1)).WillOnce(
133 Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueries));
134
135 EXPECT_CALL(*gl_, GetQueryObjectiv(_, GL_QUERY_RESULT_AVAILABLE, NotNull()))
136 .Times(AtLeast(2))
137 .WillRepeatedly(
138 Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectiv));
139
140 EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP))
141 .Times(AtLeast(2))
142 .WillRepeatedly(
143 Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter));
144
145 EXPECT_CALL(*gl_, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull()))
146 .Times(AtLeast(2))
147 .WillRepeatedly(
148 Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectui64v));
149
150 EXPECT_CALL(*gl_, DeleteQueries(2, NotNull()))
151 .Times(AtLeast(1))
152 .WillRepeatedly(
153 Invoke(&gl_fake_queries_, &GlFakeQueries::DeleteQueries));
154 }
155
156 GlFakeQueries gl_fake_queries_;
157 };
158
159 TEST_F(GpuTracerTest, GPUTrace) {
160 // Test basic timer query functionality
161 {
162 MockOutputter* outputter = new MockOutputter(); 119 MockOutputter* outputter = new MockOutputter();
163 scoped_refptr<Outputter> outputter_ref = outputter; 120 scoped_refptr<Outputter> outputter_ref = outputter;
164 121
165 SetupTimerQueryMocks(); 122 SetupTimerQueryMocks();
166 123
167 // Expected results 124 // Expected results
168 const std::string trace_name("trace_test"); 125 const std::string trace_name("trace_test");
169 const int64 offset_time = 3231; 126 const int64 offset_time = 3231;
170 const GLint64 start_timestamp = 7 * base::Time::kNanosecondsPerMicrosecond; 127 const GLint64 start_timestamp = 7 * base::Time::kNanosecondsPerMicrosecond;
171 const GLint64 end_timestamp = 32 * base::Time::kNanosecondsPerMicrosecond; 128 const GLint64 end_timestamp = 32 * base::Time::kNanosecondsPerMicrosecond;
172 const int64 expect_start_time = 129 const int64 expect_start_time =
173 (start_timestamp / base::Time::kNanosecondsPerMicrosecond) + 130 (start_timestamp / base::Time::kNanosecondsPerMicrosecond) +
174 offset_time; 131 offset_time;
175 const int64 expect_end_time = 132 const int64 expect_end_time =
176 (end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time; 133 (end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time;
177 134
178 // Expected Outputter::Trace call 135 // Expected Outputter::Trace call
179 EXPECT_CALL(*outputter, 136 EXPECT_CALL(*outputter,
180 Trace(trace_name, expect_start_time, expect_end_time)); 137 Trace(trace_name, expect_start_time, expect_end_time));
181 138
182 scoped_refptr<GPUTrace> trace = 139 scoped_refptr<GPUTrace> trace =
183 new GPUTrace(outputter_ref, trace_name, offset_time); 140 new GPUTrace(outputter_ref, trace_name, offset_time,
141 GetTracerType());
184 142
185 gl_fake_queries_.SetCurrentGLTime(start_timestamp); 143 gl_fake_queries_.SetCurrentGLTime(start_timestamp);
186 trace->Start(); 144 trace->Start();
187 145
188 // Shouldn't be available before End() call 146 // Shouldn't be available before End() call
189 gl_fake_queries_.SetCurrentGLTime(end_timestamp); 147 gl_fake_queries_.SetCurrentGLTime(end_timestamp);
190 EXPECT_FALSE(trace->IsAvailable()); 148 EXPECT_FALSE(trace->IsAvailable());
191 149
192 trace->End(); 150 trace->End();
193 151
194 // Shouldn't be available until the queries complete 152 // Shouldn't be available until the queries complete
195 gl_fake_queries_.SetCurrentGLTime(end_timestamp - 153 gl_fake_queries_.SetCurrentGLTime(end_timestamp -
196 base::Time::kNanosecondsPerMicrosecond); 154 base::Time::kNanosecondsPerMicrosecond);
197 EXPECT_FALSE(trace->IsAvailable()); 155 EXPECT_FALSE(trace->IsAvailable());
198 156
199 // Now it should be available 157 // Now it should be available
200 gl_fake_queries_.SetCurrentGLTime(end_timestamp); 158 gl_fake_queries_.SetCurrentGLTime(end_timestamp);
201 EXPECT_TRUE(trace->IsAvailable()); 159 EXPECT_TRUE(trace->IsAvailable());
202 160
203 // Proces should output expected Trace results to MockOutputter 161 // Proces should output expected Trace results to MockOutputter
204 trace->Process(); 162 trace->Process();
205 } 163 }
164
165 protected:
166 virtual void SetUp() {
167 GpuServiceTest::SetUp();
168 gl_fake_queries_.Reset();
169 }
170
171 virtual void TearDown() {
172 gl_.reset();
173 gl_fake_queries_.Reset();
174 GpuServiceTest::TearDown();
175 }
176
177 virtual void SetupTimerQueryMocks() {
178 // Delegate query APIs used by GPUTrace to a GlFakeQueries
179 EXPECT_CALL(*gl_, GenQueriesARB(_, NotNull())).Times(AtLeast(1)).WillOnce(
180 Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueriesARB));
181
182 EXPECT_CALL(*gl_, GetQueryObjectiv(_, GL_QUERY_RESULT_AVAILABLE, NotNull()))
183 .Times(AtLeast(2))
184 .WillRepeatedly(
185 Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectiv));
186
187 EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP))
188 .Times(AtLeast(2))
189 .WillRepeatedly(
190 Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter));
191
192 EXPECT_CALL(*gl_, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull()))
193 .Times(AtLeast(2))
194 .WillRepeatedly(
195 Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectui64v));
196
197 EXPECT_CALL(*gl_, DeleteQueriesARB(2, NotNull()))
198 .Times(AtLeast(1))
199 .WillRepeatedly(
200 Invoke(&gl_fake_queries_, &GlFakeQueries::DeleteQueriesARB));
201 }
202
203 virtual GpuTracerType GetTracerType() = 0;
204
205 GlFakeQueries gl_fake_queries_;
206 };
207
208 class GpuARBTimerTracerTest : public BaseGpuTracerTest {
209 protected:
210 virtual GpuTracerType GetTracerType() OVERRIDE {
211 return kTracerTypeARBTimer;
212 }
213 };
214
215 class GpuDisjointTimerTracerTest : public BaseGpuTracerTest {
216 protected:
217 virtual GpuTracerType GetTracerType() OVERRIDE {
218 return kTracerTypeDisjointTimer;
219 }
220 };
221
222 TEST_F(GpuARBTimerTracerTest, GPUTrace) {
223 // Test basic timer query functionality
224 {
225 DoTraceTest();
226 }
227 }
228
229 TEST_F(GpuDisjointTimerTracerTest, GPUTrace) {
230 // Test basic timer query functionality
231 {
232 DoTraceTest();
233 }
206 } 234 }
207 235
208 } // namespace gles2 236 } // namespace gles2
209 } // namespace gpu 237 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gpu_tracer.cc ('k') | ui/gl/generate_bindings.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698