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

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

Issue 1057283003: Remove parts of //cc we aren't using (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "cc/trees/layer_tree_host.h"
6
7 #include "cc/layers/layer.h"
8 #include "cc/layers/picture_layer.h"
9 #include "cc/test/fake_content_layer_client.h"
10 #include "cc/test/layer_tree_test.h"
11 #include "cc/trees/layer_tree_impl.h"
12
13 namespace cc {
14 namespace {
15
16 #define EXPECT_OCCLUSION_EQ(expected, actual) \
17 EXPECT_TRUE(expected.IsEqual(actual)) \
18 << " Expected: " << expected.ToString() << std::endl \
19 << " Actual: " << actual.ToString();
20
21 class LayerTreeHostOcclusionTest : public LayerTreeTest {
22 protected:
23 void InitializeSettings(LayerTreeSettings* settings) override {
24 settings->minimum_occlusion_tracking_size = gfx::Size();
25 }
26 };
27
28 // Verify occlusion is set on the layer draw properties.
29 class LayerTreeHostOcclusionTestDrawPropertiesOnLayer
30 : public LayerTreeHostOcclusionTest {
31 public:
32 void SetupTree() override {
33 scoped_refptr<Layer> root = Layer::Create();
34 root->SetBounds(gfx::Size(100, 100));
35 root->SetIsDrawable(true);
36
37 scoped_refptr<Layer> child = Layer::Create();
38 child->SetBounds(gfx::Size(50, 60));
39 child->SetPosition(gfx::PointF(10.f, 5.5f));
40 child->SetContentsOpaque(true);
41 child->SetIsDrawable(true);
42 root->AddChild(child);
43
44 layer_tree_host()->SetRootLayer(root);
45 LayerTreeTest::SetupTree();
46 }
47
48 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
49
50 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
51 LayerImpl* root = impl->active_tree()->root_layer();
52 LayerImpl* child = root->children()[0];
53
54 // Verify the draw properties are valid.
55 EXPECT_TRUE(root->IsDrawnRenderSurfaceLayerListMember());
56 EXPECT_TRUE(child->IsDrawnRenderSurfaceLayerListMember());
57
58 EXPECT_OCCLUSION_EQ(
59 Occlusion(child->draw_transform(), SimpleEnclosedRegion(),
60 SimpleEnclosedRegion()),
61 child->draw_properties().occlusion_in_content_space);
62 EXPECT_OCCLUSION_EQ(
63 Occlusion(root->draw_transform(), SimpleEnclosedRegion(),
64 SimpleEnclosedRegion(gfx::Rect(10, 6, 50, 59))),
65 root->draw_properties().occlusion_in_content_space);
66 EndTest();
67 }
68
69 void AfterTest() override {}
70 };
71
72 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostOcclusionTestDrawPropertiesOnLayer);
73
74 // Verify occlusion is set on the render surfaces.
75 class LayerTreeHostOcclusionTestDrawPropertiesOnSurface
76 : public LayerTreeHostOcclusionTest {
77 public:
78 void SetupTree() override {
79 scoped_refptr<Layer> root = Layer::Create();
80 root->SetBounds(gfx::Size(100, 100));
81 root->SetIsDrawable(true);
82
83 scoped_refptr<Layer> child = Layer::Create();
84 child->SetBounds(gfx::Size(1, 1));
85 child->SetPosition(gfx::PointF(10.f, 5.5f));
86 child->SetIsDrawable(true);
87 child->SetForceRenderSurface(true);
88 root->AddChild(child);
89
90 scoped_refptr<Layer> child2 = Layer::Create();
91 child2->SetBounds(gfx::Size(10, 12));
92 child2->SetPosition(gfx::PointF(13.f, 8.5f));
93 child2->SetContentsOpaque(true);
94 child2->SetIsDrawable(true);
95 root->AddChild(child2);
96
97 layer_tree_host()->SetRootLayer(root);
98 LayerTreeTest::SetupTree();
99 }
100
101 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
102
103 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
104 LayerImpl* root = impl->active_tree()->root_layer();
105 LayerImpl* child = root->children()[0];
106 RenderSurfaceImpl* surface = child->render_surface();
107
108 // Verify the draw properties are valid.
109 EXPECT_TRUE(root->IsDrawnRenderSurfaceLayerListMember());
110 EXPECT_TRUE(child->IsDrawnRenderSurfaceLayerListMember());
111 EXPECT_EQ(child, child->render_target());
112
113 EXPECT_OCCLUSION_EQ(
114 Occlusion(surface->draw_transform(), SimpleEnclosedRegion(),
115 SimpleEnclosedRegion(gfx::Rect(13, 9, 10, 11))),
116 surface->occlusion_in_content_space());
117 EndTest();
118 }
119
120 void AfterTest() override {}
121 };
122
123 SINGLE_AND_MULTI_THREAD_TEST_F(
124 LayerTreeHostOcclusionTestDrawPropertiesOnSurface);
125
126 // Verify occlusion is set on mask layers.
127 class LayerTreeHostOcclusionTestDrawPropertiesOnMask
128 : public LayerTreeHostOcclusionTest {
129 public:
130 void SetupTree() override {
131 scoped_refptr<Layer> root = Layer::Create();
132 root->SetBounds(gfx::Size(100, 100));
133 root->SetIsDrawable(true);
134
135 scoped_refptr<Layer> child = Layer::Create();
136 child->SetBounds(gfx::Size(30, 40));
137 child->SetPosition(gfx::PointF(10.f, 5.5f));
138 child->SetIsDrawable(true);
139 root->AddChild(child);
140
141 scoped_refptr<Layer> make_surface_bigger = Layer::Create();
142 make_surface_bigger->SetBounds(gfx::Size(100, 100));
143 make_surface_bigger->SetPosition(gfx::PointF(-10.f, -15.f));
144 make_surface_bigger->SetIsDrawable(true);
145 child->AddChild(make_surface_bigger);
146
147 scoped_refptr<Layer> mask = PictureLayer::Create(&client_);
148 mask->SetBounds(gfx::Size(30, 40));
149 mask->SetIsDrawable(true);
150 child->SetMaskLayer(mask.get());
151
152 scoped_refptr<Layer> child2 = Layer::Create();
153 child2->SetBounds(gfx::Size(10, 12));
154 child2->SetPosition(gfx::PointF(13.f, 8.5f));
155 child2->SetContentsOpaque(true);
156 child2->SetIsDrawable(true);
157 root->AddChild(child2);
158
159 layer_tree_host()->SetRootLayer(root);
160 LayerTreeTest::SetupTree();
161 }
162
163 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
164
165 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
166 LayerImpl* root = impl->active_tree()->root_layer();
167 LayerImpl* child = root->children()[0];
168 RenderSurfaceImpl* surface = child->render_surface();
169 LayerImpl* mask = child->mask_layer();
170
171 // Verify the draw properties are valid.
172 EXPECT_TRUE(root->IsDrawnRenderSurfaceLayerListMember());
173 EXPECT_TRUE(child->IsDrawnRenderSurfaceLayerListMember());
174 EXPECT_EQ(child, child->render_target());
175
176 gfx::Transform transform = surface->draw_transform();
177 transform.PreconcatTransform(child->draw_transform());
178
179 EXPECT_OCCLUSION_EQ(
180 Occlusion(transform, SimpleEnclosedRegion(),
181 SimpleEnclosedRegion(gfx::Rect(13, 9, 10, 11))),
182 mask->draw_properties().occlusion_in_content_space);
183 EndTest();
184 }
185
186 void AfterTest() override {}
187
188 FakeContentLayerClient client_;
189 };
190
191 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostOcclusionTestDrawPropertiesOnMask);
192
193 // Verify occlusion is set to empty inside the subtree of a replica. This is
194 // done because the tile system does not know about replicas, and so would not
195 // know that something is unoccluded on the replica even though it's occluded on
196 // the original.
197 class LayerTreeHostOcclusionTestDrawPropertiesInsideReplica
198 : public LayerTreeHostOcclusionTest {
199 public:
200 void SetupTree() override {
201 scoped_refptr<Layer> root = Layer::Create();
202 root->SetBounds(gfx::Size(100, 100));
203 root->SetIsDrawable(true);
204
205 scoped_refptr<Layer> child = Layer::Create();
206 child->SetBounds(gfx::Size(1, 1));
207 child->SetPosition(gfx::PointF(10.f, 5.5f));
208 child->SetIsDrawable(true);
209 child->SetForceRenderSurface(true);
210 root->AddChild(child);
211
212 scoped_refptr<Layer> replica = Layer::Create();
213 gfx::Transform translate;
214 translate.Translate(20.f, 4.f);
215 replica->SetTransform(translate);
216 child->SetReplicaLayer(replica.get());
217
218 scoped_refptr<Layer> mask = PictureLayer::Create(&client_);
219 mask->SetBounds(gfx::Size(30, 40));
220 mask->SetIsDrawable(true);
221 child->SetMaskLayer(mask.get());
222
223 scoped_refptr<Layer> child2 = Layer::Create();
224 child2->SetBounds(gfx::Size(10, 12));
225 child2->SetPosition(gfx::PointF(13.f, 8.5f));
226 child2->SetContentsOpaque(true);
227 child2->SetIsDrawable(true);
228 root->AddChild(child2);
229
230 layer_tree_host()->SetRootLayer(root);
231 LayerTreeTest::SetupTree();
232 }
233
234 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
235
236 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
237 LayerImpl* root = impl->active_tree()->root_layer();
238 LayerImpl* child = root->children()[0];
239 RenderSurfaceImpl* surface = child->render_surface();
240 LayerImpl* mask = child->mask_layer();
241
242 // Verify the draw properties are valid.
243 EXPECT_TRUE(root->IsDrawnRenderSurfaceLayerListMember());
244 EXPECT_TRUE(child->IsDrawnRenderSurfaceLayerListMember());
245 EXPECT_EQ(child, child->render_target());
246
247 // No occlusion from on child, which is part of the replica.
248 EXPECT_OCCLUSION_EQ(Occlusion(),
249 child->draw_properties().occlusion_in_content_space);
250 // Occlusion on the surface is okay.
251 EXPECT_OCCLUSION_EQ(
252 Occlusion(surface->draw_transform(), SimpleEnclosedRegion(),
253 SimpleEnclosedRegion(gfx::Rect(13, 9, 10, 11))),
254 surface->occlusion_in_content_space());
255 // No occlusion on the replica'd mask.
256 EXPECT_OCCLUSION_EQ(Occlusion(),
257 mask->draw_properties().occlusion_in_content_space);
258 EndTest();
259 }
260
261 void AfterTest() override {}
262
263 FakeContentLayerClient client_;
264 };
265
266 SINGLE_AND_MULTI_THREAD_TEST_F(
267 LayerTreeHostOcclusionTestDrawPropertiesInsideReplica);
268
269 } // namespace
270 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest_no_message_loop.cc ('k') | cc/trees/layer_tree_host_unittest_picture.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698