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

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 659683002: Include mask texture size in RenderPassDrawQuad (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@update_mask_draw_quad_test
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 5355 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698