diff options
Diffstat (limited to 'chromium/cc/layers/solid_color_layer_impl_unittest.cc')
-rw-r--r-- | chromium/cc/layers/solid_color_layer_impl_unittest.cc | 204 |
1 files changed, 97 insertions, 107 deletions
diff --git a/chromium/cc/layers/solid_color_layer_impl_unittest.cc b/chromium/cc/layers/solid_color_layer_impl_unittest.cc index 5d1c3068a60..1e5bb9af082 100644 --- a/chromium/cc/layers/solid_color_layer_impl_unittest.cc +++ b/chromium/cc/layers/solid_color_layer_impl_unittest.cc @@ -11,12 +11,7 @@ #include "cc/animation/animation_host.h" #include "cc/layers/append_quads_data.h" #include "cc/layers/solid_color_layer.h" -#include "cc/test/fake_impl_task_runner_provider.h" -#include "cc/test/fake_layer_tree_host.h" -#include "cc/test/layer_test_common.h" -#include "cc/test/test_task_graph_runner.h" -#include "cc/trees/layer_tree_host_common.h" -#include "cc/trees/single_thread_proxy.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "components/viz/common/quads/solid_color_draw_quad.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -24,55 +19,48 @@ namespace cc { namespace { -TEST(SolidColorLayerImplTest, VerifyTilingCompleteAndNoOverlap) { +class SolidColorLayerImplTest : public LayerTreeImplTestBase, + public ::testing::Test {}; + +TEST_F(SolidColorLayerImplTest, VerifyTilingCompleteAndNoOverlap) { std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); gfx::Size layer_size = gfx::Size(800, 600); gfx::Rect visible_layer_rect = gfx::Rect(layer_size); + root_layer()->SetBounds(layer_size); - FakeImplTaskRunnerProvider task_runner_provider; - TestTaskGraphRunner task_graph_runner; - FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); - std::unique_ptr<SolidColorLayerImpl> layer = - SolidColorLayerImpl::Create(host_impl.active_tree(), 1); - layer->draw_properties().visible_layer_rect = visible_layer_rect; - layer->draw_properties().opacity = 1.f; + auto* layer = AddLayer<SolidColorLayerImpl>(); layer->SetBounds(layer_size); + layer->SetDrawsContent(true); layer->SetBackgroundColor(SK_ColorRED); - layer->test_properties()->force_render_surface = true; - host_impl.active_tree()->SetRootLayerForTesting(std::move(layer)); - host_impl.active_tree()->BuildPropertyTreesForTesting(); + CopyProperties(root_layer(), layer); + CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; + UpdateActiveTreeDrawProperties(); AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + layer->AppendQuads(render_pass.get(), &data); - LayerTestCommon::VerifyQuadsExactlyCoverRect(render_pass->quad_list, - visible_layer_rect); + VerifyQuadsExactlyCoverRect(render_pass->quad_list, visible_layer_rect); } -TEST(SolidColorLayerImplTest, VerifyCorrectBackgroundColorInQuad) { +TEST_F(SolidColorLayerImplTest, VerifyCorrectBackgroundColorInQuad) { SkColor test_color = 0xFFA55AFF; - std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); - gfx::Size layer_size = gfx::Size(100, 100); gfx::Rect visible_layer_rect = gfx::Rect(layer_size); + root_layer()->SetBounds(layer_size); - FakeImplTaskRunnerProvider task_runner_provider; - TestTaskGraphRunner task_graph_runner; - FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); - std::unique_ptr<SolidColorLayerImpl> layer = - SolidColorLayerImpl::Create(host_impl.active_tree(), 1); - layer->draw_properties().visible_layer_rect = visible_layer_rect; - layer->draw_properties().opacity = 1.f; + auto* layer = AddLayer<SolidColorLayerImpl>(); layer->SetBounds(layer_size); + layer->SetDrawsContent(true); layer->SetBackgroundColor(test_color); - layer->test_properties()->force_render_surface = true; - host_impl.active_tree()->SetRootLayerForTesting(std::move(layer)); - host_impl.active_tree()->BuildPropertyTreesForTesting(); + CopyProperties(root_layer(), layer); + CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; + UpdateActiveTreeDrawProperties(); + + EXPECT_EQ(visible_layer_rect, layer->draw_properties().visible_layer_rect); + AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + layer->AppendQuads(render_pass.get(), &data); ASSERT_EQ(render_pass->quad_list.size(), 1U); EXPECT_EQ( @@ -81,29 +69,24 @@ TEST(SolidColorLayerImplTest, VerifyCorrectBackgroundColorInQuad) { test_color); } -TEST(SolidColorLayerImplTest, VerifyCorrectOpacityInQuad) { +TEST_F(SolidColorLayerImplTest, VerifyCorrectOpacityInQuad) { const float opacity = 0.5f; - std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); - gfx::Size layer_size = gfx::Size(100, 100); - gfx::Rect visible_layer_rect = gfx::Rect(layer_size); - FakeImplTaskRunnerProvider task_runner_provider; - TestTaskGraphRunner task_graph_runner; - FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); - std::unique_ptr<SolidColorLayerImpl> layer = - SolidColorLayerImpl::Create(host_impl.active_tree(), 1); - layer->draw_properties().visible_layer_rect = visible_layer_rect; + auto* layer = AddLayer<SolidColorLayerImpl>(); + layer->SetDrawsContent(true); layer->SetBounds(layer_size); - layer->draw_properties().opacity = opacity; - layer->test_properties()->force_render_surface = true; layer->SetBackgroundColor(SK_ColorRED); - host_impl.active_tree()->SetRootLayerForTesting(std::move(layer)); - host_impl.active_tree()->BuildPropertyTreesForTesting(); + CopyProperties(root_layer(), layer); + auto& effect_node = CreateEffectNode(layer); + effect_node.opacity = opacity; + UpdateActiveTreeDrawProperties(); + + EXPECT_EQ(opacity, layer->draw_properties().opacity); + AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + layer->AppendQuads(render_pass.get(), &data); ASSERT_EQ(render_pass->quad_list.size(), 1U); EXPECT_EQ(opacity, viz::SolidColorDrawQuad::MaterialCast( @@ -112,61 +95,74 @@ TEST(SolidColorLayerImplTest, VerifyCorrectOpacityInQuad) { EXPECT_TRUE(render_pass->quad_list.front()->ShouldDrawWithBlending()); } -TEST(SolidColorLayerImplTest, VerifyEliminateTransparentAlpha) { - SkColor test_color = 0; - +TEST_F(SolidColorLayerImplTest, VerifyCorrectRenderSurfaceOpacityInQuad) { + const float opacity = 0.5f; std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); + gfx::Size layer_size = gfx::Size(100, 100); + + auto* layer = AddLayer<SolidColorLayerImpl>(); + layer->SetDrawsContent(true); + layer->SetBounds(layer_size); + layer->SetBackgroundColor(SK_ColorRED); + CopyProperties(root_layer(), layer); + auto& effect_node = CreateEffectNode(layer); + effect_node.render_surface_reason = RenderSurfaceReason::kTest; + effect_node.opacity = opacity; + UpdateActiveTreeDrawProperties(); + // Opacity is applied on render surface, so the layer doesn't have opacity. + EXPECT_EQ(1.f, layer->draw_properties().opacity); + + AppendQuadsData data; + layer->AppendQuads(render_pass.get(), &data); + + ASSERT_EQ(render_pass->quad_list.size(), 1U); + // Opacity is applied on render surface, so the quad doesn't have opacity. + EXPECT_EQ( + 1.f, viz::SolidColorDrawQuad::MaterialCast(render_pass->quad_list.front()) + ->shared_quad_state->opacity); + EXPECT_FALSE(render_pass->quad_list.front()->ShouldDrawWithBlending()); +} + +TEST_F(SolidColorLayerImplTest, VerifyEliminateTransparentAlpha) { + SkColor test_color = 0; + std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); gfx::Size layer_size = gfx::Size(100, 100); - gfx::Rect visible_layer_rect = gfx::Rect(layer_size); - FakeImplTaskRunnerProvider task_runner_provider; - TestTaskGraphRunner task_graph_runner; - FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); - std::unique_ptr<SolidColorLayerImpl> layer = - SolidColorLayerImpl::Create(host_impl.active_tree(), 1); - layer->draw_properties().visible_layer_rect = visible_layer_rect; - layer->draw_properties().opacity = 1.f; + auto* layer = AddLayer<SolidColorLayerImpl>(); layer->SetBounds(layer_size); + layer->SetDrawsContent(true); layer->SetBackgroundColor(test_color); - layer->test_properties()->force_render_surface = true; - host_impl.active_tree()->SetRootLayerForTesting(std::move(layer)); - host_impl.active_tree()->BuildPropertyTreesForTesting(); - AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + CopyProperties(root_layer(), layer); + CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; + UpdateActiveTreeDrawProperties(); + AppendQuadsData data; + layer->AppendQuads(render_pass.get(), &data); EXPECT_EQ(render_pass->quad_list.size(), 0U); } -TEST(SolidColorLayerImplTest, VerifyEliminateTransparentOpacity) { +TEST_F(SolidColorLayerImplTest, VerifyEliminateTransparentOpacity) { SkColor test_color = 0xFFA55AFF; - std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); - gfx::Size layer_size = gfx::Size(100, 100); - gfx::Rect visible_layer_rect = gfx::Rect(layer_size); - FakeImplTaskRunnerProvider task_runner_provider; - TestTaskGraphRunner task_graph_runner; - FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); - std::unique_ptr<SolidColorLayerImpl> layer = - SolidColorLayerImpl::Create(host_impl.active_tree(), 1); - layer->draw_properties().visible_layer_rect = visible_layer_rect; - layer->draw_properties().opacity = 0.f; + auto* layer = AddLayer<SolidColorLayerImpl>(); layer->SetBounds(layer_size); + layer->SetDrawsContent(true); layer->SetBackgroundColor(test_color); - layer->test_properties()->force_render_surface = true; - host_impl.active_tree()->SetRootLayerForTesting(std::move(layer)); - host_impl.active_tree()->BuildPropertyTreesForTesting(); - AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + CopyProperties(root_layer(), layer); + auto& effect_node = CreateEffectNode(layer); + effect_node.render_surface_reason = RenderSurfaceReason::kTest; + effect_node.opacity = 0.f; + UpdateActiveTreeDrawProperties(); + AppendQuadsData data; + layer->AppendQuads(render_pass.get(), &data); EXPECT_EQ(render_pass->quad_list.size(), 0U); } -TEST(SolidColorLayerImplTest, VerifyNeedsBlending) { +TEST_F(SolidColorLayerImplTest, VerifyNeedsBlending) { gfx::Size layer_size = gfx::Size(100, 100); scoped_refptr<SolidColorLayer> layer = SolidColorLayer::Create(); @@ -183,9 +179,7 @@ TEST(SolidColorLayerImplTest, VerifyNeedsBlending) { &client, &task_graph_runner, animation_host.get()); host->SetRootLayer(root); - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - root.get(), gfx::Rect(500, 500)); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(host.get()); EXPECT_FALSE(layer->contents_opaque()); layer->SetBackgroundColor(SkColorSetARGB(255, 10, 20, 30)); @@ -242,49 +236,45 @@ TEST(SolidColorLayerImplTest, VerifyNeedsBlending) { } } -TEST(SolidColorLayerImplTest, Occlusion) { +TEST_F(SolidColorLayerImplTest, Occlusion) { gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; - - SolidColorLayerImpl* solid_color_layer_impl = - impl.AddChildToRoot<SolidColorLayerImpl>(); + auto* solid_color_layer_impl = AddLayer<SolidColorLayerImpl>(); solid_color_layer_impl->SetBackgroundColor(SkColorSetARGB(255, 10, 20, 30)); solid_color_layer_impl->SetBounds(layer_size); solid_color_layer_impl->SetDrawsContent(true); + CopyProperties(root_layer(), solid_color_layer_impl); - impl.CalcDrawProps(viewport_size); + CalcDrawProps(viewport_size); { SCOPED_TRACE("No occlusion"); gfx::Rect occluded; - impl.AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); + AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); - EXPECT_EQ(1u, impl.quad_list().size()); + VerifyQuadsExactlyCoverRect(quad_list(), gfx::Rect(layer_size)); + EXPECT_EQ(1u, quad_list().size()); } { SCOPED_TRACE("Full occlusion"); gfx::Rect occluded(solid_color_layer_impl->visible_layer_rect()); - impl.AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); + AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); - EXPECT_EQ(impl.quad_list().size(), 0u); + VerifyQuadsExactlyCoverRect(quad_list(), gfx::Rect()); + EXPECT_EQ(quad_list().size(), 0u); } { SCOPED_TRACE("Partial occlusion"); gfx::Rect occluded(200, 0, 800, 1000); - impl.AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); + AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(quad_list(), occluded, &partially_occluded_count); // 4 quads are completely occluded, 8 are partially occluded. - EXPECT_EQ(1u, impl.quad_list().size()); + EXPECT_EQ(1u, quad_list().size()); EXPECT_EQ(1u, partially_occluded_count); } } |