Chromium Code Reviews| Index: cc/trees/layer_tree_host_impl_unittest.cc |
| diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc |
| index 686efc3695cdabacd36546ffaeb97d6db6c51db5..d63772014ae7b9712258929c2a4b4d01b13d535b 100644 |
| --- a/cc/trees/layer_tree_host_impl_unittest.cc |
| +++ b/cc/trees/layer_tree_host_impl_unittest.cc |
| @@ -2843,6 +2843,11 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) { |
| class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| public: |
| + LayerTreeHostImplViewportCoveredTest() : |
| + gutter_quad_material_(DrawQuad::SOLID_COLOR), |
| + child_(NULL), |
| + did_activate_pending_tree_(false) { } |
|
enne (OOO)
2013/09/03 23:18:26
style nit: {}. Consider running 'git cl format' o
ccameron
2013/09/04 02:36:47
Done.
|
| + |
| void CreateLayerTreeHostImpl(bool always_draw) { |
| LayerTreeSettings settings; |
| settings.minimum_occlusion_tracking_size = gfx::Size(); |
| @@ -2887,12 +2892,9 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| ASSERT_EQ(1u, frame.render_passes.size()); |
| - size_t num_gutter_quads = 0; |
| - for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| - num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| - DrawQuad::SOLID_COLOR) ? 1 : 0; |
| - EXPECT_EQ(0u, num_gutter_quads); |
| + EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
| EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| + ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
| LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| frame.render_passes[0]->quad_list, gfx::Rect(viewport_size_)); |
| @@ -2912,12 +2914,9 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| ASSERT_EQ(1u, frame.render_passes.size()); |
| - size_t num_gutter_quads = 0; |
| - for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| - num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| - DrawQuad::SOLID_COLOR) ? 1 : 0; |
| - EXPECT_EQ(1u, num_gutter_quads); |
| + EXPECT_EQ(1u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
| EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| + ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
| LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| frame.render_passes[0]->quad_list, gfx::Rect(viewport_size_)); |
| @@ -2937,12 +2936,9 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| ASSERT_EQ(1u, frame.render_passes.size()); |
| - size_t num_gutter_quads = 0; |
| - for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| - num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| - DrawQuad::SOLID_COLOR) ? 1 : 0; |
| - EXPECT_EQ(4u, num_gutter_quads); |
| + EXPECT_EQ(4u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
| EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size()); |
| + ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
| LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| frame.render_passes[0]->quad_list, gfx::Rect(viewport_size_)); |
| @@ -2963,12 +2959,9 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| ASSERT_EQ(1u, frame.render_passes.size()); |
| - size_t num_gutter_quads = 0; |
| - for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| - num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| - DrawQuad::SOLID_COLOR) ? 1 : 0; |
| - EXPECT_EQ(0u, num_gutter_quads); |
| + EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
| EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| + ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
| host_impl_->DidDrawAllLayers(frame); |
| } |
| @@ -2977,7 +2970,47 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| did_activate_pending_tree_ = true; |
| } |
| + void set_gutter_quad_material(DrawQuad::Material material) { |
| + gutter_quad_material_ = material; |
| + } |
| + void set_gutter_texture_size(gfx::Size gutter_texture_size) { |
| + gutter_texture_size_ = gutter_texture_size; |
| + } |
| + |
| protected: |
| + size_t CountGutterQuads(const QuadList& quad_list) { |
| + size_t num_gutter_quads = 0; |
| + for (size_t i = 0; i < quad_list.size(); ++i) { |
| + num_gutter_quads += (quad_list[i]->material == |
| + gutter_quad_material_) ? 1 : 0; |
| + } |
| + return num_gutter_quads; |
| + } |
| + |
| + // Make sure that the texture coordinates match their expectations. |
| + void ValidateTextureDrawQuads(const QuadList& quad_list) { |
| + for (size_t i = 0; i < quad_list.size(); ++i) { |
| + if (quad_list[i]->material == DrawQuad::TEXTURE_CONTENT) { |
|
enne (OOO)
2013/09/03 23:18:26
style nit: early-out with a continue here, rather
ccameron
2013/09/04 02:36:47
Done.
|
| + TextureDrawQuad* quad = reinterpret_cast<TextureDrawQuad*>( |
|
enne (OOO)
2013/09/03 23:18:26
TextureDrawQuad::MaterialCast(quad_list[i])
ccameron
2013/09/04 02:36:47
Done.
|
| + quad_list[i]); |
| + EXPECT_EQ(quad->uv_top_left.x(), |
| + quad->rect.x() / |
| + static_cast<float>(gutter_texture_size_.width())); |
| + EXPECT_EQ(quad->uv_top_left.y(), |
| + quad->rect.y() / |
| + static_cast<float>(gutter_texture_size_.height())); |
| + EXPECT_EQ(quad->uv_bottom_right.x(), |
| + (quad->rect.x() + quad->rect.width()) / |
|
enne (OOO)
2013/09/03 23:18:26
quad->rect.right()
ccameron
2013/09/04 02:36:47
Done.
|
| + static_cast<float>(gutter_texture_size_.width())); |
| + EXPECT_EQ(quad->uv_bottom_right.y(), |
| + (quad->rect.y() + quad->rect.height()) / |
| + static_cast<float>(gutter_texture_size_.height())); |
| + } |
| + } |
| + } |
| + |
| + DrawQuad::Material gutter_quad_material_; |
| + gfx::Size gutter_texture_size_; |
| gfx::Size viewport_size_; |
| BlendStateCheckLayer* child_; |
| bool did_activate_pending_tree_; |
| @@ -2995,6 +3028,37 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { |
| TestLayerIsLargerThanViewport(); |
| } |
| +TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredOverhangBitmap) { |
| + bool always_draw = false; |
| + CreateLayerTreeHostImpl(always_draw); |
| + |
| + host_impl_->SetViewportSize(viewport_size_); |
| + SetupActiveTreeLayers(); |
| + |
| + // Specify an overhang bitmap to use. |
| + scoped_refptr<UIResourceBitmap> ui_resource_bitmap(UIResourceBitmap::Create( |
| + new uint8_t[4], UIResourceBitmap::RGBA8, gfx::Size(1, 1))); |
| + UIResourceId ui_resource_id = 12345; |
| + host_impl_->CreateUIResource(ui_resource_id, ui_resource_bitmap); |
| + host_impl_->SetOverhangUIResource(ui_resource_id, gfx::Size(32, 32)); |
| + set_gutter_quad_material(DrawQuad::TEXTURE_CONTENT); |
| + set_gutter_texture_size(gfx::Size(32, 32)); |
| + |
| + TestLayerCoversFullViewport(); |
| + TestEmptyLayer(); |
| + TestLayerInMiddleOfViewport(); |
| + TestLayerIsLargerThanViewport(); |
| + |
| + // Change the resource size. |
| + host_impl_->SetOverhangUIResource(ui_resource_id, gfx::Size(128, 16)); |
| + set_gutter_texture_size(gfx::Size(128, 16)); |
| + |
| + TestLayerCoversFullViewport(); |
| + TestEmptyLayer(); |
| + TestLayerInMiddleOfViewport(); |
| + TestLayerIsLargerThanViewport(); |
| +} |
| + |
| TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { |
| bool always_draw = true; |
| CreateLayerTreeHostImpl(always_draw); |
| @@ -3020,7 +3084,6 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { |
| viewport_size_.height() + 100); |
| host_impl_->SetViewportSize(larger_viewport); |
| EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| - did_activate_pending_tree_ = false; |
| host_impl_->ActivatePendingTree(); |
| EXPECT_TRUE(did_activate_pending_tree_); |
| EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid()); |