Chromium Code Reviews| 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 5355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5366 ASSERT_EQ(1u, frame.render_passes.size()); | 5366 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5367 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5367 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5368 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5368 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5369 frame.render_passes[0]->quad_list.front()->material); | 5369 frame.render_passes[0]->quad_list.front()->material); |
| 5370 const RenderPassDrawQuad* render_pass_quad = | 5370 const RenderPassDrawQuad* render_pass_quad = |
| 5371 RenderPassDrawQuad::MaterialCast( | 5371 RenderPassDrawQuad::MaterialCast( |
| 5372 frame.render_passes[0]->quad_list.front()); | 5372 frame.render_passes[0]->quad_list.front()); |
| 5373 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5373 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5374 render_pass_quad->rect.ToString()); | 5374 render_pass_quad->rect.ToString()); |
| 5375 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5375 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5376 render_pass_quad->mask_uv_rect.ToString()); | 5376 render_pass_quad->mask_uv_rect().ToString()); |
| 5377 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5378 render_pass_quad->mask_uv_scale.ToString()); | |
| 5379 EXPECT_EQ(scaling_layer_size.ToString(), | |
| 5380 render_pass_quad->mask_texture_size.ToString()); | |
| 5377 | 5381 |
| 5378 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5382 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5379 host_impl_->DidDrawAllLayers(frame); | 5383 host_impl_->DidDrawAllLayers(frame); |
| 5380 } | 5384 } |
| 5381 | 5385 |
| 5382 | 5386 |
| 5383 // Applying a DSF should change the render surface size, but won't affect | 5387 // Applying a DSF should change the render surface size, but won't affect |
| 5384 // which part of the mask is used. | 5388 // which part of the mask is used. |
| 5385 device_scale_factor = 2.f; | 5389 device_scale_factor = 2.f; |
| 5386 gfx::Size device_viewport = | 5390 gfx::Size device_viewport = |
| 5387 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5391 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5388 host_impl_->SetViewportSize(device_viewport); | 5392 host_impl_->SetViewportSize(device_viewport); |
| 5389 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5393 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5390 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5394 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5391 { | 5395 { |
| 5392 LayerTreeHostImpl::FrameData frame; | 5396 LayerTreeHostImpl::FrameData frame; |
| 5393 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5397 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5394 | 5398 |
| 5395 ASSERT_EQ(1u, frame.render_passes.size()); | 5399 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5396 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5400 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5397 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5401 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5398 frame.render_passes[0]->quad_list.front()->material); | 5402 frame.render_passes[0]->quad_list.front()->material); |
| 5399 const RenderPassDrawQuad* render_pass_quad = | 5403 const RenderPassDrawQuad* render_pass_quad = |
| 5400 RenderPassDrawQuad::MaterialCast( | 5404 RenderPassDrawQuad::MaterialCast( |
| 5401 frame.render_passes[0]->quad_list.front()); | 5405 frame.render_passes[0]->quad_list.front()); |
| 5402 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 5406 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 5403 render_pass_quad->rect.ToString()); | 5407 render_pass_quad->rect.ToString()); |
| 5404 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5408 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5405 render_pass_quad->mask_uv_rect.ToString()); | 5409 render_pass_quad->mask_uv_rect().ToString()); |
| 5410 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5411 render_pass_quad->mask_uv_scale.ToString()); | |
| 5412 EXPECT_EQ(scaling_layer_size.ToString(), | |
| 5413 render_pass_quad->mask_texture_size.ToString()); | |
| 5406 | 5414 |
| 5407 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5415 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5408 host_impl_->DidDrawAllLayers(frame); | 5416 host_impl_->DidDrawAllLayers(frame); |
| 5409 } | 5417 } |
| 5410 | 5418 |
| 5411 | 5419 |
| 5412 // Applying an equivalent content scale on the content layer and the mask | 5420 // Applying an equivalent content scale on the content layer and the mask |
| 5413 // should still result in the same part of the mask being used. | 5421 // should still result in the same part of the mask being used. |
| 5414 gfx::Size content_bounds = | 5422 gfx::Size content_bounds = |
| 5415 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, | 5423 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 5426 ASSERT_EQ(1u, frame.render_passes.size()); | 5434 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5427 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5435 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5428 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5436 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5429 frame.render_passes[0]->quad_list.front()->material); | 5437 frame.render_passes[0]->quad_list.front()->material); |
| 5430 const RenderPassDrawQuad* render_pass_quad = | 5438 const RenderPassDrawQuad* render_pass_quad = |
| 5431 RenderPassDrawQuad::MaterialCast( | 5439 RenderPassDrawQuad::MaterialCast( |
| 5432 frame.render_passes[0]->quad_list.front()); | 5440 frame.render_passes[0]->quad_list.front()); |
| 5433 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 5441 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 5434 render_pass_quad->rect.ToString()); | 5442 render_pass_quad->rect.ToString()); |
| 5435 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5443 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5436 render_pass_quad->mask_uv_rect.ToString()); | 5444 render_pass_quad->mask_uv_rect().ToString()); |
| 5445 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5446 render_pass_quad->mask_uv_scale.ToString()); | |
| 5447 EXPECT_EQ(content_bounds.ToString(), | |
| 5448 render_pass_quad->mask_texture_size.ToString()); | |
| 5437 | 5449 |
| 5438 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5450 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5439 host_impl_->DidDrawAllLayers(frame); | 5451 host_impl_->DidDrawAllLayers(frame); |
| 5440 } | 5452 } |
| 5441 } | 5453 } |
| 5442 | 5454 |
| 5443 TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) { | 5455 TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) { |
| 5444 // The mask layer has bounds 100x100 but is attached to a layer with bounds | 5456 // The mask layer has bounds 100x100 but is attached to a layer with bounds |
| 5445 // 50x50. | 5457 // 50x50. |
| 5446 | 5458 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5487 ASSERT_EQ(1u, frame.render_passes.size()); | 5499 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5488 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5500 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5489 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5501 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5490 frame.render_passes[0]->quad_list.front()->material); | 5502 frame.render_passes[0]->quad_list.front()->material); |
| 5491 const RenderPassDrawQuad* render_pass_quad = | 5503 const RenderPassDrawQuad* render_pass_quad = |
| 5492 RenderPassDrawQuad::MaterialCast( | 5504 RenderPassDrawQuad::MaterialCast( |
| 5493 frame.render_passes[0]->quad_list.front()); | 5505 frame.render_passes[0]->quad_list.front()); |
| 5494 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5506 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 5495 render_pass_quad->rect.ToString()); | 5507 render_pass_quad->rect.ToString()); |
| 5496 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5508 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5497 render_pass_quad->mask_uv_rect.ToString()); | 5509 render_pass_quad->mask_uv_rect().ToString()); |
| 5510 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5511 render_pass_quad->mask_uv_scale.ToString()); | |
| 5512 EXPECT_EQ(mask_size.ToString(), | |
| 5513 render_pass_quad->mask_texture_size.ToString()); | |
| 5498 | 5514 |
| 5499 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5515 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5500 host_impl_->DidDrawAllLayers(frame); | 5516 host_impl_->DidDrawAllLayers(frame); |
| 5501 } | 5517 } |
| 5502 | 5518 |
| 5503 // Applying a DSF should change the render surface size, but won't affect | 5519 // Applying a DSF should change the render surface size, but won't affect |
| 5504 // which part of the mask is used. | 5520 // which part of the mask is used. |
| 5505 device_scale_factor = 2.f; | 5521 device_scale_factor = 2.f; |
| 5506 gfx::Size device_viewport = | 5522 gfx::Size device_viewport = |
| 5507 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5523 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5508 host_impl_->SetViewportSize(device_viewport); | 5524 host_impl_->SetViewportSize(device_viewport); |
| 5509 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5525 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5510 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5526 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5511 { | 5527 { |
| 5512 LayerTreeHostImpl::FrameData frame; | 5528 LayerTreeHostImpl::FrameData frame; |
| 5513 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5529 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5514 | 5530 |
| 5515 ASSERT_EQ(1u, frame.render_passes.size()); | 5531 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5516 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5532 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5517 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5533 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5518 frame.render_passes[0]->quad_list.front()->material); | 5534 frame.render_passes[0]->quad_list.front()->material); |
| 5519 const RenderPassDrawQuad* render_pass_quad = | 5535 const RenderPassDrawQuad* render_pass_quad = |
| 5520 RenderPassDrawQuad::MaterialCast( | 5536 RenderPassDrawQuad::MaterialCast( |
| 5521 frame.render_passes[0]->quad_list.front()); | 5537 frame.render_passes[0]->quad_list.front()); |
| 5522 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5538 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5523 render_pass_quad->rect.ToString()); | 5539 render_pass_quad->rect.ToString()); |
| 5524 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5540 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5525 render_pass_quad->mask_uv_rect.ToString()); | 5541 render_pass_quad->mask_uv_rect().ToString()); |
| 5542 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5543 render_pass_quad->mask_uv_scale.ToString()); | |
| 5544 EXPECT_EQ(mask_size.ToString(), | |
| 5545 render_pass_quad->mask_texture_size.ToString()); | |
| 5526 | 5546 |
| 5527 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5547 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5528 host_impl_->DidDrawAllLayers(frame); | 5548 host_impl_->DidDrawAllLayers(frame); |
| 5529 } | 5549 } |
| 5530 | 5550 |
| 5531 // Applying an equivalent content scale on the content layer and the mask | 5551 // Applying an equivalent content scale on the content layer and the mask |
| 5532 // should still result in the same part of the mask being used. | 5552 // should still result in the same part of the mask being used. |
| 5533 gfx::Size layer_size_large = | 5553 gfx::Size layer_size_large = |
| 5534 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5554 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 5535 content_layer->SetContentBounds(layer_size_large); | 5555 content_layer->SetContentBounds(layer_size_large); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 5546 ASSERT_EQ(1u, frame.render_passes.size()); | 5566 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5547 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5567 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5548 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5568 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5549 frame.render_passes[0]->quad_list.front()->material); | 5569 frame.render_passes[0]->quad_list.front()->material); |
| 5550 const RenderPassDrawQuad* render_pass_quad = | 5570 const RenderPassDrawQuad* render_pass_quad = |
| 5551 RenderPassDrawQuad::MaterialCast( | 5571 RenderPassDrawQuad::MaterialCast( |
| 5552 frame.render_passes[0]->quad_list.front()); | 5572 frame.render_passes[0]->quad_list.front()); |
| 5553 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5573 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5554 render_pass_quad->rect.ToString()); | 5574 render_pass_quad->rect.ToString()); |
| 5555 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5575 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5556 render_pass_quad->mask_uv_rect.ToString()); | 5576 render_pass_quad->mask_uv_rect().ToString()); |
| 5577 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5578 render_pass_quad->mask_uv_scale.ToString()); | |
| 5579 EXPECT_EQ(mask_size_large.ToString(), | |
| 5580 render_pass_quad->mask_texture_size.ToString()); | |
| 5557 | 5581 |
| 5558 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5582 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5559 host_impl_->DidDrawAllLayers(frame); | 5583 host_impl_->DidDrawAllLayers(frame); |
| 5560 } | 5584 } |
| 5561 | 5585 |
| 5562 // Applying a different contents scale to the mask layer means it will have | 5586 // Applying a different contents scale to the mask layer means it will have |
| 5563 // a larger texture, but it should use the same tex coords to cover the | 5587 // a larger texture, but it should use the same tex coords to cover the |
| 5564 // layer it masks. | 5588 // layer it masks. |
| 5565 mask_layer->SetContentBounds(mask_size); | 5589 mask_layer->SetContentBounds(mask_size); |
| 5566 mask_layer->SetContentsScale(1.f, 1.f); | 5590 mask_layer->SetContentsScale(1.f, 1.f); |
| 5567 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5591 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5568 { | 5592 { |
| 5569 LayerTreeHostImpl::FrameData frame; | 5593 LayerTreeHostImpl::FrameData frame; |
| 5570 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5594 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5571 | 5595 |
| 5572 ASSERT_EQ(1u, frame.render_passes.size()); | 5596 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5573 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5597 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5574 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5598 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5575 frame.render_passes[0]->quad_list.front()->material); | 5599 frame.render_passes[0]->quad_list.front()->material); |
| 5576 const RenderPassDrawQuad* render_pass_quad = | 5600 const RenderPassDrawQuad* render_pass_quad = |
| 5577 RenderPassDrawQuad::MaterialCast( | 5601 RenderPassDrawQuad::MaterialCast( |
| 5578 frame.render_passes[0]->quad_list.front()); | 5602 frame.render_passes[0]->quad_list.front()); |
| 5579 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5603 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5580 render_pass_quad->rect.ToString()); | 5604 render_pass_quad->rect.ToString()); |
| 5581 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5605 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5582 render_pass_quad->mask_uv_rect.ToString()); | 5606 render_pass_quad->mask_uv_rect().ToString()); |
| 5607 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5608 render_pass_quad->mask_uv_scale.ToString()); | |
| 5609 EXPECT_EQ(mask_size.ToString(), | |
| 5610 render_pass_quad->mask_texture_size.ToString()); | |
| 5583 | 5611 |
| 5584 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5612 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5585 host_impl_->DidDrawAllLayers(frame); | 5613 host_impl_->DidDrawAllLayers(frame); |
| 5586 } | 5614 } |
| 5587 } | 5615 } |
| 5588 | 5616 |
| 5589 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) { | 5617 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) { |
| 5590 // The replica's mask layer has bounds 100x100 but the replica is of a | 5618 // The replica's mask layer has bounds 100x100 but the replica is of a |
| 5591 // layer with bounds 50x50. | 5619 // layer with bounds 50x50. |
| 5592 | 5620 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5637 | 5665 |
| 5638 ASSERT_EQ(1u, frame.render_passes.size()); | 5666 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5639 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5667 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5640 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5668 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5641 frame.render_passes[0]->quad_list.ElementAt(1)->material); | 5669 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5642 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( | 5670 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5643 frame.render_passes[0]->quad_list.ElementAt(1)); | 5671 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5644 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5672 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 5645 replica_quad->rect.ToString()); | 5673 replica_quad->rect.ToString()); |
| 5646 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5674 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5647 replica_quad->mask_uv_rect.ToString()); | 5675 replica_quad->mask_uv_rect().ToString()); |
| 5676 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5677 replica_quad->mask_uv_scale.ToString()); | |
| 5678 EXPECT_EQ(mask_size.ToString(), replica_quad->mask_texture_size.ToString()); | |
| 5648 | 5679 |
| 5649 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5680 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5650 host_impl_->DidDrawAllLayers(frame); | 5681 host_impl_->DidDrawAllLayers(frame); |
| 5651 } | 5682 } |
| 5652 | 5683 |
| 5653 // Applying a DSF should change the render surface size, but won't affect | 5684 // Applying a DSF should change the render surface size, but won't affect |
| 5654 // which part of the mask is used. | 5685 // which part of the mask is used. |
| 5655 device_scale_factor = 2.f; | 5686 device_scale_factor = 2.f; |
| 5656 gfx::Size device_viewport = | 5687 gfx::Size device_viewport = |
| 5657 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5688 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5658 host_impl_->SetViewportSize(device_viewport); | 5689 host_impl_->SetViewportSize(device_viewport); |
| 5659 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5690 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5660 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5691 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5661 { | 5692 { |
| 5662 LayerTreeHostImpl::FrameData frame; | 5693 LayerTreeHostImpl::FrameData frame; |
| 5663 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5694 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5664 | 5695 |
| 5665 ASSERT_EQ(1u, frame.render_passes.size()); | 5696 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5666 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5697 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5667 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5698 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5668 frame.render_passes[0]->quad_list.ElementAt(1)->material); | 5699 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5669 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( | 5700 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5670 frame.render_passes[0]->quad_list.ElementAt(1)); | 5701 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5671 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5702 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5672 replica_quad->rect.ToString()); | 5703 replica_quad->rect.ToString()); |
| 5673 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5704 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5674 replica_quad->mask_uv_rect.ToString()); | 5705 replica_quad->mask_uv_rect().ToString()); |
| 5706 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5707 replica_quad->mask_uv_scale.ToString()); | |
| 5708 EXPECT_EQ(mask_size.ToString(), replica_quad->mask_texture_size.ToString()); | |
| 5675 | 5709 |
| 5676 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5710 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5677 host_impl_->DidDrawAllLayers(frame); | 5711 host_impl_->DidDrawAllLayers(frame); |
| 5678 } | 5712 } |
| 5679 | 5713 |
| 5680 // Applying an equivalent content scale on the content layer and the mask | 5714 // Applying an equivalent content scale on the content layer and the mask |
| 5681 // should still result in the same part of the mask being used. | 5715 // should still result in the same part of the mask being used. |
| 5682 gfx::Size layer_size_large = | 5716 gfx::Size layer_size_large = |
| 5683 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5717 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 5684 content_layer->SetContentBounds(layer_size_large); | 5718 content_layer->SetContentBounds(layer_size_large); |
| 5685 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5719 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5686 gfx::Size mask_size_large = | 5720 gfx::Size mask_size_large = |
| 5687 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 5721 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
| 5688 mask_layer->SetContentBounds(mask_size_large); | 5722 mask_layer->SetContentBounds(mask_size_large); |
| 5689 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5723 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5690 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5724 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5691 { | 5725 { |
| 5692 LayerTreeHostImpl::FrameData frame; | 5726 LayerTreeHostImpl::FrameData frame; |
| 5693 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5727 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5694 | 5728 |
| 5695 ASSERT_EQ(1u, frame.render_passes.size()); | 5729 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5696 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5730 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5697 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5731 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5698 frame.render_passes[0]->quad_list.ElementAt(1)->material); | 5732 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5699 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( | 5733 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5700 frame.render_passes[0]->quad_list.ElementAt(1)); | 5734 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5701 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5735 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5702 replica_quad->rect.ToString()); | 5736 replica_quad->rect.ToString()); |
| 5703 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5737 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5704 replica_quad->mask_uv_rect.ToString()); | 5738 replica_quad->mask_uv_rect().ToString()); |
| 5739 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5740 replica_quad->mask_uv_scale.ToString()); | |
| 5741 EXPECT_EQ(mask_size_large.ToString(), | |
| 5742 replica_quad->mask_texture_size.ToString()); | |
| 5705 | 5743 |
| 5706 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5744 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5707 host_impl_->DidDrawAllLayers(frame); | 5745 host_impl_->DidDrawAllLayers(frame); |
| 5708 } | 5746 } |
| 5709 | 5747 |
| 5710 // Applying a different contents scale to the mask layer means it will have | 5748 // Applying a different contents scale to the mask layer means it will have |
| 5711 // a larger texture, but it should use the same tex coords to cover the | 5749 // a larger texture, but it should use the same tex coords to cover the |
| 5712 // layer it masks. | 5750 // layer it masks. |
| 5713 mask_layer->SetContentBounds(mask_size); | 5751 mask_layer->SetContentBounds(mask_size); |
| 5714 mask_layer->SetContentsScale(1.f, 1.f); | 5752 mask_layer->SetContentsScale(1.f, 1.f); |
| 5715 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5753 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5716 { | 5754 { |
| 5717 LayerTreeHostImpl::FrameData frame; | 5755 LayerTreeHostImpl::FrameData frame; |
| 5718 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5756 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5719 | 5757 |
| 5720 ASSERT_EQ(1u, frame.render_passes.size()); | 5758 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5721 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5759 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5722 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5760 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5723 frame.render_passes[0]->quad_list.ElementAt(1)->material); | 5761 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5724 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( | 5762 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5725 frame.render_passes[0]->quad_list.ElementAt(1)); | 5763 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5726 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5764 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5727 replica_quad->rect.ToString()); | 5765 replica_quad->rect.ToString()); |
| 5728 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5766 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5729 replica_quad->mask_uv_rect.ToString()); | 5767 replica_quad->mask_uv_rect().ToString()); |
| 5768 EXPECT_EQ(gfx::Vector2dF(1.f, 1.f).ToString(), | |
| 5769 replica_quad->mask_uv_scale.ToString()); | |
| 5770 EXPECT_EQ(mask_size.ToString(), replica_quad->mask_texture_size.ToString()); | |
| 5730 | 5771 |
| 5731 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5772 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5732 host_impl_->DidDrawAllLayers(frame); | 5773 host_impl_->DidDrawAllLayers(frame); |
| 5733 } | 5774 } |
| 5734 } | 5775 } |
| 5735 | 5776 |
| 5736 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerForSurfaceWithUnclippedChild) { | 5777 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerForSurfaceWithUnclippedChild) { |
| 5737 // The replica is of a layer with bounds 50x50, but it has a child that causes | 5778 // The replica is of a layer with bounds 50x50, but it has a child that causes |
| 5738 // the surface bounds to be larger. | 5779 // the surface bounds to be larger. |
| 5739 | 5780 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5805 render_pass_quad->rect.ToString()); | 5846 render_pass_quad->rect.ToString()); |
| 5806 | 5847 |
| 5807 // The mask covers the owning layer only. | 5848 // The mask covers the owning layer only. |
| 5808 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5849 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5809 frame.render_passes[0]->quad_list.ElementAt(1)->material); | 5850 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5810 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( | 5851 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5811 frame.render_passes[0]->quad_list.ElementAt(1)); | 5852 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5812 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5853 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
| 5813 replica_quad->rect.ToString()); | 5854 replica_quad->rect.ToString()); |
| 5814 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), | 5855 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), |
| 5815 replica_quad->mask_uv_rect.ToString()); | 5856 replica_quad->mask_uv_rect().ToString()); |
| 5857 EXPECT_EQ(gfx::Vector2dF(2.f, 1.f).ToString(), | |
| 5858 replica_quad->mask_uv_scale.ToString()); | |
| 5859 EXPECT_EQ(gfx::Size(mask_size).ToString(), | |
| 5860 replica_quad->mask_texture_size.ToString()); | |
| 5816 | 5861 |
| 5817 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5862 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5818 host_impl_->DidDrawAllLayers(frame); | 5863 host_impl_->DidDrawAllLayers(frame); |
| 5819 } | 5864 } |
| 5820 | 5865 |
| 5821 // Move the child to (-50, 0) instead. Now the mask should be moved to still | 5866 // Move the child to (-50, 0) instead. Now the mask should be moved to still |
| 5822 // cover the layer being replicated. | 5867 // cover the layer being replicated. |
| 5823 content_child_layer->SetPosition(gfx::Point(-50, 0)); | 5868 content_child_layer->SetPosition(gfx::Point(-50, 0)); |
| 5824 { | 5869 { |
| 5825 LayerTreeHostImpl::FrameData frame; | 5870 LayerTreeHostImpl::FrameData frame; |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 5838 render_pass_quad->rect.ToString()); | 5883 render_pass_quad->rect.ToString()); |
| 5839 | 5884 |
| 5840 // The mask covers the owning layer only. | 5885 // The mask covers the owning layer only. |
| 5841 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5886 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5842 frame.render_passes[0]->quad_list.ElementAt(1)->material); | 5887 frame.render_passes[0]->quad_list.ElementAt(1)->material); |
| 5843 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( | 5888 const RenderPassDrawQuad* replica_quad = RenderPassDrawQuad::MaterialCast( |
| 5844 frame.render_passes[0]->quad_list.ElementAt(1)); | 5889 frame.render_passes[0]->quad_list.ElementAt(1)); |
| 5845 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5890 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
| 5846 replica_quad->rect.ToString()); | 5891 replica_quad->rect.ToString()); |
| 5847 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), | 5892 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), |
| 5848 replica_quad->mask_uv_rect.ToString()); | 5893 replica_quad->mask_uv_rect().ToString()); |
| 5894 EXPECT_EQ(gfx::Vector2dF(2.f, 1.f).ToString(), | |
| 5895 replica_quad->mask_uv_scale.ToString()); | |
| 5896 EXPECT_EQ(gfx::Size(mask_size).ToString(), | |
| 5897 replica_quad->mask_texture_size.ToString()); | |
| 5849 | 5898 |
| 5850 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5899 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5851 host_impl_->DidDrawAllLayers(frame); | 5900 host_impl_->DidDrawAllLayers(frame); |
| 5852 } | 5901 } |
| 5853 } | 5902 } |
| 5854 | 5903 |
| 5855 TEST_F(LayerTreeHostImplTest, MaskLayerForSurfaceWithClippedLayer) { | 5904 TEST_F(LayerTreeHostImplTest, MaskLayerForSurfaceWithClippedLayer) { |
| 5856 // The masked layer has bounds 50x50, but it has a child that causes | 5905 // The masked layer has bounds 50x50, but it has a child that causes |
| 5857 // the surface bounds to be larger. It also has a parent that clips the | 5906 // the surface bounds to be larger. It also has a parent that clips the |
| 5858 // masked layer and its surface. | 5907 // masked layer and its surface. |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5922 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5971 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5923 | 5972 |
| 5924 // The surface is clipped to 10x20. | 5973 // The surface is clipped to 10x20. |
| 5925 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5974 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5926 frame.render_passes[0]->quad_list.front()->material); | 5975 frame.render_passes[0]->quad_list.front()->material); |
| 5927 const RenderPassDrawQuad* render_pass_quad = | 5976 const RenderPassDrawQuad* render_pass_quad = |
| 5928 RenderPassDrawQuad::MaterialCast( | 5977 RenderPassDrawQuad::MaterialCast( |
| 5929 frame.render_passes[0]->quad_list.front()); | 5978 frame.render_passes[0]->quad_list.front()); |
| 5930 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), | 5979 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), |
| 5931 render_pass_quad->rect.ToString()); | 5980 render_pass_quad->rect.ToString()); |
| 5932 | |
| 5933 // The masked layer is 50x50, but the surface size is 10x20. So the texture | 5981 // The masked layer is 50x50, but the surface size is 10x20. So the texture |
| 5934 // coords in the mask are scaled by 10/50 and 20/50. | 5982 // coords in the mask are scaled by 10/50 and 20/50. |
| 5935 // The surface is clipped to (20,10) so the mask texture coords are offset | 5983 // The surface is clipped to (20,10) so the mask texture coords are offset |
| 5936 // by 20/50 and 10/50 | 5984 // by 20/50 and 10/50 |
| 5937 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), | 5985 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), 1.f / 50.f) |
| 5938 1.f / 50.f).ToString(), | 5986 .ToString(), |
|
danakj
2014/10/15 15:33:35
not need to ToString anymore
enne (OOO)
2014/10/15 19:10:55
PUNT
| |
| 5939 render_pass_quad->mask_uv_rect.ToString()); | 5987 render_pass_quad->mask_uv_rect().ToString()); |
| 5988 EXPECT_EQ(gfx::Vector2dF(10.f / 50.f, 20.f / 50.f).ToString(), | |
| 5989 render_pass_quad->mask_uv_scale.ToString()); | |
| 5990 EXPECT_EQ(mask_size.ToString(), | |
| 5991 render_pass_quad->mask_texture_size.ToString()); | |
| 5940 | 5992 |
| 5941 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5993 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 5942 host_impl_->DidDrawAllLayers(frame); | 5994 host_impl_->DidDrawAllLayers(frame); |
| 5943 } | 5995 } |
| 5944 } | 5996 } |
| 5945 | 5997 |
| 5946 class GLRendererWithSetupQuadForAntialiasing : public GLRenderer { | 5998 class GLRendererWithSetupQuadForAntialiasing : public GLRenderer { |
| 5947 public: | 5999 public: |
| 5948 using GLRenderer::SetupQuadForAntialiasing; | 6000 using GLRenderer::SetupQuadForAntialiasing; |
| 5949 }; | 6001 }; |
| (...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7516 // surface. | 7568 // surface. |
| 7517 EXPECT_EQ(0, num_lost_surfaces_); | 7569 EXPECT_EQ(0, num_lost_surfaces_); |
| 7518 host_impl_->DidLoseOutputSurface(); | 7570 host_impl_->DidLoseOutputSurface(); |
| 7519 EXPECT_EQ(1, num_lost_surfaces_); | 7571 EXPECT_EQ(1, num_lost_surfaces_); |
| 7520 host_impl_->DidLoseOutputSurface(); | 7572 host_impl_->DidLoseOutputSurface(); |
| 7521 EXPECT_LE(1, num_lost_surfaces_); | 7573 EXPECT_LE(1, num_lost_surfaces_); |
| 7522 } | 7574 } |
| 7523 | 7575 |
| 7524 } // namespace | 7576 } // namespace |
| 7525 } // namespace cc | 7577 } // namespace cc |
| OLD | NEW |