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 |