OLD | NEW |
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/gles2_cmd_decoder_mock.h" | 8 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
9 #include "gpu/command_buffer/service/gpu_service_test.h" | 9 #include "gpu/command_buffer/service/gpu_service_test.h" |
10 #include "gpu/command_buffer/service/gpu_tracer.h" | 10 #include "gpu/command_buffer/service/gpu_tracer.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 } | 81 } |
82 } | 82 } |
83 | 83 |
84 void DeleteQueriesARB(GLsizei n, const GLuint* ids) { | 84 void DeleteQueriesARB(GLsizei n, const GLuint* ids) { |
85 for (GLsizei i = 0; i < n; i++) { | 85 for (GLsizei i = 0; i < n; i++) { |
86 alloced_queries_.erase(ids[i]); | 86 alloced_queries_.erase(ids[i]); |
87 query_timestamp_.erase(ids[i]); | 87 query_timestamp_.erase(ids[i]); |
88 } | 88 } |
89 } | 89 } |
90 | 90 |
91 void GetQueryObjectiv(GLuint id, GLenum pname, GLint* params) { | 91 void GetQueryObjectivARB(GLuint id, GLenum pname, GLint* params) { |
92 switch (pname) { | 92 switch (pname) { |
93 case GL_QUERY_RESULT_AVAILABLE: { | 93 case GL_QUERY_RESULT_AVAILABLE: { |
94 std::map<GLuint, GLint64>::iterator it = query_timestamp_.find(id); | 94 std::map<GLuint, GLint64>::iterator it = query_timestamp_.find(id); |
95 if (it != query_timestamp_.end() && it->second <= current_time_) | 95 if (it != query_timestamp_.end() && it->second <= current_time_) |
96 *params = 1; | 96 *params = 1; |
97 else | 97 else |
98 *params = 0; | 98 *params = 0; |
99 break; | 99 break; |
100 } | 100 } |
101 default: | 101 default: |
102 FAIL() << "Invalid variable passed to GetQueryObjectiv: " << pname; | 102 FAIL() << "Invalid variable passed to GetQueryObjectivARB: " << pname; |
103 } | 103 } |
104 } | 104 } |
105 | 105 |
106 void QueryCounter(GLuint id, GLenum target) { | 106 void QueryCounter(GLuint id, GLenum target) { |
107 switch (target) { | 107 switch (target) { |
108 case GL_TIMESTAMP: | 108 case GL_TIMESTAMP: |
109 ASSERT_TRUE(alloced_queries_.find(id) != alloced_queries_.end()); | 109 ASSERT_TRUE(alloced_queries_.find(id) != alloced_queries_.end()); |
110 query_timestamp_[id] = current_time_; | 110 query_timestamp_[id] = current_time_; |
111 break; | 111 break; |
112 default: | 112 default: |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 GpuServiceTest::TearDown(); | 248 GpuServiceTest::TearDown(); |
249 } | 249 } |
250 | 250 |
251 void ExpectTraceQueryMocks() { | 251 void ExpectTraceQueryMocks() { |
252 if (GetTracerType() != kTracerTypeInvalid) { | 252 if (GetTracerType() != kTracerTypeInvalid) { |
253 // Delegate query APIs used by GPUTrace to a GlFakeQueries | 253 // Delegate query APIs used by GPUTrace to a GlFakeQueries |
254 EXPECT_CALL(*gl_, GenQueriesARB(2, NotNull())).Times(AtLeast(1)) | 254 EXPECT_CALL(*gl_, GenQueriesARB(2, NotNull())).Times(AtLeast(1)) |
255 .WillRepeatedly( | 255 .WillRepeatedly( |
256 Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueriesARB)); | 256 Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueriesARB)); |
257 | 257 |
258 EXPECT_CALL(*gl_, GetQueryObjectiv(_, GL_QUERY_RESULT_AVAILABLE, | 258 EXPECT_CALL(*gl_, GetQueryObjectivARB(_, GL_QUERY_RESULT_AVAILABLE, |
259 NotNull())) | 259 NotNull())) |
260 .WillRepeatedly( | 260 .WillRepeatedly( |
261 Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectiv)); | 261 Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectivARB)); |
262 | 262 |
263 if (GetTracerType() == kTracerTypeDisjointTimer) { | 263 if (GetTracerType() == kTracerTypeDisjointTimer) { |
264 EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, _)) | 264 EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, _)) |
265 .WillRepeatedly( | 265 .WillRepeatedly( |
266 Invoke(&gl_fake_queries_, &GlFakeQueries::GetInteger64v)); | 266 Invoke(&gl_fake_queries_, &GlFakeQueries::GetInteger64v)); |
267 } | 267 } |
268 | 268 |
269 EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP)).Times(AtLeast(2)) | 269 EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP)).Times(AtLeast(2)) |
270 .WillRepeatedly( | 270 .WillRepeatedly( |
271 Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter)); | 271 Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter)); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 if (GetTracerType() == kTracerTypeDisjointTimer) { | 323 if (GetTracerType() == kTracerTypeDisjointTimer) { |
324 EXPECT_CALL(*gl_, GetIntegerv(GL_GPU_DISJOINT_EXT, _)).Times(AtLeast(1)) | 324 EXPECT_CALL(*gl_, GetIntegerv(GL_GPU_DISJOINT_EXT, _)).Times(AtLeast(1)) |
325 .WillRepeatedly( | 325 .WillRepeatedly( |
326 Invoke(&gl_fake_queries_, &GlFakeQueries::GetIntegerv)); | 326 Invoke(&gl_fake_queries_, &GlFakeQueries::GetIntegerv)); |
327 } else { | 327 } else { |
328 EXPECT_CALL(*gl_, GetIntegerv(GL_GPU_DISJOINT_EXT, _)).Times(Exactly(0)); | 328 EXPECT_CALL(*gl_, GetIntegerv(GL_GPU_DISJOINT_EXT, _)).Times(Exactly(0)); |
329 } | 329 } |
330 | 330 |
331 // Timer offset calculation should only happen for the regular timer. | 331 // Timer offset calculation should only happen for the regular timer. |
332 if (GetTracerType() != kTracerTypeARBTimer) { | 332 if (GetTracerType() != kTracerTypeARBTimer) { |
333 EXPECT_CALL(*gl_, GenQueriesARB(_, NotNull())).Times(Exactly(0)); | 333 EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, NotNull())) |
334 EXPECT_CALL(*gl_, Finish()).Times(Exactly(0)); | |
335 EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP)).Times(Exactly(0)); | |
336 EXPECT_CALL(*gl_, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull())) | |
337 .Times(Exactly(0)); | 334 .Times(Exactly(0)); |
338 EXPECT_CALL(*gl_, DeleteQueriesARB(_, NotNull())).Times(Exactly(0)); | |
339 } else { | 335 } else { |
340 EXPECT_CALL(*gl_, GenQueriesARB(_, NotNull())).Times(AtLeast(1)) | 336 EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, NotNull())) |
341 .WillRepeatedly( | |
342 Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueriesARB)); | |
343 | |
344 EXPECT_CALL(*gl_, Finish()).Times(AtLeast(2)) | |
345 .WillRepeatedly( | |
346 Invoke(&gl_fake_queries_, &GlFakeQueries::Finish)); | |
347 | |
348 EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP)) | |
349 .Times(AtLeast(1)) | 337 .Times(AtLeast(1)) |
350 .WillRepeatedly( | 338 .WillRepeatedly( |
351 Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter)); | 339 Invoke(&gl_fake_queries_, &GlFakeQueries::GetInteger64v)); |
352 | |
353 EXPECT_CALL(*gl_, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull())) | |
354 .Times(AtLeast(1)) | |
355 .WillRepeatedly( | |
356 Invoke(&gl_fake_queries_, | |
357 &GlFakeQueries::GetQueryObjectui64v)); | |
358 | |
359 EXPECT_CALL(*gl_, DeleteQueriesARB(1, NotNull())) | |
360 .Times(AtLeast(1)) | |
361 .WillRepeatedly( | |
362 Invoke(&gl_fake_queries_, &GlFakeQueries::DeleteQueriesARB)); | |
363 } | 340 } |
364 } | 341 } |
365 | 342 |
366 GpuTracerType GetTracerType() { return test_tracer_type_; } | 343 GpuTracerType GetTracerType() { return test_tracer_type_; } |
367 | 344 |
368 GpuTracerType test_tracer_type_; | 345 GpuTracerType test_tracer_type_; |
369 GlFakeQueries gl_fake_queries_; | 346 GlFakeQueries gl_fake_queries_; |
370 | 347 |
371 scoped_refptr<MockOutputter> outputter_ref_; | 348 scoped_refptr<MockOutputter> outputter_ref_; |
372 scoped_refptr<FakeCPUTime> cpu_time_ref_; | 349 scoped_refptr<FakeCPUTime> cpu_time_ref_; |
(...skipping 24 matching lines...) Expand all Loading... |
397 | 374 |
398 ExpectTraceQueryMocks(); | 375 ExpectTraceQueryMocks(); |
399 ExpectOutputterMocks(outputter_ref_.get(), category_name, trace_name, | 376 ExpectOutputterMocks(outputter_ref_.get(), category_name, trace_name, |
400 expect_start_time, expect_end_time); | 377 expect_start_time, expect_end_time); |
401 | 378 |
402 scoped_refptr<GPUTrace> trace = | 379 scoped_refptr<GPUTrace> trace = |
403 new GPUTrace(outputter_ref_, cpu_time_ref_, category_name, trace_name, | 380 new GPUTrace(outputter_ref_, cpu_time_ref_, category_name, trace_name, |
404 offset_time, GetTracerType()); | 381 offset_time, GetTracerType()); |
405 | 382 |
406 gl_fake_queries_.SetCurrentGLTime(start_timestamp); | 383 gl_fake_queries_.SetCurrentGLTime(start_timestamp); |
| 384 cpu_time_ref_->SetFakeCPUTime(expect_start_time); |
407 trace->Start(true); | 385 trace->Start(true); |
408 | 386 |
409 // Shouldn't be available before End() call | 387 // Shouldn't be available before End() call |
410 gl_fake_queries_.SetCurrentGLTime(end_timestamp); | 388 gl_fake_queries_.SetCurrentGLTime(end_timestamp); |
411 EXPECT_FALSE(trace->IsAvailable()); | 389 EXPECT_FALSE(trace->IsAvailable()); |
412 | 390 |
413 trace->End(true); | 391 trace->End(true); |
414 | 392 |
415 // Shouldn't be available until the queries complete | 393 // Shouldn't be available until the queries complete |
416 gl_fake_queries_.SetCurrentGLTime(end_timestamp - | 394 gl_fake_queries_.SetCurrentGLTime(end_timestamp - |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 kTraceGroupMarker)); | 667 kTraceGroupMarker)); |
690 | 668 |
691 ASSERT_TRUE(tracer_tester.BeginDecoding()); | 669 ASSERT_TRUE(tracer_tester.BeginDecoding()); |
692 EXPECT_TRUE(tracer_tester.Begin(category_name, trace_name, | 670 EXPECT_TRUE(tracer_tester.Begin(category_name, trace_name, |
693 kTraceGroupMarker)); | 671 kTraceGroupMarker)); |
694 ASSERT_TRUE(tracer_tester.EndDecoding()); | 672 ASSERT_TRUE(tracer_tester.EndDecoding()); |
695 } | 673 } |
696 | 674 |
697 } // namespace gles2 | 675 } // namespace gles2 |
698 } // namespace gpu | 676 } // namespace gpu |
OLD | NEW |