| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 4054 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4065 void set_gutter_quad_material(DrawQuad::Material material) { | 4065 void set_gutter_quad_material(DrawQuad::Material material) { |
| 4066 gutter_quad_material_ = material; | 4066 gutter_quad_material_ = material; |
| 4067 } | 4067 } |
| 4068 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) { | 4068 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) { |
| 4069 gutter_texture_size_ = gutter_texture_size; | 4069 gutter_texture_size_ = gutter_texture_size; |
| 4070 } | 4070 } |
| 4071 | 4071 |
| 4072 protected: | 4072 protected: |
| 4073 size_t CountGutterQuads(const QuadList& quad_list) { | 4073 size_t CountGutterQuads(const QuadList& quad_list) { |
| 4074 size_t num_gutter_quads = 0; | 4074 size_t num_gutter_quads = 0; |
| 4075 for (size_t i = 0; i < quad_list.size(); ++i) { | 4075 for (QuadList::ConstIterator iter = quad_list.begin(); |
| 4076 num_gutter_quads += (quad_list[i]->material == | 4076 iter != quad_list.end(); |
| 4077 gutter_quad_material_) ? 1 : 0; | 4077 ++iter) { |
| 4078 num_gutter_quads += (iter->material == gutter_quad_material_) ? 1 : 0; |
| 4078 } | 4079 } |
| 4079 return num_gutter_quads; | 4080 return num_gutter_quads; |
| 4080 } | 4081 } |
| 4081 | 4082 |
| 4082 void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) { | 4083 void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) { |
| 4083 LayerTestCommon::VerifyQuadsExactlyCoverRect( | 4084 LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| 4084 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); | 4085 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); |
| 4085 } | 4086 } |
| 4086 | 4087 |
| 4087 // Make sure that the texture coordinates match their expectations. | 4088 // Make sure that the texture coordinates match their expectations. |
| 4088 void ValidateTextureDrawQuads(const QuadList& quad_list) { | 4089 void ValidateTextureDrawQuads(const QuadList& quad_list) { |
| 4089 for (size_t i = 0; i < quad_list.size(); ++i) { | 4090 for (QuadList::ConstIterator iter = quad_list.begin(); |
| 4090 if (quad_list[i]->material != DrawQuad::TEXTURE_CONTENT) | 4091 iter != quad_list.end(); |
| 4092 ++iter) { |
| 4093 if (iter->material != DrawQuad::TEXTURE_CONTENT) |
| 4091 continue; | 4094 continue; |
| 4092 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(quad_list[i]); | 4095 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(&*iter); |
| 4093 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize( | 4096 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize( |
| 4094 gutter_texture_size_, host_impl_->device_scale_factor()); | 4097 gutter_texture_size_, host_impl_->device_scale_factor()); |
| 4095 EXPECT_EQ(quad->uv_top_left.x(), | 4098 EXPECT_EQ(quad->uv_top_left.x(), |
| 4096 quad->rect.x() / gutter_texture_size_pixels.width()); | 4099 quad->rect.x() / gutter_texture_size_pixels.width()); |
| 4097 EXPECT_EQ(quad->uv_top_left.y(), | 4100 EXPECT_EQ(quad->uv_top_left.y(), |
| 4098 quad->rect.y() / gutter_texture_size_pixels.height()); | 4101 quad->rect.y() / gutter_texture_size_pixels.height()); |
| 4099 EXPECT_EQ(quad->uv_bottom_right.x(), | 4102 EXPECT_EQ(quad->uv_bottom_right.x(), |
| 4100 quad->rect.right() / gutter_texture_size_pixels.width()); | 4103 quad->rect.right() / gutter_texture_size_pixels.width()); |
| 4101 EXPECT_EQ(quad->uv_bottom_right.y(), | 4104 EXPECT_EQ(quad->uv_bottom_right.y(), |
| 4102 quad->rect.bottom() / gutter_texture_size_pixels.height()); | 4105 quad->rect.bottom() / gutter_texture_size_pixels.height()); |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4681 &stats_instrumentation_); | 4684 &stats_instrumentation_); |
| 4682 { | 4685 { |
| 4683 LayerTreeHostImpl::FrameData frame; | 4686 LayerTreeHostImpl::FrameData frame; |
| 4684 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); | 4687 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); |
| 4685 | 4688 |
| 4686 // Verify all quads have been computed | 4689 // Verify all quads have been computed |
| 4687 ASSERT_EQ(2U, frame.render_passes.size()); | 4690 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4688 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4691 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4689 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4692 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 4690 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4693 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 4691 frame.render_passes[0]->quad_list[0]->material); | 4694 frame.render_passes[0]->quad_list.front()->material); |
| 4692 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4695 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4693 frame.render_passes[1]->quad_list[0]->material); | 4696 frame.render_passes[1]->quad_list.front()->material); |
| 4694 | 4697 |
| 4695 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4698 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 4696 my_host_impl->DidDrawAllLayers(frame); | 4699 my_host_impl->DidDrawAllLayers(frame); |
| 4697 } | 4700 } |
| 4698 } | 4701 } |
| 4699 | 4702 |
| 4700 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { | 4703 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { |
| 4701 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 4704 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 4702 new TestSharedBitmapManager()); | 4705 new TestSharedBitmapManager()); |
| 4703 scoped_ptr<LayerTreeHostImpl> my_host_impl = | 4706 scoped_ptr<LayerTreeHostImpl> my_host_impl = |
| 4704 SetupLayersForOpacity(false, | 4707 SetupLayersForOpacity(false, |
| 4705 this, | 4708 this, |
| 4706 &proxy_, | 4709 &proxy_, |
| 4707 shared_bitmap_manager.get(), | 4710 shared_bitmap_manager.get(), |
| 4708 &stats_instrumentation_); | 4711 &stats_instrumentation_); |
| 4709 { | 4712 { |
| 4710 LayerTreeHostImpl::FrameData frame; | 4713 LayerTreeHostImpl::FrameData frame; |
| 4711 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); | 4714 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); |
| 4712 | 4715 |
| 4713 // Verify all quads have been computed | 4716 // Verify all quads have been computed |
| 4714 ASSERT_EQ(2U, frame.render_passes.size()); | 4717 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4715 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4718 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4716 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4719 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 4717 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4720 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 4718 frame.render_passes[0]->quad_list[0]->material); | 4721 frame.render_passes[0]->quad_list.front()->material); |
| 4719 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4722 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4720 frame.render_passes[1]->quad_list[0]->material); | 4723 frame.render_passes[1]->quad_list.front()->material); |
| 4721 | 4724 |
| 4722 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4725 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 4723 my_host_impl->DidDrawAllLayers(frame); | 4726 my_host_impl->DidDrawAllLayers(frame); |
| 4724 } | 4727 } |
| 4725 } | 4728 } |
| 4726 | 4729 |
| 4727 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { | 4730 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { |
| 4728 scoped_ptr<TestWebGraphicsContext3D> context = | 4731 scoped_ptr<TestWebGraphicsContext3D> context = |
| 4729 TestWebGraphicsContext3D::Create(); | 4732 TestWebGraphicsContext3D::Create(); |
| 4730 TestWebGraphicsContext3D* context3d = context.get(); | 4733 TestWebGraphicsContext3D* context3d = context.get(); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4883 const RenderPass* root_render_pass = frame.render_passes.back(); | 4886 const RenderPass* root_render_pass = frame.render_passes.back(); |
| 4884 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); | 4887 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); |
| 4885 | 4888 |
| 4886 // Verify the root and child layers' quads are generated and not being | 4889 // Verify the root and child layers' quads are generated and not being |
| 4887 // culled. | 4890 // culled. |
| 4888 ASSERT_EQ(2u, root_render_pass->quad_list.size()); | 4891 ASSERT_EQ(2u, root_render_pass->quad_list.size()); |
| 4889 | 4892 |
| 4890 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; | 4893 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; |
| 4891 gfx::RectF expected_child_visible_rect(child->content_bounds()); | 4894 gfx::RectF expected_child_visible_rect(child->content_bounds()); |
| 4892 EXPECT_RECT_EQ(expected_child_visible_rect, | 4895 EXPECT_RECT_EQ(expected_child_visible_rect, |
| 4893 root_render_pass->quad_list[0]->visible_rect); | 4896 root_render_pass->quad_list.front()->visible_rect); |
| 4894 | 4897 |
| 4895 LayerImpl* root = host_impl_->active_tree()->root_layer(); | 4898 LayerImpl* root = host_impl_->active_tree()->root_layer(); |
| 4896 gfx::RectF expected_root_visible_rect(root->content_bounds()); | 4899 gfx::RectF expected_root_visible_rect(root->content_bounds()); |
| 4897 EXPECT_RECT_EQ(expected_root_visible_rect, | 4900 EXPECT_RECT_EQ(expected_root_visible_rect, |
| 4898 root_render_pass->quad_list[1]->visible_rect); | 4901 root_render_pass->quad_list.ElementAt(1)->visible_rect); |
| 4899 } | 4902 } |
| 4900 | 4903 |
| 4901 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4904 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 4902 host_impl_->DidDrawAllLayers(frame); | 4905 host_impl_->DidDrawAllLayers(frame); |
| 4903 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); | 4906 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); |
| 4904 } | 4907 } |
| 4905 }; | 4908 }; |
| 4906 | 4909 |
| 4907 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { | 4910 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { |
| 4908 scoped_ptr<SolidColorLayerImpl> root = | 4911 scoped_ptr<SolidColorLayerImpl> root = |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5022 float device_scale_factor = 1.f; | 5025 float device_scale_factor = 1.f; |
| 5023 host_impl_->SetViewportSize(root_size); | 5026 host_impl_->SetViewportSize(root_size); |
| 5024 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5027 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5025 { | 5028 { |
| 5026 LayerTreeHostImpl::FrameData frame; | 5029 LayerTreeHostImpl::FrameData frame; |
| 5027 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5030 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5028 | 5031 |
| 5029 ASSERT_EQ(1u, frame.render_passes.size()); | 5032 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5030 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5033 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5031 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5034 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5032 frame.render_passes[0]->quad_list[0]->material); | 5035 frame.render_passes[0]->quad_list.front()->material); |
| 5033 const RenderPassDrawQuad* render_pass_quad = | 5036 const RenderPassDrawQuad* render_pass_quad = |
| 5034 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5037 RenderPassDrawQuad::MaterialCast( |
| 5038 frame.render_passes[0]->quad_list.front()); |
| 5035 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5039 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5036 render_pass_quad->rect.ToString()); | 5040 render_pass_quad->rect.ToString()); |
| 5037 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5041 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5038 render_pass_quad->mask_uv_rect.ToString()); | 5042 render_pass_quad->mask_uv_rect.ToString()); |
| 5039 | 5043 |
| 5040 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5044 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5041 host_impl_->DidDrawAllLayers(frame); | 5045 host_impl_->DidDrawAllLayers(frame); |
| 5042 } | 5046 } |
| 5043 | 5047 |
| 5044 | 5048 |
| 5045 // Applying a DSF should change the render surface size, but won't affect | 5049 // Applying a DSF should change the render surface size, but won't affect |
| 5046 // which part of the mask is used. | 5050 // which part of the mask is used. |
| 5047 device_scale_factor = 2.f; | 5051 device_scale_factor = 2.f; |
| 5048 gfx::Size device_viewport = | 5052 gfx::Size device_viewport = |
| 5049 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5053 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5050 host_impl_->SetViewportSize(device_viewport); | 5054 host_impl_->SetViewportSize(device_viewport); |
| 5051 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5055 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5052 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5056 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5053 { | 5057 { |
| 5054 LayerTreeHostImpl::FrameData frame; | 5058 LayerTreeHostImpl::FrameData frame; |
| 5055 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5059 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5056 | 5060 |
| 5057 ASSERT_EQ(1u, frame.render_passes.size()); | 5061 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5058 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5062 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5059 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5063 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5060 frame.render_passes[0]->quad_list[0]->material); | 5064 frame.render_passes[0]->quad_list.front()->material); |
| 5061 const RenderPassDrawQuad* render_pass_quad = | 5065 const RenderPassDrawQuad* render_pass_quad = |
| 5062 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5066 RenderPassDrawQuad::MaterialCast( |
| 5067 frame.render_passes[0]->quad_list.front()); |
| 5063 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 5068 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 5064 render_pass_quad->rect.ToString()); | 5069 render_pass_quad->rect.ToString()); |
| 5065 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5070 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5066 render_pass_quad->mask_uv_rect.ToString()); | 5071 render_pass_quad->mask_uv_rect.ToString()); |
| 5067 | 5072 |
| 5068 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5073 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5069 host_impl_->DidDrawAllLayers(frame); | 5074 host_impl_->DidDrawAllLayers(frame); |
| 5070 } | 5075 } |
| 5071 | 5076 |
| 5072 | 5077 |
| 5073 // Applying an equivalent content scale on the content layer and the mask | 5078 // Applying an equivalent content scale on the content layer and the mask |
| 5074 // should still result in the same part of the mask being used. | 5079 // should still result in the same part of the mask being used. |
| 5075 gfx::Size content_bounds = | 5080 gfx::Size content_bounds = |
| 5076 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, | 5081 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, |
| 5077 device_scale_factor)); | 5082 device_scale_factor)); |
| 5078 content_layer->SetContentBounds(content_bounds); | 5083 content_layer->SetContentBounds(content_bounds); |
| 5079 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5084 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5080 mask_layer->SetContentBounds(content_bounds); | 5085 mask_layer->SetContentBounds(content_bounds); |
| 5081 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5086 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5082 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5087 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5083 { | 5088 { |
| 5084 LayerTreeHostImpl::FrameData frame; | 5089 LayerTreeHostImpl::FrameData frame; |
| 5085 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5090 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5086 | 5091 |
| 5087 ASSERT_EQ(1u, frame.render_passes.size()); | 5092 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5088 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5093 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5089 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5094 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5090 frame.render_passes[0]->quad_list[0]->material); | 5095 frame.render_passes[0]->quad_list.front()->material); |
| 5091 const RenderPassDrawQuad* render_pass_quad = | 5096 const RenderPassDrawQuad* render_pass_quad = |
| 5092 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5097 RenderPassDrawQuad::MaterialCast( |
| 5098 frame.render_passes[0]->quad_list.front()); |
| 5093 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 5099 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 5094 render_pass_quad->rect.ToString()); | 5100 render_pass_quad->rect.ToString()); |
| 5095 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5101 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5096 render_pass_quad->mask_uv_rect.ToString()); | 5102 render_pass_quad->mask_uv_rect.ToString()); |
| 5097 | 5103 |
| 5098 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5104 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5099 host_impl_->DidDrawAllLayers(frame); | 5105 host_impl_->DidDrawAllLayers(frame); |
| 5100 } | 5106 } |
| 5101 } | 5107 } |
| 5102 | 5108 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5140 float device_scale_factor = 1.f; | 5146 float device_scale_factor = 1.f; |
| 5141 host_impl_->SetViewportSize(root_size); | 5147 host_impl_->SetViewportSize(root_size); |
| 5142 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5148 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5143 { | 5149 { |
| 5144 LayerTreeHostImpl::FrameData frame; | 5150 LayerTreeHostImpl::FrameData frame; |
| 5145 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5151 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5146 | 5152 |
| 5147 ASSERT_EQ(1u, frame.render_passes.size()); | 5153 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5148 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5154 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5149 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5155 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5150 frame.render_passes[0]->quad_list[0]->material); | 5156 frame.render_passes[0]->quad_list.front()->material); |
| 5151 const RenderPassDrawQuad* render_pass_quad = | 5157 const RenderPassDrawQuad* render_pass_quad = |
| 5152 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5158 RenderPassDrawQuad::MaterialCast( |
| 5159 frame.render_passes[0]->quad_list.front()); |
| 5153 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5160 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 5154 render_pass_quad->rect.ToString()); | 5161 render_pass_quad->rect.ToString()); |
| 5155 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5162 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5156 render_pass_quad->mask_uv_rect.ToString()); | 5163 render_pass_quad->mask_uv_rect.ToString()); |
| 5157 | 5164 |
| 5158 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5165 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5159 host_impl_->DidDrawAllLayers(frame); | 5166 host_impl_->DidDrawAllLayers(frame); |
| 5160 } | 5167 } |
| 5161 | 5168 |
| 5162 // Applying a DSF should change the render surface size, but won't affect | 5169 // Applying a DSF should change the render surface size, but won't affect |
| 5163 // which part of the mask is used. | 5170 // which part of the mask is used. |
| 5164 device_scale_factor = 2.f; | 5171 device_scale_factor = 2.f; |
| 5165 gfx::Size device_viewport = | 5172 gfx::Size device_viewport = |
| 5166 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5173 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5167 host_impl_->SetViewportSize(device_viewport); | 5174 host_impl_->SetViewportSize(device_viewport); |
| 5168 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5175 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5169 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5176 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5170 { | 5177 { |
| 5171 LayerTreeHostImpl::FrameData frame; | 5178 LayerTreeHostImpl::FrameData frame; |
| 5172 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5179 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5173 | 5180 |
| 5174 ASSERT_EQ(1u, frame.render_passes.size()); | 5181 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5175 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5182 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5176 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5183 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5177 frame.render_passes[0]->quad_list[0]->material); | 5184 frame.render_passes[0]->quad_list.front()->material); |
| 5178 const RenderPassDrawQuad* render_pass_quad = | 5185 const RenderPassDrawQuad* render_pass_quad = |
| 5179 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5186 RenderPassDrawQuad::MaterialCast( |
| 5187 frame.render_passes[0]->quad_list.front()); |
| 5180 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5188 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5181 render_pass_quad->rect.ToString()); | 5189 render_pass_quad->rect.ToString()); |
| 5182 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5190 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5183 render_pass_quad->mask_uv_rect.ToString()); | 5191 render_pass_quad->mask_uv_rect.ToString()); |
| 5184 | 5192 |
| 5185 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5193 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5186 host_impl_->DidDrawAllLayers(frame); | 5194 host_impl_->DidDrawAllLayers(frame); |
| 5187 } | 5195 } |
| 5188 | 5196 |
| 5189 // Applying an equivalent content scale on the content layer and the mask | 5197 // Applying an equivalent content scale on the content layer and the mask |
| 5190 // should still result in the same part of the mask being used. | 5198 // should still result in the same part of the mask being used. |
| 5191 gfx::Size layer_size_large = | 5199 gfx::Size layer_size_large = |
| 5192 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5200 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 5193 content_layer->SetContentBounds(layer_size_large); | 5201 content_layer->SetContentBounds(layer_size_large); |
| 5194 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5202 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5195 gfx::Size mask_size_large = | 5203 gfx::Size mask_size_large = |
| 5196 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 5204 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
| 5197 mask_layer->SetContentBounds(mask_size_large); | 5205 mask_layer->SetContentBounds(mask_size_large); |
| 5198 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5206 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5199 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5207 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5200 { | 5208 { |
| 5201 LayerTreeHostImpl::FrameData frame; | 5209 LayerTreeHostImpl::FrameData frame; |
| 5202 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5210 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5203 | 5211 |
| 5204 ASSERT_EQ(1u, frame.render_passes.size()); | 5212 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5205 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5213 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5206 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5214 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5207 frame.render_passes[0]->quad_list[0]->material); | 5215 frame.render_passes[0]->quad_list.front()->material); |
| 5208 const RenderPassDrawQuad* render_pass_quad = | 5216 const RenderPassDrawQuad* render_pass_quad = |
| 5209 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5217 RenderPassDrawQuad::MaterialCast( |
| 5218 frame.render_passes[0]->quad_list.front()); |
| 5210 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5219 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5211 render_pass_quad->rect.ToString()); | 5220 render_pass_quad->rect.ToString()); |
| 5212 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5221 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5213 render_pass_quad->mask_uv_rect.ToString()); | 5222 render_pass_quad->mask_uv_rect.ToString()); |
| 5214 | 5223 |
| 5215 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5224 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5216 host_impl_->DidDrawAllLayers(frame); | 5225 host_impl_->DidDrawAllLayers(frame); |
| 5217 } | 5226 } |
| 5218 | 5227 |
| 5219 // Applying a different contents scale to the mask layer means it will have | 5228 // Applying a different contents scale to the mask layer means it will have |
| 5220 // a larger texture, but it should use the same tex coords to cover the | 5229 // a larger texture, but it should use the same tex coords to cover the |
| 5221 // layer it masks. | 5230 // layer it masks. |
| 5222 mask_layer->SetContentBounds(mask_size); | 5231 mask_layer->SetContentBounds(mask_size); |
| 5223 mask_layer->SetContentsScale(1.f, 1.f); | 5232 mask_layer->SetContentsScale(1.f, 1.f); |
| 5224 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5233 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5225 { | 5234 { |
| 5226 LayerTreeHostImpl::FrameData frame; | 5235 LayerTreeHostImpl::FrameData frame; |
| 5227 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5236 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5228 | 5237 |
| 5229 ASSERT_EQ(1u, frame.render_passes.size()); | 5238 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5230 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5239 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5231 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5240 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5232 frame.render_passes[0]->quad_list[0]->material); | 5241 frame.render_passes[0]->quad_list.front()->material); |
| 5233 const RenderPassDrawQuad* render_pass_quad = | 5242 const RenderPassDrawQuad* render_pass_quad = |
| 5234 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5243 RenderPassDrawQuad::MaterialCast( |
| 5244 frame.render_passes[0]->quad_list.front()); |
| 5235 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5245 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5236 render_pass_quad->rect.ToString()); | 5246 render_pass_quad->rect.ToString()); |
| 5237 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5247 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5238 render_pass_quad->mask_uv_rect.ToString()); | 5248 render_pass_quad->mask_uv_rect.ToString()); |
| 5239 | 5249 |
| 5240 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5250 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5241 host_impl_->DidDrawAllLayers(frame); | 5251 host_impl_->DidDrawAllLayers(frame); |
| 5242 } | 5252 } |
| 5243 } | 5253 } |
| 5244 | 5254 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5287 float device_scale_factor = 1.f; | 5297 float device_scale_factor = 1.f; |
| 5288 host_impl_->SetViewportSize(root_size); | 5298 host_impl_->SetViewportSize(root_size); |
| 5289 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5299 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5290 { | 5300 { |
| 5291 LayerTreeHostImpl::FrameData frame; | 5301 LayerTreeHostImpl::FrameData frame; |
| 5292 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5302 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5293 | 5303 |
| 5294 ASSERT_EQ(1u, frame.render_passes.size()); | 5304 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5295 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5305 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5296 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5306 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5297 frame.render_passes[0]->quad_list[1]->material); | 5307 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5298 const RenderPassDrawQuad* replica_quad = | 5308 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5299 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5309 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5300 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5310 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 5301 replica_quad->rect.ToString()); | 5311 replica_quad->rect.ToString()); |
| 5302 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5312 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5303 replica_quad->mask_uv_rect.ToString()); | 5313 replica_quad->mask_uv_rect.ToString()); |
| 5304 | 5314 |
| 5305 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5315 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5306 host_impl_->DidDrawAllLayers(frame); | 5316 host_impl_->DidDrawAllLayers(frame); |
| 5307 } | 5317 } |
| 5308 | 5318 |
| 5309 // Applying a DSF should change the render surface size, but won't affect | 5319 // Applying a DSF should change the render surface size, but won't affect |
| 5310 // which part of the mask is used. | 5320 // which part of the mask is used. |
| 5311 device_scale_factor = 2.f; | 5321 device_scale_factor = 2.f; |
| 5312 gfx::Size device_viewport = | 5322 gfx::Size device_viewport = |
| 5313 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5323 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5314 host_impl_->SetViewportSize(device_viewport); | 5324 host_impl_->SetViewportSize(device_viewport); |
| 5315 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5325 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5316 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5326 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5317 { | 5327 { |
| 5318 LayerTreeHostImpl::FrameData frame; | 5328 LayerTreeHostImpl::FrameData frame; |
| 5319 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5329 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5320 | 5330 |
| 5321 ASSERT_EQ(1u, frame.render_passes.size()); | 5331 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5322 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5332 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5323 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5333 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5324 frame.render_passes[0]->quad_list[1]->material); | 5334 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5325 const RenderPassDrawQuad* replica_quad = | 5335 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5326 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5336 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5327 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5337 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5328 replica_quad->rect.ToString()); | 5338 replica_quad->rect.ToString()); |
| 5329 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5339 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5330 replica_quad->mask_uv_rect.ToString()); | 5340 replica_quad->mask_uv_rect.ToString()); |
| 5331 | 5341 |
| 5332 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5342 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5333 host_impl_->DidDrawAllLayers(frame); | 5343 host_impl_->DidDrawAllLayers(frame); |
| 5334 } | 5344 } |
| 5335 | 5345 |
| 5336 // Applying an equivalent content scale on the content layer and the mask | 5346 // Applying an equivalent content scale on the content layer and the mask |
| 5337 // should still result in the same part of the mask being used. | 5347 // should still result in the same part of the mask being used. |
| 5338 gfx::Size layer_size_large = | 5348 gfx::Size layer_size_large = |
| 5339 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5349 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 5340 content_layer->SetContentBounds(layer_size_large); | 5350 content_layer->SetContentBounds(layer_size_large); |
| 5341 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5351 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5342 gfx::Size mask_size_large = | 5352 gfx::Size mask_size_large = |
| 5343 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 5353 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
| 5344 mask_layer->SetContentBounds(mask_size_large); | 5354 mask_layer->SetContentBounds(mask_size_large); |
| 5345 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5355 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5346 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5356 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5347 { | 5357 { |
| 5348 LayerTreeHostImpl::FrameData frame; | 5358 LayerTreeHostImpl::FrameData frame; |
| 5349 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5359 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5350 | 5360 |
| 5351 ASSERT_EQ(1u, frame.render_passes.size()); | 5361 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5352 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5362 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5353 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5363 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5354 frame.render_passes[0]->quad_list[1]->material); | 5364 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5355 const RenderPassDrawQuad* replica_quad = | 5365 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5356 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5366 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5357 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5367 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5358 replica_quad->rect.ToString()); | 5368 replica_quad->rect.ToString()); |
| 5359 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5369 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5360 replica_quad->mask_uv_rect.ToString()); | 5370 replica_quad->mask_uv_rect.ToString()); |
| 5361 | 5371 |
| 5362 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5372 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5363 host_impl_->DidDrawAllLayers(frame); | 5373 host_impl_->DidDrawAllLayers(frame); |
| 5364 } | 5374 } |
| 5365 | 5375 |
| 5366 // Applying a different contents scale to the mask layer means it will have | 5376 // Applying a different contents scale to the mask layer means it will have |
| 5367 // a larger texture, but it should use the same tex coords to cover the | 5377 // a larger texture, but it should use the same tex coords to cover the |
| 5368 // layer it masks. | 5378 // layer it masks. |
| 5369 mask_layer->SetContentBounds(mask_size); | 5379 mask_layer->SetContentBounds(mask_size); |
| 5370 mask_layer->SetContentsScale(1.f, 1.f); | 5380 mask_layer->SetContentsScale(1.f, 1.f); |
| 5371 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5381 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5372 { | 5382 { |
| 5373 LayerTreeHostImpl::FrameData frame; | 5383 LayerTreeHostImpl::FrameData frame; |
| 5374 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5384 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5375 | 5385 |
| 5376 ASSERT_EQ(1u, frame.render_passes.size()); | 5386 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5377 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5387 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5378 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5388 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5379 frame.render_passes[0]->quad_list[1]->material); | 5389 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5380 const RenderPassDrawQuad* replica_quad = | 5390 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5381 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5391 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5382 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5392 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5383 replica_quad->rect.ToString()); | 5393 replica_quad->rect.ToString()); |
| 5384 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5394 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5385 replica_quad->mask_uv_rect.ToString()); | 5395 replica_quad->mask_uv_rect.ToString()); |
| 5386 | 5396 |
| 5387 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5397 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5388 host_impl_->DidDrawAllLayers(frame); | 5398 host_impl_->DidDrawAllLayers(frame); |
| 5389 } | 5399 } |
| 5390 } | 5400 } |
| 5391 | 5401 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5446 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5456 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5447 { | 5457 { |
| 5448 LayerTreeHostImpl::FrameData frame; | 5458 LayerTreeHostImpl::FrameData frame; |
| 5449 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5459 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5450 | 5460 |
| 5451 ASSERT_EQ(1u, frame.render_passes.size()); | 5461 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5452 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5462 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5453 | 5463 |
| 5454 // The surface is 100x50. | 5464 // The surface is 100x50. |
| 5455 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5465 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5456 frame.render_passes[0]->quad_list[0]->material); | 5466 frame.render_passes[0]->quad_list.front()->material); |
| 5457 const RenderPassDrawQuad* render_pass_quad = | 5467 const RenderPassDrawQuad* render_pass_quad = |
| 5458 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5468 RenderPassDrawQuad::MaterialCast( |
| 5469 frame.render_passes[0]->quad_list.front()); |
| 5459 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5470 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
| 5460 render_pass_quad->rect.ToString()); | 5471 render_pass_quad->rect.ToString()); |
| 5461 | 5472 |
| 5462 // The mask covers the owning layer only. | 5473 // The mask covers the owning layer only. |
| 5463 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5474 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5464 frame.render_passes[0]->quad_list[1]->material); | 5475 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5465 const RenderPassDrawQuad* replica_quad = | 5476 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5466 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5477 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5467 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5478 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
| 5468 replica_quad->rect.ToString()); | 5479 replica_quad->rect.ToString()); |
| 5469 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), | 5480 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), |
| 5470 replica_quad->mask_uv_rect.ToString()); | 5481 replica_quad->mask_uv_rect.ToString()); |
| 5471 | 5482 |
| 5472 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5483 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5473 host_impl_->DidDrawAllLayers(frame); | 5484 host_impl_->DidDrawAllLayers(frame); |
| 5474 } | 5485 } |
| 5475 | 5486 |
| 5476 // Move the child to (-50, 0) instead. Now the mask should be moved to still | 5487 // Move the child to (-50, 0) instead. Now the mask should be moved to still |
| 5477 // cover the layer being replicated. | 5488 // cover the layer being replicated. |
| 5478 content_child_layer->SetPosition(gfx::Point(-50, 0)); | 5489 content_child_layer->SetPosition(gfx::Point(-50, 0)); |
| 5479 { | 5490 { |
| 5480 LayerTreeHostImpl::FrameData frame; | 5491 LayerTreeHostImpl::FrameData frame; |
| 5481 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5492 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5482 | 5493 |
| 5483 ASSERT_EQ(1u, frame.render_passes.size()); | 5494 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5484 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5495 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5485 | 5496 |
| 5486 // The surface is 100x50 with its origin at (-50, 0). | 5497 // The surface is 100x50 with its origin at (-50, 0). |
| 5487 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5498 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5488 frame.render_passes[0]->quad_list[0]->material); | 5499 frame.render_passes[0]->quad_list.front()->material); |
| 5489 const RenderPassDrawQuad* render_pass_quad = | 5500 const RenderPassDrawQuad* render_pass_quad = |
| 5490 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5501 RenderPassDrawQuad::MaterialCast( |
| 5502 frame.render_passes[0]->quad_list.front()); |
| 5491 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5503 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
| 5492 render_pass_quad->rect.ToString()); | 5504 render_pass_quad->rect.ToString()); |
| 5493 | 5505 |
| 5494 // The mask covers the owning layer only. | 5506 // The mask covers the owning layer only. |
| 5495 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5507 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5496 frame.render_passes[0]->quad_list[1]->material); | 5508 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5497 const RenderPassDrawQuad* replica_quad = | 5509 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5498 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5510 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5499 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5511 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
| 5500 replica_quad->rect.ToString()); | 5512 replica_quad->rect.ToString()); |
| 5501 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), | 5513 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), |
| 5502 replica_quad->mask_uv_rect.ToString()); | 5514 replica_quad->mask_uv_rect.ToString()); |
| 5503 | 5515 |
| 5504 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5516 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5505 host_impl_->DidDrawAllLayers(frame); | 5517 host_impl_->DidDrawAllLayers(frame); |
| 5506 } | 5518 } |
| 5507 } | 5519 } |
| 5508 | 5520 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5570 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5582 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5571 { | 5583 { |
| 5572 LayerTreeHostImpl::FrameData frame; | 5584 LayerTreeHostImpl::FrameData frame; |
| 5573 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5585 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5574 | 5586 |
| 5575 ASSERT_EQ(1u, frame.render_passes.size()); | 5587 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5576 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5588 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5577 | 5589 |
| 5578 // The surface is clipped to 10x20. | 5590 // The surface is clipped to 10x20. |
| 5579 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5591 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5580 frame.render_passes[0]->quad_list[0]->material); | 5592 frame.render_passes[0]->quad_list.front()->material); |
| 5581 const RenderPassDrawQuad* render_pass_quad = | 5593 const RenderPassDrawQuad* render_pass_quad = |
| 5582 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5594 RenderPassDrawQuad::MaterialCast( |
| 5595 frame.render_passes[0]->quad_list.front()); |
| 5583 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), | 5596 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), |
| 5584 render_pass_quad->rect.ToString()); | 5597 render_pass_quad->rect.ToString()); |
| 5585 | 5598 |
| 5586 // The masked layer is 50x50, but the surface size is 10x20. So the texture | 5599 // The masked layer is 50x50, but the surface size is 10x20. So the texture |
| 5587 // coords in the mask are scaled by 10/50 and 20/50. | 5600 // coords in the mask are scaled by 10/50 and 20/50. |
| 5588 // The surface is clipped to (20,10) so the mask texture coords are offset | 5601 // The surface is clipped to (20,10) so the mask texture coords are offset |
| 5589 // by 20/50 and 10/50 | 5602 // by 20/50 and 10/50 |
| 5590 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), | 5603 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), |
| 5591 1.f / 50.f).ToString(), | 5604 1.f / 50.f).ToString(), |
| 5592 render_pass_quad->mask_uv_rect.ToString()); | 5605 render_pass_quad->mask_uv_rect.ToString()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5647 host_impl_->ActivateSyncTree(); | 5660 host_impl_->ActivateSyncTree(); |
| 5648 | 5661 |
| 5649 host_impl_->active_tree()->UpdateDrawProperties(); | 5662 host_impl_->active_tree()->UpdateDrawProperties(); |
| 5650 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size()); | 5663 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size()); |
| 5651 | 5664 |
| 5652 LayerTreeHostImpl::FrameData frame; | 5665 LayerTreeHostImpl::FrameData frame; |
| 5653 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5666 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5654 | 5667 |
| 5655 ASSERT_EQ(1u, frame.render_passes.size()); | 5668 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5656 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); | 5669 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); |
| 5657 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; | 5670 const DrawQuad* quad = frame.render_passes[0]->quad_list.front(); |
| 5658 | 5671 |
| 5659 float edge[24]; | 5672 float edge[24]; |
| 5660 gfx::QuadF device_layer_quad; | 5673 gfx::QuadF device_layer_quad; |
| 5661 bool antialiased = | 5674 bool antialiased = |
| 5662 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( | 5675 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( |
| 5663 quad->quadTransform(), quad, &device_layer_quad, edge); | 5676 quad->quadTransform(), quad, &device_layer_quad, edge); |
| 5664 EXPECT_FALSE(antialiased); | 5677 EXPECT_FALSE(antialiased); |
| 5665 | 5678 |
| 5666 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5679 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5667 host_impl_->DidDrawAllLayers(frame); | 5680 host_impl_->DidDrawAllLayers(frame); |
| (...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7170 // surface. | 7183 // surface. |
| 7171 EXPECT_EQ(0, num_lost_surfaces_); | 7184 EXPECT_EQ(0, num_lost_surfaces_); |
| 7172 host_impl_->DidLoseOutputSurface(); | 7185 host_impl_->DidLoseOutputSurface(); |
| 7173 EXPECT_EQ(1, num_lost_surfaces_); | 7186 EXPECT_EQ(1, num_lost_surfaces_); |
| 7174 host_impl_->DidLoseOutputSurface(); | 7187 host_impl_->DidLoseOutputSurface(); |
| 7175 EXPECT_LE(1, num_lost_surfaces_); | 7188 EXPECT_LE(1, num_lost_surfaces_); |
| 7176 } | 7189 } |
| 7177 | 7190 |
| 7178 } // namespace | 7191 } // namespace |
| 7179 } // namespace cc | 7192 } // namespace cc |
| OLD | NEW |