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

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 rebase 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 3875 matching lines...) Expand 10 before | Expand all | Expand 10 after
3886 void set_gutter_quad_material(DrawQuad::Material material) { 3886 void set_gutter_quad_material(DrawQuad::Material material) {
3887 gutter_quad_material_ = material; 3887 gutter_quad_material_ = material;
3888 } 3888 }
3889 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) { 3889 void set_gutter_texture_size(const gfx::Size& gutter_texture_size) {
3890 gutter_texture_size_ = gutter_texture_size; 3890 gutter_texture_size_ = gutter_texture_size;
3891 } 3891 }
3892 3892
3893 protected: 3893 protected:
3894 size_t CountGutterQuads(const QuadList& quad_list) { 3894 size_t CountGutterQuads(const QuadList& quad_list) {
3895 size_t num_gutter_quads = 0; 3895 size_t num_gutter_quads = 0;
3896 for (size_t i = 0; i < quad_list.size(); ++i) { 3896 for (QuadList::ConstIterator iter = quad_list.begin();
3897 num_gutter_quads += (quad_list[i]->material == 3897 iter != quad_list.end();
3898 gutter_quad_material_) ? 1 : 0; 3898 ++iter) {
3899 num_gutter_quads += (iter->material == gutter_quad_material_) ? 1 : 0;
3899 } 3900 }
3900 return num_gutter_quads; 3901 return num_gutter_quads;
3901 } 3902 }
3902 3903
3903 void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) { 3904 void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) {
3904 LayerTestCommon::VerifyQuadsExactlyCoverRect( 3905 LayerTestCommon::VerifyQuadsExactlyCoverRect(
3905 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); 3906 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_)));
3906 } 3907 }
3907 3908
3908 // Make sure that the texture coordinates match their expectations. 3909 // Make sure that the texture coordinates match their expectations.
3909 void ValidateTextureDrawQuads(const QuadList& quad_list) { 3910 void ValidateTextureDrawQuads(const QuadList& quad_list) {
3910 for (size_t i = 0; i < quad_list.size(); ++i) { 3911 for (QuadList::ConstIterator iter = quad_list.begin();
3911 if (quad_list[i]->material != DrawQuad::TEXTURE_CONTENT) 3912 iter != quad_list.end();
3913 ++iter) {
3914 if (iter->material != DrawQuad::TEXTURE_CONTENT)
3912 continue; 3915 continue;
3913 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(quad_list[i]); 3916 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(&*iter);
3914 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize( 3917 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize(
3915 gutter_texture_size_, host_impl_->device_scale_factor()); 3918 gutter_texture_size_, host_impl_->device_scale_factor());
3916 EXPECT_EQ(quad->uv_top_left.x(), 3919 EXPECT_EQ(quad->uv_top_left.x(),
3917 quad->rect.x() / gutter_texture_size_pixels.width()); 3920 quad->rect.x() / gutter_texture_size_pixels.width());
3918 EXPECT_EQ(quad->uv_top_left.y(), 3921 EXPECT_EQ(quad->uv_top_left.y(),
3919 quad->rect.y() / gutter_texture_size_pixels.height()); 3922 quad->rect.y() / gutter_texture_size_pixels.height());
3920 EXPECT_EQ(quad->uv_bottom_right.x(), 3923 EXPECT_EQ(quad->uv_bottom_right.x(),
3921 quad->rect.right() / gutter_texture_size_pixels.width()); 3924 quad->rect.right() / gutter_texture_size_pixels.width());
3922 EXPECT_EQ(quad->uv_bottom_right.y(), 3925 EXPECT_EQ(quad->uv_bottom_right.y(),
3923 quad->rect.bottom() / gutter_texture_size_pixels.height()); 3926 quad->rect.bottom() / gutter_texture_size_pixels.height());
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
4502 &stats_instrumentation_); 4505 &stats_instrumentation_);
4503 { 4506 {
4504 LayerTreeHostImpl::FrameData frame; 4507 LayerTreeHostImpl::FrameData frame;
4505 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); 4508 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame));
4506 4509
4507 // Verify all quads have been computed 4510 // Verify all quads have been computed
4508 ASSERT_EQ(2U, frame.render_passes.size()); 4511 ASSERT_EQ(2U, frame.render_passes.size());
4509 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 4512 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
4510 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 4513 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
4511 EXPECT_EQ(DrawQuad::SOLID_COLOR, 4514 EXPECT_EQ(DrawQuad::SOLID_COLOR,
4512 frame.render_passes[0]->quad_list[0]->material); 4515 frame.render_passes[0]->quad_list.front()->material);
4513 EXPECT_EQ(DrawQuad::RENDER_PASS, 4516 EXPECT_EQ(DrawQuad::RENDER_PASS,
4514 frame.render_passes[1]->quad_list[0]->material); 4517 frame.render_passes[1]->quad_list.front()->material);
4515 4518
4516 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 4519 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
4517 my_host_impl->DidDrawAllLayers(frame); 4520 my_host_impl->DidDrawAllLayers(frame);
4518 } 4521 }
4519 } 4522 }
4520 4523
4521 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { 4524 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) {
4522 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 4525 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
4523 new TestSharedBitmapManager()); 4526 new TestSharedBitmapManager());
4524 scoped_ptr<LayerTreeHostImpl> my_host_impl = 4527 scoped_ptr<LayerTreeHostImpl> my_host_impl =
4525 SetupLayersForOpacity(false, 4528 SetupLayersForOpacity(false,
4526 this, 4529 this,
4527 &proxy_, 4530 &proxy_,
4528 shared_bitmap_manager.get(), 4531 shared_bitmap_manager.get(),
4529 &stats_instrumentation_); 4532 &stats_instrumentation_);
4530 { 4533 {
4531 LayerTreeHostImpl::FrameData frame; 4534 LayerTreeHostImpl::FrameData frame;
4532 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); 4535 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame));
4533 4536
4534 // Verify all quads have been computed 4537 // Verify all quads have been computed
4535 ASSERT_EQ(2U, frame.render_passes.size()); 4538 ASSERT_EQ(2U, frame.render_passes.size());
4536 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 4539 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
4537 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 4540 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
4538 EXPECT_EQ(DrawQuad::SOLID_COLOR, 4541 EXPECT_EQ(DrawQuad::SOLID_COLOR,
4539 frame.render_passes[0]->quad_list[0]->material); 4542 frame.render_passes[0]->quad_list.front()->material);
4540 EXPECT_EQ(DrawQuad::RENDER_PASS, 4543 EXPECT_EQ(DrawQuad::RENDER_PASS,
4541 frame.render_passes[1]->quad_list[0]->material); 4544 frame.render_passes[1]->quad_list.front()->material);
4542 4545
4543 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 4546 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
4544 my_host_impl->DidDrawAllLayers(frame); 4547 my_host_impl->DidDrawAllLayers(frame);
4545 } 4548 }
4546 } 4549 }
4547 4550
4548 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { 4551 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
4549 scoped_ptr<TestWebGraphicsContext3D> context = 4552 scoped_ptr<TestWebGraphicsContext3D> context =
4550 TestWebGraphicsContext3D::Create(); 4553 TestWebGraphicsContext3D::Create();
4551 TestWebGraphicsContext3D* context3d = context.get(); 4554 TestWebGraphicsContext3D* context3d = context.get();
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
4704 const RenderPass* root_render_pass = frame.render_passes.back(); 4707 const RenderPass* root_render_pass = frame.render_passes.back();
4705 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); 4708 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect);
4706 4709
4707 // Verify the root and child layers' quads are generated and not being 4710 // Verify the root and child layers' quads are generated and not being
4708 // culled. 4711 // culled.
4709 ASSERT_EQ(2u, root_render_pass->quad_list.size()); 4712 ASSERT_EQ(2u, root_render_pass->quad_list.size());
4710 4713
4711 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; 4714 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0];
4712 gfx::RectF expected_child_visible_rect(child->content_bounds()); 4715 gfx::RectF expected_child_visible_rect(child->content_bounds());
4713 EXPECT_RECT_EQ(expected_child_visible_rect, 4716 EXPECT_RECT_EQ(expected_child_visible_rect,
4714 root_render_pass->quad_list[0]->visible_rect); 4717 root_render_pass->quad_list.front()->visible_rect);
4715 4718
4716 LayerImpl* root = host_impl_->active_tree()->root_layer(); 4719 LayerImpl* root = host_impl_->active_tree()->root_layer();
4717 gfx::RectF expected_root_visible_rect(root->content_bounds()); 4720 gfx::RectF expected_root_visible_rect(root->content_bounds());
4718 EXPECT_RECT_EQ(expected_root_visible_rect, 4721 QuadList::ConstIterator iter = root_render_pass->quad_list.begin();
4719 root_render_pass->quad_list[1]->visible_rect); 4722 ++iter;
4723 EXPECT_RECT_EQ(expected_root_visible_rect, iter->visible_rect);
4720 } 4724 }
4721 4725
4722 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4726 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4723 host_impl_->DidDrawAllLayers(frame); 4727 host_impl_->DidDrawAllLayers(frame);
4724 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); 4728 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame));
4725 } 4729 }
4726 }; 4730 };
4727 4731
4728 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { 4732 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) {
4729 scoped_ptr<SolidColorLayerImpl> root = 4733 scoped_ptr<SolidColorLayerImpl> root =
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
4843 float device_scale_factor = 1.f; 4847 float device_scale_factor = 1.f;
4844 host_impl_->SetViewportSize(root_size); 4848 host_impl_->SetViewportSize(root_size);
4845 host_impl_->SetDeviceScaleFactor(device_scale_factor); 4849 host_impl_->SetDeviceScaleFactor(device_scale_factor);
4846 { 4850 {
4847 LayerTreeHostImpl::FrameData frame; 4851 LayerTreeHostImpl::FrameData frame;
4848 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 4852 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
4849 4853
4850 ASSERT_EQ(1u, frame.render_passes.size()); 4854 ASSERT_EQ(1u, frame.render_passes.size());
4851 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4855 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4852 ASSERT_EQ(DrawQuad::RENDER_PASS, 4856 ASSERT_EQ(DrawQuad::RENDER_PASS,
4853 frame.render_passes[0]->quad_list[0]->material); 4857 frame.render_passes[0]->quad_list.front()->material);
4854 const RenderPassDrawQuad* render_pass_quad = 4858 const RenderPassDrawQuad* render_pass_quad =
4855 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 4859 RenderPassDrawQuad::MaterialCast(
4860 frame.render_passes[0]->quad_list.front());
4856 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 4861 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
4857 render_pass_quad->rect.ToString()); 4862 render_pass_quad->rect.ToString());
4858 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 4863 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
4859 render_pass_quad->mask_uv_rect.ToString()); 4864 render_pass_quad->mask_uv_rect.ToString());
4860 4865
4861 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4866 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4862 host_impl_->DidDrawAllLayers(frame); 4867 host_impl_->DidDrawAllLayers(frame);
4863 } 4868 }
4864 4869
4865 4870
4866 // Applying a DSF should change the render surface size, but won't affect 4871 // Applying a DSF should change the render surface size, but won't affect
4867 // which part of the mask is used. 4872 // which part of the mask is used.
4868 device_scale_factor = 2.f; 4873 device_scale_factor = 2.f;
4869 gfx::Size device_viewport = 4874 gfx::Size device_viewport =
4870 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); 4875 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor));
4871 host_impl_->SetViewportSize(device_viewport); 4876 host_impl_->SetViewportSize(device_viewport);
4872 host_impl_->SetDeviceScaleFactor(device_scale_factor); 4877 host_impl_->SetDeviceScaleFactor(device_scale_factor);
4873 host_impl_->active_tree()->set_needs_update_draw_properties(); 4878 host_impl_->active_tree()->set_needs_update_draw_properties();
4874 { 4879 {
4875 LayerTreeHostImpl::FrameData frame; 4880 LayerTreeHostImpl::FrameData frame;
4876 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 4881 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
4877 4882
4878 ASSERT_EQ(1u, frame.render_passes.size()); 4883 ASSERT_EQ(1u, frame.render_passes.size());
4879 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4884 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4880 ASSERT_EQ(DrawQuad::RENDER_PASS, 4885 ASSERT_EQ(DrawQuad::RENDER_PASS,
4881 frame.render_passes[0]->quad_list[0]->material); 4886 frame.render_passes[0]->quad_list.front()->material);
4882 const RenderPassDrawQuad* render_pass_quad = 4887 const RenderPassDrawQuad* render_pass_quad =
4883 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 4888 RenderPassDrawQuad::MaterialCast(
4889 frame.render_passes[0]->quad_list.front());
4884 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), 4890 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(),
4885 render_pass_quad->rect.ToString()); 4891 render_pass_quad->rect.ToString());
4886 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 4892 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
4887 render_pass_quad->mask_uv_rect.ToString()); 4893 render_pass_quad->mask_uv_rect.ToString());
4888 4894
4889 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4895 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4890 host_impl_->DidDrawAllLayers(frame); 4896 host_impl_->DidDrawAllLayers(frame);
4891 } 4897 }
4892 4898
4893 4899
4894 // Applying an equivalent content scale on the content layer and the mask 4900 // Applying an equivalent content scale on the content layer and the mask
4895 // should still result in the same part of the mask being used. 4901 // should still result in the same part of the mask being used.
4896 gfx::Size content_bounds = 4902 gfx::Size content_bounds =
4897 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, 4903 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size,
4898 device_scale_factor)); 4904 device_scale_factor));
4899 content_layer->SetContentBounds(content_bounds); 4905 content_layer->SetContentBounds(content_bounds);
4900 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); 4906 content_layer->SetContentsScale(device_scale_factor, device_scale_factor);
4901 mask_layer->SetContentBounds(content_bounds); 4907 mask_layer->SetContentBounds(content_bounds);
4902 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); 4908 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor);
4903 host_impl_->active_tree()->set_needs_update_draw_properties(); 4909 host_impl_->active_tree()->set_needs_update_draw_properties();
4904 { 4910 {
4905 LayerTreeHostImpl::FrameData frame; 4911 LayerTreeHostImpl::FrameData frame;
4906 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 4912 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
4907 4913
4908 ASSERT_EQ(1u, frame.render_passes.size()); 4914 ASSERT_EQ(1u, frame.render_passes.size());
4909 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4915 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4910 ASSERT_EQ(DrawQuad::RENDER_PASS, 4916 ASSERT_EQ(DrawQuad::RENDER_PASS,
4911 frame.render_passes[0]->quad_list[0]->material); 4917 frame.render_passes[0]->quad_list.front()->material);
4912 const RenderPassDrawQuad* render_pass_quad = 4918 const RenderPassDrawQuad* render_pass_quad =
4913 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 4919 RenderPassDrawQuad::MaterialCast(
4920 frame.render_passes[0]->quad_list.front());
4914 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), 4921 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(),
4915 render_pass_quad->rect.ToString()); 4922 render_pass_quad->rect.ToString());
4916 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 4923 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
4917 render_pass_quad->mask_uv_rect.ToString()); 4924 render_pass_quad->mask_uv_rect.ToString());
4918 4925
4919 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4926 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4920 host_impl_->DidDrawAllLayers(frame); 4927 host_impl_->DidDrawAllLayers(frame);
4921 } 4928 }
4922 } 4929 }
4923 4930
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
4961 float device_scale_factor = 1.f; 4968 float device_scale_factor = 1.f;
4962 host_impl_->SetViewportSize(root_size); 4969 host_impl_->SetViewportSize(root_size);
4963 host_impl_->SetDeviceScaleFactor(device_scale_factor); 4970 host_impl_->SetDeviceScaleFactor(device_scale_factor);
4964 { 4971 {
4965 LayerTreeHostImpl::FrameData frame; 4972 LayerTreeHostImpl::FrameData frame;
4966 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 4973 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
4967 4974
4968 ASSERT_EQ(1u, frame.render_passes.size()); 4975 ASSERT_EQ(1u, frame.render_passes.size());
4969 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4976 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4970 ASSERT_EQ(DrawQuad::RENDER_PASS, 4977 ASSERT_EQ(DrawQuad::RENDER_PASS,
4971 frame.render_passes[0]->quad_list[0]->material); 4978 frame.render_passes[0]->quad_list.front()->material);
4972 const RenderPassDrawQuad* render_pass_quad = 4979 const RenderPassDrawQuad* render_pass_quad =
4973 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 4980 RenderPassDrawQuad::MaterialCast(
4981 frame.render_passes[0]->quad_list.front());
4974 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), 4982 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(),
4975 render_pass_quad->rect.ToString()); 4983 render_pass_quad->rect.ToString());
4976 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 4984 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
4977 render_pass_quad->mask_uv_rect.ToString()); 4985 render_pass_quad->mask_uv_rect.ToString());
4978 4986
4979 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 4987 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
4980 host_impl_->DidDrawAllLayers(frame); 4988 host_impl_->DidDrawAllLayers(frame);
4981 } 4989 }
4982 4990
4983 // Applying a DSF should change the render surface size, but won't affect 4991 // Applying a DSF should change the render surface size, but won't affect
4984 // which part of the mask is used. 4992 // which part of the mask is used.
4985 device_scale_factor = 2.f; 4993 device_scale_factor = 2.f;
4986 gfx::Size device_viewport = 4994 gfx::Size device_viewport =
4987 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); 4995 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor));
4988 host_impl_->SetViewportSize(device_viewport); 4996 host_impl_->SetViewportSize(device_viewport);
4989 host_impl_->SetDeviceScaleFactor(device_scale_factor); 4997 host_impl_->SetDeviceScaleFactor(device_scale_factor);
4990 host_impl_->active_tree()->set_needs_update_draw_properties(); 4998 host_impl_->active_tree()->set_needs_update_draw_properties();
4991 { 4999 {
4992 LayerTreeHostImpl::FrameData frame; 5000 LayerTreeHostImpl::FrameData frame;
4993 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5001 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
4994 5002
4995 ASSERT_EQ(1u, frame.render_passes.size()); 5003 ASSERT_EQ(1u, frame.render_passes.size());
4996 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5004 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4997 ASSERT_EQ(DrawQuad::RENDER_PASS, 5005 ASSERT_EQ(DrawQuad::RENDER_PASS,
4998 frame.render_passes[0]->quad_list[0]->material); 5006 frame.render_passes[0]->quad_list.front()->material);
4999 const RenderPassDrawQuad* render_pass_quad = 5007 const RenderPassDrawQuad* render_pass_quad =
5000 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5008 RenderPassDrawQuad::MaterialCast(
5009 frame.render_passes[0]->quad_list.front());
5001 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5010 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5002 render_pass_quad->rect.ToString()); 5011 render_pass_quad->rect.ToString());
5003 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5012 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5004 render_pass_quad->mask_uv_rect.ToString()); 5013 render_pass_quad->mask_uv_rect.ToString());
5005 5014
5006 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5015 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5007 host_impl_->DidDrawAllLayers(frame); 5016 host_impl_->DidDrawAllLayers(frame);
5008 } 5017 }
5009 5018
5010 // Applying an equivalent content scale on the content layer and the mask 5019 // Applying an equivalent content scale on the content layer and the mask
5011 // should still result in the same part of the mask being used. 5020 // should still result in the same part of the mask being used.
5012 gfx::Size layer_size_large = 5021 gfx::Size layer_size_large =
5013 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); 5022 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor));
5014 content_layer->SetContentBounds(layer_size_large); 5023 content_layer->SetContentBounds(layer_size_large);
5015 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5024 content_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5016 gfx::Size mask_size_large = 5025 gfx::Size mask_size_large =
5017 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); 5026 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor));
5018 mask_layer->SetContentBounds(mask_size_large); 5027 mask_layer->SetContentBounds(mask_size_large);
5019 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5028 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5020 host_impl_->active_tree()->set_needs_update_draw_properties(); 5029 host_impl_->active_tree()->set_needs_update_draw_properties();
5021 { 5030 {
5022 LayerTreeHostImpl::FrameData frame; 5031 LayerTreeHostImpl::FrameData frame;
5023 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5032 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5024 5033
5025 ASSERT_EQ(1u, frame.render_passes.size()); 5034 ASSERT_EQ(1u, frame.render_passes.size());
5026 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5035 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5027 ASSERT_EQ(DrawQuad::RENDER_PASS, 5036 ASSERT_EQ(DrawQuad::RENDER_PASS,
5028 frame.render_passes[0]->quad_list[0]->material); 5037 frame.render_passes[0]->quad_list.front()->material);
5029 const RenderPassDrawQuad* render_pass_quad = 5038 const RenderPassDrawQuad* render_pass_quad =
5030 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5039 RenderPassDrawQuad::MaterialCast(
5040 frame.render_passes[0]->quad_list.front());
5031 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5041 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5032 render_pass_quad->rect.ToString()); 5042 render_pass_quad->rect.ToString());
5033 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5043 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5034 render_pass_quad->mask_uv_rect.ToString()); 5044 render_pass_quad->mask_uv_rect.ToString());
5035 5045
5036 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5046 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5037 host_impl_->DidDrawAllLayers(frame); 5047 host_impl_->DidDrawAllLayers(frame);
5038 } 5048 }
5039 5049
5040 // Applying a different contents scale to the mask layer means it will have 5050 // Applying a different contents scale to the mask layer means it will have
5041 // a larger texture, but it should use the same tex coords to cover the 5051 // a larger texture, but it should use the same tex coords to cover the
5042 // layer it masks. 5052 // layer it masks.
5043 mask_layer->SetContentBounds(mask_size); 5053 mask_layer->SetContentBounds(mask_size);
5044 mask_layer->SetContentsScale(1.f, 1.f); 5054 mask_layer->SetContentsScale(1.f, 1.f);
5045 host_impl_->active_tree()->set_needs_update_draw_properties(); 5055 host_impl_->active_tree()->set_needs_update_draw_properties();
5046 { 5056 {
5047 LayerTreeHostImpl::FrameData frame; 5057 LayerTreeHostImpl::FrameData frame;
5048 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5058 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5049 5059
5050 ASSERT_EQ(1u, frame.render_passes.size()); 5060 ASSERT_EQ(1u, frame.render_passes.size());
5051 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5061 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5052 ASSERT_EQ(DrawQuad::RENDER_PASS, 5062 ASSERT_EQ(DrawQuad::RENDER_PASS,
5053 frame.render_passes[0]->quad_list[0]->material); 5063 frame.render_passes[0]->quad_list.front()->material);
5054 const RenderPassDrawQuad* render_pass_quad = 5064 const RenderPassDrawQuad* render_pass_quad =
5055 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5065 RenderPassDrawQuad::MaterialCast(
5066 frame.render_passes[0]->quad_list.front());
5056 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5067 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5057 render_pass_quad->rect.ToString()); 5068 render_pass_quad->rect.ToString());
5058 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5069 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5059 render_pass_quad->mask_uv_rect.ToString()); 5070 render_pass_quad->mask_uv_rect.ToString());
5060 5071
5061 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5072 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5062 host_impl_->DidDrawAllLayers(frame); 5073 host_impl_->DidDrawAllLayers(frame);
5063 } 5074 }
5064 } 5075 }
5065 5076
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
5107 // Check that the mask fills the surface. 5118 // Check that the mask fills the surface.
5108 float device_scale_factor = 1.f; 5119 float device_scale_factor = 1.f;
5109 host_impl_->SetViewportSize(root_size); 5120 host_impl_->SetViewportSize(root_size);
5110 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5121 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5111 { 5122 {
5112 LayerTreeHostImpl::FrameData frame; 5123 LayerTreeHostImpl::FrameData frame;
5113 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5124 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5114 5125
5115 ASSERT_EQ(1u, frame.render_passes.size()); 5126 ASSERT_EQ(1u, frame.render_passes.size());
5116 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5127 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5117 ASSERT_EQ(DrawQuad::RENDER_PASS, 5128 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5118 frame.render_passes[0]->quad_list[1]->material); 5129 ++iter;
5130 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5119 const RenderPassDrawQuad* replica_quad = 5131 const RenderPassDrawQuad* replica_quad =
5120 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5132 RenderPassDrawQuad::MaterialCast(&*iter);
5121 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), 5133 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(),
5122 replica_quad->rect.ToString()); 5134 replica_quad->rect.ToString());
5123 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5135 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5124 replica_quad->mask_uv_rect.ToString()); 5136 replica_quad->mask_uv_rect.ToString());
5125 5137
5126 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5138 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5127 host_impl_->DidDrawAllLayers(frame); 5139 host_impl_->DidDrawAllLayers(frame);
5128 } 5140 }
5129 5141
5130 // Applying a DSF should change the render surface size, but won't affect 5142 // Applying a DSF should change the render surface size, but won't affect
5131 // which part of the mask is used. 5143 // which part of the mask is used.
5132 device_scale_factor = 2.f; 5144 device_scale_factor = 2.f;
5133 gfx::Size device_viewport = 5145 gfx::Size device_viewport =
5134 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); 5146 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor));
5135 host_impl_->SetViewportSize(device_viewport); 5147 host_impl_->SetViewportSize(device_viewport);
5136 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5148 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5137 host_impl_->active_tree()->set_needs_update_draw_properties(); 5149 host_impl_->active_tree()->set_needs_update_draw_properties();
5138 { 5150 {
5139 LayerTreeHostImpl::FrameData frame; 5151 LayerTreeHostImpl::FrameData frame;
5140 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5152 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5141 5153
5142 ASSERT_EQ(1u, frame.render_passes.size()); 5154 ASSERT_EQ(1u, frame.render_passes.size());
5143 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5155 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5144 ASSERT_EQ(DrawQuad::RENDER_PASS, 5156 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5145 frame.render_passes[0]->quad_list[1]->material); 5157 ++iter;
5158 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5146 const RenderPassDrawQuad* replica_quad = 5159 const RenderPassDrawQuad* replica_quad =
5147 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5160 RenderPassDrawQuad::MaterialCast(&*iter);
5148 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5161 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5149 replica_quad->rect.ToString()); 5162 replica_quad->rect.ToString());
5150 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5163 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5151 replica_quad->mask_uv_rect.ToString()); 5164 replica_quad->mask_uv_rect.ToString());
5152 5165
5153 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5166 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5154 host_impl_->DidDrawAllLayers(frame); 5167 host_impl_->DidDrawAllLayers(frame);
5155 } 5168 }
5156 5169
5157 // Applying an equivalent content scale on the content layer and the mask 5170 // Applying an equivalent content scale on the content layer and the mask
5158 // should still result in the same part of the mask being used. 5171 // should still result in the same part of the mask being used.
5159 gfx::Size layer_size_large = 5172 gfx::Size layer_size_large =
5160 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); 5173 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor));
5161 content_layer->SetContentBounds(layer_size_large); 5174 content_layer->SetContentBounds(layer_size_large);
5162 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5175 content_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5163 gfx::Size mask_size_large = 5176 gfx::Size mask_size_large =
5164 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); 5177 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor));
5165 mask_layer->SetContentBounds(mask_size_large); 5178 mask_layer->SetContentBounds(mask_size_large);
5166 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); 5179 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor);
5167 host_impl_->active_tree()->set_needs_update_draw_properties(); 5180 host_impl_->active_tree()->set_needs_update_draw_properties();
5168 { 5181 {
5169 LayerTreeHostImpl::FrameData frame; 5182 LayerTreeHostImpl::FrameData frame;
5170 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5183 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5171 5184
5172 ASSERT_EQ(1u, frame.render_passes.size()); 5185 ASSERT_EQ(1u, frame.render_passes.size());
5173 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5186 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5174 ASSERT_EQ(DrawQuad::RENDER_PASS, 5187 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5175 frame.render_passes[0]->quad_list[1]->material); 5188 ++iter;
5189 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5176 const RenderPassDrawQuad* replica_quad = 5190 const RenderPassDrawQuad* replica_quad =
5177 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5191 RenderPassDrawQuad::MaterialCast(&*iter);
5178 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5192 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5179 replica_quad->rect.ToString()); 5193 replica_quad->rect.ToString());
5180 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5194 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5181 replica_quad->mask_uv_rect.ToString()); 5195 replica_quad->mask_uv_rect.ToString());
5182 5196
5183 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5197 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5184 host_impl_->DidDrawAllLayers(frame); 5198 host_impl_->DidDrawAllLayers(frame);
5185 } 5199 }
5186 5200
5187 // Applying a different contents scale to the mask layer means it will have 5201 // Applying a different contents scale to the mask layer means it will have
5188 // a larger texture, but it should use the same tex coords to cover the 5202 // a larger texture, but it should use the same tex coords to cover the
5189 // layer it masks. 5203 // layer it masks.
5190 mask_layer->SetContentBounds(mask_size); 5204 mask_layer->SetContentBounds(mask_size);
5191 mask_layer->SetContentsScale(1.f, 1.f); 5205 mask_layer->SetContentsScale(1.f, 1.f);
5192 host_impl_->active_tree()->set_needs_update_draw_properties(); 5206 host_impl_->active_tree()->set_needs_update_draw_properties();
5193 { 5207 {
5194 LayerTreeHostImpl::FrameData frame; 5208 LayerTreeHostImpl::FrameData frame;
5195 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5209 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5196 5210
5197 ASSERT_EQ(1u, frame.render_passes.size()); 5211 ASSERT_EQ(1u, frame.render_passes.size());
5198 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5212 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5199 ASSERT_EQ(DrawQuad::RENDER_PASS, 5213 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5200 frame.render_passes[0]->quad_list[1]->material); 5214 ++iter;
5215 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5201 const RenderPassDrawQuad* replica_quad = 5216 const RenderPassDrawQuad* replica_quad =
5202 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5217 RenderPassDrawQuad::MaterialCast(&*iter);
5203 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), 5218 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
5204 replica_quad->rect.ToString()); 5219 replica_quad->rect.ToString());
5205 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), 5220 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
5206 replica_quad->mask_uv_rect.ToString()); 5221 replica_quad->mask_uv_rect.ToString());
5207 5222
5208 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5223 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5209 host_impl_->DidDrawAllLayers(frame); 5224 host_impl_->DidDrawAllLayers(frame);
5210 } 5225 }
5211 } 5226 }
5212 5227
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
5267 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5282 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5268 { 5283 {
5269 LayerTreeHostImpl::FrameData frame; 5284 LayerTreeHostImpl::FrameData frame;
5270 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5285 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5271 5286
5272 ASSERT_EQ(1u, frame.render_passes.size()); 5287 ASSERT_EQ(1u, frame.render_passes.size());
5273 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5288 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5274 5289
5275 // The surface is 100x50. 5290 // The surface is 100x50.
5276 ASSERT_EQ(DrawQuad::RENDER_PASS, 5291 ASSERT_EQ(DrawQuad::RENDER_PASS,
5277 frame.render_passes[0]->quad_list[0]->material); 5292 frame.render_passes[0]->quad_list.front()->material);
5278 const RenderPassDrawQuad* render_pass_quad = 5293 const RenderPassDrawQuad* render_pass_quad =
5279 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5294 RenderPassDrawQuad::MaterialCast(
5295 frame.render_passes[0]->quad_list.front());
5280 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), 5296 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(),
5281 render_pass_quad->rect.ToString()); 5297 render_pass_quad->rect.ToString());
5282 5298
5283 // The mask covers the owning layer only. 5299 // The mask covers the owning layer only.
5284 ASSERT_EQ(DrawQuad::RENDER_PASS, 5300 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5285 frame.render_passes[0]->quad_list[1]->material); 5301 ++iter;
5302 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5286 const RenderPassDrawQuad* replica_quad = 5303 const RenderPassDrawQuad* replica_quad =
5287 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5304 RenderPassDrawQuad::MaterialCast(&*iter);
5288 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), 5305 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(),
5289 replica_quad->rect.ToString()); 5306 replica_quad->rect.ToString());
5290 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), 5307 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(),
5291 replica_quad->mask_uv_rect.ToString()); 5308 replica_quad->mask_uv_rect.ToString());
5292 5309
5293 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5310 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5294 host_impl_->DidDrawAllLayers(frame); 5311 host_impl_->DidDrawAllLayers(frame);
5295 } 5312 }
5296 5313
5297 // Move the child to (-50, 0) instead. Now the mask should be moved to still 5314 // Move the child to (-50, 0) instead. Now the mask should be moved to still
5298 // cover the layer being replicated. 5315 // cover the layer being replicated.
5299 content_child_layer->SetPosition(gfx::Point(-50, 0)); 5316 content_child_layer->SetPosition(gfx::Point(-50, 0));
5300 { 5317 {
5301 LayerTreeHostImpl::FrameData frame; 5318 LayerTreeHostImpl::FrameData frame;
5302 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5319 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5303 5320
5304 ASSERT_EQ(1u, frame.render_passes.size()); 5321 ASSERT_EQ(1u, frame.render_passes.size());
5305 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); 5322 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size());
5306 5323
5307 // The surface is 100x50 with its origin at (-50, 0). 5324 // The surface is 100x50 with its origin at (-50, 0).
5308 ASSERT_EQ(DrawQuad::RENDER_PASS, 5325 ASSERT_EQ(DrawQuad::RENDER_PASS,
5309 frame.render_passes[0]->quad_list[0]->material); 5326 frame.render_passes[0]->quad_list.front()->material);
5310 const RenderPassDrawQuad* render_pass_quad = 5327 const RenderPassDrawQuad* render_pass_quad =
5311 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5328 RenderPassDrawQuad::MaterialCast(
5329 frame.render_passes[0]->quad_list.front());
5312 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), 5330 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(),
5313 render_pass_quad->rect.ToString()); 5331 render_pass_quad->rect.ToString());
5314 5332
5315 // The mask covers the owning layer only. 5333 // The mask covers the owning layer only.
5316 ASSERT_EQ(DrawQuad::RENDER_PASS, 5334 QuadList::ConstIterator iter = frame.render_passes[0]->quad_list.begin();
5317 frame.render_passes[0]->quad_list[1]->material); 5335 ++iter;
5336 ASSERT_EQ(DrawQuad::RENDER_PASS, iter->material);
5318 const RenderPassDrawQuad* replica_quad = 5337 const RenderPassDrawQuad* replica_quad =
5319 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); 5338 RenderPassDrawQuad::MaterialCast(&*iter);
5320 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), 5339 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(),
5321 replica_quad->rect.ToString()); 5340 replica_quad->rect.ToString());
5322 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), 5341 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(),
5323 replica_quad->mask_uv_rect.ToString()); 5342 replica_quad->mask_uv_rect.ToString());
5324 5343
5325 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5344 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5326 host_impl_->DidDrawAllLayers(frame); 5345 host_impl_->DidDrawAllLayers(frame);
5327 } 5346 }
5328 } 5347 }
5329 5348
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
5391 host_impl_->SetDeviceScaleFactor(device_scale_factor); 5410 host_impl_->SetDeviceScaleFactor(device_scale_factor);
5392 { 5411 {
5393 LayerTreeHostImpl::FrameData frame; 5412 LayerTreeHostImpl::FrameData frame;
5394 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5413 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5395 5414
5396 ASSERT_EQ(1u, frame.render_passes.size()); 5415 ASSERT_EQ(1u, frame.render_passes.size());
5397 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 5416 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
5398 5417
5399 // The surface is clipped to 10x20. 5418 // The surface is clipped to 10x20.
5400 ASSERT_EQ(DrawQuad::RENDER_PASS, 5419 ASSERT_EQ(DrawQuad::RENDER_PASS,
5401 frame.render_passes[0]->quad_list[0]->material); 5420 frame.render_passes[0]->quad_list.front()->material);
5402 const RenderPassDrawQuad* render_pass_quad = 5421 const RenderPassDrawQuad* render_pass_quad =
5403 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); 5422 RenderPassDrawQuad::MaterialCast(
5423 frame.render_passes[0]->quad_list.front());
5404 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), 5424 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(),
5405 render_pass_quad->rect.ToString()); 5425 render_pass_quad->rect.ToString());
5406 5426
5407 // The masked layer is 50x50, but the surface size is 10x20. So the texture 5427 // The masked layer is 50x50, but the surface size is 10x20. So the texture
5408 // coords in the mask are scaled by 10/50 and 20/50. 5428 // coords in the mask are scaled by 10/50 and 20/50.
5409 // The surface is clipped to (20,10) so the mask texture coords are offset 5429 // The surface is clipped to (20,10) so the mask texture coords are offset
5410 // by 20/50 and 10/50 5430 // by 20/50 and 10/50
5411 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), 5431 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f),
5412 1.f / 50.f).ToString(), 5432 1.f / 50.f).ToString(),
5413 render_pass_quad->mask_uv_rect.ToString()); 5433 render_pass_quad->mask_uv_rect.ToString());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
5468 host_impl_->ActivateSyncTree(); 5488 host_impl_->ActivateSyncTree();
5469 5489
5470 host_impl_->active_tree()->UpdateDrawProperties(); 5490 host_impl_->active_tree()->UpdateDrawProperties();
5471 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size()); 5491 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size());
5472 5492
5473 LayerTreeHostImpl::FrameData frame; 5493 LayerTreeHostImpl::FrameData frame;
5474 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5494 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5475 5495
5476 ASSERT_EQ(1u, frame.render_passes.size()); 5496 ASSERT_EQ(1u, frame.render_passes.size());
5477 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); 5497 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size());
5478 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; 5498 const DrawQuad* quad = frame.render_passes[0]->quad_list.front();
5479 5499
5480 float edge[24]; 5500 float edge[24];
5481 gfx::QuadF device_layer_quad; 5501 gfx::QuadF device_layer_quad;
5482 bool antialiased = 5502 bool antialiased =
5483 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( 5503 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing(
5484 quad->quadTransform(), quad, &device_layer_quad, edge); 5504 quad->quadTransform(), quad, &device_layer_quad, edge);
5485 EXPECT_FALSE(antialiased); 5505 EXPECT_FALSE(antialiased);
5486 5506
5487 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 5507 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
5488 host_impl_->DidDrawAllLayers(frame); 5508 host_impl_->DidDrawAllLayers(frame);
(...skipping 1490 matching lines...) Expand 10 before | Expand all | Expand 10 after
6979 // surface. 6999 // surface.
6980 EXPECT_EQ(0, num_lost_surfaces_); 7000 EXPECT_EQ(0, num_lost_surfaces_);
6981 host_impl_->DidLoseOutputSurface(); 7001 host_impl_->DidLoseOutputSurface();
6982 EXPECT_EQ(1, num_lost_surfaces_); 7002 EXPECT_EQ(1, num_lost_surfaces_);
6983 host_impl_->DidLoseOutputSurface(); 7003 host_impl_->DidLoseOutputSurface();
6984 EXPECT_LE(1, num_lost_surfaces_); 7004 EXPECT_LE(1, num_lost_surfaces_);
6985 } 7005 }
6986 7006
6987 } // namespace 7007 } // namespace
6988 } // namespace cc 7008 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698