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

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 448303002: Use custom ListContainer to allocate DrawQuads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@perftest
Patch Set: fix win trybot compile error Created 6 years, 3 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 unified diff | Download patch
OLDNEW
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 4008 matching lines...) Expand 10 before | Expand all | Expand 10 after
4019 void set_gutter_quad_material(DrawQuad::Material material) { 4019 void set_gutter_quad_material(DrawQuad::Material material) {
4020 gutter_quad_material_ = material; 4020 gutter_quad_material_ = material;
4021 } 4021 }
4022 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) { 4022 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) {
4023 gutter_texture_size_ = gutter_texture_size; 4023 gutter_texture_size_ = gutter_texture_size;
4024 } 4024 }
4025 4025
4026 protected: 4026 protected:
4027 size_t CountGutterQuads(const QuadList& quad_list) { 4027 size_t CountGutterQuads(const QuadList& quad_list) {
4028 size_t num_gutter_quads = 0; 4028 size_t num_gutter_quads = 0;
4029 for (size_t i = 0; i < quad_list.size(); ++i) { 4029 for (QuadList::ConstIterator iter = quad_list.begin();
4030 num_gutter_quads += (quad_list[i]->material == 4030 iter != quad_list.end();
4031 gutter_quad_material_) ? 1 : 0; 4031 ++iter) {
4032 num_gutter_quads += (iter->material == gutter_quad_material_) ? 1 : 0;
4032 } 4033 }
4033 return num_gutter_quads; 4034 return num_gutter_quads;
4034 } 4035 }
4035 4036
4036 void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) { 4037 void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) {
4037 LayerTestCommon::VerifyQuadsExactlyCoverRect( 4038 LayerTestCommon::VerifyQuadsExactlyCoverRect(
4038 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); 4039 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_)));
4039 } 4040 }
4040 4041
4041 // Make sure that the texture coordinates match their expectations. 4042 // Make sure that the texture coordinates match their expectations.
4042 void ValidateTextureDrawQuads(const QuadList& quad_list) { 4043 void ValidateTextureDrawQuads(const QuadList& quad_list) {
4043 for (size_t i = 0; i < quad_list.size(); ++i) { 4044 for (QuadList::ConstIterator iter = quad_list.begin();
4044 if (quad_list[i]->material != DrawQuad::TEXTURE_CONTENT) 4045 iter != quad_list.end();
4046 ++iter) {
4047 if (iter->material != DrawQuad::TEXTURE_CONTENT)
4045 continue; 4048 continue;
4046 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(quad_list[i]); 4049 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(&*iter);
4047 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize( 4050 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize(
4048 gutter_texture_size_, host_impl_->device_scale_factor()); 4051 gutter_texture_size_, host_impl_->device_scale_factor());
4049 EXPECT_EQ(quad->uv_top_left.x(), 4052 EXPECT_EQ(quad->uv_top_left.x(),
4050 quad->rect.x() / gutter_texture_size_pixels.width()); 4053 quad->rect.x() / gutter_texture_size_pixels.width());
4051 EXPECT_EQ(quad->uv_top_left.y(), 4054 EXPECT_EQ(quad->uv_top_left.y(),
4052 quad->rect.y() / gutter_texture_size_pixels.height()); 4055 quad->rect.y() / gutter_texture_size_pixels.height());
4053 EXPECT_EQ(quad->uv_bottom_right.x(), 4056 EXPECT_EQ(quad->uv_bottom_right.x(),
4054 quad->rect.right() / gutter_texture_size_pixels.width()); 4057 quad->rect.right() / gutter_texture_size_pixels.width());
4055 EXPECT_EQ(quad->uv_bottom_right.y(), 4058 EXPECT_EQ(quad->uv_bottom_right.y(),
4056 quad->rect.bottom() / gutter_texture_size_pixels.height()); 4059 quad->rect.bottom() / gutter_texture_size_pixels.height());
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
4635 &stats_instrumentation_); 4638 &stats_instrumentation_);
4636 { 4639 {
4637 LayerTreeHostImpl::FrameData frame; 4640 LayerTreeHostImpl::FrameData frame;
4638 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); 4641 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame));
4639 4642
4640 // Verify all quads have been computed 4643 // Verify all quads have been computed
4641 ASSERT_EQ(2U, frame.render_passes.size()); 4644 ASSERT_EQ(2U, frame.render_passes.size());
4642 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 4645 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
4643 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 4646 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
4644 EXPECT_EQ(DrawQuad::SOLID_COLOR, 4647 EXPECT_EQ(DrawQuad::SOLID_COLOR,
4645 frame.render_passes[0]->quad_list[0]->material); 4648 frame.render_passes[0]->quad_list.front()->material);
4646 EXPECT_EQ(DrawQuad::RENDER_PASS, 4649 EXPECT_EQ(DrawQuad::RENDER_PASS,
4647 frame.render_passes[1]->quad_list[0]->material); 4650 frame.render_passes[1]->quad_list.front()->material);
4648 4651
4649 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 4652 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
4650 my_host_impl->DidDrawAllLayers(frame); 4653 my_host_impl->DidDrawAllLayers(frame);
4651 } 4654 }
4652 } 4655 }
4653 4656
4654 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { 4657 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) {
4655 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 4658 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
4656 new TestSharedBitmapManager()); 4659 new TestSharedBitmapManager());
4657 scoped_ptr<LayerTreeHostImpl> my_host_impl = 4660 scoped_ptr<LayerTreeHostImpl> my_host_impl =
4658 SetupLayersForOpacity(false, 4661 SetupLayersForOpacity(false,
4659 this, 4662 this,
4660 &proxy_, 4663 &proxy_,
4661 shared_bitmap_manager.get(), 4664 shared_bitmap_manager.get(),
4662 &stats_instrumentation_); 4665 &stats_instrumentation_);
4663 { 4666 {
4664 LayerTreeHostImpl::FrameData frame; 4667 LayerTreeHostImpl::FrameData frame;
4665 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); 4668 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame));
4666 4669
4667 // Verify all quads have been computed 4670 // Verify all quads have been computed
4668 ASSERT_EQ(2U, frame.render_passes.size()); 4671 ASSERT_EQ(2U, frame.render_passes.size());
4669 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 4672 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
4670 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 4673 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
4671 EXPECT_EQ(DrawQuad::SOLID_COLOR, 4674 EXPECT_EQ(DrawQuad::SOLID_COLOR,
4672 frame.render_passes[0]->quad_list[0]->material); 4675 frame.render_passes[0]->quad_list.front()->material);
4673 EXPECT_EQ(DrawQuad::RENDER_PASS, 4676 EXPECT_EQ(DrawQuad::RENDER_PASS,
4674 frame.render_passes[1]->quad_list[0]->material); 4677 frame.render_passes[1]->quad_list.front()->material);
4675 4678
4676 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 4679 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
4677 my_host_impl->DidDrawAllLayers(frame); 4680 my_host_impl->DidDrawAllLayers(frame);
4678 } 4681 }
4679 } 4682 }
4680 4683
4681 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { 4684 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
4682 scoped_ptr<TestWebGraphicsContext3D> context = 4685 scoped_ptr<TestWebGraphicsContext3D> context =
4683 TestWebGraphicsContext3D::Create(); 4686 TestWebGraphicsContext3D::Create();
4684 TestWebGraphicsContext3D* context3d = context.get(); 4687 TestWebGraphicsContext3D* context3d = context.get();
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
4837 const RenderPass* root_render_pass = frame.render_passes.back(); 4840 const RenderPass* root_render_pass = frame.render_passes.back();
4838 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); 4841 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect);
4839 4842
4840 // Verify the root and child layers' quads are generated and not being 4843 // Verify the root and child layers' quads are generated and not being
4841 // culled. 4844 // culled.
4842 ASSERT_EQ(2u, root_render_pass->quad_list.size()); 4845 ASSERT_EQ(2u, root_render_pass->quad_list.size());
4843 4846
4844 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; 4847 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0];
4845 gfx::RectF expected_child_visible_rect(child->content_bounds()); 4848 gfx::RectF expected_child_visible_rect(child->content_bounds());
4846 EXPECT_RECT_EQ(expected_child_visible_rect, 4849 EXPECT_RECT_EQ(expected_child_visible_rect,
4847 root_render_pass->quad_list[0]->visible_rect); 4850 root_render_pass->quad_list.front()->visible_rect);
4848 4851
4849 LayerImpl* root = host_impl_->active_tree()->root_layer(); 4852 LayerImpl* root = host_impl_->active_tree()->root_layer();
4850 gfx::RectF expected_root_visible_rect(root->content_bounds()); 4853 gfx::RectF expected_root_visible_rect(root->content_bounds());
4851 EXPECT_RECT_EQ(expected_root_visible_rect, 4854 QuadList::ConstIterator iter = root_render_pass->quad_list.begin();
4852 root_render_pass->quad_list[1]->visible_rect); 4855 ++iter;
4856 EXPECT_RECT_EQ(expected_root_visible_rect, iter->visible_rect);
4853 } 4857 }
4854 4858
4855 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4859 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4856 host_impl_->DidDrawAllLayers(frame); 4860 host_impl_->DidDrawAllLayers(frame);
4857 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); 4861 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame));
4858 } 4862 }
4859 }; 4863 };
4860 4864
4861 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { 4865 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) {
4862 scoped_ptr<SolidColorLayerImpl> root = 4866 scoped_ptr<SolidColorLayerImpl> root =
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
4976 float device_scale_factor = 1.f; 4980 float device_scale_factor = 1.f;
4977 host_impl_->SetViewportSize(root_size); 4981 host_impl_->SetViewportSize(root_size);
4978 host_impl_->SetDeviceScaleFactor(device_scale_factor); 4982 host_impl_->SetDeviceScaleFactor(device_scale_factor);
4979 { 4983 {
4980 LayerTreeHostImpl::FrameData frame; 4984 LayerTreeHostImpl::FrameData frame;
4981 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 4985 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
4982 4986
4983 ASSERT_EQ(1u, frame.render_passes.size()); 4987 ASSERT_EQ(1u, frame.render_passes.size());
4984 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4988 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4985 ASSERT_EQ(DrawQuad::RENDER_PASS, 4989 ASSERT_EQ(DrawQuad::RENDER_PASS,
4986 frame.render_passes[0]->quad_list[0]->material); 4990 frame.render_passes[0]->quad_list.front()->material);
4987 const RenderPassDrawQuad* render_pass_quad = 4991 const RenderPassDrawQuad* render_pass_quad =
4988 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 4992 RenderPassDrawQuad::MaterialCast(
4993 frame.render_passes[0]->quad_list.front());
4989 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 4994 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
4990 render_pass_quad->rect.ToString()); 4995 render_pass_quad->rect.ToString());
4991 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 4996 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
4992 render_pass_quad->mask_uv_rect.ToString()); 4997 render_pass_quad->mask_uv_rect.ToString());
4993 4998
4994 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4999 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4995 host_impl_->DidDrawAllLayers(frame); 5000 host_impl_->DidDrawAllLayers(frame);
4996 } 5001 }
4997 5002
4998 5003
4999 // Applying a DSF should change the render surface size, but won't affect 5004 // Applying a DSF should change the render surface size, but won't affect
5000 // which part of the mask is used. 5005 // which part of the mask is used.
5001 device_scale_factor = 2.f; 5006 device_scale_factor = 2.f;
5002 gfx::Size device_viewport = 5007 gfx::Size device_viewport =
5003 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); 5008 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor));
5004 host_impl_->SetViewportSize(device_viewport); 5009 host_impl_->SetViewportSize(device_viewport);
5005 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5010 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5006 host_impl_->active_tree()->set_needs_update_draw_properties(); 5011 host_impl_->active_tree()->set_needs_update_draw_properties();
5007 { 5012 {
5008 LayerTreeHostImpl::FrameData frame; 5013 LayerTreeHostImpl::FrameData frame;
5009 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5014 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5010 5015
5011 ASSERT_EQ(1u, frame.render_passes.size()); 5016 ASSERT_EQ(1u, frame.render_passes.size());
5012 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5017 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5013 ASSERT_EQ(DrawQuad::RENDER_PASS, 5018 ASSERT_EQ(DrawQuad::RENDER_PASS,
5014 frame.render_passes[0]->quad_list[0]->material); 5019 frame.render_passes[0]->quad_list.front()->material);
5015 const RenderPassDrawQuad* render_pass_quad = 5020 const RenderPassDrawQuad* render_pass_quad =
5016 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5021 RenderPassDrawQuad::MaterialCast(
5022 frame.render_passes[0]->quad_list.front());
5017 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), 5023 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(),
5018 render_pass_quad->rect.ToString()); 5024 render_pass_quad->rect.ToString());
5019 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5025 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5020 render_pass_quad->mask_uv_rect.ToString()); 5026 render_pass_quad->mask_uv_rect.ToString());
5021 5027
5022 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5028 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5023 host_impl_->DidDrawAllLayers(frame); 5029 host_impl_->DidDrawAllLayers(frame);
5024 } 5030 }
5025 5031
5026 5032
5027 // Applying an equivalent content scale on the content layer and the mask 5033 // Applying an equivalent content scale on the content layer and the mask
5028 // should still result in the same part of the mask being used. 5034 // should still result in the same part of the mask being used.
5029 gfx::Size content_bounds = 5035 gfx::Size content_bounds =
5030 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, 5036 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size,
5031 device_scale_factor)); 5037 device_scale_factor));
5032 content_layer->SetContentBounds(content_bounds); 5038 content_layer->SetContentBounds(content_bounds);
5033 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5039 content_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5034 mask_layer->SetContentBounds(content_bounds); 5040 mask_layer->SetContentBounds(content_bounds);
5035 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5041 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5036 host_impl_->active_tree()->set_needs_update_draw_properties(); 5042 host_impl_->active_tree()->set_needs_update_draw_properties();
5037 { 5043 {
5038 LayerTreeHostImpl::FrameData frame; 5044 LayerTreeHostImpl::FrameData frame;
5039 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5045 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5040 5046
5041 ASSERT_EQ(1u, frame.render_passes.size()); 5047 ASSERT_EQ(1u, frame.render_passes.size());
5042 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5048 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5043 ASSERT_EQ(DrawQuad::RENDER_PASS, 5049 ASSERT_EQ(DrawQuad::RENDER_PASS,
5044 frame.render_passes[0]->quad_list[0]->material); 5050 frame.render_passes[0]->quad_list.front()->material);
5045 const RenderPassDrawQuad* render_pass_quad = 5051 const RenderPassDrawQuad* render_pass_quad =
5046 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5052 RenderPassDrawQuad::MaterialCast(
5053 frame.render_passes[0]->quad_list.front());
5047 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), 5054 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(),
5048 render_pass_quad->rect.ToString()); 5055 render_pass_quad->rect.ToString());
5049 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5056 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5050 render_pass_quad->mask_uv_rect.ToString()); 5057 render_pass_quad->mask_uv_rect.ToString());
5051 5058
5052 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5059 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5053 host_impl_->DidDrawAllLayers(frame); 5060 host_impl_->DidDrawAllLayers(frame);
5054 } 5061 }
5055 } 5062 }
5056 5063
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
5094 float device_scale_factor = 1.f; 5101 float device_scale_factor = 1.f;
5095 host_impl_->SetViewportSize(root_size); 5102 host_impl_->SetViewportSize(root_size);
5096 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5103 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5097 { 5104 {
5098 LayerTreeHostImpl::FrameData frame; 5105 LayerTreeHostImpl::FrameData frame;
5099 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5106 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5100 5107
5101 ASSERT_EQ(1u, frame.render_passes.size()); 5108 ASSERT_EQ(1u, frame.render_passes.size());
5102 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5109 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5103 ASSERT_EQ(DrawQuad::RENDER_PASS, 5110 ASSERT_EQ(DrawQuad::RENDER_PASS,
5104 frame.render_passes[0]->quad_list[0]->material); 5111 frame.render_passes[0]->quad_list.front()->material);
5105 const RenderPassDrawQuad* render_pass_quad = 5112 const RenderPassDrawQuad* render_pass_quad =
5106 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5113 RenderPassDrawQuad::MaterialCast(
5114 frame.render_passes[0]->quad_list.front());
5107 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), 5115 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(),
5108 render_pass_quad->rect.ToString()); 5116 render_pass_quad->rect.ToString());
5109 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5117 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5110 render_pass_quad->mask_uv_rect.ToString()); 5118 render_pass_quad->mask_uv_rect.ToString());
5111 5119
5112 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5120 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5113 host_impl_->DidDrawAllLayers(frame); 5121 host_impl_->DidDrawAllLayers(frame);
5114 } 5122 }
5115 5123
5116 // Applying a DSF should change the render surface size, but won't affect 5124 // Applying a DSF should change the render surface size, but won't affect
5117 // which part of the mask is used. 5125 // which part of the mask is used.
5118 device_scale_factor = 2.f; 5126 device_scale_factor = 2.f;
5119 gfx::Size device_viewport = 5127 gfx::Size device_viewport =
5120 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); 5128 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor));
5121 host_impl_->SetViewportSize(device_viewport); 5129 host_impl_->SetViewportSize(device_viewport);
5122 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5130 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5123 host_impl_->active_tree()->set_needs_update_draw_properties(); 5131 host_impl_->active_tree()->set_needs_update_draw_properties();
5124 { 5132 {
5125 LayerTreeHostImpl::FrameData frame; 5133 LayerTreeHostImpl::FrameData frame;
5126 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5134 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5127 5135
5128 ASSERT_EQ(1u, frame.render_passes.size()); 5136 ASSERT_EQ(1u, frame.render_passes.size());
5129 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5137 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5130 ASSERT_EQ(DrawQuad::RENDER_PASS, 5138 ASSERT_EQ(DrawQuad::RENDER_PASS,
5131 frame.render_passes[0]->quad_list[0]->material); 5139 frame.render_passes[0]->quad_list.front()->material);
5132 const RenderPassDrawQuad* render_pass_quad = 5140 const RenderPassDrawQuad* render_pass_quad =
5133 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5141 RenderPassDrawQuad::MaterialCast(
5142 frame.render_passes[0]->quad_list.front());
5134 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5143 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5135 render_pass_quad->rect.ToString()); 5144 render_pass_quad->rect.ToString());
5136 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5145 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5137 render_pass_quad->mask_uv_rect.ToString()); 5146 render_pass_quad->mask_uv_rect.ToString());
5138 5147
5139 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5148 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5140 host_impl_->DidDrawAllLayers(frame); 5149 host_impl_->DidDrawAllLayers(frame);
5141 } 5150 }
5142 5151
5143 // Applying an equivalent content scale on the content layer and the mask 5152 // Applying an equivalent content scale on the content layer and the mask
5144 // should still result in the same part of the mask being used. 5153 // should still result in the same part of the mask being used.
5145 gfx::Size layer_size_large = 5154 gfx::Size layer_size_large =
5146 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); 5155 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor));
5147 content_layer->SetContentBounds(layer_size_large); 5156 content_layer->SetContentBounds(layer_size_large);
5148 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5157 content_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5149 gfx::Size mask_size_large = 5158 gfx::Size mask_size_large =
5150 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); 5159 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor));
5151 mask_layer->SetContentBounds(mask_size_large); 5160 mask_layer->SetContentBounds(mask_size_large);
5152 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5161 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5153 host_impl_->active_tree()->set_needs_update_draw_properties(); 5162 host_impl_->active_tree()->set_needs_update_draw_properties();
5154 { 5163 {
5155 LayerTreeHostImpl::FrameData frame; 5164 LayerTreeHostImpl::FrameData frame;
5156 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5165 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5157 5166
5158 ASSERT_EQ(1u, frame.render_passes.size()); 5167 ASSERT_EQ(1u, frame.render_passes.size());
5159 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5168 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5160 ASSERT_EQ(DrawQuad::RENDER_PASS, 5169 ASSERT_EQ(DrawQuad::RENDER_PASS,
5161 frame.render_passes[0]->quad_list[0]->material); 5170 frame.render_passes[0]->quad_list.front()->material);
5162 const RenderPassDrawQuad* render_pass_quad = 5171 const RenderPassDrawQuad* render_pass_quad =
5163 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5172 RenderPassDrawQuad::MaterialCast(
5173 frame.render_passes[0]->quad_list.front());
5164 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5174 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5165 render_pass_quad->rect.ToString()); 5175 render_pass_quad->rect.ToString());
5166 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5176 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5167 render_pass_quad->mask_uv_rect.ToString()); 5177 render_pass_quad->mask_uv_rect.ToString());
5168 5178
5169 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5179 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5170 host_impl_->DidDrawAllLayers(frame); 5180 host_impl_->DidDrawAllLayers(frame);
5171 } 5181 }
5172 5182
5173 // Applying a different contents scale to the mask layer means it will have 5183 // Applying a different contents scale to the mask layer means it will have
5174 // a larger texture, but it should use the same tex coords to cover the 5184 // a larger texture, but it should use the same tex coords to cover the
5175 // layer it masks. 5185 // layer it masks.
5176 mask_layer->SetContentBounds(mask_size); 5186 mask_layer->SetContentBounds(mask_size);
5177 mask_layer->SetContentsScale(1.f, 1.f); 5187 mask_layer->SetContentsScale(1.f, 1.f);
5178 host_impl_->active_tree()->set_needs_update_draw_properties(); 5188 host_impl_->active_tree()->set_needs_update_draw_properties();
5179 { 5189 {
5180 LayerTreeHostImpl::FrameData frame; 5190 LayerTreeHostImpl::FrameData frame;
5181 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5191 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5182 5192
5183 ASSERT_EQ(1u, frame.render_passes.size()); 5193 ASSERT_EQ(1u, frame.render_passes.size());
5184 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5194 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5185 ASSERT_EQ(DrawQuad::RENDER_PASS, 5195 ASSERT_EQ(DrawQuad::RENDER_PASS,
5186 frame.render_passes[0]->quad_list[0]->material); 5196 frame.render_passes[0]->quad_list.front()->material);
5187 const RenderPassDrawQuad* render_pass_quad = 5197 const RenderPassDrawQuad* render_pass_quad =
5188 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5198 RenderPassDrawQuad::MaterialCast(
5199 frame.render_passes[0]->quad_list.front());
5189 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5200 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5190 render_pass_quad->rect.ToString()); 5201 render_pass_quad->rect.ToString());
5191 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5202 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5192 render_pass_quad->mask_uv_rect.ToString()); 5203 render_pass_quad->mask_uv_rect.ToString());
5193 5204
5194 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5205 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5195 host_impl_->DidDrawAllLayers(frame); 5206 host_impl_->DidDrawAllLayers(frame);
5196 } 5207 }
5197 } 5208 }
5198 5209
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
5240 // Check that the mask fills the surface. 5251 // Check that the mask fills the surface.
5241 float device_scale_factor = 1.f; 5252 float device_scale_factor = 1.f;
5242 host_impl_->SetViewportSize(root_size); 5253 host_impl_->SetViewportSize(root_size);
5243 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5254 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5244 { 5255 {
5245 LayerTreeHostImpl::FrameData frame; 5256 LayerTreeHostImpl::FrameData frame;
5246 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5257 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5247 5258
5248 ASSERT_EQ(1u, frame.render_passes.size()); 5259 ASSERT_EQ(1u, frame.render_passes.size());
5249 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5260 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5250 ASSERT_EQ(DrawQuad::RENDER_PASS, 5261 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5251 frame.render_passes[0]->quad_list[1]->material); 5262 ++iter;
5263 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5252 const RenderPassDrawQuad* replica_quad = 5264 const RenderPassDrawQuad* replica_quad =
5253 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5265 RenderPassDrawQuad::MaterialCast(&*iter);
5254 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), 5266 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(),
5255 replica_quad->rect.ToString()); 5267 replica_quad->rect.ToString());
5256 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5268 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5257 replica_quad->mask_uv_rect.ToString()); 5269 replica_quad->mask_uv_rect.ToString());
5258 5270
5259 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5271 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5260 host_impl_->DidDrawAllLayers(frame); 5272 host_impl_->DidDrawAllLayers(frame);
5261 } 5273 }
5262 5274
5263 // Applying a DSF should change the render surface size, but won't affect 5275 // Applying a DSF should change the render surface size, but won't affect
5264 // which part of the mask is used. 5276 // which part of the mask is used.
5265 device_scale_factor = 2.f; 5277 device_scale_factor = 2.f;
5266 gfx::Size device_viewport = 5278 gfx::Size device_viewport =
5267 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); 5279 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor));
5268 host_impl_->SetViewportSize(device_viewport); 5280 host_impl_->SetViewportSize(device_viewport);
5269 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5281 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5270 host_impl_->active_tree()->set_needs_update_draw_properties(); 5282 host_impl_->active_tree()->set_needs_update_draw_properties();
5271 { 5283 {
5272 LayerTreeHostImpl::FrameData frame; 5284 LayerTreeHostImpl::FrameData frame;
5273 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5285 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5274 5286
5275 ASSERT_EQ(1u, frame.render_passes.size()); 5287 ASSERT_EQ(1u, frame.render_passes.size());
5276 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5288 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5277 ASSERT_EQ(DrawQuad::RENDER_PASS, 5289 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5278 frame.render_passes[0]->quad_list[1]->material); 5290 ++iter;
5291 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5279 const RenderPassDrawQuad* replica_quad = 5292 const RenderPassDrawQuad* replica_quad =
5280 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5293 RenderPassDrawQuad::MaterialCast(&*iter);
5281 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5294 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5282 replica_quad->rect.ToString()); 5295 replica_quad->rect.ToString());
5283 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5296 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5284 replica_quad->mask_uv_rect.ToString()); 5297 replica_quad->mask_uv_rect.ToString());
5285 5298
5286 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5299 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5287 host_impl_->DidDrawAllLayers(frame); 5300 host_impl_->DidDrawAllLayers(frame);
5288 } 5301 }
5289 5302
5290 // Applying an equivalent content scale on the content layer and the mask 5303 // Applying an equivalent content scale on the content layer and the mask
5291 // should still result in the same part of the mask being used. 5304 // should still result in the same part of the mask being used.
5292 gfx::Size layer_size_large = 5305 gfx::Size layer_size_large =
5293 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); 5306 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor));
5294 content_layer->SetContentBounds(layer_size_large); 5307 content_layer->SetContentBounds(layer_size_large);
5295 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5308 content_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5296 gfx::Size mask_size_large = 5309 gfx::Size mask_size_large =
5297 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); 5310 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor));
5298 mask_layer->SetContentBounds(mask_size_large); 5311 mask_layer->SetContentBounds(mask_size_large);
5299 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5312 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5300 host_impl_->active_tree()->set_needs_update_draw_properties(); 5313 host_impl_->active_tree()->set_needs_update_draw_properties();
5301 { 5314 {
5302 LayerTreeHostImpl::FrameData frame; 5315 LayerTreeHostImpl::FrameData frame;
5303 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5316 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5304 5317
5305 ASSERT_EQ(1u, frame.render_passes.size()); 5318 ASSERT_EQ(1u, frame.render_passes.size());
5306 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5319 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5307 ASSERT_EQ(DrawQuad::RENDER_PASS, 5320 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5308 frame.render_passes[0]->quad_list[1]->material); 5321 ++iter;
5322 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5309 const RenderPassDrawQuad* replica_quad = 5323 const RenderPassDrawQuad* replica_quad =
5310 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5324 RenderPassDrawQuad::MaterialCast(&*iter);
5311 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5325 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5312 replica_quad->rect.ToString()); 5326 replica_quad->rect.ToString());
5313 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5327 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5314 replica_quad->mask_uv_rect.ToString()); 5328 replica_quad->mask_uv_rect.ToString());
5315 5329
5316 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5330 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5317 host_impl_->DidDrawAllLayers(frame); 5331 host_impl_->DidDrawAllLayers(frame);
5318 } 5332 }
5319 5333
5320 // Applying a different contents scale to the mask layer means it will have 5334 // Applying a different contents scale to the mask layer means it will have
5321 // a larger texture, but it should use the same tex coords to cover the 5335 // a larger texture, but it should use the same tex coords to cover the
5322 // layer it masks. 5336 // layer it masks.
5323 mask_layer->SetContentBounds(mask_size); 5337 mask_layer->SetContentBounds(mask_size);
5324 mask_layer->SetContentsScale(1.f, 1.f); 5338 mask_layer->SetContentsScale(1.f, 1.f);
5325 host_impl_->active_tree()->set_needs_update_draw_properties(); 5339 host_impl_->active_tree()->set_needs_update_draw_properties();
5326 { 5340 {
5327 LayerTreeHostImpl::FrameData frame; 5341 LayerTreeHostImpl::FrameData frame;
5328 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5342 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5329 5343
5330 ASSERT_EQ(1u, frame.render_passes.size()); 5344 ASSERT_EQ(1u, frame.render_passes.size());
5331 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5345 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5332 ASSERT_EQ(DrawQuad::RENDER_PASS, 5346 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5333 frame.render_passes[0]->quad_list[1]->material); 5347 ++iter;
5348 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5334 const RenderPassDrawQuad* replica_quad = 5349 const RenderPassDrawQuad* replica_quad =
5335 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5350 RenderPassDrawQuad::MaterialCast(&*iter);
5336 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5351 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5337 replica_quad->rect.ToString()); 5352 replica_quad->rect.ToString());
5338 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5353 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5339 replica_quad->mask_uv_rect.ToString()); 5354 replica_quad->mask_uv_rect.ToString());
5340 5355
5341 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5356 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5342 host_impl_->DidDrawAllLayers(frame); 5357 host_impl_->DidDrawAllLayers(frame);
5343 } 5358 }
5344 } 5359 }
5345 5360
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
5400 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5415 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5401 { 5416 {
5402 LayerTreeHostImpl::FrameData frame; 5417 LayerTreeHostImpl::FrameData frame;
5403 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5418 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5404 5419
5405 ASSERT_EQ(1u, frame.render_passes.size()); 5420 ASSERT_EQ(1u, frame.render_passes.size());
5406 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5421 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5407 5422
5408 // The surface is 100x50. 5423 // The surface is 100x50.
5409 ASSERT_EQ(DrawQuad::RENDER_PASS, 5424 ASSERT_EQ(DrawQuad::RENDER_PASS,
5410 frame.render_passes[0]->quad_list[0]->material); 5425 frame.render_passes[0]->quad_list.front()->material);
5411 const RenderPassDrawQuad* render_pass_quad = 5426 const RenderPassDrawQuad* render_pass_quad =
5412 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5427 RenderPassDrawQuad::MaterialCast(
5428 frame.render_passes[0]->quad_list.front());
5413 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), 5429 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(),
5414 render_pass_quad->rect.ToString()); 5430 render_pass_quad->rect.ToString());
5415 5431
5416 // The mask covers the owning layer only. 5432 // The mask covers the owning layer only.
5417 ASSERT_EQ(DrawQuad::RENDER_PASS, 5433 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5418 frame.render_passes[0]->quad_list[1]->material); 5434 ++iter;
5435 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5419 const RenderPassDrawQuad* replica_quad = 5436 const RenderPassDrawQuad* replica_quad =
5420 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5437 RenderPassDrawQuad::MaterialCast(&*iter);
5421 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), 5438 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(),
5422 replica_quad->rect.ToString()); 5439 replica_quad->rect.ToString());
5423 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), 5440 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(),
5424 replica_quad->mask_uv_rect.ToString()); 5441 replica_quad->mask_uv_rect.ToString());
5425 5442
5426 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5443 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5427 host_impl_->DidDrawAllLayers(frame); 5444 host_impl_->DidDrawAllLayers(frame);
5428 } 5445 }
5429 5446
5430 // Move the child to (-50, 0) instead. Now the mask should be moved to still 5447 // Move the child to (-50, 0) instead. Now the mask should be moved to still
5431 // cover the layer being replicated. 5448 // cover the layer being replicated.
5432 content_child_layer->SetPosition(gfx::Point(-50, 0)); 5449 content_child_layer->SetPosition(gfx::Point(-50, 0));
5433 { 5450 {
5434 LayerTreeHostImpl::FrameData frame; 5451 LayerTreeHostImpl::FrameData frame;
5435 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5452 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5436 5453
5437 ASSERT_EQ(1u, frame.render_passes.size()); 5454 ASSERT_EQ(1u, frame.render_passes.size());
5438 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5455 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5439 5456
5440 // The surface is 100x50 with its origin at (-50, 0). 5457 // The surface is 100x50 with its origin at (-50, 0).
5441 ASSERT_EQ(DrawQuad::RENDER_PASS, 5458 ASSERT_EQ(DrawQuad::RENDER_PASS,
5442 frame.render_passes[0]->quad_list[0]->material); 5459 frame.render_passes[0]->quad_list.front()->material);
5443 const RenderPassDrawQuad* render_pass_quad = 5460 const RenderPassDrawQuad* render_pass_quad =
5444 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5461 RenderPassDrawQuad::MaterialCast(
5462 frame.render_passes[0]->quad_list.front());
5445 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), 5463 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(),
5446 render_pass_quad->rect.ToString()); 5464 render_pass_quad->rect.ToString());
5447 5465
5448 // The mask covers the owning layer only. 5466 // The mask covers the owning layer only.
5449 ASSERT_EQ(DrawQuad::RENDER_PASS, 5467 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5450 frame.render_passes[0]->quad_list[1]->material); 5468 ++iter;
5469 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5451 const RenderPassDrawQuad* replica_quad = 5470 const RenderPassDrawQuad* replica_quad =
5452 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5471 RenderPassDrawQuad::MaterialCast(&*iter);
5453 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), 5472 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(),
5454 replica_quad->rect.ToString()); 5473 replica_quad->rect.ToString());
5455 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), 5474 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(),
5456 replica_quad->mask_uv_rect.ToString()); 5475 replica_quad->mask_uv_rect.ToString());
5457 5476
5458 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5477 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5459 host_impl_->DidDrawAllLayers(frame); 5478 host_impl_->DidDrawAllLayers(frame);
5460 } 5479 }
5461 } 5480 }
5462 5481
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
5524 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5543 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5525 { 5544 {
5526 LayerTreeHostImpl::FrameData frame; 5545 LayerTreeHostImpl::FrameData frame;
5527 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5546 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5528 5547
5529 ASSERT_EQ(1u, frame.render_passes.size()); 5548 ASSERT_EQ(1u, frame.render_passes.size());
5530 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5549 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5531 5550
5532 // The surface is clipped to 10x20. 5551 // The surface is clipped to 10x20.
5533 ASSERT_EQ(DrawQuad::RENDER_PASS, 5552 ASSERT_EQ(DrawQuad::RENDER_PASS,
5534 frame.render_passes[0]->quad_list[0]->material); 5553 frame.render_passes[0]->quad_list.front()->material);
5535 const RenderPassDrawQuad* render_pass_quad = 5554 const RenderPassDrawQuad* render_pass_quad =
5536 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5555 RenderPassDrawQuad::MaterialCast(
5556 frame.render_passes[0]->quad_list.front());
5537 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), 5557 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(),
5538 render_pass_quad->rect.ToString()); 5558 render_pass_quad->rect.ToString());
5539 5559
5540 // The masked layer is 50x50, but the surface size is 10x20. So the texture 5560 // The masked layer is 50x50, but the surface size is 10x20. So the texture
5541 // coords in the mask are scaled by 10/50 and 20/50. 5561 // coords in the mask are scaled by 10/50 and 20/50.
5542 // The surface is clipped to (20,10) so the mask texture coords are offset 5562 // The surface is clipped to (20,10) so the mask texture coords are offset
5543 // by 20/50 and 10/50 5563 // by 20/50 and 10/50
5544 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), 5564 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f),
5545 1.f / 50.f).ToString(), 5565 1.f / 50.f).ToString(),
5546 render_pass_quad->mask_uv_rect.ToString()); 5566 render_pass_quad->mask_uv_rect.ToString());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
5601 host_impl_->ActivateSyncTree(); 5621 host_impl_->ActivateSyncTree();
5602 5622
5603 host_impl_->active_tree()->UpdateDrawProperties(); 5623 host_impl_->active_tree()->UpdateDrawProperties();
5604 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size()); 5624 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size());
5605 5625
5606 LayerTreeHostImpl::FrameData frame; 5626 LayerTreeHostImpl::FrameData frame;
5607 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5627 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5608 5628
5609 ASSERT_EQ(1u, frame.render_passes.size()); 5629 ASSERT_EQ(1u, frame.render_passes.size());
5610 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); 5630 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size());
5611 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; 5631 const DrawQuad* quad = frame.render_passes[0]->quad_list.front();
5612 5632
5613 float edge[24]; 5633 float edge[24];
5614 gfx::QuadF device_layer_quad; 5634 gfx::QuadF device_layer_quad;
5615 bool antialiased = 5635 bool antialiased =
5616 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( 5636 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing(
5617 quad->quadTransform(), quad, &device_layer_quad, edge); 5637 quad->quadTransform(), quad, &device_layer_quad, edge);
5618 EXPECT_FALSE(antialiased); 5638 EXPECT_FALSE(antialiased);
5619 5639
5620 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5640 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5621 host_impl_->DidDrawAllLayers(frame); 5641 host_impl_->DidDrawAllLayers(frame);
(...skipping 1496 matching lines...) Expand 10 before | Expand all | Expand 10 after
7118 // surface. 7138 // surface.
7119 EXPECT_EQ(0, num_lost_surfaces_); 7139 EXPECT_EQ(0, num_lost_surfaces_);
7120 host_impl_->DidLoseOutputSurface(); 7140 host_impl_->DidLoseOutputSurface();
7121 EXPECT_EQ(1, num_lost_surfaces_); 7141 EXPECT_EQ(1, num_lost_surfaces_);
7122 host_impl_->DidLoseOutputSurface(); 7142 host_impl_->DidLoseOutputSurface();
7123 EXPECT_LE(1, num_lost_surfaces_); 7143 EXPECT_LE(1, num_lost_surfaces_);
7124 } 7144 }
7125 7145
7126 } // namespace 7146 } // namespace
7127 } // namespace cc 7147 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698