Index: cc/layers/ui_resource_layer_impl_unittest.cc |
diff --git a/cc/layers/ui_resource_layer_impl_unittest.cc b/cc/layers/ui_resource_layer_impl_unittest.cc |
index 596cb3bc8a97c4ac3a0b21d6bf9d9e6f18795e7a..01c7c40f4aae095c7bd5cfe316344fde88b6f381 100644 |
--- a/cc/layers/ui_resource_layer_impl_unittest.cc |
+++ b/cc/layers/ui_resource_layer_impl_unittest.cc |
@@ -148,5 +148,64 @@ TEST(UIResourceLayerImplTest, VerifySetOpaqueOnLayer) { |
OpaqueBoundsTest(layer.Pass(), expected_opaque_bounds); |
} |
+TEST(UIResourceLayerImplTest, Occlusion) { |
+ gfx::Size layer_size(1000, 1000); |
+ gfx::Size viewport_size(1000, 1000); |
+ |
+ LayerTestCommon::LayerImplTest impl; |
+ |
+ SkBitmap sk_bitmap; |
+ sk_bitmap.allocN32Pixels(10, 10); |
+ sk_bitmap.setImmutable(); |
+ UIResourceId uid = 5; |
+ UIResourceBitmap bitmap(sk_bitmap); |
+ impl.host_impl()->CreateUIResource(uid, bitmap); |
+ |
+ UIResourceLayerImpl* ui_resource_layer_impl = |
+ impl.AddChildToRoot<UIResourceLayerImpl>(); |
+ ui_resource_layer_impl->SetAnchorPoint(gfx::PointF()); |
+ ui_resource_layer_impl->SetBounds(layer_size); |
+ ui_resource_layer_impl->SetContentBounds(layer_size); |
+ ui_resource_layer_impl->SetDrawsContent(true); |
+ ui_resource_layer_impl->SetUIResourceId(uid); |
+ |
+ impl.CalcDrawProps(viewport_size); |
+ |
+ { |
+ SCOPED_TRACE("No occlusion"); |
+ gfx::Rect occluded; |
+ impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); |
+ |
+ LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), |
+ gfx::Rect(layer_size)); |
+ EXPECT_EQ(1u, impl.quad_list().size()); |
+ } |
+ |
+ { |
+ SCOPED_TRACE("Full occlusion"); |
+ gfx::Rect occluded(ui_resource_layer_impl->visible_content_rect()); |
+ impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); |
+ |
+ LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); |
+ EXPECT_EQ(impl.quad_list().size(), 0u); |
+ } |
+ |
+ { |
+ SCOPED_TRACE("Partial occlusion"); |
+ gfx::Rect occluded(200, 0, 800, 1000); |
+ impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); |
+ |
+ size_t partially_occluded_count = 0; |
+ LayerTestCommon::VerifyQuadsCoverRectWithOcclusion( |
+ impl.quad_list(), |
+ gfx::Rect(layer_size), |
+ occluded, |
+ &partially_occluded_count); |
+ // The layer outputs one quad, which is partially occluded. |
+ EXPECT_EQ(1u, impl.quad_list().size()); |
+ EXPECT_EQ(1u, partially_occluded_count); |
+ } |
+} |
+ |
} // namespace |
} // namespace cc |