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

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

Issue 2717533005: cc: RenderSurfaceImpl tile mask layer. (Closed)
Patch Set: Addressing comments. Created 3 years, 9 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.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
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
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
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
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
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
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
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
OLDNEW
« cc/layers/render_surface_impl.cc ('K') | « cc/trees/draw_property_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698