OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/layer.h" | 5 #include "cc/layer.h" |
6 | 6 |
7 #include "cc/keyframed_animation_curve.h" | 7 #include "cc/keyframed_animation_curve.h" |
8 #include "cc/layer_impl.h" | 8 #include "cc/layer_impl.h" |
9 #include "cc/layer_painter.h" | 9 #include "cc/layer_painter.h" |
10 #include "cc/layer_tree_host.h" | 10 #include "cc/layer_tree_host.h" |
11 #include "cc/math_util.h" | 11 #include "cc/math_util.h" |
12 #include "cc/single_thread_proxy.h" | 12 #include "cc/single_thread_proxy.h" |
13 #include "cc/thread.h" | 13 #include "cc/thread.h" |
14 #include "cc/test/fake_layer_tree_host_client.h" | 14 #include "cc/test/fake_layer_tree_host_client.h" |
15 #include "cc/test/geometry_test_utils.h" | 15 #include "cc/test/geometry_test_utils.h" |
16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "ui/gfx/transform.h" | 18 #include "ui/gfx/transform.h" |
19 | 19 |
20 using namespace WebKitTests; | 20 using ::testing::AnyNumber; |
| 21 using ::testing::AtLeast; |
21 using ::testing::Mock; | 22 using ::testing::Mock; |
| 23 using ::testing::StrictMock; |
22 using ::testing::_; | 24 using ::testing::_; |
23 using ::testing::AtLeast; | |
24 using ::testing::AnyNumber; | |
25 | 25 |
26 #define EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(numTimesExpectedSetNeedsCom
mit, codeToTest) do { \ | 26 #define EXPECT_SET_NEEDS_COMMIT(expect, codeToTest) do { \ |
27 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times((numTimesExpectedS
etNeedsCommit)); \ | 27 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times((expect)); \ |
28 codeToTest;
\ | 28 codeToTest; \ |
29 Mock::VerifyAndClearExpectations(m_layerTreeHost.get());
\ | 29 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); \ |
30 } while (0) | 30 } while (0) |
31 | 31 |
| 32 #define EXPECT_SET_NEEDS_FULL_TREE_SYNC(expect, codeToTest) do { \ |
| 33 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times((expect)); \ |
| 34 codeToTest; \ |
| 35 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); \ |
| 36 } while (0) |
| 37 |
| 38 |
32 namespace cc { | 39 namespace cc { |
33 namespace { | 40 namespace { |
34 | 41 |
35 class MockLayerImplTreeHost : public LayerTreeHost { | 42 class MockLayerImplTreeHost : public LayerTreeHost { |
36 public: | 43 public: |
37 MockLayerImplTreeHost() | 44 MockLayerImplTreeHost() |
38 : LayerTreeHost(&m_fakeClient, LayerTreeSettings()) | 45 : LayerTreeHost(&m_fakeClient, LayerTreeSettings()) |
39 { | 46 { |
40 initialize(scoped_ptr<Thread>(NULL)); | 47 initialize(scoped_ptr<Thread>(NULL)); |
41 } | 48 } |
42 | 49 |
43 MOCK_METHOD0(setNeedsCommit, void()); | 50 MOCK_METHOD0(setNeedsCommit, void()); |
| 51 MOCK_METHOD0(setNeedsFullTreeSync, void()); |
44 | 52 |
45 private: | 53 private: |
46 FakeLayerImplTreeHostClient m_fakeClient; | 54 FakeLayerImplTreeHostClient m_fakeClient; |
47 }; | 55 }; |
48 | 56 |
49 class MockLayerPainter : public LayerPainter { | 57 class MockLayerPainter : public LayerPainter { |
50 public: | 58 public: |
51 virtual void paint(SkCanvas*, const gfx::Rect&, gfx::RectF&) OVERRIDE { } | 59 virtual void paint(SkCanvas*, const gfx::Rect&, gfx::RectF&) OVERRIDE { } |
52 }; | 60 }; |
53 | 61 |
54 | 62 |
55 class LayerTest : public testing::Test { | 63 class LayerTest : public testing::Test { |
56 public: | 64 public: |
57 LayerTest() | 65 LayerTest() |
58 { | 66 { |
59 } | 67 } |
60 | 68 |
61 protected: | 69 protected: |
62 virtual void SetUp() | 70 virtual void SetUp() |
63 { | 71 { |
64 m_layerTreeHost = scoped_ptr<MockLayerImplTreeHost>(new MockLayerImplTre
eHost); | 72 m_layerTreeHost.reset(new StrictMock<MockLayerImplTreeHost>); |
65 } | 73 } |
66 | 74 |
67 virtual void TearDown() | 75 virtual void TearDown() |
68 { | 76 { |
69 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); | 77 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); |
70 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AnyNumber()); | 78 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AnyNumber())
; |
71 m_parent = NULL; | 79 m_parent = NULL; |
72 m_child1 = NULL; | 80 m_child1 = NULL; |
73 m_child2 = NULL; | 81 m_child2 = NULL; |
74 m_child3 = NULL; | 82 m_child3 = NULL; |
75 m_grandChild1 = NULL; | 83 m_grandChild1 = NULL; |
76 m_grandChild2 = NULL; | 84 m_grandChild2 = NULL; |
77 m_grandChild3 = NULL; | 85 m_grandChild3 = NULL; |
78 | 86 |
79 m_layerTreeHost->setRootLayer(0); | 87 m_layerTreeHost->setRootLayer(0); |
80 m_layerTreeHost.reset(); | 88 m_layerTreeHost.reset(); |
(...skipping 25 matching lines...) Expand all Loading... |
106 void createSimpleTestTree() | 114 void createSimpleTestTree() |
107 { | 115 { |
108 m_parent = Layer::create(); | 116 m_parent = Layer::create(); |
109 m_child1 = Layer::create(); | 117 m_child1 = Layer::create(); |
110 m_child2 = Layer::create(); | 118 m_child2 = Layer::create(); |
111 m_child3 = Layer::create(); | 119 m_child3 = Layer::create(); |
112 m_grandChild1 = Layer::create(); | 120 m_grandChild1 = Layer::create(); |
113 m_grandChild2 = Layer::create(); | 121 m_grandChild2 = Layer::create(); |
114 m_grandChild3 = Layer::create(); | 122 m_grandChild3 = Layer::create(); |
115 | 123 |
116 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AnyNumber()); | 124 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AnyNumber())
; |
117 m_layerTreeHost->setRootLayer(m_parent); | 125 m_layerTreeHost->setRootLayer(m_parent); |
118 | 126 |
119 m_parent->addChild(m_child1); | 127 m_parent->addChild(m_child1); |
120 m_parent->addChild(m_child2); | 128 m_parent->addChild(m_child2); |
121 m_parent->addChild(m_child3); | 129 m_parent->addChild(m_child3); |
122 m_child1->addChild(m_grandChild1); | 130 m_child1->addChild(m_grandChild1); |
123 m_child1->addChild(m_grandChild2); | 131 m_child1->addChild(m_grandChild2); |
124 m_child2->addChild(m_grandChild3); | 132 m_child2->addChild(m_grandChild3); |
125 | 133 |
126 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); | 134 Mock::VerifyAndClearExpectations(m_layerTreeHost.get()); |
127 | 135 |
128 verifyTestTreeInitialState(); | 136 verifyTestTreeInitialState(); |
129 } | 137 } |
130 | 138 |
131 scoped_ptr<MockLayerImplTreeHost> m_layerTreeHost; | 139 scoped_ptr<StrictMock<MockLayerImplTreeHost> > m_layerTreeHost; |
132 scoped_refptr<Layer> m_parent, m_child1, m_child2, m_child3, m_grandChild1,
m_grandChild2, m_grandChild3; | 140 scoped_refptr<Layer> m_parent, m_child1, m_child2, m_child3, m_grandChild1,
m_grandChild2, m_grandChild3; |
133 }; | 141 }; |
134 | 142 |
135 TEST_F(LayerTest, basicCreateAndDestroy) | 143 TEST_F(LayerTest, basicCreateAndDestroy) |
136 { | 144 { |
137 scoped_refptr<Layer> testLayer = Layer::create(); | 145 scoped_refptr<Layer> testLayer = Layer::create(); |
138 ASSERT_TRUE(testLayer); | 146 ASSERT_TRUE(testLayer); |
139 | 147 |
140 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(0); | 148 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(0); |
141 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 149 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
142 } | 150 } |
143 | 151 |
144 TEST_F(LayerTest, addAndRemoveChild) | 152 TEST_F(LayerTest, addAndRemoveChild) |
145 { | 153 { |
146 scoped_refptr<Layer> parent = Layer::create(); | 154 scoped_refptr<Layer> parent = Layer::create(); |
147 scoped_refptr<Layer> child = Layer::create(); | 155 scoped_refptr<Layer> child = Layer::create(); |
148 | 156 |
149 // Upon creation, layers should not have children or parent. | 157 // Upon creation, layers should not have children or parent. |
150 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); | 158 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); |
151 EXPECT_FALSE(child->parent()); | 159 EXPECT_FALSE(child->parent()); |
152 | 160 |
153 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, m_layerTreeHost->setRootLaye
r(parent)); | 161 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, m_layerTreeHost->setRootLayer(parent)); |
154 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->addChild(child)); | 162 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->addChild(child)); |
155 | 163 |
156 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); | 164 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); |
157 EXPECT_EQ(child.get(), parent->children()[0]); | 165 EXPECT_EQ(child.get(), parent->children()[0]); |
158 EXPECT_EQ(parent.get(), child->parent()); | 166 EXPECT_EQ(parent.get(), child->parent()); |
159 EXPECT_EQ(parent.get(), child->rootLayer()); | 167 EXPECT_EQ(parent.get(), child->rootLayer()); |
160 | 168 |
161 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), child->removeFromPa
rent()); | 169 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), child->removeFromParent()); |
162 } | 170 } |
163 | 171 |
164 TEST_F(LayerTest, addSameChildTwice) | 172 TEST_F(LayerTest, addSameChildTwice) |
165 { | 173 { |
| 174 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AtLeast(1)); |
| 175 |
166 scoped_refptr<Layer> parent = Layer::create(); | 176 scoped_refptr<Layer> parent = Layer::create(); |
167 scoped_refptr<Layer> child = Layer::create(); | 177 scoped_refptr<Layer> child = Layer::create(); |
168 | 178 |
169 m_layerTreeHost->setRootLayer(parent); | 179 m_layerTreeHost->setRootLayer(parent); |
170 | 180 |
171 ASSERT_EQ(0u, parent->children().size()); | 181 ASSERT_EQ(0u, parent->children().size()); |
172 | 182 |
173 parent->addChild(child); | 183 parent->addChild(child); |
174 ASSERT_EQ(1u, parent->children().size()); | 184 ASSERT_EQ(1u, parent->children().size()); |
175 EXPECT_EQ(parent.get(), child->parent()); | 185 EXPECT_EQ(parent.get(), child->parent()); |
176 | 186 |
177 parent->addChild(child); | 187 parent->addChild(child); |
178 ASSERT_EQ(1u, parent->children().size()); | 188 ASSERT_EQ(1u, parent->children().size()); |
179 EXPECT_EQ(parent.get(), child->parent()); | 189 EXPECT_EQ(parent.get(), child->parent()); |
180 } | 190 } |
181 | 191 |
182 TEST_F(LayerTest, insertChild) | 192 TEST_F(LayerTest, insertChild) |
183 { | 193 { |
184 scoped_refptr<Layer> parent = Layer::create(); | 194 scoped_refptr<Layer> parent = Layer::create(); |
185 scoped_refptr<Layer> child1 = Layer::create(); | 195 scoped_refptr<Layer> child1 = Layer::create(); |
186 scoped_refptr<Layer> child2 = Layer::create(); | 196 scoped_refptr<Layer> child2 = Layer::create(); |
187 scoped_refptr<Layer> child3 = Layer::create(); | 197 scoped_refptr<Layer> child3 = Layer::create(); |
188 scoped_refptr<Layer> child4 = Layer::create(); | 198 scoped_refptr<Layer> child4 = Layer::create(); |
189 | 199 |
190 parent->setLayerTreeHost(m_layerTreeHost.get()); | 200 parent->setLayerTreeHost(m_layerTreeHost.get()); |
191 | 201 |
192 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); | 202 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); |
193 | 203 |
194 // Case 1: inserting to empty list. | 204 // Case 1: inserting to empty list. |
195 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child3,
0)); | 205 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->insertChild(child3, 0)); |
196 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); | 206 ASSERT_EQ(static_cast<size_t>(1), parent->children().size()); |
197 EXPECT_EQ(child3, parent->children()[0]); | 207 EXPECT_EQ(child3, parent->children()[0]); |
198 EXPECT_EQ(parent.get(), child3->parent()); | 208 EXPECT_EQ(parent.get(), child3->parent()); |
199 | 209 |
200 // Case 2: inserting to beginning of list | 210 // Case 2: inserting to beginning of list |
201 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child1,
0)); | 211 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->insertChild(child1, 0)); |
202 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); | 212 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); |
203 EXPECT_EQ(child1, parent->children()[0]); | 213 EXPECT_EQ(child1, parent->children()[0]); |
204 EXPECT_EQ(child3, parent->children()[1]); | 214 EXPECT_EQ(child3, parent->children()[1]); |
205 EXPECT_EQ(parent.get(), child1->parent()); | 215 EXPECT_EQ(parent.get(), child1->parent()); |
206 | 216 |
207 // Case 3: inserting to middle of list | 217 // Case 3: inserting to middle of list |
208 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child2,
1)); | 218 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->insertChild(child2, 1)); |
209 ASSERT_EQ(static_cast<size_t>(3), parent->children().size()); | 219 ASSERT_EQ(static_cast<size_t>(3), parent->children().size()); |
210 EXPECT_EQ(child1, parent->children()[0]); | 220 EXPECT_EQ(child1, parent->children()[0]); |
211 EXPECT_EQ(child2, parent->children()[1]); | 221 EXPECT_EQ(child2, parent->children()[1]); |
212 EXPECT_EQ(child3, parent->children()[2]); | 222 EXPECT_EQ(child3, parent->children()[2]); |
213 EXPECT_EQ(parent.get(), child2->parent()); | 223 EXPECT_EQ(parent.get(), child2->parent()); |
214 | 224 |
215 // Case 4: inserting to end of list | 225 // Case 4: inserting to end of list |
216 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child4,
3)); | 226 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->insertChild(child4, 3)); |
217 | 227 |
218 ASSERT_EQ(static_cast<size_t>(4), parent->children().size()); | 228 ASSERT_EQ(static_cast<size_t>(4), parent->children().size()); |
219 EXPECT_EQ(child1, parent->children()[0]); | 229 EXPECT_EQ(child1, parent->children()[0]); |
220 EXPECT_EQ(child2, parent->children()[1]); | 230 EXPECT_EQ(child2, parent->children()[1]); |
221 EXPECT_EQ(child3, parent->children()[2]); | 231 EXPECT_EQ(child3, parent->children()[2]); |
222 EXPECT_EQ(child4, parent->children()[3]); | 232 EXPECT_EQ(child4, parent->children()[3]); |
223 EXPECT_EQ(parent.get(), child4->parent()); | 233 EXPECT_EQ(parent.get(), child4->parent()); |
224 | 234 |
225 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); | 235 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AtLeast(1)); |
226 } | 236 } |
227 | 237 |
228 TEST_F(LayerTest, insertChildPastEndOfList) | 238 TEST_F(LayerTest, insertChildPastEndOfList) |
229 { | 239 { |
230 scoped_refptr<Layer> parent = Layer::create(); | 240 scoped_refptr<Layer> parent = Layer::create(); |
231 scoped_refptr<Layer> child1 = Layer::create(); | 241 scoped_refptr<Layer> child1 = Layer::create(); |
232 scoped_refptr<Layer> child2 = Layer::create(); | 242 scoped_refptr<Layer> child2 = Layer::create(); |
233 | 243 |
234 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); | 244 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); |
235 | 245 |
(...skipping 14 matching lines...) Expand all Loading... |
250 TEST_F(LayerTest, insertSameChildTwice) | 260 TEST_F(LayerTest, insertSameChildTwice) |
251 { | 261 { |
252 scoped_refptr<Layer> parent = Layer::create(); | 262 scoped_refptr<Layer> parent = Layer::create(); |
253 scoped_refptr<Layer> child1 = Layer::create(); | 263 scoped_refptr<Layer> child1 = Layer::create(); |
254 scoped_refptr<Layer> child2 = Layer::create(); | 264 scoped_refptr<Layer> child2 = Layer::create(); |
255 | 265 |
256 parent->setLayerTreeHost(m_layerTreeHost.get()); | 266 parent->setLayerTreeHost(m_layerTreeHost.get()); |
257 | 267 |
258 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); | 268 ASSERT_EQ(static_cast<size_t>(0), parent->children().size()); |
259 | 269 |
260 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child1,
0)); | 270 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->insertChild(child1, 0)); |
261 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, parent->insertChild(child2,
1)); | 271 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->insertChild(child2, 1)); |
262 | 272 |
263 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); | 273 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); |
264 EXPECT_EQ(child1, parent->children()[0]); | 274 EXPECT_EQ(child1, parent->children()[0]); |
265 EXPECT_EQ(child2, parent->children()[1]); | 275 EXPECT_EQ(child2, parent->children()[1]); |
266 | 276 |
267 // Inserting the same child again should cause the child to be removed and r
e-inserted at the new location. | 277 // Inserting the same child again should cause the child to be removed and r
e-inserted at the new location. |
268 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), parent->insertChild
(child1, 1)); | 278 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), parent->insertChild(child1, 1)); |
269 | 279 |
270 // child1 should now be at the end of the list. | 280 // child1 should now be at the end of the list. |
271 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); | 281 ASSERT_EQ(static_cast<size_t>(2), parent->children().size()); |
272 EXPECT_EQ(child2, parent->children()[0]); | 282 EXPECT_EQ(child2, parent->children()[0]); |
273 EXPECT_EQ(child1, parent->children()[1]); | 283 EXPECT_EQ(child1, parent->children()[1]); |
274 | 284 |
275 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); | 285 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AtLeast(1)); |
276 } | 286 } |
277 | 287 |
278 TEST_F(LayerTest, replaceChildWithNewChild) | 288 TEST_F(LayerTest, replaceChildWithNewChild) |
279 { | 289 { |
280 createSimpleTestTree(); | 290 createSimpleTestTree(); |
281 scoped_refptr<Layer> child4 = Layer::create(); | 291 scoped_refptr<Layer> child4 = Layer::create(); |
282 | 292 |
283 EXPECT_FALSE(child4->parent()); | 293 EXPECT_FALSE(child4->parent()); |
284 | 294 |
285 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), m_parent->replaceCh
ild(m_child2.get(), child4)); | 295 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), m_parent->replaceChild(m_child2.
get(), child4)); |
286 | 296 |
287 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size()); | 297 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size()); |
288 EXPECT_EQ(m_child1, m_parent->children()[0]); | 298 EXPECT_EQ(m_child1, m_parent->children()[0]); |
289 EXPECT_EQ(child4, m_parent->children()[1]); | 299 EXPECT_EQ(child4, m_parent->children()[1]); |
290 EXPECT_EQ(m_child3, m_parent->children()[2]); | 300 EXPECT_EQ(m_child3, m_parent->children()[2]); |
291 EXPECT_EQ(m_parent.get(), child4->parent()); | 301 EXPECT_EQ(m_parent.get(), child4->parent()); |
292 | 302 |
293 EXPECT_FALSE(m_child2->parent()); | 303 EXPECT_FALSE(m_child2->parent()); |
294 } | 304 } |
295 | 305 |
296 TEST_F(LayerTest, replaceChildWithNewChildThatHasOtherParent) | 306 TEST_F(LayerTest, replaceChildWithNewChildThatHasOtherParent) |
297 { | 307 { |
298 createSimpleTestTree(); | 308 createSimpleTestTree(); |
299 | 309 |
300 // create another simple tree with testLayer and child4. | 310 // create another simple tree with testLayer and child4. |
301 scoped_refptr<Layer> testLayer = Layer::create(); | 311 scoped_refptr<Layer> testLayer = Layer::create(); |
302 scoped_refptr<Layer> child4 = Layer::create(); | 312 scoped_refptr<Layer> child4 = Layer::create(); |
303 testLayer->addChild(child4); | 313 testLayer->addChild(child4); |
304 ASSERT_EQ(static_cast<size_t>(1), testLayer->children().size()); | 314 ASSERT_EQ(static_cast<size_t>(1), testLayer->children().size()); |
305 EXPECT_EQ(child4, testLayer->children()[0]); | 315 EXPECT_EQ(child4, testLayer->children()[0]); |
306 EXPECT_EQ(testLayer.get(), child4->parent()); | 316 EXPECT_EQ(testLayer.get(), child4->parent()); |
307 | 317 |
308 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), m_parent->replaceCh
ild(m_child2.get(), child4)); | 318 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), m_parent->replaceChild(m_child2.
get(), child4)); |
309 | 319 |
310 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size()); | 320 ASSERT_EQ(static_cast<size_t>(3), m_parent->children().size()); |
311 EXPECT_EQ(m_child1, m_parent->children()[0]); | 321 EXPECT_EQ(m_child1, m_parent->children()[0]); |
312 EXPECT_EQ(child4, m_parent->children()[1]); | 322 EXPECT_EQ(child4, m_parent->children()[1]); |
313 EXPECT_EQ(m_child3, m_parent->children()[2]); | 323 EXPECT_EQ(m_child3, m_parent->children()[2]); |
314 EXPECT_EQ(m_parent.get(), child4->parent()); | 324 EXPECT_EQ(m_parent.get(), child4->parent()); |
315 | 325 |
316 // testLayer should no longer have child4, | 326 // testLayer should no longer have child4, |
317 // and child2 should no longer have a parent. | 327 // and child2 should no longer have a parent. |
318 ASSERT_EQ(static_cast<size_t>(0), testLayer->children().size()); | 328 ASSERT_EQ(static_cast<size_t>(0), testLayer->children().size()); |
319 EXPECT_FALSE(m_child2->parent()); | 329 EXPECT_FALSE(m_child2->parent()); |
320 } | 330 } |
321 | 331 |
322 TEST_F(LayerTest, replaceChildWithSameChild) | 332 TEST_F(LayerTest, replaceChildWithSameChild) |
323 { | 333 { |
324 createSimpleTestTree(); | 334 createSimpleTestTree(); |
325 | 335 |
326 // setNeedsCommit should not be called because its the same child | 336 // setNeedsFullTreeSync / setNeedsCommit should not be called because its th
e same child |
327 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, m_parent->replaceChild(m_chi
ld2.get(), m_child2)); | 337 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(0); |
| 338 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(0); |
| 339 m_parent->replaceChild(m_child2.get(), m_child2); |
328 | 340 |
329 verifyTestTreeInitialState(); | 341 verifyTestTreeInitialState(); |
330 } | 342 } |
331 | 343 |
332 TEST_F(LayerTest, removeAllChildren) | 344 TEST_F(LayerTest, removeAllChildren) |
333 { | 345 { |
334 createSimpleTestTree(); | 346 createSimpleTestTree(); |
335 | 347 |
336 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(3), m_parent->removeAll
Children()); | 348 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(3), m_parent->removeAllChildren()); |
337 | 349 |
338 ASSERT_EQ(static_cast<size_t>(0), m_parent->children().size()); | 350 ASSERT_EQ(static_cast<size_t>(0), m_parent->children().size()); |
339 EXPECT_FALSE(m_child1->parent()); | 351 EXPECT_FALSE(m_child1->parent()); |
340 EXPECT_FALSE(m_child2->parent()); | 352 EXPECT_FALSE(m_child2->parent()); |
341 EXPECT_FALSE(m_child3->parent()); | 353 EXPECT_FALSE(m_child3->parent()); |
342 } | 354 } |
343 | 355 |
344 TEST_F(LayerTest, setChildren) | 356 TEST_F(LayerTest, setChildren) |
345 { | 357 { |
346 scoped_refptr<Layer> oldParent = Layer::create(); | 358 scoped_refptr<Layer> oldParent = Layer::create(); |
347 scoped_refptr<Layer> newParent = Layer::create(); | 359 scoped_refptr<Layer> newParent = Layer::create(); |
348 | 360 |
349 scoped_refptr<Layer> child1 = Layer::create(); | 361 scoped_refptr<Layer> child1 = Layer::create(); |
350 scoped_refptr<Layer> child2 = Layer::create(); | 362 scoped_refptr<Layer> child2 = Layer::create(); |
351 | 363 |
352 std::vector<scoped_refptr<Layer> > newChildren; | 364 std::vector<scoped_refptr<Layer> > newChildren; |
353 newChildren.push_back(child1); | 365 newChildren.push_back(child1); |
354 newChildren.push_back(child2); | 366 newChildren.push_back(child2); |
355 | 367 |
356 // Set up and verify initial test conditions: child1 has a parent, child2 ha
s no parent. | 368 // Set up and verify initial test conditions: child1 has a parent, child2 ha
s no parent. |
357 oldParent->addChild(child1); | 369 oldParent->addChild(child1); |
358 ASSERT_EQ(static_cast<size_t>(0), newParent->children().size()); | 370 ASSERT_EQ(static_cast<size_t>(0), newParent->children().size()); |
359 EXPECT_EQ(oldParent.get(), child1->parent()); | 371 EXPECT_EQ(oldParent.get(), child1->parent()); |
360 EXPECT_FALSE(child2->parent()); | 372 EXPECT_FALSE(child2->parent()); |
361 | 373 |
362 newParent->setLayerTreeHost(m_layerTreeHost.get()); | 374 newParent->setLayerTreeHost(m_layerTreeHost.get()); |
363 | 375 |
364 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(AtLeast(1), newParent->setChild
ren(newChildren)); | 376 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), newParent->setChildren(newChildr
en)); |
365 | 377 |
366 ASSERT_EQ(static_cast<size_t>(2), newParent->children().size()); | 378 ASSERT_EQ(static_cast<size_t>(2), newParent->children().size()); |
367 EXPECT_EQ(newParent.get(), child1->parent()); | 379 EXPECT_EQ(newParent.get(), child1->parent()); |
368 EXPECT_EQ(newParent.get(), child2->parent()); | 380 EXPECT_EQ(newParent.get(), child2->parent()); |
369 | 381 |
370 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); | 382 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AtLeast(1)); |
371 } | 383 } |
372 | 384 |
373 TEST_F(LayerTest, getRootLayerAfterTreeManipulations) | 385 TEST_F(LayerTest, getRootLayerAfterTreeManipulations) |
374 { | 386 { |
375 createSimpleTestTree(); | 387 createSimpleTestTree(); |
376 | 388 |
377 // For this test we don't care about setNeedsCommit calls. | 389 // For this test we don't care about setNeedsFullTreeSync calls. |
378 EXPECT_CALL(*m_layerTreeHost, setNeedsCommit()).Times(AtLeast(1)); | 390 EXPECT_CALL(*m_layerTreeHost, setNeedsFullTreeSync()).Times(AnyNumber()); |
379 | 391 |
380 scoped_refptr<Layer> child4 = Layer::create(); | 392 scoped_refptr<Layer> child4 = Layer::create(); |
381 | 393 |
382 EXPECT_EQ(m_parent.get(), m_parent->rootLayer()); | 394 EXPECT_EQ(m_parent.get(), m_parent->rootLayer()); |
383 EXPECT_EQ(m_parent.get(), m_child1->rootLayer()); | 395 EXPECT_EQ(m_parent.get(), m_child1->rootLayer()); |
384 EXPECT_EQ(m_parent.get(), m_child2->rootLayer()); | 396 EXPECT_EQ(m_parent.get(), m_child2->rootLayer()); |
385 EXPECT_EQ(m_parent.get(), m_child3->rootLayer()); | 397 EXPECT_EQ(m_parent.get(), m_child3->rootLayer()); |
386 EXPECT_EQ(child4.get(), child4->rootLayer()); | 398 EXPECT_EQ(child4.get(), child4->rootLayer()); |
387 EXPECT_EQ(m_parent.get(), m_grandChild1->rootLayer()); | 399 EXPECT_EQ(m_parent.get(), m_grandChild1->rootLayer()); |
388 EXPECT_EQ(m_parent.get(), m_grandChild2->rootLayer()); | 400 EXPECT_EQ(m_parent.get(), m_grandChild2->rootLayer()); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 } | 437 } |
426 | 438 |
427 TEST_F(LayerTest, checkSetNeedsDisplayCausesCorrectBehavior) | 439 TEST_F(LayerTest, checkSetNeedsDisplayCausesCorrectBehavior) |
428 { | 440 { |
429 // The semantics for setNeedsDisplay which are tested here: | 441 // The semantics for setNeedsDisplay which are tested here: |
430 // 1. sets needsDisplay flag appropriately. | 442 // 1. sets needsDisplay flag appropriately. |
431 // 2. indirectly calls setNeedsCommit, exactly once for each call to setNe
edsDisplay. | 443 // 2. indirectly calls setNeedsCommit, exactly once for each call to setNe
edsDisplay. |
432 | 444 |
433 scoped_refptr<Layer> testLayer = Layer::create(); | 445 scoped_refptr<Layer> testLayer = Layer::create(); |
434 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 446 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
435 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 447 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setIsDrawable(true)); |
436 | 448 |
437 gfx::Size testBounds = gfx::Size(501, 508); | 449 gfx::Size testBounds = gfx::Size(501, 508); |
438 | 450 |
439 gfx::RectF dirty1 = gfx::RectF(10, 15, 1, 2); | 451 gfx::RectF dirty1 = gfx::RectF(10, 15, 1, 2); |
440 gfx::RectF dirty2 = gfx::RectF(20, 25, 3, 4); | 452 gfx::RectF dirty2 = gfx::RectF(20, 25, 3, 4); |
441 gfx::RectF emptyDirtyRect = gfx::RectF(40, 45, 0, 0); | 453 gfx::RectF emptyDirtyRect = gfx::RectF(40, 45, 0, 0); |
442 gfx::RectF outOfBoundsDirtyRect = gfx::RectF(400, 405, 500, 502); | 454 gfx::RectF outOfBoundsDirtyRect = gfx::RectF(400, 405, 500, 502); |
443 | 455 |
444 // Before anything, testLayer should not be dirty. | 456 // Before anything, testLayer should not be dirty. |
445 EXPECT_FALSE(testLayer->needsDisplay()); | 457 EXPECT_FALSE(testLayer->needsDisplay()); |
446 | 458 |
447 // This is just initialization, but setNeedsCommit behavior is verified anyw
ay to avoid warnings. | 459 // This is just initialization, but setNeedsCommit behavior is verified anyw
ay to avoid warnings. |
448 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou
nds)); | 460 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setBounds(testBounds)); |
449 testLayer = Layer::create(); | 461 testLayer = Layer::create(); |
450 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 462 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
451 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 463 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setIsDrawable(true)); |
452 EXPECT_FALSE(testLayer->needsDisplay()); | 464 EXPECT_FALSE(testLayer->needsDisplay()); |
453 | 465 |
454 // The real test begins here. | 466 // The real test begins here. |
455 | 467 |
456 // Case 1: needsDisplay flag should not change because of an empty dirty rec
t. | 468 // Case 1: needsDisplay flag should not change because of an empty dirty rec
t. |
457 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe
ct(emptyDirtyRect)); | 469 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setNeedsDisplayRect(emptyDirtyRect)); |
458 EXPECT_FALSE(testLayer->needsDisplay()); | 470 EXPECT_FALSE(testLayer->needsDisplay()); |
459 | 471 |
460 // Case 2: basic. | 472 // Case 2: basic. |
461 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe
ct(dirty1)); | 473 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setNeedsDisplayRect(dirty1)); |
462 EXPECT_TRUE(testLayer->needsDisplay()); | 474 EXPECT_TRUE(testLayer->needsDisplay()); |
463 | 475 |
464 // Case 3: a second dirty rect. | 476 // Case 3: a second dirty rect. |
465 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe
ct(dirty2)); | 477 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setNeedsDisplayRect(dirty2)); |
466 EXPECT_TRUE(testLayer->needsDisplay()); | 478 EXPECT_TRUE(testLayer->needsDisplay()); |
467 | 479 |
468 // Case 4: Layer should accept dirty rects that go beyond its bounds. | 480 // Case 4: Layer should accept dirty rects that go beyond its bounds. |
469 testLayer = Layer::create(); | 481 testLayer = Layer::create(); |
470 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 482 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
471 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 483 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setIsDrawable(true)); |
472 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou
nds)); | 484 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setBounds(testBounds)); |
473 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplayRe
ct(outOfBoundsDirtyRect)); | 485 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setNeedsDisplayRect(outOfBoundsDirtyRe
ct)); |
474 EXPECT_TRUE(testLayer->needsDisplay()); | 486 EXPECT_TRUE(testLayer->needsDisplay()); |
475 | 487 |
476 // Case 5: setNeedsDisplay() without the dirty rect arg. | 488 // Case 5: setNeedsDisplay() without the dirty rect arg. |
477 testLayer = Layer::create(); | 489 testLayer = Layer::create(); |
478 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 490 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
479 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 491 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setIsDrawable(true)); |
480 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou
nds)); | 492 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setBounds(testBounds)); |
481 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNeedsDisplay()
); | 493 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setNeedsDisplay()); |
482 EXPECT_TRUE(testLayer->needsDisplay()); | 494 EXPECT_TRUE(testLayer->needsDisplay()); |
483 | 495 |
484 // Case 6: setNeedsDisplay() with a non-drawable layer | 496 // Case 6: setNeedsDisplay() with a non-drawable layer |
485 testLayer = Layer::create(); | 497 testLayer = Layer::create(); |
486 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 498 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
487 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setBounds(testBou
nds)); | 499 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setBounds(testBounds)); |
488 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setNeedsDisplayRe
ct(dirty1)); | 500 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setNeedsDisplayRect(dirty1)); |
489 EXPECT_TRUE(testLayer->needsDisplay()); | 501 EXPECT_TRUE(testLayer->needsDisplay()); |
490 } | 502 } |
491 | 503 |
492 TEST_F(LayerTest, checkPropertyChangeCausesCorrectBehavior) | 504 TEST_F(LayerTest, checkPropertyChangeCausesCorrectBehavior) |
493 { | 505 { |
494 scoped_refptr<Layer> testLayer = Layer::create(); | 506 scoped_refptr<Layer> testLayer = Layer::create(); |
495 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 507 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
496 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 508 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setIsDrawable(true)); |
497 | 509 |
498 scoped_refptr<Layer> dummyLayer = Layer::create(); // just a dummy layer for
this test case. | 510 scoped_refptr<Layer> dummyLayer = Layer::create(); // just a dummy layer for
this test case. |
499 | 511 |
500 // sanity check of initial test condition | 512 // sanity check of initial test condition |
501 EXPECT_FALSE(testLayer->needsDisplay()); | 513 EXPECT_FALSE(testLayer->needsDisplay()); |
502 | 514 |
503 // Test properties that should not call needsDisplay and needsCommit when ch
anged. | 515 // Test properties that should not call needsDisplay and needsCommit when ch
anged. |
504 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setVisibleContent
Rect(gfx::Rect(0, 0, 40, 50))); | 516 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setVisibleContentRect(gfx::Rect(0, 0,
40, 50))); |
505 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setUseLCDText(tru
e)); | 517 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setUseLCDText(true)); |
506 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawOpacity(0.
5)); | 518 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setDrawOpacity(0.5)); |
507 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setRenderTarget(0
)); | 519 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setRenderTarget(0)); |
508 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawTransform(
gfx::Transform())); | 520 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setDrawTransform(gfx::Transform())); |
509 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setScreenSpaceTra
nsform(gfx::Transform())); | 521 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setScreenSpaceTransform(gfx::Transform
())); |
510 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawableConten
tRect(gfx::Rect(4, 5, 6, 7))); | 522 EXPECT_SET_NEEDS_COMMIT(0, testLayer->setDrawableContentRect(gfx::Rect(4, 5,
6, 7))); |
511 EXPECT_FALSE(testLayer->needsDisplay()); | 523 EXPECT_FALSE(testLayer->needsDisplay()); |
512 | 524 |
513 // Next, test properties that should call setNeedsCommit (but not setNeedsDi
splay) | 525 // Next, test properties that should call setNeedsCommit (but not setNeedsDi
splay) |
514 // All properties need to be set to new values in order for setNeedsCommit t
o be called. | 526 // All properties need to be set to new values in order for setNeedsCommit t
o be called. |
515 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setAnchorPoint(gf
x::PointF(1.23f, 4.56f))); | 527 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setAnchorPoint(gfx::PointF(1.23f, 4.56
f))); |
516 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setAnchorPointZ(0
.7f)); | 528 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setAnchorPointZ(0.7f)); |
517 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBackgroundColo
r(SK_ColorLTGRAY)); | 529 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setBackgroundColor(SK_ColorLTGRAY)); |
518 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setMasksToBounds(
true)); | 530 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setMasksToBounds(true)); |
519 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setMaskLayer(dumm
yLayer.get())); | 531 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setOpacity(0.5)); |
520 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setOpacity(0.5)); | 532 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setContentsOpaque(true)); |
521 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setContentsOpaque
(true)); | 533 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setPosition(gfx::PointF(4, 9))); |
522 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setPosition(gfx::
PointF(4, 9))); | 534 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setSublayerTransform(MathUtil::createG
fxTransform(0, 0, 0, 0, 0, 0))); |
523 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setReplicaLayer(d
ummyLayer.get())); | 535 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setScrollable(true)); |
524 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setSublayerTransf
orm(MathUtil::createGfxTransform(0, 0, 0, 0, 0, 0))); | 536 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setShouldScrollOnMainThread(true)); |
525 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollable(tru
e)); | 537 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setNonFastScrollableRegion(gfx::Rect(1
, 1, 2, 2))); |
526 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setShouldScrollOn
MainThread(true)); | 538 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setHaveWheelEventHandlers(true)); |
527 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNonFastScrolla
bleRegion(gfx::Rect(1, 1, 2, 2))); | 539 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setTransform(MathUtil::createGfxTransf
orm(0, 0, 0, 0, 0, 0))); |
528 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setHaveWheelEvent
Handlers(true)); | 540 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setDoubleSided(false)); |
529 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollOffset(g
fx::Vector2d(10, 10))); | 541 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setDebugName("Test Layer")); |
530 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setTransform(Math
Util::createGfxTransform(0, 0, 0, 0, 0, 0))); | 542 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setDrawCheckerboardForMissingTiles(!te
stLayer->drawCheckerboardForMissingTiles())); |
531 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDoubleSided(fa
lse)); | 543 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setForceRenderSurface(true)); |
532 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDebugName("Tes
t Layer")); | 544 |
533 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDrawCheckerboa
rdForMissingTiles(!testLayer->drawCheckerboardForMissingTiles())); | 545 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, testLayer->setMaskLayer(dummyLayer.get())
); |
534 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setForceRenderSur
face(true)); | 546 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, testLayer->setReplicaLayer(dummyLayer.get
())); |
| 547 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, testLayer->setScrollOffset(gfx::Vector2d(
10, 10))); |
535 | 548 |
536 // The above tests should not have caused a change to the needsDisplay flag. | 549 // The above tests should not have caused a change to the needsDisplay flag. |
537 EXPECT_FALSE(testLayer->needsDisplay()); | 550 EXPECT_FALSE(testLayer->needsDisplay()); |
538 | 551 |
539 // Test properties that should call setNeedsDisplay and setNeedsCommit | 552 // Test properties that should call setNeedsDisplay and setNeedsCommit |
540 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(gfx::Si
ze(5, 10))); | 553 EXPECT_SET_NEEDS_COMMIT(1, testLayer->setBounds(gfx::Size(5, 10))); |
541 EXPECT_TRUE(testLayer->needsDisplay()); | 554 EXPECT_TRUE(testLayer->needsDisplay()); |
542 } | 555 } |
543 | 556 |
544 TEST_F(LayerTest, verifyPushPropertiesAccumulatesUpdateRect) | 557 TEST_F(LayerTest, verifyPushPropertiesAccumulatesUpdateRect) |
545 { | 558 { |
546 scoped_refptr<Layer> testLayer = Layer::create(); | 559 scoped_refptr<Layer> testLayer = Layer::create(); |
547 scoped_ptr<LayerImpl> implLayer = LayerImpl::create(1); | 560 scoped_ptr<LayerImpl> implLayer = LayerImpl::create(1); |
548 | 561 |
549 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(), gfx::SizeF(5, 5))); | 562 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(), gfx::SizeF(5, 5))); |
550 testLayer->pushPropertiesTo(implLayer.get()); | 563 testLayer->pushPropertiesTo(implLayer.get()); |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
809 scoped_refptr<MockLayer> layer(new MockLayer); | 822 scoped_refptr<MockLayer> layer(new MockLayer); |
810 EXPECT_FALSE(layer->needsDisplay()); | 823 EXPECT_FALSE(layer->needsDisplay()); |
811 layer->setBounds(gfx::Size(0, 10)); | 824 layer->setBounds(gfx::Size(0, 10)); |
812 EXPECT_FALSE(layer->needsDisplay()); | 825 EXPECT_FALSE(layer->needsDisplay()); |
813 layer->setBounds(gfx::Size(10, 10)); | 826 layer->setBounds(gfx::Size(10, 10)); |
814 EXPECT_TRUE(layer->needsDisplay()); | 827 EXPECT_TRUE(layer->needsDisplay()); |
815 } | 828 } |
816 | 829 |
817 } // namespace | 830 } // namespace |
818 } // namespace cc | 831 } // namespace cc |
OLD | NEW |