| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 5119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5130 { | 5130 { |
| 5131 LayerTreeHostImpl::FrameData frame; | 5131 LayerTreeHostImpl::FrameData frame; |
| 5132 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5132 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5133 | 5133 |
| 5134 ASSERT_EQ(1u, frame.render_passes.size()); | 5134 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5135 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5135 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5136 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5136 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5137 frame.render_passes[0]->quad_list[1]->material); | 5137 frame.render_passes[0]->quad_list[1]->material); |
| 5138 const RenderPassDrawQuad* replica_quad = | 5138 const RenderPassDrawQuad* replica_quad = |
| 5139 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5139 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5140 EXPECT_TRUE(replica_quad->is_replica); | |
| 5141 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5140 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 5142 replica_quad->rect.ToString()); | 5141 replica_quad->rect.ToString()); |
| 5143 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5142 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5144 replica_quad->mask_uv_rect.ToString()); | 5143 replica_quad->mask_uv_rect.ToString()); |
| 5145 | 5144 |
| 5146 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5145 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5147 host_impl_->DidDrawAllLayers(frame); | 5146 host_impl_->DidDrawAllLayers(frame); |
| 5148 } | 5147 } |
| 5149 | 5148 |
| 5150 // Applying a DSF should change the render surface size, but won't affect | 5149 // Applying a DSF should change the render surface size, but won't affect |
| 5151 // which part of the mask is used. | 5150 // which part of the mask is used. |
| 5152 device_scale_factor = 2.f; | 5151 device_scale_factor = 2.f; |
| 5153 gfx::Size device_viewport = | 5152 gfx::Size device_viewport = |
| 5154 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5153 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5155 host_impl_->SetViewportSize(device_viewport); | 5154 host_impl_->SetViewportSize(device_viewport); |
| 5156 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5155 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5157 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5156 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5158 { | 5157 { |
| 5159 LayerTreeHostImpl::FrameData frame; | 5158 LayerTreeHostImpl::FrameData frame; |
| 5160 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5159 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5161 | 5160 |
| 5162 ASSERT_EQ(1u, frame.render_passes.size()); | 5161 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5163 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5162 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5164 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5163 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5165 frame.render_passes[0]->quad_list[1]->material); | 5164 frame.render_passes[0]->quad_list[1]->material); |
| 5166 const RenderPassDrawQuad* replica_quad = | 5165 const RenderPassDrawQuad* replica_quad = |
| 5167 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5166 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5168 EXPECT_TRUE(replica_quad->is_replica); | |
| 5169 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5167 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5170 replica_quad->rect.ToString()); | 5168 replica_quad->rect.ToString()); |
| 5171 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5169 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5172 replica_quad->mask_uv_rect.ToString()); | 5170 replica_quad->mask_uv_rect.ToString()); |
| 5173 | 5171 |
| 5174 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5172 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5175 host_impl_->DidDrawAllLayers(frame); | 5173 host_impl_->DidDrawAllLayers(frame); |
| 5176 } | 5174 } |
| 5177 | 5175 |
| 5178 // Applying an equivalent content scale on the content layer and the mask | 5176 // Applying an equivalent content scale on the content layer and the mask |
| (...skipping 10 matching lines...) Expand all Loading... |
| 5189 { | 5187 { |
| 5190 LayerTreeHostImpl::FrameData frame; | 5188 LayerTreeHostImpl::FrameData frame; |
| 5191 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5189 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5192 | 5190 |
| 5193 ASSERT_EQ(1u, frame.render_passes.size()); | 5191 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5194 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5192 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5195 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5193 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5196 frame.render_passes[0]->quad_list[1]->material); | 5194 frame.render_passes[0]->quad_list[1]->material); |
| 5197 const RenderPassDrawQuad* replica_quad = | 5195 const RenderPassDrawQuad* replica_quad = |
| 5198 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5196 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5199 EXPECT_TRUE(replica_quad->is_replica); | |
| 5200 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5197 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5201 replica_quad->rect.ToString()); | 5198 replica_quad->rect.ToString()); |
| 5202 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5199 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5203 replica_quad->mask_uv_rect.ToString()); | 5200 replica_quad->mask_uv_rect.ToString()); |
| 5204 | 5201 |
| 5205 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5202 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5206 host_impl_->DidDrawAllLayers(frame); | 5203 host_impl_->DidDrawAllLayers(frame); |
| 5207 } | 5204 } |
| 5208 | 5205 |
| 5209 // Applying a different contents scale to the mask layer means it will have | 5206 // Applying a different contents scale to the mask layer means it will have |
| 5210 // a larger texture, but it should use the same tex coords to cover the | 5207 // a larger texture, but it should use the same tex coords to cover the |
| 5211 // layer it masks. | 5208 // layer it masks. |
| 5212 mask_layer->SetContentBounds(mask_size); | 5209 mask_layer->SetContentBounds(mask_size); |
| 5213 mask_layer->SetContentsScale(1.f, 1.f); | 5210 mask_layer->SetContentsScale(1.f, 1.f); |
| 5214 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5211 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5215 { | 5212 { |
| 5216 LayerTreeHostImpl::FrameData frame; | 5213 LayerTreeHostImpl::FrameData frame; |
| 5217 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5214 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5218 | 5215 |
| 5219 ASSERT_EQ(1u, frame.render_passes.size()); | 5216 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5220 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5217 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5221 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5218 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5222 frame.render_passes[0]->quad_list[1]->material); | 5219 frame.render_passes[0]->quad_list[1]->material); |
| 5223 const RenderPassDrawQuad* replica_quad = | 5220 const RenderPassDrawQuad* replica_quad = |
| 5224 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5221 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5225 EXPECT_TRUE(replica_quad->is_replica); | |
| 5226 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5222 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5227 replica_quad->rect.ToString()); | 5223 replica_quad->rect.ToString()); |
| 5228 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5224 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5229 replica_quad->mask_uv_rect.ToString()); | 5225 replica_quad->mask_uv_rect.ToString()); |
| 5230 | 5226 |
| 5231 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5227 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5232 host_impl_->DidDrawAllLayers(frame); | 5228 host_impl_->DidDrawAllLayers(frame); |
| 5233 } | 5229 } |
| 5234 } | 5230 } |
| 5235 | 5231 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5293 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5289 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5294 | 5290 |
| 5295 ASSERT_EQ(1u, frame.render_passes.size()); | 5291 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5296 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5292 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5297 | 5293 |
| 5298 // The surface is 100x50. | 5294 // The surface is 100x50. |
| 5299 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5295 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5300 frame.render_passes[0]->quad_list[0]->material); | 5296 frame.render_passes[0]->quad_list[0]->material); |
| 5301 const RenderPassDrawQuad* render_pass_quad = | 5297 const RenderPassDrawQuad* render_pass_quad = |
| 5302 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5298 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 5303 EXPECT_FALSE(render_pass_quad->is_replica); | |
| 5304 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5299 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
| 5305 render_pass_quad->rect.ToString()); | 5300 render_pass_quad->rect.ToString()); |
| 5306 | 5301 |
| 5307 // The mask covers the owning layer only. | 5302 // The mask covers the owning layer only. |
| 5308 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5303 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5309 frame.render_passes[0]->quad_list[1]->material); | 5304 frame.render_passes[0]->quad_list[1]->material); |
| 5310 const RenderPassDrawQuad* replica_quad = | 5305 const RenderPassDrawQuad* replica_quad = |
| 5311 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5306 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5312 EXPECT_TRUE(replica_quad->is_replica); | |
| 5313 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5307 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
| 5314 replica_quad->rect.ToString()); | 5308 replica_quad->rect.ToString()); |
| 5315 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), | 5309 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), |
| 5316 replica_quad->mask_uv_rect.ToString()); | 5310 replica_quad->mask_uv_rect.ToString()); |
| 5317 | 5311 |
| 5318 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5312 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5319 host_impl_->DidDrawAllLayers(frame); | 5313 host_impl_->DidDrawAllLayers(frame); |
| 5320 } | 5314 } |
| 5321 | 5315 |
| 5322 // Move the child to (-50, 0) instead. Now the mask should be moved to still | 5316 // Move the child to (-50, 0) instead. Now the mask should be moved to still |
| 5323 // cover the layer being replicated. | 5317 // cover the layer being replicated. |
| 5324 content_child_layer->SetPosition(gfx::Point(-50, 0)); | 5318 content_child_layer->SetPosition(gfx::Point(-50, 0)); |
| 5325 { | 5319 { |
| 5326 LayerTreeHostImpl::FrameData frame; | 5320 LayerTreeHostImpl::FrameData frame; |
| 5327 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5321 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5328 | 5322 |
| 5329 ASSERT_EQ(1u, frame.render_passes.size()); | 5323 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5330 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5324 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5331 | 5325 |
| 5332 // The surface is 100x50 with its origin at (-50, 0). | 5326 // The surface is 100x50 with its origin at (-50, 0). |
| 5333 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5327 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5334 frame.render_passes[0]->quad_list[0]->material); | 5328 frame.render_passes[0]->quad_list[0]->material); |
| 5335 const RenderPassDrawQuad* render_pass_quad = | 5329 const RenderPassDrawQuad* render_pass_quad = |
| 5336 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5330 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 5337 EXPECT_FALSE(render_pass_quad->is_replica); | |
| 5338 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5331 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
| 5339 render_pass_quad->rect.ToString()); | 5332 render_pass_quad->rect.ToString()); |
| 5340 | 5333 |
| 5341 // The mask covers the owning layer only. | 5334 // The mask covers the owning layer only. |
| 5342 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5335 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5343 frame.render_passes[0]->quad_list[1]->material); | 5336 frame.render_passes[0]->quad_list[1]->material); |
| 5344 const RenderPassDrawQuad* replica_quad = | 5337 const RenderPassDrawQuad* replica_quad = |
| 5345 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5338 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5346 EXPECT_TRUE(replica_quad->is_replica); | |
| 5347 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5339 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
| 5348 replica_quad->rect.ToString()); | 5340 replica_quad->rect.ToString()); |
| 5349 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(), |
| 5350 replica_quad->mask_uv_rect.ToString()); | 5342 replica_quad->mask_uv_rect.ToString()); |
| 5351 | 5343 |
| 5352 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5344 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5353 host_impl_->DidDrawAllLayers(frame); | 5345 host_impl_->DidDrawAllLayers(frame); |
| 5354 } | 5346 } |
| 5355 } | 5347 } |
| 5356 | 5348 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5421 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5413 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5422 | 5414 |
| 5423 ASSERT_EQ(1u, frame.render_passes.size()); | 5415 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5424 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5416 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5425 | 5417 |
| 5426 // The surface is clipped to 10x20. | 5418 // The surface is clipped to 10x20. |
| 5427 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5419 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5428 frame.render_passes[0]->quad_list[0]->material); | 5420 frame.render_passes[0]->quad_list[0]->material); |
| 5429 const RenderPassDrawQuad* render_pass_quad = | 5421 const RenderPassDrawQuad* render_pass_quad = |
| 5430 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5422 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 5431 EXPECT_FALSE(render_pass_quad->is_replica); | |
| 5432 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), | 5423 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), |
| 5433 render_pass_quad->rect.ToString()); | 5424 render_pass_quad->rect.ToString()); |
| 5434 | 5425 |
| 5435 // The masked layer is 50x50, but the surface size is 10x20. So the texture | 5426 // The masked layer is 50x50, but the surface size is 10x20. So the texture |
| 5436 // coords in the mask are scaled by 10/50 and 20/50. | 5427 // coords in the mask are scaled by 10/50 and 20/50. |
| 5437 // The surface is clipped to (20,10) so the mask texture coords are offset | 5428 // The surface is clipped to (20,10) so the mask texture coords are offset |
| 5438 // by 20/50 and 10/50 | 5429 // by 20/50 and 10/50 |
| 5439 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), | 5430 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), |
| 5440 1.f / 50.f).ToString(), | 5431 1.f / 50.f).ToString(), |
| 5441 render_pass_quad->mask_uv_rect.ToString()); | 5432 render_pass_quad->mask_uv_rect.ToString()); |
| (...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6845 host_impl_->DidLoseOutputSurface(); | 6836 host_impl_->DidLoseOutputSurface(); |
| 6846 EXPECT_TRUE(host_impl_->IsContextLost()); | 6837 EXPECT_TRUE(host_impl_->IsContextLost()); |
| 6847 EXPECT_EQ(1, num_lost_surfaces_); | 6838 EXPECT_EQ(1, num_lost_surfaces_); |
| 6848 host_impl_->DidLoseOutputSurface(); | 6839 host_impl_->DidLoseOutputSurface(); |
| 6849 EXPECT_TRUE(host_impl_->IsContextLost()); | 6840 EXPECT_TRUE(host_impl_->IsContextLost()); |
| 6850 EXPECT_EQ(1, num_lost_surfaces_); | 6841 EXPECT_EQ(1, num_lost_surfaces_); |
| 6851 } | 6842 } |
| 6852 | 6843 |
| 6853 } // namespace | 6844 } // namespace |
| 6854 } // namespace cc | 6845 } // namespace cc |
| OLD | NEW |