| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 CreateHostImpl(settings, CreateOutputSurface()); | 460 CreateHostImpl(settings, CreateOutputSurface()); |
| 461 } | 461 } |
| 462 }; | 462 }; |
| 463 | 463 |
| 464 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { | 464 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { |
| 465 bool always_draw = false; | 465 bool always_draw = false; |
| 466 CheckNotifyCalledIfCanDrawChanged(always_draw); | 466 CheckNotifyCalledIfCanDrawChanged(always_draw); |
| 467 } | 467 } |
| 468 | 468 |
| 469 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { | 469 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { |
| 470 CreateHostImpl(DefaultSettings(), | 470 CreateHostImpl(DefaultSettings(), FakeOutputSurface::Create3d()); |
| 471 FakeOutputSurface::CreateAlwaysDrawAndSwap3d()); | 471 const gfx::Transform external_transform; |
| 472 const gfx::Rect external_viewport; |
| 473 const gfx::Rect external_clip; |
| 474 const bool resourceless_software_draw = true; |
| 475 host_impl_->SetExternalDrawConstraints( |
| 476 external_transform, external_viewport, external_clip, external_viewport, |
| 477 external_transform, resourceless_software_draw); |
| 472 | 478 |
| 473 bool always_draw = true; | 479 bool always_draw = true; |
| 474 CheckNotifyCalledIfCanDrawChanged(always_draw); | 480 CheckNotifyCalledIfCanDrawChanged(always_draw); |
| 475 } | 481 } |
| 476 | 482 |
| 477 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { | 483 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { |
| 478 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); | 484 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); |
| 479 | 485 |
| 480 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); | 486 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); |
| 481 ASSERT_EQ(scroll_info->scrolls.size(), 0u); | 487 ASSERT_EQ(scroll_info->scrolls.size(), 0u); |
| (...skipping 2629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3111 LayerTreeHostImpl::FrameData frame; | 3117 LayerTreeHostImpl::FrameData frame; |
| 3112 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame)); | 3118 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame)); |
| 3113 host_impl_->DrawLayers(&frame); | 3119 host_impl_->DrawLayers(&frame); |
| 3114 host_impl_->DidDrawAllLayers(frame); | 3120 host_impl_->DidDrawAllLayers(frame); |
| 3115 host_impl_->SwapBuffers(frame); | 3121 host_impl_->SwapBuffers(frame); |
| 3116 } | 3122 } |
| 3117 } | 3123 } |
| 3118 | 3124 |
| 3119 TEST_F(LayerTreeHostImplTest, | 3125 TEST_F(LayerTreeHostImplTest, |
| 3120 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { | 3126 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { |
| 3121 CreateHostImpl(DefaultSettings(), | 3127 CreateHostImpl(DefaultSettings(), FakeOutputSurface::Create3d()); |
| 3122 FakeOutputSurface::CreateAlwaysDrawAndSwap3d()); | 3128 |
| 3123 EXPECT_TRUE(host_impl_->output_surface() | 3129 const gfx::Transform external_transform; |
| 3124 ->capabilities() | 3130 const gfx::Rect external_viewport; |
| 3125 .draw_and_swap_full_viewport_every_frame); | 3131 const gfx::Rect external_clip; |
| 3132 const bool resourceless_software_draw = true; |
| 3133 host_impl_->SetExternalDrawConstraints( |
| 3134 external_transform, external_viewport, external_clip, external_viewport, |
| 3135 external_transform, resourceless_software_draw); |
| 3126 | 3136 |
| 3127 std::vector<PrepareToDrawSuccessTestCase> cases; | 3137 std::vector<PrepareToDrawSuccessTestCase> cases; |
| 3128 | 3138 |
| 3129 // 0. Default case. | 3139 // 0. Default case. |
| 3130 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3140 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
| 3131 // 1. Animation with missing tile. | 3141 // 1. Animation with missing tile. |
| 3132 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3142 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
| 3133 cases.back().layer_between.has_missing_tile = true; | 3143 cases.back().layer_between.has_missing_tile = true; |
| 3134 cases.back().layer_between.is_animating = true; | 3144 cases.back().layer_between.is_animating = true; |
| 3135 // 2. High res required with incomplete tile. | 3145 // 2. High res required with incomplete tile. |
| (...skipping 2389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5525 host_impl_->DidDrawAllLayers(frame); | 5535 host_impl_->DidDrawAllLayers(frame); |
| 5526 } | 5536 } |
| 5527 | 5537 |
| 5528 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { | 5538 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| 5529 protected: | 5539 protected: |
| 5530 LayerTreeHostImplViewportCoveredTest() : | 5540 LayerTreeHostImplViewportCoveredTest() : |
| 5531 gutter_quad_material_(DrawQuad::SOLID_COLOR), | 5541 gutter_quad_material_(DrawQuad::SOLID_COLOR), |
| 5532 child_(NULL), | 5542 child_(NULL), |
| 5533 did_activate_pending_tree_(false) {} | 5543 did_activate_pending_tree_(false) {} |
| 5534 | 5544 |
| 5535 scoped_ptr<OutputSurface> CreateFakeOutputSurface(bool always_draw) { | 5545 scoped_ptr<OutputSurface> CreateFakeOutputSurface() { |
| 5536 if (always_draw) { | |
| 5537 return FakeOutputSurface::CreateAlwaysDrawAndSwap3d(); | |
| 5538 } | |
| 5539 return FakeOutputSurface::Create3d(); | 5546 return FakeOutputSurface::Create3d(); |
| 5540 } | 5547 } |
| 5541 | 5548 |
| 5542 void SetupActiveTreeLayers() { | 5549 void SetupActiveTreeLayers() { |
| 5543 host_impl_->active_tree()->set_background_color(SK_ColorGRAY); | 5550 host_impl_->active_tree()->set_background_color(SK_ColorGRAY); |
| 5544 host_impl_->active_tree()->SetRootLayer( | 5551 host_impl_->active_tree()->SetRootLayer( |
| 5545 LayerImpl::Create(host_impl_->active_tree(), 1)); | 5552 LayerImpl::Create(host_impl_->active_tree(), 1)); |
| 5546 host_impl_->active_tree()->root_layer()->SetHasRenderSurface(true); | 5553 host_impl_->active_tree()->root_layer()->SetHasRenderSurface(true); |
| 5547 host_impl_->active_tree()->root_layer()->AddChild( | 5554 host_impl_->active_tree()->root_layer()->AddChild( |
| 5548 BlendStateCheckLayer::Create(host_impl_->active_tree(), | 5555 BlendStateCheckLayer::Create(host_impl_->active_tree(), |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5677 texture_quad->uv_bottom_right.y(), | 5684 texture_quad->uv_bottom_right.y(), |
| 5678 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); | 5685 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); |
| 5679 } | 5686 } |
| 5680 } | 5687 } |
| 5681 | 5688 |
| 5682 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { | 5689 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { |
| 5683 return gfx::ScaleToRoundedSize( | 5690 return gfx::ScaleToRoundedSize( |
| 5684 size, host_impl_->active_tree()->device_scale_factor()); | 5691 size, host_impl_->active_tree()->device_scale_factor()); |
| 5685 } | 5692 } |
| 5686 | 5693 |
| 5694 void SetAlwaysDraw() { |
| 5695 const gfx::Transform external_transform; |
| 5696 const gfx::Rect external_viewport; |
| 5697 const gfx::Rect external_clip; |
| 5698 const bool resourceless_software_draw = true; |
| 5699 host_impl_->SetExternalDrawConstraints( |
| 5700 external_transform, external_viewport, external_clip, external_viewport, |
| 5701 external_transform, resourceless_software_draw); |
| 5702 } |
| 5703 |
| 5687 DrawQuad::Material gutter_quad_material_; | 5704 DrawQuad::Material gutter_quad_material_; |
| 5688 gfx::Size gutter_texture_size_; | 5705 gfx::Size gutter_texture_size_; |
| 5689 gfx::Size viewport_size_; | 5706 gfx::Size viewport_size_; |
| 5690 BlendStateCheckLayer* child_; | 5707 BlendStateCheckLayer* child_; |
| 5691 bool did_activate_pending_tree_; | 5708 bool did_activate_pending_tree_; |
| 5692 }; | 5709 }; |
| 5693 | 5710 |
| 5694 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { | 5711 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { |
| 5695 viewport_size_ = gfx::Size(1000, 1000); | 5712 viewport_size_ = gfx::Size(1000, 1000); |
| 5696 | 5713 |
| 5697 bool always_draw = false; | 5714 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface()); |
| 5698 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw)); | |
| 5699 | 5715 |
| 5700 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 5716 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
| 5701 SetupActiveTreeLayers(); | 5717 SetupActiveTreeLayers(); |
| 5702 TestLayerCoversFullViewport(); | 5718 TestLayerCoversFullViewport(); |
| 5703 TestEmptyLayer(); | 5719 TestEmptyLayer(); |
| 5704 TestLayerInMiddleOfViewport(); | 5720 TestLayerInMiddleOfViewport(); |
| 5705 TestLayerIsLargerThanViewport(); | 5721 TestLayerIsLargerThanViewport(); |
| 5706 } | 5722 } |
| 5707 | 5723 |
| 5708 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredScaled) { | 5724 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredScaled) { |
| 5709 viewport_size_ = gfx::Size(1000, 1000); | 5725 viewport_size_ = gfx::Size(1000, 1000); |
| 5710 | 5726 |
| 5711 bool always_draw = false; | 5727 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface()); |
| 5712 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw)); | |
| 5713 | 5728 |
| 5714 host_impl_->active_tree()->SetDeviceScaleFactor(2.f); | 5729 host_impl_->active_tree()->SetDeviceScaleFactor(2.f); |
| 5715 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 5730 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
| 5716 SetupActiveTreeLayers(); | 5731 SetupActiveTreeLayers(); |
| 5717 TestLayerCoversFullViewport(); | 5732 TestLayerCoversFullViewport(); |
| 5718 TestEmptyLayer(); | 5733 TestEmptyLayer(); |
| 5719 TestLayerInMiddleOfViewport(); | 5734 TestLayerInMiddleOfViewport(); |
| 5720 TestLayerIsLargerThanViewport(); | 5735 TestLayerIsLargerThanViewport(); |
| 5721 } | 5736 } |
| 5722 | 5737 |
| 5723 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { | 5738 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { |
| 5724 viewport_size_ = gfx::Size(1000, 1000); | 5739 viewport_size_ = gfx::Size(1000, 1000); |
| 5725 | 5740 |
| 5726 bool always_draw = true; | 5741 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface()); |
| 5727 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw)); | 5742 SetAlwaysDraw(); |
| 5728 | 5743 |
| 5729 // Pending tree to force active_tree size invalid. Not used otherwise. | 5744 // Pending tree to force active_tree size invalid. Not used otherwise. |
| 5730 host_impl_->CreatePendingTree(); | 5745 host_impl_->CreatePendingTree(); |
| 5731 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 5746 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
| 5732 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 5747 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| 5733 | 5748 |
| 5734 SetupActiveTreeLayers(); | 5749 SetupActiveTreeLayers(); |
| 5735 TestEmptyLayer(); | 5750 TestEmptyLayer(); |
| 5736 TestLayerInMiddleOfViewport(); | 5751 TestLayerInMiddleOfViewport(); |
| 5737 TestLayerIsLargerThanViewport(); | 5752 TestLayerIsLargerThanViewport(); |
| 5738 } | 5753 } |
| 5739 | 5754 |
| 5740 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { | 5755 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { |
| 5741 viewport_size_ = gfx::Size(1000, 1000); | 5756 viewport_size_ = gfx::Size(1000, 1000); |
| 5742 | 5757 |
| 5743 bool always_draw = true; | 5758 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface()); |
| 5744 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(always_draw)); | 5759 SetAlwaysDraw(); |
| 5745 | 5760 |
| 5746 // Set larger viewport and activate it to active tree. | 5761 // Set larger viewport and activate it to active tree. |
| 5747 host_impl_->CreatePendingTree(); | 5762 host_impl_->CreatePendingTree(); |
| 5748 gfx::Size larger_viewport(viewport_size_.width() + 100, | 5763 gfx::Size larger_viewport(viewport_size_.width() + 100, |
| 5749 viewport_size_.height() + 100); | 5764 viewport_size_.height() + 100); |
| 5750 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); | 5765 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); |
| 5751 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 5766 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| 5752 host_impl_->ActivateSyncTree(); | 5767 host_impl_->ActivateSyncTree(); |
| 5753 EXPECT_TRUE(did_activate_pending_tree_); | 5768 EXPECT_TRUE(did_activate_pending_tree_); |
| 5754 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); | 5769 EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| (...skipping 3014 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8769 host_impl_->ActivateSyncTree(); | 8784 host_impl_->ActivateSyncTree(); |
| 8770 host_impl_->active_tree()->UpdateDrawProperties(false); | 8785 host_impl_->active_tree()->UpdateDrawProperties(false); |
| 8771 active_tree_node = | 8786 active_tree_node = |
| 8772 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8787 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
| 8773 page_scale_layer->transform_tree_index()); | 8788 page_scale_layer->transform_tree_index()); |
| 8774 EXPECT_EQ(active_tree_node->data.post_local_scale_factor, 2.f); | 8789 EXPECT_EQ(active_tree_node->data.post_local_scale_factor, 2.f); |
| 8775 } | 8790 } |
| 8776 | 8791 |
| 8777 } // namespace | 8792 } // namespace |
| 8778 } // namespace cc | 8793 } // namespace cc |
| OLD | NEW |