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.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 6467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6478 root->AddChild(clipping_layer); | 6478 root->AddChild(clipping_layer); |
6479 | 6479 |
6480 scoped_refptr<FakePictureLayer> content_layer = | 6480 scoped_refptr<FakePictureLayer> content_layer = |
6481 FakePictureLayer::Create(&client_); | 6481 FakePictureLayer::Create(&client_); |
6482 clipping_layer->AddChild(content_layer); | 6482 clipping_layer->AddChild(content_layer); |
6483 | 6483 |
6484 scoped_refptr<FakePictureLayer> content_child_layer = | 6484 scoped_refptr<FakePictureLayer> content_child_layer = |
6485 FakePictureLayer::Create(&client_); | 6485 FakePictureLayer::Create(&client_); |
6486 content_layer->AddChild(content_child_layer); | 6486 content_layer->AddChild(content_child_layer); |
6487 | 6487 |
| 6488 std::unique_ptr<RecordingSource> recording_source = |
| 6489 FakeRecordingSource::CreateFilledRecordingSource(gfx::Size(100, 100)); |
| 6490 SkPaint paint1, paint2; |
| 6491 static_cast<FakeRecordingSource*>(recording_source.get()) |
| 6492 ->add_draw_rect_with_flags(gfx::Rect(0, 0, 100, 90), paint1); |
| 6493 static_cast<FakeRecordingSource*>(recording_source.get()) |
| 6494 ->add_draw_rect_with_flags(gfx::Rect(0, 90, 100, 10), paint2); |
| 6495 client_.set_fill_with_nonsolid_color(true); |
| 6496 static_cast<FakeRecordingSource*>(recording_source.get())->Rerecord(); |
| 6497 |
6488 scoped_refptr<FakePictureLayer> mask_layer = | 6498 scoped_refptr<FakePictureLayer> mask_layer = |
6489 FakePictureLayer::Create(&client_); | 6499 FakePictureLayer::CreateWithRecordingSource( |
| 6500 &client_, std::move(recording_source)); |
6490 content_layer->SetMaskLayer(mask_layer.get()); | 6501 content_layer->SetMaskLayer(mask_layer.get()); |
6491 | 6502 |
6492 gfx::Size root_size(100, 100); | 6503 gfx::Size root_size(100, 100); |
6493 root->SetBounds(root_size); | 6504 root->SetBounds(root_size); |
6494 | 6505 |
6495 gfx::PointF clipping_origin(20.f, 10.f); | 6506 gfx::PointF clipping_origin(20.f, 10.f); |
6496 gfx::Size clipping_size(10, 20); | 6507 gfx::Size clipping_size(10, 20); |
6497 clipping_layer->SetBounds(clipping_size); | 6508 clipping_layer->SetBounds(clipping_size); |
6498 clipping_layer->SetPosition(clipping_origin); | 6509 clipping_layer->SetPosition(clipping_origin); |
6499 clipping_layer->SetMasksToBounds(true); | 6510 clipping_layer->SetMasksToBounds(true); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6531 // The surface is clipped to 10x20. | 6542 // The surface is clipped to 10x20. |
6532 EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material); | 6543 EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material); |
6533 const RenderPassDrawQuad* render_pass_quad = | 6544 const RenderPassDrawQuad* render_pass_quad = |
6534 RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front()); | 6545 RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front()); |
6535 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), | 6546 EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(), |
6536 render_pass_quad->rect.ToString()); | 6547 render_pass_quad->rect.ToString()); |
6537 // The masked layer is 50x50, but the surface size is 10x20. So the texture | 6548 // The masked layer is 50x50, but the surface size is 10x20. So the texture |
6538 // coords in the mask are scaled by 10/50 and 20/50. | 6549 // coords in the mask are scaled by 10/50 and 20/50. |
6539 // The surface is clipped to (20,10) so the mask texture coords are offset | 6550 // The surface is clipped to (20,10) so the mask texture coords are offset |
6540 // by 20/50 and 10/50 | 6551 // by 20/50 and 10/50 |
6541 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), 1.f / 50.f) | 6552 if (host_impl->settings().enable_mask_tiling) { |
6542 .ToString(), | 6553 EXPECT_EQ( |
6543 render_pass_quad->mask_uv_rect.ToString()); | 6554 gfx::RectF(20.f / 128.f, 10.f / 128.f, 10.f / 128.f, 20.f / 128.f) |
| 6555 .ToString(), |
| 6556 render_pass_quad->mask_uv_rect.ToString()); |
| 6557 } else { |
| 6558 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), 1.f / 50.f) |
| 6559 .ToString(), |
| 6560 render_pass_quad->mask_uv_rect.ToString()); |
| 6561 } |
6544 EndTest(); | 6562 EndTest(); |
6545 return draw_result; | 6563 return draw_result; |
6546 } | 6564 } |
6547 | 6565 |
6548 void AfterTest() override {} | 6566 void AfterTest() override {} |
6549 | 6567 |
6550 FakeContentLayerClient client_; | 6568 FakeContentLayerClient client_; |
6551 }; | 6569 }; |
6552 | 6570 |
6553 SINGLE_AND_MULTI_THREAD_TEST_F( | 6571 SINGLE_AND_MULTI_THREAD_TEST_F( |
(...skipping 15 matching lines...) Expand all Loading... |
6569 | 6587 |
6570 scoped_refptr<Layer> root = Layer::Create(); | 6588 scoped_refptr<Layer> root = Layer::Create(); |
6571 | 6589 |
6572 scoped_refptr<Layer> scaling_layer = Layer::Create(); | 6590 scoped_refptr<Layer> scaling_layer = Layer::Create(); |
6573 root->AddChild(scaling_layer); | 6591 root->AddChild(scaling_layer); |
6574 | 6592 |
6575 scoped_refptr<FakePictureLayer> content_layer = | 6593 scoped_refptr<FakePictureLayer> content_layer = |
6576 FakePictureLayer::Create(&client_); | 6594 FakePictureLayer::Create(&client_); |
6577 scaling_layer->AddChild(content_layer); | 6595 scaling_layer->AddChild(content_layer); |
6578 | 6596 |
| 6597 std::unique_ptr<RecordingSource> recording_source = |
| 6598 FakeRecordingSource::CreateFilledRecordingSource(gfx::Size(100, 100)); |
| 6599 SkPaint paint1, paint2; |
| 6600 static_cast<FakeRecordingSource*>(recording_source.get()) |
| 6601 ->add_draw_rect_with_flags(gfx::Rect(0, 0, 100, 10), paint1); |
| 6602 static_cast<FakeRecordingSource*>(recording_source.get()) |
| 6603 ->add_draw_rect_with_flags(gfx::Rect(0, 10, 100, 90), paint2); |
| 6604 client_.set_fill_with_nonsolid_color(true); |
| 6605 static_cast<FakeRecordingSource*>(recording_source.get())->Rerecord(); |
| 6606 |
6579 scoped_refptr<FakePictureLayer> mask_layer = | 6607 scoped_refptr<FakePictureLayer> mask_layer = |
6580 FakePictureLayer::Create(&client_); | 6608 FakePictureLayer::CreateWithRecordingSource( |
| 6609 &client_, std::move(recording_source)); |
6581 content_layer->SetMaskLayer(mask_layer.get()); | 6610 content_layer->SetMaskLayer(mask_layer.get()); |
6582 | 6611 |
6583 gfx::Size root_size(100, 100); | 6612 gfx::Size root_size(100, 100); |
6584 root->SetBounds(root_size); | 6613 root->SetBounds(root_size); |
6585 | 6614 |
6586 gfx::Size scaling_layer_size(50, 50); | 6615 gfx::Size scaling_layer_size(50, 50); |
6587 scaling_layer->SetBounds(scaling_layer_size); | 6616 scaling_layer->SetBounds(scaling_layer_size); |
6588 gfx::Transform scale; | 6617 gfx::Transform scale; |
6589 scale.Scale(2.f, 2.f); | 6618 scale.Scale(2.f, 2.f); |
6590 scaling_layer->SetTransform(scale); | 6619 scaling_layer->SetTransform(scale); |
(...skipping 22 matching lines...) Expand all Loading... |
6613 | 6642 |
6614 EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material); | 6643 EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material); |
6615 const RenderPassDrawQuad* render_pass_quad = | 6644 const RenderPassDrawQuad* render_pass_quad = |
6616 RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front()); | 6645 RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front()); |
6617 switch (host_impl->active_tree()->source_frame_number()) { | 6646 switch (host_impl->active_tree()->source_frame_number()) { |
6618 case 0: | 6647 case 0: |
6619 // Check that the tree scaling is correctly taken into account for the | 6648 // Check that the tree scaling is correctly taken into account for the |
6620 // mask, that should fully map onto the quad. | 6649 // mask, that should fully map onto the quad. |
6621 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 6650 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
6622 render_pass_quad->rect.ToString()); | 6651 render_pass_quad->rect.ToString()); |
6623 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 6652 if (host_impl->settings().enable_mask_tiling) { |
6624 render_pass_quad->mask_uv_rect.ToString()); | 6653 EXPECT_EQ( |
| 6654 gfx::RectF(0.f, 0.f, 100.f / 128.f, 100.f / 128.f).ToString(), |
| 6655 render_pass_quad->mask_uv_rect.ToString()); |
| 6656 } else { |
| 6657 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 6658 render_pass_quad->mask_uv_rect.ToString()); |
| 6659 } |
6625 break; | 6660 break; |
6626 case 1: | 6661 case 1: |
6627 // Applying a DSF should change the render surface size, but won't | 6662 // Applying a DSF should change the render surface size, but won't |
6628 // affect which part of the mask is used. | 6663 // affect which part of the mask is used. |
6629 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 6664 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
6630 render_pass_quad->rect.ToString()); | 6665 render_pass_quad->rect.ToString()); |
6631 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 6666 if (host_impl->settings().enable_mask_tiling) { |
6632 render_pass_quad->mask_uv_rect.ToString()); | 6667 EXPECT_EQ( |
| 6668 gfx::RectF(0.f, 0.f, 100.f / 128.f, 100.f / 128.f).ToString(), |
| 6669 render_pass_quad->mask_uv_rect.ToString()); |
| 6670 } else { |
| 6671 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 6672 render_pass_quad->mask_uv_rect.ToString()); |
| 6673 } |
6633 EndTest(); | 6674 EndTest(); |
6634 break; | 6675 break; |
6635 } | 6676 } |
6636 return draw_result; | 6677 return draw_result; |
6637 } | 6678 } |
6638 | 6679 |
6639 void DidCommit() override { | 6680 void DidCommit() override { |
6640 switch (layer_tree_host()->SourceFrameNumber()) { | 6681 switch (layer_tree_host()->SourceFrameNumber()) { |
6641 case 1: | 6682 case 1: |
6642 gfx::Size double_root_size(200, 200); | 6683 gfx::Size double_root_size(200, 200); |
(...skipping 15 matching lines...) Expand all Loading... |
6658 void SetupTree() override { | 6699 void SetupTree() override { |
6659 // The mask layer has bounds 100x100 but is attached to a layer with bounds | 6700 // The mask layer has bounds 100x100 but is attached to a layer with bounds |
6660 // 50x50. | 6701 // 50x50. |
6661 | 6702 |
6662 scoped_refptr<Layer> root = Layer::Create(); | 6703 scoped_refptr<Layer> root = Layer::Create(); |
6663 | 6704 |
6664 scoped_refptr<FakePictureLayer> content_layer = | 6705 scoped_refptr<FakePictureLayer> content_layer = |
6665 FakePictureLayer::Create(&client_); | 6706 FakePictureLayer::Create(&client_); |
6666 root->AddChild(content_layer); | 6707 root->AddChild(content_layer); |
6667 | 6708 |
| 6709 std::unique_ptr<RecordingSource> recording_source = |
| 6710 FakeRecordingSource::CreateFilledRecordingSource(gfx::Size(100, 100)); |
| 6711 SkPaint paint1, paint2; |
| 6712 static_cast<FakeRecordingSource*>(recording_source.get()) |
| 6713 ->add_draw_rect_with_flags(gfx::Rect(0, 0, 100, 90), paint1); |
| 6714 static_cast<FakeRecordingSource*>(recording_source.get()) |
| 6715 ->add_draw_rect_with_flags(gfx::Rect(0, 90, 100, 10), paint2); |
| 6716 client_.set_fill_with_nonsolid_color(true); |
| 6717 static_cast<FakeRecordingSource*>(recording_source.get())->Rerecord(); |
| 6718 |
6668 scoped_refptr<FakePictureLayer> mask_layer = | 6719 scoped_refptr<FakePictureLayer> mask_layer = |
6669 FakePictureLayer::Create(&client_); | 6720 FakePictureLayer::CreateWithRecordingSource( |
| 6721 &client_, std::move(recording_source)); |
6670 content_layer->SetMaskLayer(mask_layer.get()); | 6722 content_layer->SetMaskLayer(mask_layer.get()); |
6671 | 6723 |
6672 gfx::Size root_size(100, 100); | 6724 gfx::Size root_size(100, 100); |
6673 root->SetBounds(root_size); | 6725 root->SetBounds(root_size); |
6674 | 6726 |
6675 gfx::Size layer_size(50, 50); | 6727 gfx::Size layer_size(50, 50); |
6676 content_layer->SetBounds(layer_size); | 6728 content_layer->SetBounds(layer_size); |
6677 | 6729 |
6678 gfx::Size mask_size(100, 100); | 6730 gfx::Size mask_size(100, 100); |
6679 mask_layer->SetBounds(mask_size); | 6731 mask_layer->SetBounds(mask_size); |
(...skipping 17 matching lines...) Expand all Loading... |
6697 EXPECT_EQ(DrawQuad::SOLID_COLOR, root_pass->quad_list.back()->material); | 6749 EXPECT_EQ(DrawQuad::SOLID_COLOR, root_pass->quad_list.back()->material); |
6698 | 6750 |
6699 EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material); | 6751 EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material); |
6700 const RenderPassDrawQuad* render_pass_quad = | 6752 const RenderPassDrawQuad* render_pass_quad = |
6701 RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front()); | 6753 RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front()); |
6702 switch (host_impl->active_tree()->source_frame_number()) { | 6754 switch (host_impl->active_tree()->source_frame_number()) { |
6703 case 0: | 6755 case 0: |
6704 // Check that the mask fills the surface. | 6756 // Check that the mask fills the surface. |
6705 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 6757 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
6706 render_pass_quad->rect.ToString()); | 6758 render_pass_quad->rect.ToString()); |
6707 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 6759 if (host_impl->settings().enable_mask_tiling) { |
6708 render_pass_quad->mask_uv_rect.ToString()); | 6760 EXPECT_EQ(gfx::RectF(0.f, 0.f, 50.f / 128.f, 50.f / 128.f).ToString(), |
| 6761 render_pass_quad->mask_uv_rect.ToString()); |
| 6762 } else { |
| 6763 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 6764 render_pass_quad->mask_uv_rect.ToString()); |
| 6765 } |
6709 break; | 6766 break; |
6710 case 1: | 6767 case 1: |
6711 // Applying a DSF should change the render surface size, but won't | 6768 // Applying a DSF should change the render surface size, but won't |
6712 // affect which part of the mask is used. | 6769 // affect which part of the mask is used. |
6713 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 6770 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
6714 render_pass_quad->rect.ToString()); | 6771 render_pass_quad->rect.ToString()); |
6715 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 6772 if (host_impl->settings().enable_mask_tiling) { |
6716 render_pass_quad->mask_uv_rect.ToString()); | 6773 EXPECT_EQ(gfx::RectF(0.f, 0.f, 50.f / 128.f, 50.f / 128.f).ToString(), |
| 6774 render_pass_quad->mask_uv_rect.ToString()); |
| 6775 } else { |
| 6776 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 6777 render_pass_quad->mask_uv_rect.ToString()); |
| 6778 } |
6717 EndTest(); | 6779 EndTest(); |
6718 break; | 6780 break; |
6719 } | 6781 } |
6720 return draw_result; | 6782 return draw_result; |
6721 } | 6783 } |
6722 | 6784 |
6723 void DidCommit() override { | 6785 void DidCommit() override { |
6724 switch (layer_tree_host()->SourceFrameNumber()) { | 6786 switch (layer_tree_host()->SourceFrameNumber()) { |
6725 case 1: | 6787 case 1: |
6726 gfx::Size double_root_size(200, 200); | 6788 gfx::Size double_root_size(200, 200); |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7005 EndTest(); | 7067 EndTest(); |
7006 } | 7068 } |
7007 | 7069 |
7008 void AfterTest() override {} | 7070 void AfterTest() override {} |
7009 }; | 7071 }; |
7010 | 7072 |
7011 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources); | 7073 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources); |
7012 | 7074 |
7013 } // namespace | 7075 } // namespace |
7014 } // namespace cc | 7076 } // namespace cc |
OLD | NEW |