| 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..911b4ea976e917a153e9af834044fa85d213fb52 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) {}
|
| +
|
| void CreateLayerTreeHostImpl(bool always_draw) {
|
| LayerTreeSettings settings;
|
| settings.minimum_occlusion_tracking_size = gfx::Size();
|
| @@ -2887,15 +2892,11 @@ 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_));
|
| + VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list);
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| @@ -2912,15 +2913,11 @@ 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_));
|
| + VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list);
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| @@ -2937,15 +2934,11 @@ 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_));
|
| + VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list);
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| @@ -2963,12 +2956,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 +2967,54 @@ 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;
|
| + }
|
| +
|
| + void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) {
|
| + LayerTestCommon::VerifyQuadsExactlyCoverRect(
|
| + quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_)));
|
| + }
|
| +
|
| + // 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)
|
| + continue;
|
| + const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(quad_list[i]);
|
| + gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize(
|
| + gutter_texture_size_, host_impl_->device_scale_factor());
|
| + EXPECT_EQ(quad->uv_top_left.x(),
|
| + quad->rect.x() / gutter_texture_size_pixels.width());
|
| + EXPECT_EQ(quad->uv_top_left.y(),
|
| + quad->rect.y() / gutter_texture_size_pixels.height());
|
| + EXPECT_EQ(quad->uv_bottom_right.x(),
|
| + quad->rect.right() / gutter_texture_size_pixels.width());
|
| + EXPECT_EQ(quad->uv_bottom_right.y(),
|
| + quad->rect.bottom() / gutter_texture_size_pixels.height());
|
| + }
|
| + }
|
| +
|
| + gfx::Size DipSizeToPixelSize(gfx::Size size) {
|
| + return gfx::ToRoundedSize(
|
| + gfx::ScaleSize(size, host_impl_->device_scale_factor()));
|
| + }
|
| +
|
| + DrawQuad::Material gutter_quad_material_;
|
| + gfx::Size gutter_texture_size_;
|
| gfx::Size viewport_size_;
|
| BlendStateCheckLayer* child_;
|
| bool did_activate_pending_tree_;
|
| @@ -2987,8 +3024,61 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) {
|
| bool always_draw = false;
|
| CreateLayerTreeHostImpl(always_draw);
|
|
|
| - host_impl_->SetViewportSize(viewport_size_);
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
|
| + SetupActiveTreeLayers();
|
| + TestLayerCoversFullViewport();
|
| + TestEmptyLayer();
|
| + TestLayerInMiddleOfViewport();
|
| + TestLayerIsLargerThanViewport();
|
| +}
|
| +
|
| +TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredScaled) {
|
| + bool always_draw = false;
|
| + CreateLayerTreeHostImpl(always_draw);
|
| +
|
| + host_impl_->SetDeviceScaleFactor(2.f);
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
|
| + SetupActiveTreeLayers();
|
| + TestLayerCoversFullViewport();
|
| + TestEmptyLayer();
|
| + TestLayerInMiddleOfViewport();
|
| + TestLayerIsLargerThanViewport();
|
| +}
|
| +
|
| +TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredOverhangBitmap) {
|
| + bool always_draw = false;
|
| + CreateLayerTreeHostImpl(always_draw);
|
| +
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(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();
|
| +
|
| + // Change the device scale factor
|
| + host_impl_->SetDeviceScaleFactor(2.f);
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
|
| +
|
| TestLayerCoversFullViewport();
|
| TestEmptyLayer();
|
| TestLayerInMiddleOfViewport();
|
| @@ -3001,7 +3091,7 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) {
|
|
|
| // Pending tree to force active_tree size invalid. Not used otherwise.
|
| host_impl_->CreatePendingTree();
|
| - host_impl_->SetViewportSize(viewport_size_);
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
|
| EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
|
|
|
| SetupActiveTreeLayers();
|
| @@ -3018,16 +3108,15 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) {
|
| host_impl_->CreatePendingTree();
|
| gfx::Size larger_viewport(viewport_size_.width() + 100,
|
| viewport_size_.height() + 100);
|
| - host_impl_->SetViewportSize(larger_viewport);
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(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());
|
|
|
| // Shrink pending tree viewport without activating.
|
| host_impl_->CreatePendingTree();
|
| - host_impl_->SetViewportSize(viewport_size_);
|
| + host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
|
| EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
|
|
|
| SetupActiveTreeLayers();
|
|
|