OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/occlusion_tracker.h" | 5 #include "cc/trees/occlusion_tracker.h" |
6 | 6 |
7 #include "cc/animation/layer_animation_controller.h" | 7 #include "cc/animation/layer_animation_controller.h" |
8 #include "cc/base/math_util.h" | 8 #include "cc/base/math_util.h" |
9 #include "cc/layers/layer.h" | 9 #include "cc/layers/layer.h" |
10 #include "cc/layers/layer_impl.h" | 10 #include "cc/layers/layer_impl.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 const gfx::Size& bounds) { | 99 const gfx::Size& bounds) { |
100 LayerTreeImpl* tree = host_->host_impl()->active_tree(); | 100 LayerTreeImpl* tree = host_->host_impl()->active_tree(); |
101 int id = next_layer_impl_id_++; | 101 int id = next_layer_impl_id_++; |
102 scoped_ptr<TestContentLayerImpl> layer(new TestContentLayerImpl(tree, id)); | 102 scoped_ptr<TestContentLayerImpl> layer(new TestContentLayerImpl(tree, id)); |
103 TestContentLayerImpl* layer_ptr = layer.get(); | 103 TestContentLayerImpl* layer_ptr = layer.get(); |
104 SetProperties(layer_ptr, transform, position, bounds); | 104 SetProperties(layer_ptr, transform, position, bounds); |
105 | 105 |
106 DCHECK(!root_.get()); | 106 DCHECK(!root_.get()); |
107 root_ = std::move(layer); | 107 root_ = std::move(layer); |
108 | 108 |
109 layer_ptr->SetForceRenderSurface(true); | 109 layer_ptr->SetHasRenderSurface(true); |
110 SetRootLayerOnMainThread(layer_ptr); | 110 SetRootLayerOnMainThread(layer_ptr); |
111 | 111 |
112 return layer_ptr; | 112 return layer_ptr; |
113 } | 113 } |
114 | 114 |
115 LayerImpl* CreateLayer(LayerImpl* parent, | 115 LayerImpl* CreateLayer(LayerImpl* parent, |
116 const gfx::Transform& transform, | 116 const gfx::Transform& transform, |
117 const gfx::PointF& position, | 117 const gfx::PointF& position, |
118 const gfx::Size& bounds) { | 118 const gfx::Size& bounds) { |
119 LayerTreeImpl* tree = host_->host_impl()->active_tree(); | 119 LayerTreeImpl* tree = host_->host_impl()->active_tree(); |
120 int id = next_layer_impl_id_++; | 120 int id = next_layer_impl_id_++; |
121 scoped_ptr<LayerImpl> layer = LayerImpl::Create(tree, id); | 121 scoped_ptr<LayerImpl> layer = LayerImpl::Create(tree, id); |
122 LayerImpl* layer_ptr = layer.get(); | 122 LayerImpl* layer_ptr = layer.get(); |
123 SetProperties(layer_ptr, transform, position, bounds); | 123 SetProperties(layer_ptr, transform, position, bounds); |
124 parent->AddChild(std::move(layer)); | 124 parent->AddChild(std::move(layer)); |
125 return layer_ptr; | 125 return layer_ptr; |
126 } | 126 } |
127 | 127 |
128 LayerImpl* CreateSurface(LayerImpl* parent, | 128 LayerImpl* CreateSurface(LayerImpl* parent, |
129 const gfx::Transform& transform, | 129 const gfx::Transform& transform, |
130 const gfx::PointF& position, | 130 const gfx::PointF& position, |
131 const gfx::Size& bounds) { | 131 const gfx::Size& bounds) { |
132 LayerImpl* layer = CreateLayer(parent, transform, position, bounds); | 132 LayerImpl* layer = CreateLayer(parent, transform, position, bounds); |
133 layer->SetForceRenderSurface(true); | 133 layer->SetHasRenderSurface(true); |
134 return layer; | 134 return layer; |
135 } | 135 } |
136 | 136 |
137 TestContentLayerImpl* CreateDrawingLayer(LayerImpl* parent, | 137 TestContentLayerImpl* CreateDrawingLayer(LayerImpl* parent, |
138 const gfx::Transform& transform, | 138 const gfx::Transform& transform, |
139 const gfx::PointF& position, | 139 const gfx::PointF& position, |
140 const gfx::Size& bounds, | 140 const gfx::Size& bounds, |
141 bool opaque) { | 141 bool opaque) { |
142 LayerTreeImpl* tree = host_->host_impl()->active_tree(); | 142 LayerTreeImpl* tree = host_->host_impl()->active_tree(); |
143 int id = next_layer_impl_id_++; | 143 int id = next_layer_impl_id_++; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 return layer_ptr; | 182 return layer_ptr; |
183 } | 183 } |
184 | 184 |
185 TestContentLayerImpl* CreateDrawingSurface(LayerImpl* parent, | 185 TestContentLayerImpl* CreateDrawingSurface(LayerImpl* parent, |
186 const gfx::Transform& transform, | 186 const gfx::Transform& transform, |
187 const gfx::PointF& position, | 187 const gfx::PointF& position, |
188 const gfx::Size& bounds, | 188 const gfx::Size& bounds, |
189 bool opaque) { | 189 bool opaque) { |
190 TestContentLayerImpl* layer = | 190 TestContentLayerImpl* layer = |
191 CreateDrawingLayer(parent, transform, position, bounds, opaque); | 191 CreateDrawingLayer(parent, transform, position, bounds, opaque); |
192 layer->SetForceRenderSurface(true); | 192 layer->SetHasRenderSurface(true); |
193 return layer; | 193 return layer; |
194 } | 194 } |
195 | 195 |
196 void DestroyLayers() { | 196 void DestroyLayers() { |
197 root_ = nullptr; | 197 root_ = nullptr; |
198 render_surface_layer_list_impl_.clear(); | 198 render_surface_layer_list_impl_.clear(); |
199 replica_layers_.clear(); | 199 replica_layers_.clear(); |
200 mask_layers_.clear(); | 200 mask_layers_.clear(); |
201 ResetLayerIterator(); | 201 ResetLayerIterator(); |
202 } | 202 } |
203 | 203 |
204 void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {} | 204 void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {} |
205 | 205 |
206 void AddCopyRequest(Layer* layer) { | 206 void AddCopyRequest(Layer* layer) { |
207 layer->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest( | 207 layer->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest( |
208 base::Bind(&OcclusionTrackerTest::CopyOutputCallback, | 208 base::Bind(&OcclusionTrackerTest::CopyOutputCallback, |
209 base::Unretained(this)))); | 209 base::Unretained(this)))); |
210 } | 210 } |
211 | 211 |
212 void AddCopyRequest(LayerImpl* layer) { | 212 void AddCopyRequest(LayerImpl* layer) { |
213 std::vector<scoped_ptr<CopyOutputRequest>> requests; | 213 std::vector<scoped_ptr<CopyOutputRequest>> requests; |
214 requests.push_back(CopyOutputRequest::CreateBitmapRequest(base::Bind( | 214 requests.push_back(CopyOutputRequest::CreateBitmapRequest(base::Bind( |
215 &OcclusionTrackerTest::CopyOutputCallback, base::Unretained(this)))); | 215 &OcclusionTrackerTest::CopyOutputCallback, base::Unretained(this)))); |
| 216 layer->SetHasRenderSurface(true); |
216 layer->PassCopyRequests(&requests); | 217 layer->PassCopyRequests(&requests); |
217 } | 218 } |
218 | 219 |
219 void CalcDrawEtc(TestContentLayerImpl* root) { | 220 void CalcDrawEtc(TestContentLayerImpl* root) { |
220 DCHECK(root == root_.get()); | 221 DCHECK(root == root_.get()); |
221 | 222 |
222 // These occlusion tests attach and detach layers in multiple | 223 // These occlusion tests attach and detach layers in multiple |
223 // iterations, so rebuild property trees every time. | 224 // iterations, so rebuild property trees every time. |
224 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 225 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
225 | 226 |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 : OcclusionTrackerTest(opaque_layers) {} | 529 : OcclusionTrackerTest(opaque_layers) {} |
529 | 530 |
530 void RunMyTest() override { | 531 void RunMyTest() override { |
531 TestContentLayerImpl* parent = this->CreateRoot( | 532 TestContentLayerImpl* parent = this->CreateRoot( |
532 this->identity_matrix, gfx::PointF(), gfx::Size(200, 200)); | 533 this->identity_matrix, gfx::PointF(), gfx::Size(200, 200)); |
533 | 534 |
534 gfx::Transform layer1_matrix; | 535 gfx::Transform layer1_matrix; |
535 layer1_matrix.Scale(2.0, 2.0); | 536 layer1_matrix.Scale(2.0, 2.0); |
536 TestContentLayerImpl* layer1 = this->CreateDrawingLayer( | 537 TestContentLayerImpl* layer1 = this->CreateDrawingLayer( |
537 parent, layer1_matrix, gfx::PointF(), gfx::Size(100, 100), true); | 538 parent, layer1_matrix, gfx::PointF(), gfx::Size(100, 100), true); |
538 layer1->SetForceRenderSurface(true); | 539 layer1->SetHasRenderSurface(true); |
539 | 540 |
540 gfx::Transform layer2_matrix; | 541 gfx::Transform layer2_matrix; |
541 layer2_matrix.Translate(25.0, 25.0); | 542 layer2_matrix.Translate(25.0, 25.0); |
542 TestContentLayerImpl* layer2 = this->CreateDrawingLayer( | 543 TestContentLayerImpl* layer2 = this->CreateDrawingLayer( |
543 layer1, layer2_matrix, gfx::PointF(), gfx::Size(50, 50), true); | 544 layer1, layer2_matrix, gfx::PointF(), gfx::Size(50, 50), true); |
544 TestContentLayerImpl* occluder = this->CreateDrawingLayer( | 545 TestContentLayerImpl* occluder = this->CreateDrawingLayer( |
545 parent, this->identity_matrix, gfx::PointF(100.f, 100.f), | 546 parent, this->identity_matrix, gfx::PointF(100.f, 100.f), |
546 gfx::Size(500, 500), true); | 547 gfx::Size(500, 500), true); |
547 this->CalcDrawEtc(parent); | 548 this->CalcDrawEtc(parent); |
548 | 549 |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 TestContentLayerImpl* blur_layer = this->CreateDrawingLayer( | 910 TestContentLayerImpl* blur_layer = this->CreateDrawingLayer( |
910 parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), | 911 parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), |
911 true); | 912 true); |
912 TestContentLayerImpl* opaque_layer = this->CreateDrawingLayer( | 913 TestContentLayerImpl* opaque_layer = this->CreateDrawingLayer( |
913 parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), | 914 parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), |
914 true); | 915 true); |
915 TestContentLayerImpl* opacity_layer = this->CreateDrawingLayer( | 916 TestContentLayerImpl* opacity_layer = this->CreateDrawingLayer( |
916 parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), | 917 parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), |
917 true); | 918 true); |
918 | 919 |
919 blur_layer->SetForceRenderSurface(true); | 920 blur_layer->SetHasRenderSurface(true); |
920 FilterOperations filters; | 921 FilterOperations filters; |
921 filters.Append(FilterOperation::CreateBlurFilter(10.f)); | 922 filters.Append(FilterOperation::CreateBlurFilter(10.f)); |
922 blur_layer->SetFilters(filters); | 923 blur_layer->SetFilters(filters); |
923 | 924 |
924 opaque_layer->SetForceRenderSurface(true); | 925 opaque_layer->SetHasRenderSurface(true); |
925 filters.Clear(); | 926 filters.Clear(); |
926 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f)); | 927 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f)); |
927 opaque_layer->SetFilters(filters); | 928 opaque_layer->SetFilters(filters); |
928 | 929 |
929 opacity_layer->SetForceRenderSurface(true); | 930 opacity_layer->SetHasRenderSurface(true); |
930 filters.Clear(); | 931 filters.Clear(); |
931 filters.Append(FilterOperation::CreateOpacityFilter(0.5f)); | 932 filters.Append(FilterOperation::CreateOpacityFilter(0.5f)); |
932 opacity_layer->SetFilters(filters); | 933 opacity_layer->SetFilters(filters); |
933 | 934 |
934 this->CalcDrawEtc(parent); | 935 this->CalcDrawEtc(parent); |
935 | 936 |
936 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); | 937 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); |
937 | 938 |
938 // Opacity layer won't contribute to occlusion. | 939 // Opacity layer won't contribute to occlusion. |
939 this->VisitLayer(opacity_layer, &occlusion); | 940 this->VisitLayer(opacity_layer, &occlusion); |
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1451 | 1452 |
1452 // Make a 50x50 filtered surface that is adjacent to occluding layers | 1453 // Make a 50x50 filtered surface that is adjacent to occluding layers |
1453 // which are above it in the z-order in various configurations. The | 1454 // which are above it in the z-order in various configurations. The |
1454 // surface is scaled to test that the pixel moving is done in the target | 1455 // surface is scaled to test that the pixel moving is done in the target |
1455 // space, where the background filter is applied. | 1456 // space, where the background filter is applied. |
1456 TestContentLayerImpl* parent = this->CreateRoot( | 1457 TestContentLayerImpl* parent = this->CreateRoot( |
1457 this->identity_matrix, gfx::PointF(), gfx::Size(200, 200)); | 1458 this->identity_matrix, gfx::PointF(), gfx::Size(200, 200)); |
1458 LayerImpl* filtered_surface = this->CreateDrawingLayer( | 1459 LayerImpl* filtered_surface = this->CreateDrawingLayer( |
1459 parent, scale_by_half, gfx::PointF(50.f, 50.f), gfx::Size(100, 100), | 1460 parent, scale_by_half, gfx::PointF(50.f, 50.f), gfx::Size(100, 100), |
1460 false); | 1461 false); |
| 1462 filtered_surface->SetHasRenderSurface(true); |
1461 filtered_surface->SetBackgroundFilters(filters); | 1463 filtered_surface->SetBackgroundFilters(filters); |
1462 gfx::Rect occlusion_rect; | 1464 gfx::Rect occlusion_rect; |
1463 switch (i) { | 1465 switch (i) { |
1464 case LEFT: | 1466 case LEFT: |
1465 occlusion_rect = gfx::Rect(0, 0, 50, 200); | 1467 occlusion_rect = gfx::Rect(0, 0, 50, 200); |
1466 break; | 1468 break; |
1467 case RIGHT: | 1469 case RIGHT: |
1468 occlusion_rect = gfx::Rect(100, 0, 50, 200); | 1470 occlusion_rect = gfx::Rect(100, 0, 50, 200); |
1469 break; | 1471 break; |
1470 case TOP: | 1472 case TOP: |
1471 occlusion_rect = gfx::Rect(0, 0, 200, 50); | 1473 occlusion_rect = gfx::Rect(0, 0, 200, 50); |
1472 break; | 1474 break; |
1473 case BOTTOM: | 1475 case BOTTOM: |
1474 occlusion_rect = gfx::Rect(0, 100, 200, 50); | 1476 occlusion_rect = gfx::Rect(0, 100, 200, 50); |
1475 break; | 1477 break; |
1476 } | 1478 } |
1477 | 1479 |
1478 LayerImpl* occluding_layer = this->CreateDrawingLayer( | 1480 LayerImpl* occluding_layer = this->CreateDrawingLayer( |
1479 parent, this->identity_matrix, gfx::PointF(occlusion_rect.origin()), | 1481 parent, this->identity_matrix, gfx::PointF(occlusion_rect.origin()), |
1480 occlusion_rect.size(), true); | 1482 occlusion_rect.size(), true); |
1481 occluding_layer->SetForceRenderSurface(false); | |
1482 this->CalcDrawEtc(parent); | 1483 this->CalcDrawEtc(parent); |
1483 | 1484 |
1484 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); | 1485 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); |
1485 | 1486 |
1486 // This layer occludes pixels directly beside the filtered_surface. | 1487 // This layer occludes pixels directly beside the filtered_surface. |
1487 // Because filtered surface blends pixels in a radius, it will need to see | 1488 // Because filtered surface blends pixels in a radius, it will need to see |
1488 // some of the pixels (up to radius far) underneath the occluding layers. | 1489 // some of the pixels (up to radius far) underneath the occluding layers. |
1489 this->VisitLayer(occluding_layer, &occlusion); | 1490 this->VisitLayer(occluding_layer, &occlusion); |
1490 | 1491 |
1491 EXPECT_EQ(occlusion_rect.ToString(), | 1492 EXPECT_EQ(occlusion_rect.ToString(), |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1555 parent->SetMasksToBounds(true); | 1556 parent->SetMasksToBounds(true); |
1556 LayerImpl* filtered_surface1 = this->CreateDrawingLayer( | 1557 LayerImpl* filtered_surface1 = this->CreateDrawingLayer( |
1557 parent, scale_by_half, gfx::PointF(), gfx::Size(300, 300), false); | 1558 parent, scale_by_half, gfx::PointF(), gfx::Size(300, 300), false); |
1558 LayerImpl* filtered_surface2 = this->CreateDrawingLayer( | 1559 LayerImpl* filtered_surface2 = this->CreateDrawingLayer( |
1559 parent, scale_by_half, gfx::PointF(), gfx::Size(300, 300), false); | 1560 parent, scale_by_half, gfx::PointF(), gfx::Size(300, 300), false); |
1560 LayerImpl* occluding_layer_above = this->CreateDrawingLayer( | 1561 LayerImpl* occluding_layer_above = this->CreateDrawingLayer( |
1561 parent, this->identity_matrix, gfx::PointF(100.f, 100.f), | 1562 parent, this->identity_matrix, gfx::PointF(100.f, 100.f), |
1562 gfx::Size(50, 50), true); | 1563 gfx::Size(50, 50), true); |
1563 | 1564 |
1564 // Filters make the layers own surfaces. | 1565 // Filters make the layers own surfaces. |
1565 filtered_surface1->SetForceRenderSurface(true); | 1566 filtered_surface1->SetHasRenderSurface(true); |
1566 filtered_surface2->SetForceRenderSurface(true); | 1567 filtered_surface2->SetHasRenderSurface(true); |
1567 FilterOperations filters; | 1568 FilterOperations filters; |
1568 filters.Append(FilterOperation::CreateBlurFilter(1.f)); | 1569 filters.Append(FilterOperation::CreateBlurFilter(1.f)); |
1569 filtered_surface1->SetBackgroundFilters(filters); | 1570 filtered_surface1->SetBackgroundFilters(filters); |
1570 filtered_surface2->SetBackgroundFilters(filters); | 1571 filtered_surface2->SetBackgroundFilters(filters); |
1571 | 1572 |
1572 // Save the distance of influence for the blur effect. | 1573 // Save the distance of influence for the blur effect. |
1573 int outset_top, outset_right, outset_bottom, outset_left; | 1574 int outset_top, outset_right, outset_bottom, outset_left; |
1574 filters.GetOutsets( | 1575 filters.GetOutsets( |
1575 &outset_top, &outset_right, &outset_bottom, &outset_left); | 1576 &outset_top, &outset_right, &outset_bottom, &outset_left); |
1576 | 1577 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1632 gfx::Size(30, 30), true); | 1633 gfx::Size(30, 30), true); |
1633 LayerImpl* filtered_surface = | 1634 LayerImpl* filtered_surface = |
1634 this->CreateDrawingLayer(parent, scale_by_half, gfx::PointF(50.f, 50.f), | 1635 this->CreateDrawingLayer(parent, scale_by_half, gfx::PointF(50.f, 50.f), |
1635 gfx::Size(100, 100), false); | 1636 gfx::Size(100, 100), false); |
1636 this->CreateReplicaLayer(filtered_surface, | 1637 this->CreateReplicaLayer(filtered_surface, |
1637 this->identity_matrix, | 1638 this->identity_matrix, |
1638 gfx::PointF(300.f, 0.f), | 1639 gfx::PointF(300.f, 0.f), |
1639 gfx::Size()); | 1640 gfx::Size()); |
1640 | 1641 |
1641 // Filters make the layer own a surface. | 1642 // Filters make the layer own a surface. |
1642 filtered_surface->SetForceRenderSurface(true); | 1643 filtered_surface->SetHasRenderSurface(true); |
1643 FilterOperations filters; | 1644 FilterOperations filters; |
1644 filters.Append(FilterOperation::CreateBlurFilter(3.f)); | 1645 filters.Append(FilterOperation::CreateBlurFilter(3.f)); |
1645 filtered_surface->SetBackgroundFilters(filters); | 1646 filtered_surface->SetBackgroundFilters(filters); |
1646 | 1647 |
1647 this->CalcDrawEtc(parent); | 1648 this->CalcDrawEtc(parent); |
1648 | 1649 |
1649 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); | 1650 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); |
1650 | 1651 |
1651 // The surface has a background blur, so it blurs non-opaque pixels below | 1652 // The surface has a background blur, so it blurs non-opaque pixels below |
1652 // it. | 1653 // it. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1699 TestContentLayerImpl* parent = this->CreateRoot( | 1700 TestContentLayerImpl* parent = this->CreateRoot( |
1700 this->identity_matrix, gfx::PointF(), gfx::Size(200, 150)); | 1701 this->identity_matrix, gfx::PointF(), gfx::Size(200, 150)); |
1701 LayerImpl* filtered_surface = | 1702 LayerImpl* filtered_surface = |
1702 this->CreateDrawingLayer(parent, scale_by_half, gfx::PointF(50.f, 50.f), | 1703 this->CreateDrawingLayer(parent, scale_by_half, gfx::PointF(50.f, 50.f), |
1703 gfx::Size(100, 100), false); | 1704 gfx::Size(100, 100), false); |
1704 LayerImpl* occluding_layer = this->CreateDrawingLayer( | 1705 LayerImpl* occluding_layer = this->CreateDrawingLayer( |
1705 parent, this->identity_matrix, gfx::PointF(50.f, 50.f), | 1706 parent, this->identity_matrix, gfx::PointF(50.f, 50.f), |
1706 gfx::Size(50, 50), true); | 1707 gfx::Size(50, 50), true); |
1707 | 1708 |
1708 // Filters make the layer own a surface. | 1709 // Filters make the layer own a surface. |
1709 filtered_surface->SetForceRenderSurface(true); | 1710 filtered_surface->SetHasRenderSurface(true); |
1710 FilterOperations filters; | 1711 FilterOperations filters; |
1711 filters.Append(FilterOperation::CreateBlurFilter(3.f)); | 1712 filters.Append(FilterOperation::CreateBlurFilter(3.f)); |
1712 filtered_surface->SetBackgroundFilters(filters); | 1713 filtered_surface->SetBackgroundFilters(filters); |
1713 | 1714 |
1714 this->CalcDrawEtc(parent); | 1715 this->CalcDrawEtc(parent); |
1715 | 1716 |
1716 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); | 1717 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); |
1717 | 1718 |
1718 this->VisitLayer(occluding_layer, &occlusion); | 1719 this->VisitLayer(occluding_layer, &occlusion); |
1719 | 1720 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1778 parent, this->identity_matrix, gfx::PointF(200.f, 50.f), | 1779 parent, this->identity_matrix, gfx::PointF(200.f, 50.f), |
1779 gfx::Size(30, 50), true); | 1780 gfx::Size(30, 50), true); |
1780 LayerImpl* beside_surface_layer = this->CreateDrawingLayer( | 1781 LayerImpl* beside_surface_layer = this->CreateDrawingLayer( |
1781 parent, this->identity_matrix, gfx::PointF(90.f, 40.f), | 1782 parent, this->identity_matrix, gfx::PointF(90.f, 40.f), |
1782 gfx::Size(10, 10), true); | 1783 gfx::Size(10, 10), true); |
1783 LayerImpl* beside_replica_layer = this->CreateDrawingLayer( | 1784 LayerImpl* beside_replica_layer = this->CreateDrawingLayer( |
1784 parent, this->identity_matrix, gfx::PointF(200.f, 40.f), | 1785 parent, this->identity_matrix, gfx::PointF(200.f, 40.f), |
1785 gfx::Size(10, 10), true); | 1786 gfx::Size(10, 10), true); |
1786 | 1787 |
1787 // Filters make the layer own a surface. | 1788 // Filters make the layer own a surface. |
1788 filtered_surface->SetForceRenderSurface(true); | 1789 filtered_surface->SetHasRenderSurface(true); |
1789 FilterOperations filters; | 1790 FilterOperations filters; |
1790 filters.Append(FilterOperation::CreateBlurFilter(3.f)); | 1791 filters.Append(FilterOperation::CreateBlurFilter(3.f)); |
1791 filtered_surface->SetBackgroundFilters(filters); | 1792 filtered_surface->SetBackgroundFilters(filters); |
1792 | 1793 |
1793 // Save the distance of influence for the blur effect. | 1794 // Save the distance of influence for the blur effect. |
1794 int outset_top, outset_right, outset_bottom, outset_left; | 1795 int outset_top, outset_right, outset_bottom, outset_left; |
1795 filters.GetOutsets( | 1796 filters.GetOutsets( |
1796 &outset_top, &outset_right, &outset_bottom, &outset_left); | 1797 &outset_top, &outset_right, &outset_bottom, &outset_left); |
1797 | 1798 |
1798 this->CalcDrawEtc(parent); | 1799 this->CalcDrawEtc(parent); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1853 TestContentLayerImpl* parent = this->CreateRoot( | 1854 TestContentLayerImpl* parent = this->CreateRoot( |
1854 this->identity_matrix, gfx::PointF(), gfx::Size(100, 100)); | 1855 this->identity_matrix, gfx::PointF(), gfx::Size(100, 100)); |
1855 LayerImpl* blend_mode_layer = this->CreateDrawingLayer( | 1856 LayerImpl* blend_mode_layer = this->CreateDrawingLayer( |
1856 parent, this->identity_matrix, gfx::PointF(0.f, 0.f), | 1857 parent, this->identity_matrix, gfx::PointF(0.f, 0.f), |
1857 gfx::Size(100, 100), true); | 1858 gfx::Size(100, 100), true); |
1858 LayerImpl* top_layer = this->CreateDrawingLayer( | 1859 LayerImpl* top_layer = this->CreateDrawingLayer( |
1859 parent, this->identity_matrix, gfx::PointF(10.f, 12.f), | 1860 parent, this->identity_matrix, gfx::PointF(10.f, 12.f), |
1860 gfx::Size(20, 22), true); | 1861 gfx::Size(20, 22), true); |
1861 | 1862 |
1862 // Blend mode makes the layer own a surface. | 1863 // Blend mode makes the layer own a surface. |
1863 blend_mode_layer->SetForceRenderSurface(true); | 1864 blend_mode_layer->SetHasRenderSurface(true); |
1864 blend_mode_layer->SetBlendMode(SkXfermode::kMultiply_Mode); | 1865 blend_mode_layer->SetBlendMode(SkXfermode::kMultiply_Mode); |
1865 | 1866 |
1866 this->CalcDrawEtc(parent); | 1867 this->CalcDrawEtc(parent); |
1867 | 1868 |
1868 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); | 1869 TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); |
1869 | 1870 |
1870 this->VisitLayer(top_layer, &occlusion); | 1871 this->VisitLayer(top_layer, &occlusion); |
1871 // |top_layer| occludes. | 1872 // |top_layer| occludes. |
1872 EXPECT_EQ(gfx::Rect(10, 12, 20, 22).ToString(), | 1873 EXPECT_EQ(gfx::Rect(10, 12, 20, 22).ToString(), |
1873 occlusion.occlusion_from_inside_target().ToString()); | 1874 occlusion.occlusion_from_inside_target().ToString()); |
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2511 EXPECT_EQ(gfx::Rect(), | 2512 EXPECT_EQ(gfx::Rect(), |
2512 occlusion.UnoccludedSurfaceContentRect( | 2513 occlusion.UnoccludedSurfaceContentRect( |
2513 surface, gfx::Rect(80, 70, 50, 50))); | 2514 surface, gfx::Rect(80, 70, 50, 50))); |
2514 } | 2515 } |
2515 }; | 2516 }; |
2516 | 2517 |
2517 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestUnoccludedSurfaceQuery) | 2518 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestUnoccludedSurfaceQuery) |
2518 | 2519 |
2519 } // namespace | 2520 } // namespace |
2520 } // namespace cc | 2521 } // namespace cc |
OLD | NEW |