| 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 |