OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
10 #include "cc/output/compositor_frame_metadata.h" | 10 #include "cc/output/compositor_frame_metadata.h" |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 LayerTreeSettings settings_; | 378 LayerTreeSettings settings_; |
379 FakeOutputSurfaceClient output_surface_client_; | 379 FakeOutputSurfaceClient output_surface_client_; |
380 scoped_ptr<FakeOutputSurface> output_surface_; | 380 scoped_ptr<FakeOutputSurface> output_surface_; |
381 FakeRendererClient renderer_client_; | 381 FakeRendererClient renderer_client_; |
382 scoped_ptr<ResourceProvider> resource_provider_; | 382 scoped_ptr<ResourceProvider> resource_provider_; |
383 scoped_ptr<FakeRendererGL> renderer_; | 383 scoped_ptr<FakeRendererGL> renderer_; |
384 }; | 384 }; |
385 | 385 |
386 namespace { | 386 namespace { |
387 | 387 |
388 // Test GLRenderer discardBackbuffer functionality: | |
389 // Suggest recreating framebuffer when one already exists. | |
390 // Expected: it does nothing. | |
391 TEST_F(GLRendererTest, SuggestBackbufferYesWhenItAlreadyExistsShouldDoNothing) { | |
392 renderer_->SetDiscardBackBufferWhenNotVisible(false); | |
393 EXPECT_EQ(0, renderer_client_.set_full_root_layer_damage_count()); | |
394 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); | |
395 | |
396 SwapBuffers(); | |
397 EXPECT_EQ(1, context3d_->frame_count()); | |
398 } | |
399 | |
400 // Test GLRenderer DiscardBackbuffer functionality: | 388 // Test GLRenderer DiscardBackbuffer functionality: |
401 // Suggest discarding framebuffer when one exists and the renderer is not | 389 // Suggest discarding framebuffer when one exists and the renderer is not |
402 // visible. | 390 // visible. |
403 // Expected: it is discarded and damage tracker is reset. | 391 // Expected: it is discarded and damage tracker is reset. |
404 TEST_F( | 392 TEST_F( |
405 GLRendererTest, | 393 GLRendererTest, |
406 SuggestBackbufferNoShouldDiscardBackbufferAndDamageRootLayerIfNotVisible) { | 394 SuggestBackbufferNoShouldDiscardBackbufferAndDamageRootLayerIfNotVisible) { |
407 renderer_->SetVisible(false); | 395 renderer_->SetVisible(false); |
408 renderer_->SetDiscardBackBufferWhenNotVisible(true); | |
409 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); | 396 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
410 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 397 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
411 } | 398 } |
412 | 399 |
413 // Test GLRenderer DiscardBackbuffer functionality: | 400 // Test GLRenderer DiscardBackbuffer functionality: |
414 // Suggest discarding framebuffer when one exists and the renderer is visible. | 401 // Suggest discarding framebuffer when one exists and the renderer is visible. |
415 // Expected: the allocation is ignored. | 402 // Expected: the allocation is ignored. |
416 TEST_F(GLRendererTest, SuggestBackbufferNoDoNothingWhenVisible) { | 403 TEST_F(GLRendererTest, SuggestBackbufferNoDoNothingWhenVisible) { |
417 renderer_->SetVisible(true); | 404 renderer_->SetVisible(true); |
418 renderer_->SetDiscardBackBufferWhenNotVisible(true); | |
419 EXPECT_EQ(0, renderer_client_.set_full_root_layer_damage_count()); | 405 EXPECT_EQ(0, renderer_client_.set_full_root_layer_damage_count()); |
420 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); | 406 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
421 } | 407 } |
422 | 408 |
423 // Test GLRenderer DiscardBackbuffer functionality: | 409 // Test GLRenderer DiscardBackbuffer functionality: |
424 // Suggest discarding framebuffer when one does not exist. | 410 // Suggest discarding framebuffer when one does not exist. |
425 // Expected: it does nothing. | 411 // Expected: it does nothing. |
426 TEST_F(GLRendererTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNothing) { | 412 TEST_F(GLRendererTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNothing) { |
427 renderer_->SetVisible(false); | 413 renderer_->SetVisible(false); |
428 renderer_->SetDiscardBackBufferWhenNotVisible(true); | |
429 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); | 414 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
430 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 415 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
431 | 416 |
432 renderer_->SetDiscardBackBufferWhenNotVisible(true); | |
433 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); | 417 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
434 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 418 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
435 } | 419 } |
436 | 420 |
437 // Test GLRenderer DiscardBackbuffer functionality: | 421 // Test GLRenderer DiscardBackbuffer functionality: |
438 // Begin drawing a frame while a framebuffer is discarded. | 422 // Begin drawing a frame while a framebuffer is discarded. |
439 // Expected: will recreate framebuffer. | 423 // Expected: will recreate framebuffer. |
440 TEST_F(GLRendererTest, DiscardedBackbufferIsRecreatedForScopeDuration) { | 424 TEST_F(GLRendererTest, DiscardedBackbufferIsRecreatedForScopeDuration) { |
441 renderer_->SetVisible(false); | 425 renderer_->SetVisible(false); |
442 renderer_->SetDiscardBackBufferWhenNotVisible(true); | |
443 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 426 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
444 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); | 427 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
445 | 428 |
446 renderer_->SetVisible(true); | 429 renderer_->SetVisible(true); |
447 renderer_->DrawFrame( | 430 renderer_->DrawFrame( |
448 renderer_client_.render_passes_in_draw_order(), NULL, 1.f, true, false); | 431 renderer_client_.render_passes_in_draw_order(), NULL, 1.f, true, false); |
449 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); | 432 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
450 | 433 |
451 SwapBuffers(); | 434 SwapBuffers(); |
452 EXPECT_EQ(1, context3d_->frame_count()); | 435 EXPECT_EQ(1, context3d_->frame_count()); |
453 } | 436 } |
454 | 437 |
455 TEST_F(GLRendererTest, FramebufferDiscardedAfterReadbackWhenNotVisible) { | 438 TEST_F(GLRendererTest, FramebufferDiscardedAfterReadbackWhenNotVisible) { |
456 renderer_->SetVisible(false); | 439 renderer_->SetVisible(false); |
457 renderer_->SetDiscardBackBufferWhenNotVisible(true); | |
458 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 440 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
459 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); | 441 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
460 | 442 |
461 char pixels[4]; | 443 char pixels[4]; |
462 renderer_->DrawFrame( | 444 renderer_->DrawFrame( |
463 renderer_client_.render_passes_in_draw_order(), NULL, 1.f, true, false); | 445 renderer_client_.render_passes_in_draw_order(), NULL, 1.f, true, false); |
464 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); | 446 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
465 | 447 |
466 renderer_->GetFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); | 448 renderer_->GetFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); |
467 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 449 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
(...skipping 1395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1863 base::MessageLoop::current()->Run(); | 1845 base::MessageLoop::current()->Run(); |
1864 | 1846 |
1865 // The sync point should have happened. | 1847 // The sync point should have happened. |
1866 EXPECT_EQ(1, sync_point_callback_count); | 1848 EXPECT_EQ(1, sync_point_callback_count); |
1867 EXPECT_EQ(1, other_callback_count); | 1849 EXPECT_EQ(1, other_callback_count); |
1868 } | 1850 } |
1869 #endif // OS_ANDROID | 1851 #endif // OS_ANDROID |
1870 | 1852 |
1871 } // namespace | 1853 } // namespace |
1872 } // namespace cc | 1854 } // namespace cc |
OLD | NEW |