| Index: cc/layers/surface_layer_impl_unittest.cc
|
| diff --git a/cc/layers/surface_layer_impl_unittest.cc b/cc/layers/surface_layer_impl_unittest.cc
|
| index ff83229e1a0adb331d4271a88833a5598c29eb95..1b41a538677141d1a48e4f3d53a1d184a682fb57 100644
|
| --- a/cc/layers/surface_layer_impl_unittest.cc
|
| +++ b/cc/layers/surface_layer_impl_unittest.cc
|
| @@ -198,5 +198,105 @@ TEST(SurfaceLayerImplTest, SurfaceStretchedToLayerBounds) {
|
| EXPECT_EQ(transformed_quad_rect, transformed_layer_rect);
|
| }
|
|
|
| +// This test verifies that two SurfaceDrawQuads are emitted if a
|
| +// SurfaceLayerImpl holds both a primary and fallback SurfaceInfo.
|
| +TEST(SurfaceLayerImplTest, SurfaceLayerImplEmitsTwoDrawQuadsIfUniqueFallback) {
|
| + LayerTestCommon::LayerImplTest impl;
|
| + SurfaceLayerImpl* surface_layer_impl =
|
| + impl.AddChildToRoot<SurfaceLayerImpl>();
|
| +
|
| + // Populate the primary SurfaceInfo.
|
| + const LocalSurfaceId kArbitraryLocalSurfaceId1(
|
| + 9, base::UnguessableToken::Create());
|
| + SurfaceId surface_id1(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId1);
|
| + float surface_scale1 = 1.f;
|
| + gfx::Size surface_size1(300, 300);
|
| + SurfaceInfo primary_surface_info(surface_id1, surface_scale1, surface_size1);
|
| +
|
| + // Populate the fallback SurfaceInfo.
|
| + const LocalSurfaceId kArbitraryLocalSurfaceId2(
|
| + 7, base::UnguessableToken::Create());
|
| + SurfaceId surface_id2(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId2);
|
| + float surface_scale2 = 2.f;
|
| + gfx::Size surface_size2(400, 400);
|
| + SurfaceInfo fallback_surface_info(surface_id2, surface_scale2, surface_size2);
|
| +
|
| + gfx::Size layer_size(400, 100);
|
| +
|
| + // Populate the SurfaceLayerImpl ensuring that the primary and fallback
|
| + // SurfaceInfos are different.
|
| + surface_layer_impl->SetBounds(layer_size);
|
| + surface_layer_impl->SetDrawsContent(true);
|
| + surface_layer_impl->SetPrimarySurfaceInfo(primary_surface_info);
|
| + surface_layer_impl->SetFallbackSurfaceInfo(fallback_surface_info);
|
| +
|
| + gfx::Size viewport_size(1000, 1000);
|
| + impl.CalcDrawProps(viewport_size);
|
| +
|
| + std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
|
| + AppendQuadsData data;
|
| + surface_layer_impl->AppendQuads(render_pass.get(), &data);
|
| +
|
| + ASSERT_EQ(2u, render_pass->quad_list.size());
|
| + const SurfaceDrawQuad* surface_draw_quad1 =
|
| + SurfaceDrawQuad::MaterialCast(render_pass->quad_list.ElementAt(0));
|
| + ASSERT_TRUE(surface_draw_quad1);
|
| + const SurfaceDrawQuad* surface_draw_quad2 =
|
| + SurfaceDrawQuad::MaterialCast(render_pass->quad_list.ElementAt(1));
|
| + ASSERT_TRUE(surface_draw_quad2);
|
| +
|
| + EXPECT_EQ(SurfaceDrawQuadType::PRIMARY,
|
| + surface_draw_quad1->surface_draw_quad_type);
|
| + EXPECT_EQ(surface_id1, surface_draw_quad1->surface_id);
|
| + EXPECT_EQ(surface_draw_quad2, surface_draw_quad1->fallback_quad);
|
| + EXPECT_EQ(SurfaceDrawQuadType::FALLBACK,
|
| + surface_draw_quad2->surface_draw_quad_type);
|
| + EXPECT_EQ(surface_id2, surface_draw_quad2->surface_id);
|
| +}
|
| +
|
| +// This test verifies that one SurfaceDrawQuad is emitted if a
|
| +// SurfaceLayerImpl holds the same surface ID for both the primary
|
| +// and fallback SurfaceInfo.
|
| +TEST(SurfaceLayerImplTest,
|
| + SurfaceLayerImplEmitsOneDrawQuadsIfPrimaryMatchesFallback) {
|
| + LayerTestCommon::LayerImplTest impl;
|
| + SurfaceLayerImpl* surface_layer_impl =
|
| + impl.AddChildToRoot<SurfaceLayerImpl>();
|
| +
|
| + // Populate the primary SurfaceInfo.
|
| + const LocalSurfaceId kArbitraryLocalSurfaceId1(
|
| + 9, base::UnguessableToken::Create());
|
| + SurfaceId surface_id1(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId1);
|
| + float surface_scale1 = 1.f;
|
| + gfx::Size surface_size1(300, 300);
|
| + SurfaceInfo primary_surface_info(surface_id1, surface_scale1, surface_size1);
|
| +
|
| + gfx::Size layer_size(400, 100);
|
| +
|
| + // Populate the SurfaceLayerImpl ensuring that the primary and fallback
|
| + // SurfaceInfos are the same.
|
| + surface_layer_impl->SetBounds(layer_size);
|
| + surface_layer_impl->SetDrawsContent(true);
|
| + surface_layer_impl->SetPrimarySurfaceInfo(primary_surface_info);
|
| + surface_layer_impl->SetFallbackSurfaceInfo(primary_surface_info);
|
| +
|
| + gfx::Size viewport_size(1000, 1000);
|
| + impl.CalcDrawProps(viewport_size);
|
| +
|
| + std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
|
| + AppendQuadsData data;
|
| + surface_layer_impl->AppendQuads(render_pass.get(), &data);
|
| +
|
| + ASSERT_EQ(1u, render_pass->quad_list.size());
|
| + const SurfaceDrawQuad* surface_draw_quad1 =
|
| + SurfaceDrawQuad::MaterialCast(render_pass->quad_list.ElementAt(0));
|
| + ASSERT_TRUE(surface_draw_quad1);
|
| +
|
| + EXPECT_EQ(SurfaceDrawQuadType::PRIMARY,
|
| + surface_draw_quad1->surface_draw_quad_type);
|
| + EXPECT_EQ(surface_id1, surface_draw_quad1->surface_id);
|
| + EXPECT_FALSE(surface_draw_quad1->fallback_quad);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|