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 |