OLD | NEW |
| (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 "config.h" | |
6 | |
7 #include "CCLayerIterator.h" | |
8 | |
9 #include "CCLayerTreeHostCommon.h" | |
10 #include "LayerChromium.h" | |
11 #include "testing/gmock/include/gmock/gmock.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 #include <public/WebTransformationMatrix.h> | |
14 | |
15 using namespace cc; | |
16 using WebKit::WebTransformationMatrix; | |
17 using ::testing::Mock; | |
18 using ::testing::_; | |
19 using ::testing::AtLeast; | |
20 using ::testing::AnyNumber; | |
21 | |
22 namespace { | |
23 | |
24 class TestLayerChromium : public LayerChromium { | |
25 public: | |
26 static scoped_refptr<TestLayerChromium> create() { return make_scoped_refptr
(new TestLayerChromium()); } | |
27 | |
28 int m_countRepresentingTargetSurface; | |
29 int m_countRepresentingContributingSurface; | |
30 int m_countRepresentingItself; | |
31 | |
32 virtual bool drawsContent() const OVERRIDE { return m_drawsContent; } | |
33 void setDrawsContent(bool drawsContent) { m_drawsContent = drawsContent; } | |
34 | |
35 private: | |
36 TestLayerChromium() | |
37 : LayerChromium() | |
38 , m_drawsContent(true) | |
39 { | |
40 setBounds(IntSize(100, 100)); | |
41 setPosition(IntPoint()); | |
42 setAnchorPoint(IntPoint()); | |
43 } | |
44 virtual ~TestLayerChromium() | |
45 { | |
46 } | |
47 | |
48 bool m_drawsContent; | |
49 }; | |
50 | |
51 #define EXPECT_COUNT(layer, target, contrib, itself) \ | |
52 EXPECT_EQ(target, layer->m_countRepresentingTargetSurface); \ | |
53 EXPECT_EQ(contrib, layer->m_countRepresentingContributingSurface); \ | |
54 EXPECT_EQ(itself, layer->m_countRepresentingItself); | |
55 | |
56 typedef CCLayerIterator<LayerChromium, std::vector<scoped_refptr<LayerChromium>
>, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack> FrontToBack; | |
57 typedef CCLayerIterator<LayerChromium, std::vector<scoped_refptr<LayerChromium>
>, RenderSurfaceChromium, CCLayerIteratorActions::BackToFront> BackToFront; | |
58 | |
59 void resetCounts(std::vector<scoped_refptr<LayerChromium> >& renderSurfaceLayerL
ist) | |
60 { | |
61 for (unsigned surfaceIndex = 0; surfaceIndex < renderSurfaceLayerList.size()
; ++surfaceIndex) { | |
62 TestLayerChromium* renderSurfaceLayer = static_cast<TestLayerChromium*>(
renderSurfaceLayerList[surfaceIndex].get()); | |
63 RenderSurfaceChromium* renderSurface = renderSurfaceLayer->renderSurface
(); | |
64 | |
65 renderSurfaceLayer->m_countRepresentingTargetSurface = -1; | |
66 renderSurfaceLayer->m_countRepresentingContributingSurface = -1; | |
67 renderSurfaceLayer->m_countRepresentingItself = -1; | |
68 | |
69 for (unsigned layerIndex = 0; layerIndex < renderSurface->layerList().si
ze(); ++layerIndex) { | |
70 TestLayerChromium* layer = static_cast<TestLayerChromium*>(renderSur
face->layerList()[layerIndex].get()); | |
71 | |
72 layer->m_countRepresentingTargetSurface = -1; | |
73 layer->m_countRepresentingContributingSurface = -1; | |
74 layer->m_countRepresentingItself = -1; | |
75 } | |
76 } | |
77 } | |
78 | |
79 void iterateFrontToBack(std::vector<scoped_refptr<LayerChromium> >* renderSurfac
eLayerList) | |
80 { | |
81 resetCounts(*renderSurfaceLayerList); | |
82 int count = 0; | |
83 for (FrontToBack it = FrontToBack::begin(renderSurfaceLayerList); it != Fron
tToBack::end(renderSurfaceLayerList); ++it, ++count) { | |
84 TestLayerChromium* layer = static_cast<TestLayerChromium*>(*it); | |
85 if (it.representsTargetRenderSurface()) | |
86 layer->m_countRepresentingTargetSurface = count; | |
87 if (it.representsContributingRenderSurface()) | |
88 layer->m_countRepresentingContributingSurface = count; | |
89 if (it.representsItself()) | |
90 layer->m_countRepresentingItself = count; | |
91 } | |
92 } | |
93 | |
94 void iterateBackToFront(std::vector<scoped_refptr<LayerChromium> >* renderSurfac
eLayerList) | |
95 { | |
96 resetCounts(*renderSurfaceLayerList); | |
97 int count = 0; | |
98 for (BackToFront it = BackToFront::begin(renderSurfaceLayerList); it != Back
ToFront::end(renderSurfaceLayerList); ++it, ++count) { | |
99 TestLayerChromium* layer = static_cast<TestLayerChromium*>(*it); | |
100 if (it.representsTargetRenderSurface()) | |
101 layer->m_countRepresentingTargetSurface = count; | |
102 if (it.representsContributingRenderSurface()) | |
103 layer->m_countRepresentingContributingSurface = count; | |
104 if (it.representsItself()) | |
105 layer->m_countRepresentingItself = count; | |
106 } | |
107 } | |
108 | |
109 TEST(CCLayerIteratorTest, emptyTree) | |
110 { | |
111 std::vector<scoped_refptr<LayerChromium> > renderSurfaceLayerList; | |
112 | |
113 iterateBackToFront(&renderSurfaceLayerList); | |
114 iterateFrontToBack(&renderSurfaceLayerList); | |
115 } | |
116 | |
117 TEST(CCLayerIteratorTest, simpleTree) | |
118 { | |
119 scoped_refptr<TestLayerChromium> rootLayer = TestLayerChromium::create(); | |
120 scoped_refptr<TestLayerChromium> first = TestLayerChromium::create(); | |
121 scoped_refptr<TestLayerChromium> second = TestLayerChromium::create(); | |
122 scoped_refptr<TestLayerChromium> third = TestLayerChromium::create(); | |
123 scoped_refptr<TestLayerChromium> fourth = TestLayerChromium::create(); | |
124 | |
125 rootLayer->createRenderSurface(); | |
126 | |
127 rootLayer->addChild(first); | |
128 rootLayer->addChild(second); | |
129 rootLayer->addChild(third); | |
130 rootLayer->addChild(fourth); | |
131 | |
132 std::vector<scoped_refptr<LayerChromium> > renderSurfaceLayerList; | |
133 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer.get(), rootLayer->b
ounds(), 1, 256, renderSurfaceLayerList); | |
134 | |
135 iterateBackToFront(&renderSurfaceLayerList); | |
136 EXPECT_COUNT(rootLayer, 0, -1, 1); | |
137 EXPECT_COUNT(first, -1, -1, 2); | |
138 EXPECT_COUNT(second, -1, -1, 3); | |
139 EXPECT_COUNT(third, -1, -1, 4); | |
140 EXPECT_COUNT(fourth, -1, -1, 5); | |
141 | |
142 iterateFrontToBack(&renderSurfaceLayerList); | |
143 EXPECT_COUNT(rootLayer, 5, -1, 4); | |
144 EXPECT_COUNT(first, -1, -1, 3); | |
145 EXPECT_COUNT(second, -1, -1, 2); | |
146 EXPECT_COUNT(third, -1, -1, 1); | |
147 EXPECT_COUNT(fourth, -1, -1, 0); | |
148 | |
149 } | |
150 | |
151 TEST(CCLayerIteratorTest, complexTree) | |
152 { | |
153 scoped_refptr<TestLayerChromium> rootLayer = TestLayerChromium::create(); | |
154 scoped_refptr<TestLayerChromium> root1 = TestLayerChromium::create(); | |
155 scoped_refptr<TestLayerChromium> root2 = TestLayerChromium::create(); | |
156 scoped_refptr<TestLayerChromium> root3 = TestLayerChromium::create(); | |
157 scoped_refptr<TestLayerChromium> root21 = TestLayerChromium::create(); | |
158 scoped_refptr<TestLayerChromium> root22 = TestLayerChromium::create(); | |
159 scoped_refptr<TestLayerChromium> root23 = TestLayerChromium::create(); | |
160 scoped_refptr<TestLayerChromium> root221 = TestLayerChromium::create(); | |
161 scoped_refptr<TestLayerChromium> root231 = TestLayerChromium::create(); | |
162 | |
163 rootLayer->createRenderSurface(); | |
164 | |
165 rootLayer->addChild(root1); | |
166 rootLayer->addChild(root2); | |
167 rootLayer->addChild(root3); | |
168 root2->addChild(root21); | |
169 root2->addChild(root22); | |
170 root2->addChild(root23); | |
171 root22->addChild(root221); | |
172 root23->addChild(root231); | |
173 | |
174 std::vector<scoped_refptr<LayerChromium> > renderSurfaceLayerList; | |
175 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer.get(), rootLayer->b
ounds(), 1, 256, renderSurfaceLayerList); | |
176 | |
177 iterateBackToFront(&renderSurfaceLayerList); | |
178 EXPECT_COUNT(rootLayer, 0, -1, 1); | |
179 EXPECT_COUNT(root1, -1, -1, 2); | |
180 EXPECT_COUNT(root2, -1, -1, 3); | |
181 EXPECT_COUNT(root21, -1, -1, 4); | |
182 EXPECT_COUNT(root22, -1, -1, 5); | |
183 EXPECT_COUNT(root221, -1, -1, 6); | |
184 EXPECT_COUNT(root23, -1, -1, 7); | |
185 EXPECT_COUNT(root231, -1, -1, 8); | |
186 EXPECT_COUNT(root3, -1, -1, 9); | |
187 | |
188 iterateFrontToBack(&renderSurfaceLayerList); | |
189 EXPECT_COUNT(rootLayer, 9, -1, 8); | |
190 EXPECT_COUNT(root1, -1, -1, 7); | |
191 EXPECT_COUNT(root2, -1, -1, 6); | |
192 EXPECT_COUNT(root21, -1, -1, 5); | |
193 EXPECT_COUNT(root22, -1, -1, 4); | |
194 EXPECT_COUNT(root221, -1, -1, 3); | |
195 EXPECT_COUNT(root23, -1, -1, 2); | |
196 EXPECT_COUNT(root231, -1, -1, 1); | |
197 EXPECT_COUNT(root3, -1, -1, 0); | |
198 | |
199 } | |
200 | |
201 TEST(CCLayerIteratorTest, complexTreeMultiSurface) | |
202 { | |
203 scoped_refptr<TestLayerChromium> rootLayer = TestLayerChromium::create(); | |
204 scoped_refptr<TestLayerChromium> root1 = TestLayerChromium::create(); | |
205 scoped_refptr<TestLayerChromium> root2 = TestLayerChromium::create(); | |
206 scoped_refptr<TestLayerChromium> root3 = TestLayerChromium::create(); | |
207 scoped_refptr<TestLayerChromium> root21 = TestLayerChromium::create(); | |
208 scoped_refptr<TestLayerChromium> root22 = TestLayerChromium::create(); | |
209 scoped_refptr<TestLayerChromium> root23 = TestLayerChromium::create(); | |
210 scoped_refptr<TestLayerChromium> root221 = TestLayerChromium::create(); | |
211 scoped_refptr<TestLayerChromium> root231 = TestLayerChromium::create(); | |
212 | |
213 rootLayer->createRenderSurface(); | |
214 rootLayer->renderSurface()->setContentRect(IntRect(IntPoint(), rootLayer->bo
unds())); | |
215 | |
216 rootLayer->addChild(root1); | |
217 rootLayer->addChild(root2); | |
218 rootLayer->addChild(root3); | |
219 root2->setDrawsContent(false); | |
220 root2->setOpacity(0.5); // Force the layer to own a new surface. | |
221 root2->addChild(root21); | |
222 root2->addChild(root22); | |
223 root2->addChild(root23); | |
224 root22->setOpacity(0.5); | |
225 root22->addChild(root221); | |
226 root23->setOpacity(0.5); | |
227 root23->addChild(root231); | |
228 | |
229 std::vector<scoped_refptr<LayerChromium> > renderSurfaceLayerList; | |
230 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer.get(), rootLayer->b
ounds(), 1, 256, renderSurfaceLayerList); | |
231 | |
232 iterateBackToFront(&renderSurfaceLayerList); | |
233 EXPECT_COUNT(rootLayer, 0, -1, 1); | |
234 EXPECT_COUNT(root1, -1, -1, 2); | |
235 EXPECT_COUNT(root2, 4, 3, -1); | |
236 EXPECT_COUNT(root21, -1, -1, 5); | |
237 EXPECT_COUNT(root22, 7, 6, 8); | |
238 EXPECT_COUNT(root221, -1, -1, 9); | |
239 EXPECT_COUNT(root23, 11, 10, 12); | |
240 EXPECT_COUNT(root231, -1, -1, 13); | |
241 EXPECT_COUNT(root3, -1, -1, 14); | |
242 | |
243 iterateFrontToBack(&renderSurfaceLayerList); | |
244 EXPECT_COUNT(rootLayer, 14, -1, 13); | |
245 EXPECT_COUNT(root1, -1, -1, 12); | |
246 EXPECT_COUNT(root2, 10, 11, -1); | |
247 EXPECT_COUNT(root21, -1, -1, 9); | |
248 EXPECT_COUNT(root22, 7, 8, 6); | |
249 EXPECT_COUNT(root221, -1, -1, 5); | |
250 EXPECT_COUNT(root23, 3, 4, 2); | |
251 EXPECT_COUNT(root231, -1, -1, 1); | |
252 EXPECT_COUNT(root3, -1, -1, 0); | |
253 } | |
254 | |
255 } // namespace | |
OLD | NEW |