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

Side by Side Diff: cc/layer_unittest.cc

Issue 11189043: cc: Rename cc classes and members to match filenames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 | Annotate | Revision Log
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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/layer.h" 7 #include "cc/layer.h"
8 8
9 #include "CCKeyframedAnimationCurve.h" 9 #include "CCKeyframedAnimationCurve.h"
10 #include "CCLayerImpl.h" 10 #include "CCLayerImpl.h"
(...skipping 16 matching lines...) Expand all
27 using ::testing::AnyNumber; 27 using ::testing::AnyNumber;
28 28
29 #define EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(numTimesExpectedSetNeedsCom mit, codeToTest) do { \ 29 #define EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(numTimesExpectedSetNeedsCom mit, codeToTest) do { \
30 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times((numTimesExpectedS etNeedsCommit)); \ 30 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times((numTimesExpectedS etNeedsCommit)); \
31 codeToTest; \ 31 codeToTest; \
32 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); \ 32 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); \
33 } while (0) 33 } while (0)
34 34
35 namespace { 35 namespace {
36 36
37 class MockCCLayerTreeHost : public CCLayerTreeHost { 37 class MockLayerImplTreeHost : public LayerTreeHost {
38 public: 38 public:
39 MockCCLayerTreeHost() 39 MockLayerImplTreeHost()
40 : CCLayerTreeHost(&m_fakeClient, CCLayerTreeSettings()) 40 : LayerTreeHost(&m_fakeClient, LayerTreeSettings())
41 { 41 {
42 initialize(); 42 initialize();
43 } 43 }
44 44
45 MOCK_METHOD0(setNeedsCommit, void()); 45 MOCK_METHOD0(setNeedsCommit, void());
46 46
47 private: 47 private:
48 FakeCCLayerTreeHostClient m_fakeClient; 48 FakeLayerImplTreeHostClient m_fakeClient;
49 }; 49 };
50 50
51 class MockLayerPainterChromium : public LayerPainterChromium { 51 class MockLayerPainter : public LayerPainter {
52 public: 52 public:
53 virtual void paint(SkCanvas*, const IntRect&, FloatRect&) OVERRIDE { } 53 virtual void paint(SkCanvas*, const IntRect&, FloatRect&) OVERRIDE { }
54 }; 54 };
55 55
56 56
57 class LayerChromiumTest : public testing::Test { 57 class LayerTest : public testing::Test {
58 public: 58 public:
59 LayerChromiumTest() 59 LayerTest()
60 : m_compositorInitializer(0) 60 : m_compositorInitializer(0)
61 { 61 {
62 } 62 }
63 63
64 protected: 64 protected:
65 virtual void SetUp() 65 virtual void SetUp()
66 { 66 {
67 m_layerTreeHost = scoped_ptr<MockCCLayerTreeHost>(new MockCCLayerTreeHos t); 67 m_layerTreeHost = scoped_ptr<MockLayerImplTreeHost>(new MockLayerImplTre eHost);
68 } 68 }
69 69
70 virtual void TearDown() 70 virtual void TearDown()
71 { 71 {
72 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); 72 Mock::VerifyAndClearExpectations(m_layerTreeHost.get());
73 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AnyNumber()); 73 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AnyNumber());
74 m_parent = NULL; 74 m_parent = NULL;
75 m_child1 = NULL; 75 m_child1 = NULL;
76 m_child2 = NULL; 76 m_child2 = NULL;
77 m_child3 = NULL; 77 m_child3 = NULL;
(...skipping 23 matching lines...) Expand all
101 101
102 ASSERT_EQ(static_cast<size_t>(1), m_child2->children().size()); 102 ASSERT_EQ(static_cast<size_t>(1), m_child2->children().size());
103 EXPECT_EQ(m_grandChild3, m_child2->children()[0]); 103 EXPECT_EQ(m_grandChild3, m_child2->children()[0]);
104 EXPECT_EQ(m_child2.get(), m_grandChild3->parent()); 104 EXPECT_EQ(m_child2.get(), m_grandChild3->parent());
105 105
106 ASSERT_EQ(static_cast<size_t>(0), m_child3->children().size()); 106 ASSERT_EQ(static_cast<size_t>(0), m_child3->children().size());
107 } 107 }
108 108
109 void createSimpleTestTree() 109 void createSimpleTestTree()
110 { 110 {
111 m_parent = LayerChromium::create(); 111 m_parent = Layer::create();
112 m_child1 = LayerChromium::create(); 112 m_child1 = Layer::create();
113 m_child2 = LayerChromium::create(); 113 m_child2 = Layer::create();
114 m_child3 = LayerChromium::create(); 114 m_child3 = Layer::create();
115 m_grandChild1 = LayerChromium::create(); 115 m_grandChild1 = Layer::create();
116 m_grandChild2 = LayerChromium::create(); 116 m_grandChild2 = Layer::create();
117 m_grandChild3 = LayerChromium::create(); 117 m_grandChild3 = Layer::create();
118 118
119 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AnyNumber()); 119 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AnyNumber());
120 m_layerTreeHost->setRootLayer(m_parent); 120 m_layerTreeHost->setRootLayer(m_parent);
121 121
122 m_parent->addChild(m_child1); 122 m_parent->addChild(m_child1);
123 m_parent->addChild(m_child2); 123 m_parent->addChild(m_child2);
124 m_parent->addChild(m_child3); 124 m_parent->addChild(m_child3);
125 m_child1->addChild(m_grandChild1); 125 m_child1->addChild(m_grandChild1);
126 m_child1->addChild(m_grandChild2); 126 m_child1->addChild(m_grandChild2);
127 m_child2->addChild(m_grandChild3); 127 m_child2->addChild(m_grandChild3);
128 128
129 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); 129 Mock::VerifyAndClearExpectations(m_layerTreeHost.get());
130 130
131 verifyTestTreeInitialState(); 131 verifyTestTreeInitialState();
132 } 132 }
133 133
134 scoped_ptr<MockCCLayerTreeHost> m_layerTreeHost; 134 scoped_ptr<MockLayerImplTreeHost> m_layerTreeHost;
135 scoped_refptr<LayerChromium> m_parent, m_child1, m_child2, m_child3, m_grand Child1, m_grandChild2, m_grandChild3; 135 scoped_refptr<Layer> m_parent, m_child1, m_child2, m_child3, m_grandChild1, m_grandChild2, m_grandChild3;
136 WebCompositorInitializer m_compositorInitializer; 136 WebCompositorInitializer m_compositorInitializer;
137 }; 137 };
138 138
139 TEST_F(LayerChromiumTest, basicCreateAndDestroy) 139 TEST_F(LayerTest, basicCreateAndDestroy)
140 { 140 {
141 scoped_refptr<LayerChromium> testLayer = LayerChromium::create(); 141 scoped_refptr<Layer> testLayer = Layer::create();
142 ASSERT_TRUE(testLayer); 142 ASSERT_TRUE(testLayer);
143 143
144 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(0); 144 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(0);
145 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 145 testLayer->setLayerTreeHost(m_layerTreeHost.get());
146 } 146 }
147 147
148 TEST_F(LayerChromiumTest, addAndRemoveChild) 148 TEST_F(LayerTest, addAndRemoveChild)
149 { 149 {
150 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 150 scoped_refptr<Layer> parent = Layer::create();
151 scoped_refptr<LayerChromium> child = LayerChromium::create(); 151 scoped_refptr<Layer> child = Layer::create();
152 152
153 // Upon creation, layers should not have children or parent. 153 // Upon creation, layers should not have children or parent.
154 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); 154 ASSERT_EQ(static_cast<size_t>(0), parent->children().size());
155 EXPECT_FALSE(child->parent()); 155 EXPECT_FALSE(child->parent());
156 156
157 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, m_layerTreeHost->setRootLaye r(parent)); 157 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, m_layerTreeHost->setRootLaye r(parent));
158 158
159 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->addChild(child)); 159 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->addChild(child));
160 160
161 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); 161 ASSERT_EQ(static_cast<size_t>(1), parent->children().size());
162 EXPECT_EQ(child.get(), parent->children()[0]); 162 EXPECT_EQ(child.get(), parent->children()[0]);
163 EXPECT_EQ(parent.get(), child->parent()); 163 EXPECT_EQ(parent.get(), child->parent());
164 EXPECT_EQ(parent.get(), child->rootLayer()); 164 EXPECT_EQ(parent.get(), child->rootLayer());
165 165
166 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), child->removeFromPa rent()); 166 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), child->removeFromPa rent());
167 } 167 }
168 168
169 TEST_F(LayerChromiumTest, insertChild) 169 TEST_F(LayerTest, insertChild)
170 { 170 {
171 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 171 scoped_refptr<Layer> parent = Layer::create();
172 scoped_refptr<LayerChromium> child1 = LayerChromium::create(); 172 scoped_refptr<Layer> child1 = Layer::create();
173 scoped_refptr<LayerChromium> child2 = LayerChromium::create(); 173 scoped_refptr<Layer> child2 = Layer::create();
174 scoped_refptr<LayerChromium> child3 = LayerChromium::create(); 174 scoped_refptr<Layer> child3 = Layer::create();
175 scoped_refptr<LayerChromium> child4 = LayerChromium::create(); 175 scoped_refptr<Layer> child4 = Layer::create();
176 176
177 parent->setLayerTreeHost(m_layerTreeHost.get()); 177 parent->setLayerTreeHost(m_layerTreeHost.get());
178 178
179 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); 179 ASSERT_EQ(static_cast<size_t>(0), parent->children().size());
180 180
181 // Case 1: inserting to empty list. 181 // Case 1: inserting to empty list.
182 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child3, 0)); 182 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child3, 0));
183 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); 183 ASSERT_EQ(static_cast<size_t>(1), parent->children().size());
184 EXPECT_EQ(child3, parent->children()[0]); 184 EXPECT_EQ(child3, parent->children()[0]);
185 EXPECT_EQ(parent.get(), child3->parent()); 185 EXPECT_EQ(parent.get(), child3->parent());
(...skipping 19 matching lines...) Expand all
205 ASSERT_EQ(static_cast<size_t>(4), parent->children().size()); 205 ASSERT_EQ(static_cast<size_t>(4), parent->children().size());
206 EXPECT_EQ(child1, parent->children()[0]); 206 EXPECT_EQ(child1, parent->children()[0]);
207 EXPECT_EQ(child2, parent->children()[1]); 207 EXPECT_EQ(child2, parent->children()[1]);
208 EXPECT_EQ(child3, parent->children()[2]); 208 EXPECT_EQ(child3, parent->children()[2]);
209 EXPECT_EQ(child4, parent->children()[3]); 209 EXPECT_EQ(child4, parent->children()[3]);
210 EXPECT_EQ(parent.get(), child4->parent()); 210 EXPECT_EQ(parent.get(), child4->parent());
211 211
212 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); 212 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1));
213 } 213 }
214 214
215 TEST_F(LayerChromiumTest, insertChildPastEndOfList) 215 TEST_F(LayerTest, insertChildPastEndOfList)
216 { 216 {
217 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 217 scoped_refptr<Layer> parent = Layer::create();
218 scoped_refptr<LayerChromium> child1 = LayerChromium::create(); 218 scoped_refptr<Layer> child1 = Layer::create();
219 scoped_refptr<LayerChromium> child2 = LayerChromium::create(); 219 scoped_refptr<Layer> child2 = Layer::create();
220 220
221 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); 221 ASSERT_EQ(static_cast<size_t>(0), parent->children().size());
222 222
223 // insert to an out-of-bounds index 223 // insert to an out-of-bounds index
224 parent->insertChild(child1, 53); 224 parent->insertChild(child1, 53);
225 225
226 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); 226 ASSERT_EQ(static_cast<size_t>(1), parent->children().size());
227 EXPECT_EQ(child1, parent->children()[0]); 227 EXPECT_EQ(child1, parent->children()[0]);
228 228
229 // insert another child to out-of-bounds, when list is not already empty. 229 // insert another child to out-of-bounds, when list is not already empty.
230 parent->insertChild(child2, 2459); 230 parent->insertChild(child2, 2459);
231 231
232 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); 232 ASSERT_EQ(static_cast<size_t>(2), parent->children().size());
233 EXPECT_EQ(child1, parent->children()[0]); 233 EXPECT_EQ(child1, parent->children()[0]);
234 EXPECT_EQ(child2, parent->children()[1]); 234 EXPECT_EQ(child2, parent->children()[1]);
235 } 235 }
236 236
237 TEST_F(LayerChromiumTest, insertSameChildTwice) 237 TEST_F(LayerTest, insertSameChildTwice)
238 { 238 {
239 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 239 scoped_refptr<Layer> parent = Layer::create();
240 scoped_refptr<LayerChromium> child1 = LayerChromium::create(); 240 scoped_refptr<Layer> child1 = Layer::create();
241 scoped_refptr<LayerChromium> child2 = LayerChromium::create(); 241 scoped_refptr<Layer> child2 = Layer::create();
242 242
243 parent->setLayerTreeHost(m_layerTreeHost.get()); 243 parent->setLayerTreeHost(m_layerTreeHost.get());
244 244
245 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); 245 ASSERT_EQ(static_cast<size_t>(0), parent->children().size());
246 246
247 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child1, 0)); 247 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child1, 0));
248 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child2, 1)); 248 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child2, 1));
249 249
250 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); 250 ASSERT_EQ(static_cast<size_t>(2), parent->children().size());
251 EXPECT_EQ(child1, parent->children()[0]); 251 EXPECT_EQ(child1, parent->children()[0]);
252 EXPECT_EQ(child2, parent->children()[1]); 252 EXPECT_EQ(child2, parent->children()[1]);
253 253
254 // Inserting the same child again should cause the child to be removed and r e-inserted at the new location. 254 // Inserting the same child again should cause the child to be removed and r e-inserted at the new location.
255 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), parent->insertChild (child1, 1)); 255 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), parent->insertChild (child1, 1));
256 256
257 // child1 should now be at the end of the list. 257 // child1 should now be at the end of the list.
258 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); 258 ASSERT_EQ(static_cast<size_t>(2), parent->children().size());
259 EXPECT_EQ(child2, parent->children()[0]); 259 EXPECT_EQ(child2, parent->children()[0]);
260 EXPECT_EQ(child1, parent->children()[1]); 260 EXPECT_EQ(child1, parent->children()[1]);
261 261
262 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); 262 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1));
263 } 263 }
264 264
265 TEST_F(LayerChromiumTest, replaceChildWithNewChild) 265 TEST_F(LayerTest, replaceChildWithNewChild)
266 { 266 {
267 createSimpleTestTree(); 267 createSimpleTestTree();
268 scoped_refptr<LayerChromium> child4 = LayerChromium::create(); 268 scoped_refptr<Layer> child4 = Layer::create();
269 269
270 EXPECT_FALSE(child4->parent()); 270 EXPECT_FALSE(child4->parent());
271 271
272 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), m_parent->replaceCh ild(m_child2.get(), child4)); 272 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), m_parent->replaceCh ild(m_child2.get(), child4));
273 273
274 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size()); 274 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size());
275 EXPECT_EQ(m_child1, m_parent->children()[0]); 275 EXPECT_EQ(m_child1, m_parent->children()[0]);
276 EXPECT_EQ(child4, m_parent->children()[1]); 276 EXPECT_EQ(child4, m_parent->children()[1]);
277 EXPECT_EQ(m_child3, m_parent->children()[2]); 277 EXPECT_EQ(m_child3, m_parent->children()[2]);
278 EXPECT_EQ(m_parent.get(), child4->parent()); 278 EXPECT_EQ(m_parent.get(), child4->parent());
279 279
280 EXPECT_FALSE(m_child2->parent()); 280 EXPECT_FALSE(m_child2->parent());
281 } 281 }
282 282
283 TEST_F(LayerChromiumTest, replaceChildWithNewChildThatHasOtherParent) 283 TEST_F(LayerTest, replaceChildWithNewChildThatHasOtherParent)
284 { 284 {
285 createSimpleTestTree(); 285 createSimpleTestTree();
286 286
287 // create another simple tree with testLayer and child4. 287 // create another simple tree with testLayer and child4.
288 scoped_refptr<LayerChromium> testLayer = LayerChromium::create(); 288 scoped_refptr<Layer> testLayer = Layer::create();
289 scoped_refptr<LayerChromium> child4 = LayerChromium::create(); 289 scoped_refptr<Layer> child4 = Layer::create();
290 testLayer->addChild(child4); 290 testLayer->addChild(child4);
291 ASSERT_EQ(static_cast<size_t>(1), testLayer->children().size()); 291 ASSERT_EQ(static_cast<size_t>(1), testLayer->children().size());
292 EXPECT_EQ(child4, testLayer->children()[0]); 292 EXPECT_EQ(child4, testLayer->children()[0]);
293 EXPECT_EQ(testLayer.get(), child4->parent()); 293 EXPECT_EQ(testLayer.get(), child4->parent());
294 294
295 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), m_parent->replaceCh ild(m_child2.get(), child4)); 295 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), m_parent->replaceCh ild(m_child2.get(), child4));
296 296
297 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size()); 297 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size());
298 EXPECT_EQ(m_child1, m_parent->children()[0]); 298 EXPECT_EQ(m_child1, m_parent->children()[0]);
299 EXPECT_EQ(child4, m_parent->children()[1]); 299 EXPECT_EQ(child4, m_parent->children()[1]);
300 EXPECT_EQ(m_child3, m_parent->children()[2]); 300 EXPECT_EQ(m_child3, m_parent->children()[2]);
301 EXPECT_EQ(m_parent.get(), child4->parent()); 301 EXPECT_EQ(m_parent.get(), child4->parent());
302 302
303 // testLayer should no longer have child4, 303 // testLayer should no longer have child4,
304 // and child2 should no longer have a parent. 304 // and child2 should no longer have a parent.
305 ASSERT_EQ(static_cast<size_t>(0), testLayer->children().size()); 305 ASSERT_EQ(static_cast<size_t>(0), testLayer->children().size());
306 EXPECT_FALSE(m_child2->parent()); 306 EXPECT_FALSE(m_child2->parent());
307 } 307 }
308 308
309 TEST_F(LayerChromiumTest, replaceChildWithSameChild) 309 TEST_F(LayerTest, replaceChildWithSameChild)
310 { 310 {
311 createSimpleTestTree(); 311 createSimpleTestTree();
312 312
313 // setNeedsCommit should not be called because its the same child 313 // setNeedsCommit should not be called because its the same child
314 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, m_parent->replaceChild(m_chi ld2.get(), m_child2)); 314 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, m_parent->replaceChild(m_chi ld2.get(), m_child2));
315 315
316 verifyTestTreeInitialState(); 316 verifyTestTreeInitialState();
317 } 317 }
318 318
319 TEST_F(LayerChromiumTest, removeAllChildren) 319 TEST_F(LayerTest, removeAllChildren)
320 { 320 {
321 createSimpleTestTree(); 321 createSimpleTestTree();
322 322
323 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(3), m_parent->removeAll Children()); 323 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(3), m_parent->removeAll Children());
324 324
325 ASSERT_EQ(static_cast<size_t>(0), m_parent->children().size()); 325 ASSERT_EQ(static_cast<size_t>(0), m_parent->children().size());
326 EXPECT_FALSE(m_child1->parent()); 326 EXPECT_FALSE(m_child1->parent());
327 EXPECT_FALSE(m_child2->parent()); 327 EXPECT_FALSE(m_child2->parent());
328 EXPECT_FALSE(m_child3->parent()); 328 EXPECT_FALSE(m_child3->parent());
329 } 329 }
330 330
331 TEST_F(LayerChromiumTest, setChildren) 331 TEST_F(LayerTest, setChildren)
332 { 332 {
333 scoped_refptr<LayerChromium> oldParent = LayerChromium::create(); 333 scoped_refptr<Layer> oldParent = Layer::create();
334 scoped_refptr<LayerChromium> newParent = LayerChromium::create(); 334 scoped_refptr<Layer> newParent = Layer::create();
335 335
336 scoped_refptr<LayerChromium> child1 = LayerChromium::create(); 336 scoped_refptr<Layer> child1 = Layer::create();
337 scoped_refptr<LayerChromium> child2 = LayerChromium::create(); 337 scoped_refptr<Layer> child2 = Layer::create();
338 338
339 std::vector<scoped_refptr<LayerChromium> > newChildren; 339 std::vector<scoped_refptr<Layer> > newChildren;
340 newChildren.push_back(child1); 340 newChildren.push_back(child1);
341 newChildren.push_back(child2); 341 newChildren.push_back(child2);
342 342
343 // Set up and verify initial test conditions: child1 has a parent, child2 ha s no parent. 343 // Set up and verify initial test conditions: child1 has a parent, child2 ha s no parent.
344 oldParent->addChild(child1); 344 oldParent->addChild(child1);
345 ASSERT_EQ(static_cast<size_t>(0), newParent->children().size()); 345 ASSERT_EQ(static_cast<size_t>(0), newParent->children().size());
346 EXPECT_EQ(oldParent.get(), child1->parent()); 346 EXPECT_EQ(oldParent.get(), child1->parent());
347 EXPECT_FALSE(child2->parent()); 347 EXPECT_FALSE(child2->parent());
348 348
349 newParent->setLayerTreeHost(m_layerTreeHost.get()); 349 newParent->setLayerTreeHost(m_layerTreeHost.get());
350 350
351 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), newParent->setChild ren(newChildren)); 351 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), newParent->setChild ren(newChildren));
352 352
353 ASSERT_EQ(static_cast<size_t>(2), newParent->children().size()); 353 ASSERT_EQ(static_cast<size_t>(2), newParent->children().size());
354 EXPECT_EQ(newParent.get(), child1->parent()); 354 EXPECT_EQ(newParent.get(), child1->parent());
355 EXPECT_EQ(newParent.get(), child2->parent()); 355 EXPECT_EQ(newParent.get(), child2->parent());
356 356
357 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); 357 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1));
358 } 358 }
359 359
360 TEST_F(LayerChromiumTest, getRootLayerAfterTreeManipulations) 360 TEST_F(LayerTest, getRootLayerAfterTreeManipulations)
361 { 361 {
362 createSimpleTestTree(); 362 createSimpleTestTree();
363 363
364 // For this test we don't care about setNeedsCommit calls. 364 // For this test we don't care about setNeedsCommit calls.
365 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); 365 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1));
366 366
367 scoped_refptr<LayerChromium> child4 = LayerChromium::create(); 367 scoped_refptr<Layer> child4 = Layer::create();
368 368
369 EXPECT_EQ(m_parent.get(), m_parent->rootLayer()); 369 EXPECT_EQ(m_parent.get(), m_parent->rootLayer());
370 EXPECT_EQ(m_parent.get(), m_child1->rootLayer()); 370 EXPECT_EQ(m_parent.get(), m_child1->rootLayer());
371 EXPECT_EQ(m_parent.get(), m_child2->rootLayer()); 371 EXPECT_EQ(m_parent.get(), m_child2->rootLayer());
372 EXPECT_EQ(m_parent.get(), m_child3->rootLayer()); 372 EXPECT_EQ(m_parent.get(), m_child3->rootLayer());
373 EXPECT_EQ(child4.get(), child4->rootLayer()); 373 EXPECT_EQ(child4.get(), child4->rootLayer());
374 EXPECT_EQ(m_parent.get(), m_grandChild1->rootLayer()); 374 EXPECT_EQ(m_parent.get(), m_grandChild1->rootLayer());
375 EXPECT_EQ(m_parent.get(), m_grandChild2->rootLayer()); 375 EXPECT_EQ(m_parent.get(), m_grandChild2->rootLayer());
376 EXPECT_EQ(m_parent.get(), m_grandChild3->rootLayer()); 376 EXPECT_EQ(m_parent.get(), m_grandChild3->rootLayer());
377 377
(...skipping 26 matching lines...) Expand all
404 EXPECT_EQ(m_parent.get(), m_parent->rootLayer()); 404 EXPECT_EQ(m_parent.get(), m_parent->rootLayer());
405 EXPECT_EQ(m_parent.get(), m_child1->rootLayer()); 405 EXPECT_EQ(m_parent.get(), m_child1->rootLayer());
406 EXPECT_EQ(m_parent.get(), m_child2->rootLayer()); 406 EXPECT_EQ(m_parent.get(), m_child2->rootLayer());
407 EXPECT_EQ(m_parent.get(), m_child3->rootLayer()); 407 EXPECT_EQ(m_parent.get(), m_child3->rootLayer());
408 EXPECT_EQ(m_grandChild3.get(), child4->rootLayer()); 408 EXPECT_EQ(m_grandChild3.get(), child4->rootLayer());
409 EXPECT_EQ(m_parent.get(), m_grandChild1->rootLayer()); 409 EXPECT_EQ(m_parent.get(), m_grandChild1->rootLayer());
410 EXPECT_EQ(m_parent.get(), m_grandChild2->rootLayer()); 410 EXPECT_EQ(m_parent.get(), m_grandChild2->rootLayer());
411 EXPECT_EQ(m_grandChild3.get(), m_grandChild3->rootLayer()); 411 EXPECT_EQ(m_grandChild3.get(), m_grandChild3->rootLayer());
412 } 412 }
413 413
414 TEST_F(LayerChromiumTest, checkSetNeedsDisplayCausesCorrectBehavior) 414 TEST_F(LayerTest, checkSetNeedsDisplayCausesCorrectBehavior)
415 { 415 {
416 // The semantics for setNeedsDisplay which are tested here: 416 // The semantics for setNeedsDisplay which are tested here:
417 // 1. sets needsDisplay flag appropriately. 417 // 1. sets needsDisplay flag appropriately.
418 // 2. indirectly calls setNeedsCommit, exactly once for each call to setNe edsDisplay. 418 // 2. indirectly calls setNeedsCommit, exactly once for each call to setNe edsDisplay.
419 419
420 scoped_refptr<LayerChromium> testLayer = LayerChromium::create(); 420 scoped_refptr<Layer> testLayer = Layer::create();
421 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 421 testLayer->setLayerTreeHost(m_layerTreeHost.get());
422 422
423 IntSize testBounds = IntSize(501, 508); 423 IntSize testBounds = IntSize(501, 508);
424 424
425 FloatRect dirty1 = FloatRect(10, 15, 1, 2); 425 FloatRect dirty1 = FloatRect(10, 15, 1, 2);
426 FloatRect dirty2 = FloatRect(20, 25, 3, 4); 426 FloatRect dirty2 = FloatRect(20, 25, 3, 4);
427 FloatRect emptyDirtyRect = FloatRect(40, 45, 0, 0); 427 FloatRect emptyDirtyRect = FloatRect(40, 45, 0, 0);
428 FloatRect outOfBoundsDirtyRect = FloatRect(400, 405, 500, 502); 428 FloatRect outOfBoundsDirtyRect = FloatRect(400, 405, 500, 502);
429 429
430 // Before anything, testLayer should not be dirty. 430 // Before anything, testLayer should not be dirty.
431 EXPECT_FALSE(testLayer->needsDisplay()); 431 EXPECT_FALSE(testLayer->needsDisplay());
432 432
433 // This is just initialization, but setNeedsCommit behavior is verified anyw ay to avoid warnings. 433 // This is just initialization, but setNeedsCommit behavior is verified anyw ay to avoid warnings.
434 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds)); 434 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds));
435 testLayer = LayerChromium::create(); 435 testLayer = Layer::create();
436 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 436 testLayer->setLayerTreeHost(m_layerTreeHost.get());
437 EXPECT_FALSE(testLayer->needsDisplay()); 437 EXPECT_FALSE(testLayer->needsDisplay());
438 438
439 // The real test begins here. 439 // The real test begins here.
440 440
441 // Case 1: needsDisplay flag should not change because of an empty dirty rec t. 441 // Case 1: needsDisplay flag should not change because of an empty dirty rec t.
442 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(emptyDirtyRect)); 442 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(emptyDirtyRect));
443 EXPECT_FALSE(testLayer->needsDisplay()); 443 EXPECT_FALSE(testLayer->needsDisplay());
444 444
445 // Case 2: basic. 445 // Case 2: basic.
446 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(dirty1)); 446 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(dirty1));
447 EXPECT_TRUE(testLayer->needsDisplay()); 447 EXPECT_TRUE(testLayer->needsDisplay());
448 448
449 // Case 3: a second dirty rect. 449 // Case 3: a second dirty rect.
450 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(dirty2)); 450 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(dirty2));
451 EXPECT_TRUE(testLayer->needsDisplay()); 451 EXPECT_TRUE(testLayer->needsDisplay());
452 452
453 // Case 4: LayerChromium should accept dirty rects that go beyond its bounds . 453 // Case 4: Layer should accept dirty rects that go beyond its bounds.
454 testLayer = LayerChromium::create(); 454 testLayer = Layer::create();
455 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 455 testLayer->setLayerTreeHost(m_layerTreeHost.get());
456 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds)); 456 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds));
457 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(outOfBoundsDirtyRect)); 457 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe ct(outOfBoundsDirtyRect));
458 EXPECT_TRUE(testLayer->needsDisplay()); 458 EXPECT_TRUE(testLayer->needsDisplay());
459 459
460 // Case 5: setNeedsDisplay() without the dirty rect arg. 460 // Case 5: setNeedsDisplay() without the dirty rect arg.
461 testLayer = LayerChromium::create(); 461 testLayer = Layer::create();
462 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 462 testLayer->setLayerTreeHost(m_layerTreeHost.get());
463 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds)); 463 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds));
464 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplay() ); 464 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplay() );
465 EXPECT_TRUE(testLayer->needsDisplay()); 465 EXPECT_TRUE(testLayer->needsDisplay());
466 } 466 }
467 467
468 TEST_F(LayerChromiumTest, checkPropertyChangeCausesCorrectBehavior) 468 TEST_F(LayerTest, checkPropertyChangeCausesCorrectBehavior)
469 { 469 {
470 scoped_refptr<LayerChromium> testLayer = LayerChromium::create(); 470 scoped_refptr<Layer> testLayer = Layer::create();
471 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 471 testLayer->setLayerTreeHost(m_layerTreeHost.get());
472 472
473 scoped_refptr<LayerChromium> dummyLayer = LayerChromium::create(); // just a dummy layer for this test case. 473 scoped_refptr<Layer> dummyLayer = Layer::create(); // just a dummy layer for this test case.
474 474
475 // sanity check of initial test condition 475 // sanity check of initial test condition
476 EXPECT_FALSE(testLayer->needsDisplay()); 476 EXPECT_FALSE(testLayer->needsDisplay());
477 477
478 // Test properties that should not call needsDisplay and needsCommit when ch anged. 478 // Test properties that should not call needsDisplay and needsCommit when ch anged.
479 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setVisibleContent Rect(IntRect(0, 0, 40, 50))); 479 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setVisibleContent Rect(IntRect(0, 0, 40, 50)));
480 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setUseLCDText(tru e)); 480 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setUseLCDText(tru e));
481 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawOpacity(0. 5)); 481 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawOpacity(0. 5));
482 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setRenderTarget(0 )); 482 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setRenderTarget(0 ));
483 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawTransform( WebTransformationMatrix())); 483 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawTransform( WebTransformationMatrix()));
(...skipping 25 matching lines...) Expand all
509 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setForceRenderSur face(true)); 509 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setForceRenderSur face(true));
510 510
511 // The above tests should not have caused a change to the needsDisplay flag. 511 // The above tests should not have caused a change to the needsDisplay flag.
512 EXPECT_FALSE(testLayer->needsDisplay()); 512 EXPECT_FALSE(testLayer->needsDisplay());
513 513
514 // Test properties that should call setNeedsDisplay and setNeedsCommit 514 // Test properties that should call setNeedsDisplay and setNeedsCommit
515 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(IntSize (5, 10))); 515 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(IntSize (5, 10)));
516 EXPECT_TRUE(testLayer->needsDisplay()); 516 EXPECT_TRUE(testLayer->needsDisplay());
517 } 517 }
518 518
519 TEST_F(LayerChromiumTest, verifyPushPropertiesAccumulatesUpdateRect) 519 TEST_F(LayerTest, verifyPushPropertiesAccumulatesUpdateRect)
520 { 520 {
521 DebugScopedSetImplThread setImplThread; 521 DebugScopedSetImplThread setImplThread;
522 522
523 scoped_refptr<LayerChromium> testLayer = LayerChromium::create(); 523 scoped_refptr<Layer> testLayer = Layer::create();
524 scoped_ptr<CCLayerImpl> implLayer = CCLayerImpl::create(1); 524 scoped_ptr<LayerImpl> implLayer = LayerImpl::create(1);
525 525
526 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint::zero(), FloatSize(5, 5) )); 526 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint::zero(), FloatSize(5, 5) ));
527 testLayer->pushPropertiesTo(implLayer.get()); 527 testLayer->pushPropertiesTo(implLayer.get());
528 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint::zero(), FloatSize(5, 5)), implLay er->updateRect()); 528 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint::zero(), FloatSize(5, 5)), implLay er->updateRect());
529 529
530 // The CCLayerImpl's updateRect should be accumulated here, since we did not do anything to clear it. 530 // The LayerImpl's updateRect should be accumulated here, since we did not d o anything to clear it.
531 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint(10, 10), FloatSize(5, 5) )); 531 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint(10, 10), FloatSize(5, 5) ));
532 testLayer->pushPropertiesTo(implLayer.get()); 532 testLayer->pushPropertiesTo(implLayer.get());
533 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint::zero(), FloatSize(15, 15)), implL ayer->updateRect()); 533 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint::zero(), FloatSize(15, 15)), implL ayer->updateRect());
534 534
535 // If we do clear the CCLayerImpl side, then the next updateRect should be f resh without accumulation. 535 // If we do clear the LayerImpl side, then the next updateRect should be fre sh without accumulation.
536 implLayer->resetAllChangeTrackingForSubtree(); 536 implLayer->resetAllChangeTrackingForSubtree();
537 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint(10, 10), FloatSize(5, 5) )); 537 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint(10, 10), FloatSize(5, 5) ));
538 testLayer->pushPropertiesTo(implLayer.get()); 538 testLayer->pushPropertiesTo(implLayer.get());
539 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint(10, 10), FloatSize(5, 5)), implLay er->updateRect()); 539 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint(10, 10), FloatSize(5, 5)), implLay er->updateRect());
540 } 540 }
541 541
542 class LayerChromiumWithContentScaling : public LayerChromium { 542 class LayerWithContentScaling : public Layer {
543 public: 543 public:
544 explicit LayerChromiumWithContentScaling() 544 explicit LayerWithContentScaling()
545 : LayerChromium() 545 : Layer()
546 { 546 {
547 } 547 }
548 548
549 virtual bool needsContentsScale() const OVERRIDE 549 virtual bool needsContentsScale() const OVERRIDE
550 { 550 {
551 return true; 551 return true;
552 } 552 }
553 553
554 virtual void setNeedsDisplayRect(const FloatRect& dirtyRect) OVERRIDE 554 virtual void setNeedsDisplayRect(const FloatRect& dirtyRect) OVERRIDE
555 { 555 {
556 m_lastNeedsDisplayRect = dirtyRect; 556 m_lastNeedsDisplayRect = dirtyRect;
557 LayerChromium::setNeedsDisplayRect(dirtyRect); 557 Layer::setNeedsDisplayRect(dirtyRect);
558 } 558 }
559 559
560 void resetNeedsDisplay() 560 void resetNeedsDisplay()
561 { 561 {
562 m_needsDisplay = false; 562 m_needsDisplay = false;
563 } 563 }
564 564
565 const FloatRect& lastNeedsDisplayRect() const { return m_lastNeedsDisplayRec t; } 565 const FloatRect& lastNeedsDisplayRect() const { return m_lastNeedsDisplayRec t; }
566 566
567 private: 567 private:
568 virtual ~LayerChromiumWithContentScaling() 568 virtual ~LayerWithContentScaling()
569 { 569 {
570 } 570 }
571 571
572 FloatRect m_lastNeedsDisplayRect; 572 FloatRect m_lastNeedsDisplayRect;
573 }; 573 };
574 574
575 TEST_F(LayerChromiumTest, checkContentsScaleChangeTriggersNeedsDisplay) 575 TEST_F(LayerTest, checkContentsScaleChangeTriggersNeedsDisplay)
576 { 576 {
577 scoped_refptr<LayerChromiumWithContentScaling> testLayer = make_scoped_refpt r(new LayerChromiumWithContentScaling()); 577 scoped_refptr<LayerWithContentScaling> testLayer = make_scoped_refptr(new La yerWithContentScaling());
578 testLayer->setLayerTreeHost(m_layerTreeHost.get()); 578 testLayer->setLayerTreeHost(m_layerTreeHost.get());
579 579
580 IntSize testBounds = IntSize(320, 240); 580 IntSize testBounds = IntSize(320, 240);
581 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds)); 581 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou nds));
582 582
583 testLayer->resetNeedsDisplay(); 583 testLayer->resetNeedsDisplay();
584 EXPECT_FALSE(testLayer->needsDisplay()); 584 EXPECT_FALSE(testLayer->needsDisplay());
585 585
586 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setContentsScale( testLayer->contentsScale() + 1.f)); 586 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setContentsScale( testLayer->contentsScale() + 1.f));
587 EXPECT_TRUE(testLayer->needsDisplay()); 587 EXPECT_TRUE(testLayer->needsDisplay());
588 EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 320, 240), testLayer->lastNeedsDisplayR ect()); 588 EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 320, 240), testLayer->lastNeedsDisplayR ect());
589 } 589 }
590 590
591 class FakeCCLayerTreeHost : public CCLayerTreeHost { 591 class FakeLayerImplTreeHost : public LayerTreeHost {
592 public: 592 public:
593 static scoped_ptr<FakeCCLayerTreeHost> create() 593 static scoped_ptr<FakeLayerImplTreeHost> create()
594 { 594 {
595 scoped_ptr<FakeCCLayerTreeHost> host(new FakeCCLayerTreeHost); 595 scoped_ptr<FakeLayerImplTreeHost> host(new FakeLayerImplTreeHost);
596 // The initialize call will fail, since our client doesn't provide a val id GraphicsContext3D, but it doesn't matter in the tests that use this fake so i gnore the return value. 596 // The initialize call will fail, since our client doesn't provide a val id GraphicsContext3D, but it doesn't matter in the tests that use this fake so i gnore the return value.
597 host->initialize(); 597 host->initialize();
598 return host.Pass(); 598 return host.Pass();
599 } 599 }
600 600
601 private: 601 private:
602 FakeCCLayerTreeHost() 602 FakeLayerImplTreeHost()
603 : CCLayerTreeHost(&m_client, CCLayerTreeSettings()) 603 : LayerTreeHost(&m_client, LayerTreeSettings())
604 { 604 {
605 } 605 }
606 606
607 FakeCCLayerTreeHostClient m_client; 607 FakeLayerImplTreeHostClient m_client;
608 }; 608 };
609 609
610 void assertLayerTreeHostMatchesForSubtree(LayerChromium* layer, CCLayerTreeHost* host) 610 void assertLayerTreeHostMatchesForSubtree(Layer* layer, LayerTreeHost* host)
611 { 611 {
612 EXPECT_EQ(host, layer->layerTreeHost()); 612 EXPECT_EQ(host, layer->layerTreeHost());
613 613
614 for (size_t i = 0; i < layer->children().size(); ++i) 614 for (size_t i = 0; i < layer->children().size(); ++i)
615 assertLayerTreeHostMatchesForSubtree(layer->children()[i].get(), host); 615 assertLayerTreeHostMatchesForSubtree(layer->children()[i].get(), host);
616 616
617 if (layer->maskLayer()) 617 if (layer->maskLayer())
618 assertLayerTreeHostMatchesForSubtree(layer->maskLayer(), host); 618 assertLayerTreeHostMatchesForSubtree(layer->maskLayer(), host);
619 619
620 if (layer->replicaLayer()) 620 if (layer->replicaLayer())
621 assertLayerTreeHostMatchesForSubtree(layer->replicaLayer(), host); 621 assertLayerTreeHostMatchesForSubtree(layer->replicaLayer(), host);
622 } 622 }
623 623
624 624
625 TEST(LayerChromiumLayerTreeHostTest, enteringTree) 625 TEST(LayerLayerTreeHostTest, enteringTree)
626 { 626 {
627 WebCompositorInitializer compositorInitializer(0); 627 WebCompositorInitializer compositorInitializer(0);
628 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 628 scoped_refptr<Layer> parent = Layer::create();
629 scoped_refptr<LayerChromium> child = LayerChromium::create(); 629 scoped_refptr<Layer> child = Layer::create();
630 scoped_refptr<LayerChromium> mask = LayerChromium::create(); 630 scoped_refptr<Layer> mask = Layer::create();
631 scoped_refptr<LayerChromium> replica = LayerChromium::create(); 631 scoped_refptr<Layer> replica = Layer::create();
632 scoped_refptr<LayerChromium> replicaMask = LayerChromium::create(); 632 scoped_refptr<Layer> replicaMask = Layer::create();
633 633
634 // Set up a detached tree of layers. The host pointer should be nil for thes e layers. 634 // Set up a detached tree of layers. The host pointer should be nil for thes e layers.
635 parent->addChild(child); 635 parent->addChild(child);
636 child->setMaskLayer(mask.get()); 636 child->setMaskLayer(mask.get());
637 child->setReplicaLayer(replica.get()); 637 child->setReplicaLayer(replica.get());
638 replica->setMaskLayer(mask.get()); 638 replica->setMaskLayer(mask.get());
639 639
640 assertLayerTreeHostMatchesForSubtree(parent.get(), 0); 640 assertLayerTreeHostMatchesForSubtree(parent.get(), 0);
641 641
642 scoped_ptr<FakeCCLayerTreeHost> layerTreeHost(FakeCCLayerTreeHost::create()) ; 642 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat e());
643 // Setting the root layer should set the host pointer for all layers in the tree. 643 // Setting the root layer should set the host pointer for all layers in the tree.
644 layerTreeHost->setRootLayer(parent.get()); 644 layerTreeHost->setRootLayer(parent.get());
645 645
646 assertLayerTreeHostMatchesForSubtree(parent.get(), layerTreeHost.get()); 646 assertLayerTreeHostMatchesForSubtree(parent.get(), layerTreeHost.get());
647 647
648 // Clearing the root layer should also clear out the host pointers for all l ayers in the tree. 648 // Clearing the root layer should also clear out the host pointers for all l ayers in the tree.
649 layerTreeHost->setRootLayer(0); 649 layerTreeHost->setRootLayer(0);
650 650
651 assertLayerTreeHostMatchesForSubtree(parent.get(), 0); 651 assertLayerTreeHostMatchesForSubtree(parent.get(), 0);
652 } 652 }
653 653
654 TEST(LayerChromiumLayerTreeHostTest, addingLayerSubtree) 654 TEST(LayerLayerTreeHostTest, addingLayerSubtree)
655 { 655 {
656 WebCompositorInitializer compositorInitializer(0); 656 WebCompositorInitializer compositorInitializer(0);
657 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 657 scoped_refptr<Layer> parent = Layer::create();
658 scoped_ptr<FakeCCLayerTreeHost> layerTreeHost(FakeCCLayerTreeHost::create()) ; 658 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat e());
659 659
660 layerTreeHost->setRootLayer(parent.get()); 660 layerTreeHost->setRootLayer(parent.get());
661 661
662 EXPECT_EQ(parent->layerTreeHost(), layerTreeHost.get()); 662 EXPECT_EQ(parent->layerTreeHost(), layerTreeHost.get());
663 663
664 // Adding a subtree to a layer already associated with a host should set the host pointer on all layers in that subtree. 664 // Adding a subtree to a layer already associated with a host should set the host pointer on all layers in that subtree.
665 scoped_refptr<LayerChromium> child = LayerChromium::create(); 665 scoped_refptr<Layer> child = Layer::create();
666 scoped_refptr<LayerChromium> grandChild = LayerChromium::create(); 666 scoped_refptr<Layer> grandChild = Layer::create();
667 child->addChild(grandChild); 667 child->addChild(grandChild);
668 668
669 // Masks, replicas, and replica masks should pick up the new host too. 669 // Masks, replicas, and replica masks should pick up the new host too.
670 scoped_refptr<LayerChromium> childMask = LayerChromium::create(); 670 scoped_refptr<Layer> childMask = Layer::create();
671 child->setMaskLayer(childMask.get()); 671 child->setMaskLayer(childMask.get());
672 scoped_refptr<LayerChromium> childReplica = LayerChromium::create(); 672 scoped_refptr<Layer> childReplica = Layer::create();
673 child->setReplicaLayer(childReplica.get()); 673 child->setReplicaLayer(childReplica.get());
674 scoped_refptr<LayerChromium> childReplicaMask = LayerChromium::create(); 674 scoped_refptr<Layer> childReplicaMask = Layer::create();
675 childReplica->setMaskLayer(childReplicaMask.get()); 675 childReplica->setMaskLayer(childReplicaMask.get());
676 676
677 parent->addChild(child); 677 parent->addChild(child);
678 assertLayerTreeHostMatchesForSubtree(parent.get(), layerTreeHost.get()); 678 assertLayerTreeHostMatchesForSubtree(parent.get(), layerTreeHost.get());
679 679
680 layerTreeHost->setRootLayer(0); 680 layerTreeHost->setRootLayer(0);
681 } 681 }
682 682
683 TEST(LayerChromiumLayerTreeHostTest, changeHost) 683 TEST(LayerLayerTreeHostTest, changeHost)
684 { 684 {
685 WebCompositorInitializer compositorInitializer(0); 685 WebCompositorInitializer compositorInitializer(0);
686 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 686 scoped_refptr<Layer> parent = Layer::create();
687 scoped_refptr<LayerChromium> child = LayerChromium::create(); 687 scoped_refptr<Layer> child = Layer::create();
688 scoped_refptr<LayerChromium> mask = LayerChromium::create(); 688 scoped_refptr<Layer> mask = Layer::create();
689 scoped_refptr<LayerChromium> replica = LayerChromium::create(); 689 scoped_refptr<Layer> replica = Layer::create();
690 scoped_refptr<LayerChromium> replicaMask = LayerChromium::create(); 690 scoped_refptr<Layer> replicaMask = Layer::create();
691 691
692 // Same setup as the previous test. 692 // Same setup as the previous test.
693 parent->addChild(child); 693 parent->addChild(child);
694 child->setMaskLayer(mask.get()); 694 child->setMaskLayer(mask.get());
695 child->setReplicaLayer(replica.get()); 695 child->setReplicaLayer(replica.get());
696 replica->setMaskLayer(mask.get()); 696 replica->setMaskLayer(mask.get());
697 697
698 scoped_ptr<FakeCCLayerTreeHost> firstLayerTreeHost(FakeCCLayerTreeHost::crea te()); 698 scoped_ptr<FakeLayerImplTreeHost> firstLayerTreeHost(FakeLayerImplTreeHost:: create());
699 firstLayerTreeHost->setRootLayer(parent.get()); 699 firstLayerTreeHost->setRootLayer(parent.get());
700 700
701 assertLayerTreeHostMatchesForSubtree(parent.get(), firstLayerTreeHost.get()) ; 701 assertLayerTreeHostMatchesForSubtree(parent.get(), firstLayerTreeHost.get()) ;
702 702
703 // Now re-root the tree to a new host (simulating what we do on a context lo st event). 703 // Now re-root the tree to a new host (simulating what we do on a context lo st event).
704 // This should update the host pointers for all layers in the tree. 704 // This should update the host pointers for all layers in the tree.
705 scoped_ptr<FakeCCLayerTreeHost> secondLayerTreeHost(FakeCCLayerTreeHost::cre ate()); 705 scoped_ptr<FakeLayerImplTreeHost> secondLayerTreeHost(FakeLayerImplTreeHost: :create());
706 secondLayerTreeHost->setRootLayer(parent.get()); 706 secondLayerTreeHost->setRootLayer(parent.get());
707 707
708 assertLayerTreeHostMatchesForSubtree(parent.get(), secondLayerTreeHost.get() ); 708 assertLayerTreeHostMatchesForSubtree(parent.get(), secondLayerTreeHost.get() );
709 709
710 secondLayerTreeHost->setRootLayer(0); 710 secondLayerTreeHost->setRootLayer(0);
711 } 711 }
712 712
713 TEST(LayerChromiumLayerTreeHostTest, changeHostInSubtree) 713 TEST(LayerLayerTreeHostTest, changeHostInSubtree)
714 { 714 {
715 WebCompositorInitializer compositorInitializer(0); 715 WebCompositorInitializer compositorInitializer(0);
716 scoped_refptr<LayerChromium> firstParent = LayerChromium::create(); 716 scoped_refptr<Layer> firstParent = Layer::create();
717 scoped_refptr<LayerChromium> firstChild = LayerChromium::create(); 717 scoped_refptr<Layer> firstChild = Layer::create();
718 scoped_refptr<LayerChromium> secondParent = LayerChromium::create(); 718 scoped_refptr<Layer> secondParent = Layer::create();
719 scoped_refptr<LayerChromium> secondChild = LayerChromium::create(); 719 scoped_refptr<Layer> secondChild = Layer::create();
720 scoped_refptr<LayerChromium> secondGrandChild = LayerChromium::create(); 720 scoped_refptr<Layer> secondGrandChild = Layer::create();
721 721
722 // First put all children under the first parent and set the first host. 722 // First put all children under the first parent and set the first host.
723 firstParent->addChild(firstChild); 723 firstParent->addChild(firstChild);
724 secondChild->addChild(secondGrandChild); 724 secondChild->addChild(secondGrandChild);
725 firstParent->addChild(secondChild); 725 firstParent->addChild(secondChild);
726 726
727 scoped_ptr<FakeCCLayerTreeHost> firstLayerTreeHost(FakeCCLayerTreeHost::crea te()); 727 scoped_ptr<FakeLayerImplTreeHost> firstLayerTreeHost(FakeLayerImplTreeHost:: create());
728 firstLayerTreeHost->setRootLayer(firstParent.get()); 728 firstLayerTreeHost->setRootLayer(firstParent.get());
729 729
730 assertLayerTreeHostMatchesForSubtree(firstParent.get(), firstLayerTreeHost.g et()); 730 assertLayerTreeHostMatchesForSubtree(firstParent.get(), firstLayerTreeHost.g et());
731 731
732 // Now reparent the subtree starting at secondChild to a layer in a differen t tree. 732 // Now reparent the subtree starting at secondChild to a layer in a differen t tree.
733 scoped_ptr<FakeCCLayerTreeHost> secondLayerTreeHost(FakeCCLayerTreeHost::cre ate()); 733 scoped_ptr<FakeLayerImplTreeHost> secondLayerTreeHost(FakeLayerImplTreeHost: :create());
734 secondLayerTreeHost->setRootLayer(secondParent.get()); 734 secondLayerTreeHost->setRootLayer(secondParent.get());
735 735
736 secondParent->addChild(secondChild); 736 secondParent->addChild(secondChild);
737 737
738 // The moved layer and its children should point to the new host. 738 // The moved layer and its children should point to the new host.
739 EXPECT_EQ(secondLayerTreeHost.get(), secondChild->layerTreeHost()); 739 EXPECT_EQ(secondLayerTreeHost.get(), secondChild->layerTreeHost());
740 EXPECT_EQ(secondLayerTreeHost.get(), secondGrandChild->layerTreeHost()); 740 EXPECT_EQ(secondLayerTreeHost.get(), secondGrandChild->layerTreeHost());
741 741
742 // Test over, cleanup time. 742 // Test over, cleanup time.
743 firstLayerTreeHost->setRootLayer(0); 743 firstLayerTreeHost->setRootLayer(0);
744 secondLayerTreeHost->setRootLayer(0); 744 secondLayerTreeHost->setRootLayer(0);
745 } 745 }
746 746
747 TEST(LayerChromiumLayerTreeHostTest, replaceMaskAndReplicaLayer) 747 TEST(LayerLayerTreeHostTest, replaceMaskAndReplicaLayer)
748 { 748 {
749 WebCompositorInitializer compositorInitializer(0); 749 WebCompositorInitializer compositorInitializer(0);
750 scoped_refptr<LayerChromium> parent = LayerChromium::create(); 750 scoped_refptr<Layer> parent = Layer::create();
751 scoped_refptr<LayerChromium> mask = LayerChromium::create(); 751 scoped_refptr<Layer> mask = Layer::create();
752 scoped_refptr<LayerChromium> replica = LayerChromium::create(); 752 scoped_refptr<Layer> replica = Layer::create();
753 scoped_refptr<LayerChromium> maskChild = LayerChromium::create(); 753 scoped_refptr<Layer> maskChild = Layer::create();
754 scoped_refptr<LayerChromium> replicaChild = LayerChromium::create(); 754 scoped_refptr<Layer> replicaChild = Layer::create();
755 scoped_refptr<LayerChromium> maskReplacement = LayerChromium::create(); 755 scoped_refptr<Layer> maskReplacement = Layer::create();
756 scoped_refptr<LayerChromium> replicaReplacement = LayerChromium::create(); 756 scoped_refptr<Layer> replicaReplacement = Layer::create();
757 757
758 parent->setMaskLayer(mask.get()); 758 parent->setMaskLayer(mask.get());
759 parent->setReplicaLayer(replica.get()); 759 parent->setReplicaLayer(replica.get());
760 mask->addChild(maskChild); 760 mask->addChild(maskChild);
761 replica->addChild(replicaChild); 761 replica->addChild(replicaChild);
762 762
763 scoped_ptr<FakeCCLayerTreeHost> layerTreeHost(FakeCCLayerTreeHost::create()) ; 763 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat e());
764 layerTreeHost->setRootLayer(parent.get()); 764 layerTreeHost->setRootLayer(parent.get());
765 765
766 assertLayerTreeHostMatchesForSubtree(parent.get(), layerTreeHost.get()); 766 assertLayerTreeHostMatchesForSubtree(parent.get(), layerTreeHost.get());
767 767
768 // Replacing the mask should clear out the old mask's subtree's host pointer s. 768 // Replacing the mask should clear out the old mask's subtree's host pointer s.
769 parent->setMaskLayer(maskReplacement.get()); 769 parent->setMaskLayer(maskReplacement.get());
770 EXPECT_EQ(0, mask->layerTreeHost()); 770 EXPECT_EQ(0, mask->layerTreeHost());
771 EXPECT_EQ(0, maskChild->layerTreeHost()); 771 EXPECT_EQ(0, maskChild->layerTreeHost());
772 772
773 // Same for replacing a replica layer. 773 // Same for replacing a replica layer.
774 parent->setReplicaLayer(replicaReplacement.get()); 774 parent->setReplicaLayer(replicaReplacement.get());
775 EXPECT_EQ(0, replica->layerTreeHost()); 775 EXPECT_EQ(0, replica->layerTreeHost());
776 EXPECT_EQ(0, replicaChild->layerTreeHost()); 776 EXPECT_EQ(0, replicaChild->layerTreeHost());
777 777
778 // Test over, cleanup time. 778 // Test over, cleanup time.
779 layerTreeHost->setRootLayer(0); 779 layerTreeHost->setRootLayer(0);
780 } 780 }
781 781
782 TEST(LayerChromiumLayerTreeHostTest, destroyHostWithNonNullRootLayer) 782 TEST(LayerLayerTreeHostTest, destroyHostWithNonNullRootLayer)
783 { 783 {
784 WebCompositorInitializer compositorInitializer(0); 784 WebCompositorInitializer compositorInitializer(0);
785 scoped_refptr<LayerChromium> root = LayerChromium::create(); 785 scoped_refptr<Layer> root = Layer::create();
786 scoped_refptr<LayerChromium> child = LayerChromium::create(); 786 scoped_refptr<Layer> child = Layer::create();
787 root->addChild(child); 787 root->addChild(child);
788 scoped_ptr<FakeCCLayerTreeHost> layerTreeHost(FakeCCLayerTreeHost::create()) ; 788 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat e());
789 layerTreeHost->setRootLayer(root); 789 layerTreeHost->setRootLayer(root);
790 } 790 }
791 791
792 static bool addTestAnimation(LayerChromium* layer) 792 static bool addTestAnimation(Layer* layer)
793 { 793 {
794 scoped_ptr<CCKeyframedFloatAnimationCurve> curve(CCKeyframedFloatAnimationCu rve::create()); 794 scoped_ptr<KeyframedFloatAnimationCurve> curve(KeyframedFloatAnimationCurve: :create());
795 curve->addKeyframe(CCFloatKeyframe::create(0, 0.3f, scoped_ptr<CCTimingFunct ion>())); 795 curve->addKeyframe(FloatKeyframe::create(0, 0.3f, scoped_ptr<TimingFunction> ()));
796 curve->addKeyframe(CCFloatKeyframe::create(1, 0.7f, scoped_ptr<CCTimingFunct ion>())); 796 curve->addKeyframe(FloatKeyframe::create(1, 0.7f, scoped_ptr<TimingFunction> ()));
797 scoped_ptr<CCActiveAnimation> animation(CCActiveAnimation::create(curve.Pass As<CCAnimationCurve>(), 0, 0, CCActiveAnimation::Opacity)); 797 scoped_ptr<ActiveAnimation> animation(ActiveAnimation::create(curve.PassAs<A nimationCurve>(), 0, 0, ActiveAnimation::Opacity));
798 798
799 return layer->addAnimation(animation.Pass()); 799 return layer->addAnimation(animation.Pass());
800 } 800 }
801 801
802 TEST(LayerChromiumLayerTreeHostTest, shouldNotAddAnimationWithoutLayerTreeHost) 802 TEST(LayerLayerTreeHostTest, shouldNotAddAnimationWithoutLayerTreeHost)
803 { 803 {
804 // Currently, WebCore assumes that animations will be started immediately / very soon 804 // Currently, WebCore assumes that animations will be started immediately / very soon
805 // if a composited layer's addAnimation() returns true. However, without a l ayerTreeHost, 805 // if a composited layer's addAnimation() returns true. However, without a l ayerTreeHost,
806 // layers cannot actually animate yet. So, to prevent violating this WebCore assumption, 806 // layers cannot actually animate yet. So, to prevent violating this WebCore assumption,
807 // the animation should not be accepted if the layer doesn't already have a layerTreeHost. 807 // the animation should not be accepted if the layer doesn't already have a layerTreeHost.
808 808
809 WebKit::Platform::current()->compositorSupport()->setAcceleratedAnimationEna bled(true); 809 WebKit::Platform::current()->compositorSupport()->setAcceleratedAnimationEna bled(true);
810 810
811 WebCompositorInitializer compositorInitializer(0); 811 WebCompositorInitializer compositorInitializer(0);
812 scoped_refptr<LayerChromium> layer = LayerChromium::create(); 812 scoped_refptr<Layer> layer = Layer::create();
813 813
814 // Case 1: without a layerTreeHost, the animation should not be accepted. 814 // Case 1: without a layerTreeHost, the animation should not be accepted.
815 EXPECT_FALSE(addTestAnimation(layer.get())); 815 EXPECT_FALSE(addTestAnimation(layer.get()));
816 816
817 scoped_ptr<FakeCCLayerTreeHost> layerTreeHost(FakeCCLayerTreeHost::create()) ; 817 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat e());
818 layerTreeHost->setRootLayer(layer.get()); 818 layerTreeHost->setRootLayer(layer.get());
819 layer->setLayerTreeHost(layerTreeHost.get()); 819 layer->setLayerTreeHost(layerTreeHost.get());
820 assertLayerTreeHostMatchesForSubtree(layer.get(), layerTreeHost.get()); 820 assertLayerTreeHostMatchesForSubtree(layer.get(), layerTreeHost.get());
821 821
822 // Case 2: with a layerTreeHost, the animation should be accepted. 822 // Case 2: with a layerTreeHost, the animation should be accepted.
823 EXPECT_TRUE(addTestAnimation(layer.get())); 823 EXPECT_TRUE(addTestAnimation(layer.get()));
824 } 824 }
825 825
826 class MockLayerChromium : public LayerChromium { 826 class MockLayer : public Layer {
827 public: 827 public:
828 bool needsDisplay() const { return m_needsDisplay; } 828 bool needsDisplay() const { return m_needsDisplay; }
829 829
830 private: 830 private:
831 virtual ~MockLayerChromium() 831 virtual ~MockLayer()
832 { 832 {
833 } 833 }
834 }; 834 };
835 835
836 TEST(LayerChromiumTestWithoutFixture, setBoundsTriggersSetNeedsRedrawAfterGettin gNonEmptyBounds) 836 TEST(LayerTestWithoutFixture, setBoundsTriggersSetNeedsRedrawAfterGettingNonEmpt yBounds)
837 { 837 {
838 scoped_refptr<MockLayerChromium> layer(new MockLayerChromium); 838 scoped_refptr<MockLayer> layer(new MockLayer);
839 EXPECT_FALSE(layer->needsDisplay()); 839 EXPECT_FALSE(layer->needsDisplay());
840 layer->setBounds(IntSize(0, 10)); 840 layer->setBounds(IntSize(0, 10));
841 EXPECT_FALSE(layer->needsDisplay()); 841 EXPECT_FALSE(layer->needsDisplay());
842 layer->setBounds(IntSize(10, 10)); 842 layer->setBounds(IntSize(10, 10));
843 EXPECT_TRUE(layer->needsDisplay()); 843 EXPECT_TRUE(layer->needsDisplay());
844 } 844 }
845 845
846 846
847 } // namespace 847 } // namespace
OLDNEW
« cc/active_animation.h ('K') | « cc/layer_tree_host_unittest.cc ('k') | cc/math_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698