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 5115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5126 { | 5126 { |
5127 LayerTreeHostImpl::FrameData frame; | 5127 LayerTreeHostImpl::FrameData frame; |
5128 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5128 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5129 | 5129 |
5130 ASSERT_EQ(1u, frame.render_passes.size()); | 5130 ASSERT_EQ(1u, frame.render_passes.size()); |
5131 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5131 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5132 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5132 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5133 frame.render_passes[0]->quad_list[1]->material); | 5133 frame.render_passes[0]->quad_list[1]->material); |
5134 const RenderPassDrawQuad* replica_quad = | 5134 const RenderPassDrawQuad* replica_quad = |
5135 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5135 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5136 EXPECT_TRUE(replica_quad->is_replica); | |
5137 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5136 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
5138 replica_quad->rect.ToString()); | 5137 replica_quad->rect.ToString()); |
5139 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5138 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
5140 replica_quad->mask_uv_rect.ToString()); | 5139 replica_quad->mask_uv_rect.ToString()); |
5141 | 5140 |
5142 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5141 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5143 host_impl_->DidDrawAllLayers(frame); | 5142 host_impl_->DidDrawAllLayers(frame); |
5144 } | 5143 } |
5145 | 5144 |
5146 // Applying a DSF should change the render surface size, but won't affect | 5145 // Applying a DSF should change the render surface size, but won't affect |
5147 // which part of the mask is used. | 5146 // which part of the mask is used. |
5148 device_scale_factor = 2.f; | 5147 device_scale_factor = 2.f; |
5149 gfx::Size device_viewport = | 5148 gfx::Size device_viewport = |
5150 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5149 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
5151 host_impl_->SetViewportSize(device_viewport); | 5150 host_impl_->SetViewportSize(device_viewport); |
5152 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5151 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
5153 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5152 host_impl_->active_tree()->set_needs_update_draw_properties(); |
5154 { | 5153 { |
5155 LayerTreeHostImpl::FrameData frame; | 5154 LayerTreeHostImpl::FrameData frame; |
5156 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5155 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5157 | 5156 |
5158 ASSERT_EQ(1u, frame.render_passes.size()); | 5157 ASSERT_EQ(1u, frame.render_passes.size()); |
5159 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5158 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5160 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5159 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5161 frame.render_passes[0]->quad_list[1]->material); | 5160 frame.render_passes[0]->quad_list[1]->material); |
5162 const RenderPassDrawQuad* replica_quad = | 5161 const RenderPassDrawQuad* replica_quad = |
5163 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5162 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5164 EXPECT_TRUE(replica_quad->is_replica); | |
5165 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5163 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5166 replica_quad->rect.ToString()); | 5164 replica_quad->rect.ToString()); |
5167 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5165 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
5168 replica_quad->mask_uv_rect.ToString()); | 5166 replica_quad->mask_uv_rect.ToString()); |
5169 | 5167 |
5170 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5168 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5171 host_impl_->DidDrawAllLayers(frame); | 5169 host_impl_->DidDrawAllLayers(frame); |
5172 } | 5170 } |
5173 | 5171 |
5174 // Applying an equivalent content scale on the content layer and the mask | 5172 // Applying an equivalent content scale on the content layer and the mask |
(...skipping 10 matching lines...) Expand all Loading... |
5185 { | 5183 { |
5186 LayerTreeHostImpl::FrameData frame; | 5184 LayerTreeHostImpl::FrameData frame; |
5187 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5185 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5188 | 5186 |
5189 ASSERT_EQ(1u, frame.render_passes.size()); | 5187 ASSERT_EQ(1u, frame.render_passes.size()); |
5190 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5188 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5191 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5189 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5192 frame.render_passes[0]->quad_list[1]->material); | 5190 frame.render_passes[0]->quad_list[1]->material); |
5193 const RenderPassDrawQuad* replica_quad = | 5191 const RenderPassDrawQuad* replica_quad = |
5194 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5192 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5195 EXPECT_TRUE(replica_quad->is_replica); | |
5196 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5193 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5197 replica_quad->rect.ToString()); | 5194 replica_quad->rect.ToString()); |
5198 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5195 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
5199 replica_quad->mask_uv_rect.ToString()); | 5196 replica_quad->mask_uv_rect.ToString()); |
5200 | 5197 |
5201 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5198 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5202 host_impl_->DidDrawAllLayers(frame); | 5199 host_impl_->DidDrawAllLayers(frame); |
5203 } | 5200 } |
5204 | 5201 |
5205 // Applying a different contents scale to the mask layer means it will have | 5202 // Applying a different contents scale to the mask layer means it will have |
5206 // a larger texture, but it should use the same tex coords to cover the | 5203 // a larger texture, but it should use the same tex coords to cover the |
5207 // layer it masks. | 5204 // layer it masks. |
5208 mask_layer->SetContentBounds(mask_size); | 5205 mask_layer->SetContentBounds(mask_size); |
5209 mask_layer->SetContentsScale(1.f, 1.f); | 5206 mask_layer->SetContentsScale(1.f, 1.f); |
5210 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5207 host_impl_->active_tree()->set_needs_update_draw_properties(); |
5211 { | 5208 { |
5212 LayerTreeHostImpl::FrameData frame; | 5209 LayerTreeHostImpl::FrameData frame; |
5213 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5210 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5214 | 5211 |
5215 ASSERT_EQ(1u, frame.render_passes.size()); | 5212 ASSERT_EQ(1u, frame.render_passes.size()); |
5216 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5213 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5217 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5214 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5218 frame.render_passes[0]->quad_list[1]->material); | 5215 frame.render_passes[0]->quad_list[1]->material); |
5219 const RenderPassDrawQuad* replica_quad = | 5216 const RenderPassDrawQuad* replica_quad = |
5220 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5217 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5221 EXPECT_TRUE(replica_quad->is_replica); | |
5222 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5218 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5223 replica_quad->rect.ToString()); | 5219 replica_quad->rect.ToString()); |
5224 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(), |
5225 replica_quad->mask_uv_rect.ToString()); | 5221 replica_quad->mask_uv_rect.ToString()); |
5226 | 5222 |
5227 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5223 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5228 host_impl_->DidDrawAllLayers(frame); | 5224 host_impl_->DidDrawAllLayers(frame); |
5229 } | 5225 } |
5230 } | 5226 } |
5231 | 5227 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5289 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5285 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5290 | 5286 |
5291 ASSERT_EQ(1u, frame.render_passes.size()); | 5287 ASSERT_EQ(1u, frame.render_passes.size()); |
5292 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5288 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5293 | 5289 |
5294 // The surface is 100x50. | 5290 // The surface is 100x50. |
5295 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5291 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5296 frame.render_passes[0]->quad_list[0]->material); | 5292 frame.render_passes[0]->quad_list[0]->material); |
5297 const RenderPassDrawQuad* render_pass_quad = | 5293 const RenderPassDrawQuad* render_pass_quad = |
5298 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5294 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5299 EXPECT_FALSE(render_pass_quad->is_replica); | |
5300 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5295 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
5301 render_pass_quad->rect.ToString()); | 5296 render_pass_quad->rect.ToString()); |
5302 | 5297 |
5303 // The mask covers the owning layer only. | 5298 // The mask covers the owning layer only. |
5304 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5299 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5305 frame.render_passes[0]->quad_list[1]->material); | 5300 frame.render_passes[0]->quad_list[1]->material); |
5306 const RenderPassDrawQuad* replica_quad = | 5301 const RenderPassDrawQuad* replica_quad = |
5307 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5302 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5308 EXPECT_TRUE(replica_quad->is_replica); | |
5309 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5303 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
5310 replica_quad->rect.ToString()); | 5304 replica_quad->rect.ToString()); |
5311 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), | 5305 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), |
5312 replica_quad->mask_uv_rect.ToString()); | 5306 replica_quad->mask_uv_rect.ToString()); |
5313 | 5307 |
5314 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5308 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5315 host_impl_->DidDrawAllLayers(frame); | 5309 host_impl_->DidDrawAllLayers(frame); |
5316 } | 5310 } |
5317 | 5311 |
5318 // Move the child to (-50, 0) instead. Now the mask should be moved to still | 5312 // Move the child to (-50, 0) instead. Now the mask should be moved to still |
5319 // cover the layer being replicated. | 5313 // cover the layer being replicated. |
5320 content_child_layer->SetPosition(gfx::Point(-50, 0)); | 5314 content_child_layer->SetPosition(gfx::Point(-50, 0)); |
5321 { | 5315 { |
5322 LayerTreeHostImpl::FrameData frame; | 5316 LayerTreeHostImpl::FrameData frame; |
5323 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5317 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5324 | 5318 |
5325 ASSERT_EQ(1u, frame.render_passes.size()); | 5319 ASSERT_EQ(1u, frame.render_passes.size()); |
5326 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5320 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5327 | 5321 |
5328 // The surface is 100x50 with its origin at (-50, 0). | 5322 // The surface is 100x50 with its origin at (-50, 0). |
5329 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5323 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5330 frame.render_passes[0]->quad_list[0]->material); | 5324 frame.render_passes[0]->quad_list[0]->material); |
5331 const RenderPassDrawQuad* render_pass_quad = | 5325 const RenderPassDrawQuad* render_pass_quad = |
5332 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5326 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5333 EXPECT_FALSE(render_pass_quad->is_replica); | |
5334 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5327 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
5335 render_pass_quad->rect.ToString()); | 5328 render_pass_quad->rect.ToString()); |
5336 | 5329 |
5337 // The mask covers the owning layer only. | 5330 // The mask covers the owning layer only. |
5338 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5331 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5339 frame.render_passes[0]->quad_list[1]->material); | 5332 frame.render_passes[0]->quad_list[1]->material); |
5340 const RenderPassDrawQuad* replica_quad = | 5333 const RenderPassDrawQuad* replica_quad = |
5341 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5334 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5342 EXPECT_TRUE(replica_quad->is_replica); | |
5343 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5335 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
5344 replica_quad->rect.ToString()); | 5336 replica_quad->rect.ToString()); |
5345 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), | 5337 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), |
5346 replica_quad->mask_uv_rect.ToString()); | 5338 replica_quad->mask_uv_rect.ToString()); |
5347 | 5339 |
5348 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5340 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5349 host_impl_->DidDrawAllLayers(frame); | 5341 host_impl_->DidDrawAllLayers(frame); |
5350 } | 5342 } |
5351 } | 5343 } |
5352 | 5344 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5417 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5409 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
5418 | 5410 |
5419 ASSERT_EQ(1u, frame.render_passes.size()); | 5411 ASSERT_EQ(1u, frame.render_passes.size()); |
5420 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5412 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
5421 | 5413 |
5422 // The surface is clipped to 10x20. | 5414 // The surface is clipped to 10x20. |
5423 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5415 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5424 frame.render_passes[0]->quad_list[0]->material); | 5416 frame.render_passes[0]->quad_list[0]->material); |
5425 const RenderPassDrawQuad* render_pass_quad = | 5417 const RenderPassDrawQuad* render_pass_quad = |
5426 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5418 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5427 EXPECT_FALSE(render_pass_quad->is_replica); | |
5428 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), | 5419 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), |
5429 render_pass_quad->rect.ToString()); | 5420 render_pass_quad->rect.ToString()); |
5430 | 5421 |
5431 // The masked layer is 50x50, but the surface size is 10x20. So the texture | 5422 // The masked layer is 50x50, but the surface size is 10x20. So the texture |
5432 // coords in the mask are scaled by 10/50 and 20/50. | 5423 // coords in the mask are scaled by 10/50 and 20/50. |
5433 // The surface is clipped to (20,10) so the mask texture coords are offset | 5424 // The surface is clipped to (20,10) so the mask texture coords are offset |
5434 // by 20/50 and 10/50 | 5425 // by 20/50 and 10/50 |
5435 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), | 5426 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), |
5436 1.f / 50.f).ToString(), | 5427 1.f / 50.f).ToString(), |
5437 render_pass_quad->mask_uv_rect.ToString()); | 5428 render_pass_quad->mask_uv_rect.ToString()); |
(...skipping 1372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6810 EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count()); | 6801 EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count()); |
6811 EXPECT_EQ(0u, raw_replica_mask_layer->did_become_active_call_count()); | 6802 EXPECT_EQ(0u, raw_replica_mask_layer->did_become_active_call_count()); |
6812 pending_tree->DidBecomeActive(); | 6803 pending_tree->DidBecomeActive(); |
6813 EXPECT_EQ(3u, raw_pending_layer->did_become_active_call_count()); | 6804 EXPECT_EQ(3u, raw_pending_layer->did_become_active_call_count()); |
6814 EXPECT_EQ(2u, raw_mask_layer->did_become_active_call_count()); | 6805 EXPECT_EQ(2u, raw_mask_layer->did_become_active_call_count()); |
6815 EXPECT_EQ(1u, raw_replica_mask_layer->did_become_active_call_count()); | 6806 EXPECT_EQ(1u, raw_replica_mask_layer->did_become_active_call_count()); |
6816 } | 6807 } |
6817 | 6808 |
6818 } // namespace | 6809 } // namespace |
6819 } // namespace cc | 6810 } // namespace cc |
OLD | NEW |