Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3611)

Unified Diff: cc/layers/surface_layer_impl_unittest.cc

Issue 2696303002: Only emit a fallback SurfaceDrawQuad if differs from primary (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« cc/layers/surface_layer_impl.cc ('K') | « cc/layers/surface_layer_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« cc/layers/surface_layer_impl.cc ('K') | « cc/layers/surface_layer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698