| 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 "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" | 9 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
| 10 #include "gpu/command_buffer/service/gpu_service_test.h" | 10 #include "gpu/command_buffer/service/gpu_service_test.h" |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 expect_start_time, expect_end_time)) | 287 expect_start_time, expect_end_time)) |
| 288 .Times(Exactly(1)); | 288 .Times(Exactly(1)); |
| 289 } else { | 289 } else { |
| 290 EXPECT_CALL(*outputter, TraceDevice(category, name, | 290 EXPECT_CALL(*outputter, TraceDevice(category, name, |
| 291 expect_start_time, expect_end_time)) | 291 expect_start_time, expect_end_time)) |
| 292 .Times(Exactly(0)); | 292 .Times(Exactly(0)); |
| 293 } | 293 } |
| 294 } | 294 } |
| 295 | 295 |
| 296 void ExpectOutputterMocks(MockOutputter* outputter, | 296 void ExpectOutputterMocks(MockOutputter* outputter, |
| 297 bool tracing_device, |
| 297 const std::string& category, | 298 const std::string& category, |
| 298 const std::string& name, int64 expect_start_time, | 299 const std::string& name, int64 expect_start_time, |
| 299 int64 expect_end_time) { | 300 int64 expect_end_time) { |
| 300 ExpectOutputterBeginMocks(outputter, category, name); | 301 ExpectOutputterBeginMocks(outputter, category, name); |
| 301 bool valid_timer = gpu_timing_client_->IsAvailable() && | 302 bool valid_timer = tracing_device && |
| 303 gpu_timing_client_->IsAvailable() && |
| 302 gpu_timing_client_->IsTimerOffsetAvailable(); | 304 gpu_timing_client_->IsTimerOffsetAvailable(); |
| 303 ExpectOutputterEndMocks(outputter, category, name, expect_start_time, | 305 ExpectOutputterEndMocks(outputter, category, name, expect_start_time, |
| 304 expect_end_time, valid_timer); | 306 expect_end_time, valid_timer); |
| 305 } | 307 } |
| 306 | 308 |
| 307 void ExpectTracerOffsetQueryMocks() { | 309 void ExpectTracerOffsetQueryMocks() { |
| 308 if (GetTimerType() != gfx::GPUTiming::kTimerTypeARB) { | 310 if (GetTimerType() != gfx::GPUTiming::kTimerTypeARB) { |
| 309 EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, NotNull())) | 311 EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, NotNull())) |
| 310 .Times(Exactly(0)); | 312 .Times(Exactly(0)); |
| 311 } else { | 313 } else { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 324 scoped_refptr<gfx::GPUTimingClient> gpu_timing_client_; | 326 scoped_refptr<gfx::GPUTimingClient> gpu_timing_client_; |
| 325 scoped_refptr<MockOutputter> outputter_ref_; | 327 scoped_refptr<MockOutputter> outputter_ref_; |
| 326 }; | 328 }; |
| 327 | 329 |
| 328 // Test GPUTrace calls all the correct gl calls. | 330 // Test GPUTrace calls all the correct gl calls. |
| 329 class BaseGpuTraceTest : public BaseGpuTest { | 331 class BaseGpuTraceTest : public BaseGpuTest { |
| 330 public: | 332 public: |
| 331 explicit BaseGpuTraceTest(gfx::GPUTiming::TimerType test_timer_type) | 333 explicit BaseGpuTraceTest(gfx::GPUTiming::TimerType test_timer_type) |
| 332 : BaseGpuTest(test_timer_type) {} | 334 : BaseGpuTest(test_timer_type) {} |
| 333 | 335 |
| 334 void DoTraceTest() { | 336 void DoTraceTest(bool tracing_service, bool tracing_device) { |
| 335 // Expected results | 337 // Expected results |
| 336 const std::string category_name("trace_category"); | 338 const std::string category_name("trace_category"); |
| 337 const std::string trace_name("trace_test"); | 339 const std::string trace_name("trace_test"); |
| 338 const int64 offset_time = 3231; | 340 const int64 offset_time = 3231; |
| 339 const GLint64 start_timestamp = 7 * base::Time::kNanosecondsPerMicrosecond; | 341 const GLint64 start_timestamp = 7 * base::Time::kNanosecondsPerMicrosecond; |
| 340 const GLint64 end_timestamp = 32 * base::Time::kNanosecondsPerMicrosecond; | 342 const GLint64 end_timestamp = 32 * base::Time::kNanosecondsPerMicrosecond; |
| 341 const int64 expect_start_time = | 343 const int64 expect_start_time = |
| 342 (start_timestamp / base::Time::kNanosecondsPerMicrosecond) + | 344 (start_timestamp / base::Time::kNanosecondsPerMicrosecond) + |
| 343 offset_time; | 345 offset_time; |
| 344 const int64 expect_end_time = | 346 const int64 expect_end_time = |
| 345 (end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time; | 347 (end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time; |
| 346 | 348 |
| 347 ExpectTraceQueryMocks(); | 349 if (tracing_service) |
| 348 ExpectOutputterMocks(outputter_ref_.get(), category_name, trace_name, | 350 ExpectOutputterMocks(outputter_ref_.get(), tracing_device, category_name, |
| 349 expect_start_time, expect_end_time); | 351 trace_name, expect_start_time, expect_end_time); |
| 352 |
| 353 if (tracing_device) |
| 354 ExpectTraceQueryMocks(); |
| 350 | 355 |
| 351 scoped_refptr<GPUTrace> trace = new GPUTrace( | 356 scoped_refptr<GPUTrace> trace = new GPUTrace( |
| 352 outputter_ref_, gpu_timing_client_.get(), | 357 outputter_ref_, gpu_timing_client_.get(), |
| 353 category_name, trace_name, true); | 358 category_name, trace_name, tracing_service, tracing_device); |
| 354 | 359 |
| 355 gl_fake_queries_.SetCurrentGLTime(start_timestamp); | 360 gl_fake_queries_.SetCurrentGLTime(start_timestamp); |
| 356 g_fakeCPUTime = expect_start_time; | 361 g_fakeCPUTime = expect_start_time; |
| 357 trace->Start(true); | 362 trace->Start(); |
| 358 | 363 |
| 359 // Shouldn't be available before End() call | 364 // Shouldn't be available before End() call |
| 360 gl_fake_queries_.SetCurrentGLTime(end_timestamp); | 365 gl_fake_queries_.SetCurrentGLTime(end_timestamp); |
| 361 g_fakeCPUTime = expect_end_time; | 366 g_fakeCPUTime = expect_end_time; |
| 362 EXPECT_FALSE(trace->IsAvailable()); | 367 if (tracing_device) |
| 368 EXPECT_FALSE(trace->IsAvailable()); |
| 363 | 369 |
| 364 trace->End(true); | 370 trace->End(); |
| 365 | 371 |
| 366 // Shouldn't be available until the queries complete | 372 // Shouldn't be available until the queries complete |
| 367 gl_fake_queries_.SetCurrentGLTime(end_timestamp - | 373 gl_fake_queries_.SetCurrentGLTime(end_timestamp - |
| 368 base::Time::kNanosecondsPerMicrosecond); | 374 base::Time::kNanosecondsPerMicrosecond); |
| 369 EXPECT_FALSE(trace->IsAvailable()); | 375 if (tracing_device) |
| 376 EXPECT_FALSE(trace->IsAvailable()); |
| 370 | 377 |
| 371 // Now it should be available | 378 // Now it should be available |
| 372 gl_fake_queries_.SetCurrentGLTime(end_timestamp); | 379 gl_fake_queries_.SetCurrentGLTime(end_timestamp); |
| 373 EXPECT_TRUE(trace->IsAvailable()); | 380 EXPECT_TRUE(trace->IsAvailable()); |
| 374 | 381 |
| 375 // Proces should output expected Trace results to MockOutputter | 382 // Proces should output expected Trace results to MockOutputter |
| 376 trace->Process(); | 383 trace->Process(); |
| 377 | 384 |
| 378 // Destroy trace after we are done. | 385 // Destroy trace after we are done. |
| 379 trace->Destroy(true); | 386 trace->Destroy(true); |
| 380 | 387 |
| 381 outputter_ref_ = NULL; | 388 outputter_ref_ = NULL; |
| 382 } | 389 } |
| 383 }; | 390 }; |
| 384 | 391 |
| 385 class GpuARBTimerTraceTest : public BaseGpuTraceTest { | 392 class GpuARBTimerTraceTest : public BaseGpuTraceTest { |
| 386 public: | 393 public: |
| 387 GpuARBTimerTraceTest() : BaseGpuTraceTest(gfx::GPUTiming::kTimerTypeARB) {} | 394 GpuARBTimerTraceTest() : BaseGpuTraceTest(gfx::GPUTiming::kTimerTypeARB) {} |
| 388 }; | 395 }; |
| 389 | 396 |
| 390 class GpuDisjointTimerTraceTest : public BaseGpuTraceTest { | 397 class GpuDisjointTimerTraceTest : public BaseGpuTraceTest { |
| 391 public: | 398 public: |
| 392 GpuDisjointTimerTraceTest() | 399 GpuDisjointTimerTraceTest() |
| 393 : BaseGpuTraceTest(gfx::GPUTiming::kTimerTypeDisjoint) {} | 400 : BaseGpuTraceTest(gfx::GPUTiming::kTimerTypeDisjoint) {} |
| 394 }; | 401 }; |
| 395 | 402 |
| 396 TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTest) { | 403 TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestOff) { |
| 397 DoTraceTest(); | 404 DoTraceTest(false, false); |
| 398 } | 405 } |
| 399 | 406 |
| 400 TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTest) { | 407 TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestServiceOnly) { |
| 401 DoTraceTest(); | 408 DoTraceTest(true, false); |
| 409 } |
| 410 |
| 411 TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestDeviceOnly) { |
| 412 DoTraceTest(false, true); |
| 413 } |
| 414 |
| 415 TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestBothOn) { |
| 416 DoTraceTest(true, true); |
| 417 } |
| 418 |
| 419 TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestOff) { |
| 420 DoTraceTest(false, false); |
| 421 } |
| 422 |
| 423 TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestServiceOnly) { |
| 424 DoTraceTest(true, false); |
| 425 } |
| 426 |
| 427 TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestDeviceOnly) { |
| 428 DoTraceTest(false, true); |
| 429 } |
| 430 |
| 431 TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestBothOn) { |
| 432 DoTraceTest(true, true); |
| 402 } | 433 } |
| 403 | 434 |
| 404 // Test GPUTracer calls all the correct gl calls. | 435 // Test GPUTracer calls all the correct gl calls. |
| 405 class BaseGpuTracerTest : public BaseGpuTest { | 436 class BaseGpuTracerTest : public BaseGpuTest { |
| 406 public: | 437 public: |
| 407 explicit BaseGpuTracerTest(gfx::GPUTiming::TimerType test_timer_type) | 438 explicit BaseGpuTracerTest(gfx::GPUTiming::TimerType test_timer_type) |
| 408 : BaseGpuTest(test_timer_type) {} | 439 : BaseGpuTest(test_timer_type) {} |
| 409 | 440 |
| 410 void DoBasicTracerTest() { | 441 void DoBasicTracerTest() { |
| 411 ExpectTracerOffsetQueryMocks(); | 442 ExpectTracerOffsetQueryMocks(); |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 scoped_refptr<gfx::GPUTimingClient> client3 = | 733 scoped_refptr<gfx::GPUTimingClient> client3 = |
| 703 GetGLContext()->CreateGPUTimingClient(); | 734 GetGLContext()->CreateGPUTimingClient(); |
| 704 ASSERT_TRUE(client1->CheckAndResetTimerErrors()); | 735 ASSERT_TRUE(client1->CheckAndResetTimerErrors()); |
| 705 ASSERT_TRUE(client2->CheckAndResetTimerErrors()); | 736 ASSERT_TRUE(client2->CheckAndResetTimerErrors()); |
| 706 ASSERT_FALSE(client3->CheckAndResetTimerErrors()); | 737 ASSERT_FALSE(client3->CheckAndResetTimerErrors()); |
| 707 } | 738 } |
| 708 | 739 |
| 709 } // namespace | 740 } // namespace |
| 710 } // namespace gles2 | 741 } // namespace gles2 |
| 711 } // namespace gpu | 742 } // namespace gpu |
| OLD | NEW |