Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 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/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
| 6 | 6 |
| 7 #include "base/memory/weak_ptr.h" | |
| 7 #include "cc/base/thread_impl.h" | 8 #include "cc/base/thread_impl.h" |
| 8 #include "cc/layers/content_layer.h" | 9 #include "cc/layers/content_layer.h" |
| 9 #include "cc/layers/layer.h" | 10 #include "cc/layers/layer.h" |
| 10 #include "cc/layers/layer_impl.h" | 11 #include "cc/layers/layer_impl.h" |
| 11 #include "cc/test/fake_content_layer_client.h" | 12 #include "cc/test/fake_content_layer_client.h" |
| 12 #include "cc/test/fake_layer_tree_host_client.h" | 13 #include "cc/test/fake_layer_tree_host_client.h" |
| 13 #include "cc/test/geometry_test_utils.h" | 14 #include "cc/test/geometry_test_utils.h" |
| 14 #include "cc/test/layer_tree_test.h" | 15 #include "cc/test/layer_tree_test.h" |
| 15 #include "cc/trees/layer_tree_impl.h" | 16 #include "cc/trees/layer_tree_impl.h" |
| 16 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerScrollClien t.h" | 17 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerScrollClien t.h" |
| 17 #include "ui/gfx/point_conversions.h" | 18 #include "ui/gfx/point_conversions.h" |
| 18 #include "ui/gfx/size_conversions.h" | 19 #include "ui/gfx/size_conversions.h" |
| 19 #include "ui/gfx/vector2d_conversions.h" | 20 #include "ui/gfx/vector2d_conversions.h" |
| 20 | 21 |
| 21 namespace cc { | 22 namespace cc { |
| 22 namespace { | 23 namespace { |
| 23 | 24 |
| 24 class LayerTreeHostScrollTest : public LayerTreeTest {}; | 25 class LayerTreeHostScrollTest : public LayerTreeTest {}; |
| 25 | 26 |
| 26 class LayerTreeHostScrollTestScrollSimple : public LayerTreeHostScrollTest { | 27 class LayerTreeHostScrollTestScrollSimple : public LayerTreeHostScrollTest { |
| 27 public: | 28 public: |
| 28 LayerTreeHostScrollTestScrollSimple() | 29 LayerTreeHostScrollTestScrollSimple() |
| 29 : initial_scroll_(10, 20), | 30 : initial_scroll_(10, 20), |
| 30 second_scroll_(40, 5), | 31 second_scroll_(40, 5), |
| 31 scroll_amount_(2, -1), | 32 scroll_amount_(2, -1), |
| 32 num_scrolls_(0) { | 33 num_scrolls_(0) {} |
| 33 } | |
| 34 | 34 |
| 35 virtual void BeginTest() OVERRIDE { | 35 virtual void BeginTest() OVERRIDE { |
| 36 layer_tree_host()->root_layer()->SetScrollable(true); | 36 layer_tree_host()->root_layer()->SetScrollable(true); |
| 37 layer_tree_host()->root_layer()->SetScrollOffset(initial_scroll_); | 37 layer_tree_host()->root_layer()->SetScrollOffset(initial_scroll_); |
| 38 PostSetNeedsCommitToMainThread(); | 38 PostSetNeedsCommitToMainThread(); |
| 39 } | 39 } |
| 40 | 40 |
| 41 virtual void Layout() OVERRIDE { | 41 virtual void Layout() OVERRIDE { |
| 42 Layer* root = layer_tree_host()->root_layer(); | 42 Layer* root = layer_tree_host()->root_layer(); |
| 43 if (!layer_tree_host()->commit_number()) { | 43 if (!layer_tree_host()->commit_number()) { |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 65 PostSetNeedsCommitToMainThread(); | 65 PostSetNeedsCommitToMainThread(); |
| 66 break; | 66 break; |
| 67 case 1: | 67 case 1: |
| 68 EXPECT_VECTOR_EQ(root->scroll_offset(), second_scroll_); | 68 EXPECT_VECTOR_EQ(root->scroll_offset(), second_scroll_); |
| 69 EXPECT_VECTOR_EQ(root->ScrollDelta(), scroll_amount_); | 69 EXPECT_VECTOR_EQ(root->ScrollDelta(), scroll_amount_); |
| 70 EndTest(); | 70 EndTest(); |
| 71 break; | 71 break; |
| 72 } | 72 } |
| 73 } | 73 } |
| 74 | 74 |
| 75 virtual void ApplyScrollAndScale( | 75 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, float scale) |
| 76 gfx::Vector2d scroll_delta, float scale) OVERRIDE { | 76 OVERRIDE { |
| 77 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); | 77 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); |
| 78 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); | 78 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); |
| 79 num_scrolls_++; | 79 num_scrolls_++; |
| 80 } | 80 } |
| 81 | 81 |
| 82 virtual void AfterTest() OVERRIDE { | 82 virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_scrolls_); } |
| 83 EXPECT_EQ(1, num_scrolls_); | |
| 84 } | |
| 85 | 83 |
| 86 private: | 84 private: |
| 87 gfx::Vector2d initial_scroll_; | 85 gfx::Vector2d initial_scroll_; |
| 88 gfx::Vector2d second_scroll_; | 86 gfx::Vector2d second_scroll_; |
| 89 gfx::Vector2d scroll_amount_; | 87 gfx::Vector2d scroll_amount_; |
| 90 int num_scrolls_; | 88 int num_scrolls_; |
| 91 }; | 89 }; |
| 92 | 90 |
| 93 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestScrollSimple); | 91 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestScrollSimple); |
| 94 | 92 |
| 95 class LayerTreeHostScrollTestScrollMultipleRedraw | 93 class LayerTreeHostScrollTestScrollMultipleRedraw |
| 96 : public LayerTreeHostScrollTest { | 94 : public LayerTreeHostScrollTest { |
| 97 public: | 95 public: |
| 98 LayerTreeHostScrollTestScrollMultipleRedraw() | 96 LayerTreeHostScrollTestScrollMultipleRedraw() |
| 99 : initial_scroll_(40, 10), | 97 : initial_scroll_(40, 10), scroll_amount_(-3, 17), num_scrolls_(0) {} |
| 100 scroll_amount_(-3, 17), | |
| 101 num_scrolls_(0) { | |
| 102 } | |
| 103 | 98 |
| 104 virtual void BeginTest() OVERRIDE { | 99 virtual void BeginTest() OVERRIDE { |
| 105 layer_tree_host()->root_layer()->SetScrollable(true); | 100 layer_tree_host()->root_layer()->SetScrollable(true); |
| 106 layer_tree_host()->root_layer()->SetScrollOffset(initial_scroll_); | 101 layer_tree_host()->root_layer()->SetScrollOffset(initial_scroll_); |
| 107 PostSetNeedsCommitToMainThread(); | 102 PostSetNeedsCommitToMainThread(); |
| 108 } | 103 } |
| 109 | 104 |
| 110 virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 105 virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 111 Layer* root = layer_tree_host()->root_layer(); | 106 Layer* root = layer_tree_host()->root_layer(); |
| 112 switch (layer_tree_host()->commit_number()) { | 107 switch (layer_tree_host()->commit_number()) { |
| 113 case 0: | 108 case 0: |
| 114 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); | 109 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); |
| 115 break; | 110 break; |
| 116 case 1: | 111 case 1: |
| 117 EXPECT_VECTOR_EQ( | 112 EXPECT_VECTOR_EQ(root->scroll_offset(), |
| 118 root->scroll_offset(), | 113 initial_scroll_ + scroll_amount_ + scroll_amount_); |
| 119 initial_scroll_ + scroll_amount_ + scroll_amount_); | |
| 120 case 2: | 114 case 2: |
| 121 EXPECT_VECTOR_EQ( | 115 EXPECT_VECTOR_EQ(root->scroll_offset(), |
| 122 root->scroll_offset(), | 116 initial_scroll_ + scroll_amount_ + scroll_amount_); |
| 123 initial_scroll_ + scroll_amount_ + scroll_amount_); | |
| 124 break; | 117 break; |
| 125 } | 118 } |
| 126 } | 119 } |
| 127 | 120 |
| 128 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 121 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 129 LayerImpl* root = impl->active_tree()->root_layer(); | 122 LayerImpl* root = impl->active_tree()->root_layer(); |
| 130 root->SetScrollable(true); | 123 root->SetScrollable(true); |
| 131 root->SetMaxScrollOffset(gfx::Vector2d(100, 100)); | 124 root->SetMaxScrollOffset(gfx::Vector2d(100, 100)); |
| 132 | 125 |
| 133 if (impl->active_tree()->source_frame_number() == 0 && | 126 if (impl->active_tree()->source_frame_number() == 0 && |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 145 EXPECT_EQ(root->ScrollDelta(), scroll_amount_); | 138 EXPECT_EQ(root->ScrollDelta(), scroll_amount_); |
| 146 root->ScrollBy(scroll_amount_); | 139 root->ScrollBy(scroll_amount_); |
| 147 EXPECT_VECTOR_EQ(root->ScrollDelta(), scroll_amount_ + scroll_amount_); | 140 EXPECT_VECTOR_EQ(root->ScrollDelta(), scroll_amount_ + scroll_amount_); |
| 148 | 141 |
| 149 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); | 142 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); |
| 150 PostSetNeedsCommitToMainThread(); | 143 PostSetNeedsCommitToMainThread(); |
| 151 } else if (impl->active_tree()->source_frame_number() == 1) { | 144 } else if (impl->active_tree()->source_frame_number() == 1) { |
| 152 // Third or later draw after second commit. | 145 // Third or later draw after second commit. |
| 153 EXPECT_GE(impl->SourceAnimationFrameNumber(), 3); | 146 EXPECT_GE(impl->SourceAnimationFrameNumber(), 3); |
| 154 EXPECT_VECTOR_EQ(root->ScrollDelta(), gfx::Vector2d()); | 147 EXPECT_VECTOR_EQ(root->ScrollDelta(), gfx::Vector2d()); |
| 155 EXPECT_VECTOR_EQ( | 148 EXPECT_VECTOR_EQ(root->scroll_offset(), |
| 156 root->scroll_offset(), | 149 initial_scroll_ + scroll_amount_ + scroll_amount_); |
| 157 initial_scroll_ + scroll_amount_ + scroll_amount_); | |
| 158 EndTest(); | 150 EndTest(); |
| 159 } | 151 } |
| 160 } | 152 } |
| 161 | 153 |
| 162 virtual void ApplyScrollAndScale( | 154 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, float scale) |
| 163 gfx::Vector2d scroll_delta, float scale) OVERRIDE { | 155 OVERRIDE { |
| 164 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); | 156 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); |
| 165 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); | 157 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); |
| 166 num_scrolls_++; | 158 num_scrolls_++; |
| 167 } | 159 } |
| 168 | 160 |
| 169 virtual void AfterTest() OVERRIDE { | 161 virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_scrolls_); } |
| 170 EXPECT_EQ(1, num_scrolls_); | 162 |
| 171 } | |
| 172 private: | 163 private: |
| 173 gfx::Vector2d initial_scroll_; | 164 gfx::Vector2d initial_scroll_; |
| 174 gfx::Vector2d scroll_amount_; | 165 gfx::Vector2d scroll_amount_; |
| 175 int num_scrolls_; | 166 int num_scrolls_; |
| 176 }; | 167 }; |
| 177 | 168 |
| 178 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestScrollMultipleRedraw); | 169 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestScrollMultipleRedraw); |
| 179 | 170 |
| 180 class LayerTreeHostScrollTestFractionalScroll : public LayerTreeHostScrollTest { | 171 class LayerTreeHostScrollTestFractionalScroll : public LayerTreeHostScrollTest { |
| 181 public: | 172 public: |
| 182 LayerTreeHostScrollTestFractionalScroll() | 173 LayerTreeHostScrollTestFractionalScroll() : scroll_amount_(1.75, 0) {} |
| 183 : scroll_amount_(1.75, 0) { | |
| 184 } | |
| 185 | 174 |
| 186 virtual void BeginTest() OVERRIDE { | 175 virtual void BeginTest() OVERRIDE { |
| 187 layer_tree_host()->root_layer()->SetScrollable(true); | 176 layer_tree_host()->root_layer()->SetScrollable(true); |
| 188 PostSetNeedsCommitToMainThread(); | 177 PostSetNeedsCommitToMainThread(); |
| 189 } | 178 } |
| 190 | 179 |
| 191 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 180 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 192 LayerImpl* root = impl->active_tree()->root_layer(); | 181 LayerImpl* root = impl->active_tree()->root_layer(); |
| 193 root->SetMaxScrollOffset(gfx::Vector2d(100, 100)); | 182 root->SetMaxScrollOffset(gfx::Vector2d(100, 100)); |
| 194 | 183 |
| 195 // Check that a fractional scroll delta is correctly accumulated over | 184 // Check that a fractional scroll delta is correctly accumulated over |
| 196 // multiple commits. | 185 // multiple commits. |
| 197 switch (impl->active_tree()->source_frame_number()) { | 186 switch (impl->active_tree()->source_frame_number()) { |
| 198 case 0: | 187 case 0: |
| 199 EXPECT_VECTOR_EQ(root->scroll_offset(), gfx::Vector2d(0, 0)); | 188 EXPECT_VECTOR_EQ(root->scroll_offset(), gfx::Vector2d(0, 0)); |
| 200 EXPECT_VECTOR_EQ(root->ScrollDelta(), gfx::Vector2d(0, 0)); | 189 EXPECT_VECTOR_EQ(root->ScrollDelta(), gfx::Vector2d(0, 0)); |
| 201 PostSetNeedsCommitToMainThread(); | 190 PostSetNeedsCommitToMainThread(); |
| 202 break; | 191 break; |
| 203 case 1: | 192 case 1: |
| 204 EXPECT_VECTOR_EQ( | 193 EXPECT_VECTOR_EQ(root->scroll_offset(), |
| 205 root->scroll_offset(), | 194 gfx::ToFlooredVector2d(scroll_amount_)); |
| 206 gfx::ToFlooredVector2d(scroll_amount_)); | 195 EXPECT_VECTOR_EQ(root->ScrollDelta(), |
| 207 EXPECT_VECTOR_EQ( | 196 gfx::Vector2dF(fmod(scroll_amount_.x(), 1.0f), 0.0f)); |
| 208 root->ScrollDelta(), | |
| 209 gfx::Vector2dF(fmod(scroll_amount_.x(), 1.0f), 0.0f)); | |
| 210 PostSetNeedsCommitToMainThread(); | 197 PostSetNeedsCommitToMainThread(); |
| 211 break; | 198 break; |
| 212 case 2: | 199 case 2: |
| 213 EXPECT_VECTOR_EQ( | 200 EXPECT_VECTOR_EQ( |
| 214 root->scroll_offset(), | 201 root->scroll_offset(), |
| 215 gfx::ToFlooredVector2d(scroll_amount_ + scroll_amount_)); | 202 gfx::ToFlooredVector2d(scroll_amount_ + scroll_amount_)); |
| 216 EXPECT_VECTOR_EQ( | 203 EXPECT_VECTOR_EQ( |
| 217 root->ScrollDelta(), | 204 root->ScrollDelta(), |
| 218 gfx::Vector2dF(fmod(2.0f * scroll_amount_.x(), 1.0f), 0.0f)); | 205 gfx::Vector2dF(fmod(2.0f * scroll_amount_.x(), 1.0f), 0.0f)); |
| 219 EndTest(); | 206 EndTest(); |
| 220 break; | 207 break; |
| 221 } | 208 } |
| 222 root->ScrollBy(scroll_amount_); | 209 root->ScrollBy(scroll_amount_); |
| 223 } | 210 } |
| 224 | 211 |
| 225 virtual void ApplyScrollAndScale( | 212 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, float scale) |
| 226 gfx::Vector2d scroll_delta, float scale) OVERRIDE { | 213 OVERRIDE { |
| 227 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); | 214 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); |
| 228 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); | 215 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); |
| 229 } | 216 } |
| 230 | 217 |
| 231 virtual void AfterTest() OVERRIDE {} | 218 virtual void AfterTest() OVERRIDE {} |
| 232 | 219 |
| 233 private: | 220 private: |
| 234 gfx::Vector2dF scroll_amount_; | 221 gfx::Vector2dF scroll_amount_; |
| 235 }; | 222 }; |
| 236 | 223 |
| 237 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestFractionalScroll); | 224 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestFractionalScroll); |
| 238 | 225 |
| 239 class LayerTreeHostScrollTestCaseWithChild | 226 class LayerTreeHostScrollTestCaseWithChild |
| 240 : public LayerTreeHostScrollTest, | 227 : public LayerTreeHostScrollTest, |
| 241 public WebKit::WebLayerScrollClient { | 228 public WebKit::WebLayerScrollClient { |
| 242 public: | 229 public: |
| 243 LayerTreeHostScrollTestCaseWithChild() | 230 LayerTreeHostScrollTestCaseWithChild() |
| 244 : initial_offset_(10, 20), | 231 : initial_offset_(10, 20), |
| 245 javascript_scroll_(40, 5), | 232 javascript_scroll_(40, 5), |
| 246 scroll_amount_(2, -1), | 233 scroll_amount_(2, -1), |
| 247 num_scrolls_(0) { | 234 num_scrolls_(0) {} |
| 248 } | |
| 249 | 235 |
| 250 virtual void SetupTree() OVERRIDE { | 236 virtual void SetupTree() OVERRIDE { |
| 251 layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_); | 237 layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_); |
| 252 | 238 |
| 253 scoped_refptr<Layer> root_layer = Layer::Create(); | 239 scoped_refptr<Layer> root_layer = Layer::Create(); |
| 254 root_layer->SetBounds(gfx::Size(10, 10)); | 240 root_layer->SetBounds(gfx::Size(10, 10)); |
| 255 | 241 |
| 256 root_scroll_layer_ = ContentLayer::Create(&fake_content_layer_client_); | 242 root_scroll_layer_ = ContentLayer::Create(&fake_content_layer_client_); |
| 257 root_scroll_layer_->SetBounds(gfx::Size(110, 110)); | 243 root_scroll_layer_->SetBounds(gfx::Size(110, 110)); |
| 258 | 244 |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 286 expected_scroll_layer_ = root_scroll_layer_; | 272 expected_scroll_layer_ = root_scroll_layer_; |
| 287 expected_no_scroll_layer_ = child_layer_; | 273 expected_no_scroll_layer_ = child_layer_; |
| 288 } | 274 } |
| 289 | 275 |
| 290 expected_scroll_layer_->SetScrollOffset(initial_offset_); | 276 expected_scroll_layer_->SetScrollOffset(initial_offset_); |
| 291 | 277 |
| 292 layer_tree_host()->SetRootLayer(root_layer); | 278 layer_tree_host()->SetRootLayer(root_layer); |
| 293 LayerTreeHostScrollTest::SetupTree(); | 279 LayerTreeHostScrollTest::SetupTree(); |
| 294 } | 280 } |
| 295 | 281 |
| 296 virtual void BeginTest() OVERRIDE { | 282 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 297 PostSetNeedsCommitToMainThread(); | |
| 298 } | |
| 299 | 283 |
| 300 virtual void didScroll() OVERRIDE { | 284 virtual void didScroll() OVERRIDE { |
| 301 final_scroll_offset_ = expected_scroll_layer_->scroll_offset(); | 285 final_scroll_offset_ = expected_scroll_layer_->scroll_offset(); |
| 302 } | 286 } |
| 303 | 287 |
| 304 virtual void ApplyScrollAndScale( | 288 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, float scale) |
| 305 gfx::Vector2d scroll_delta, float scale) OVERRIDE { | 289 OVERRIDE { |
| 306 gfx::Vector2d offset = root_scroll_layer_->scroll_offset(); | 290 gfx::Vector2d offset = root_scroll_layer_->scroll_offset(); |
| 307 root_scroll_layer_->SetScrollOffset(offset + scroll_delta); | 291 root_scroll_layer_->SetScrollOffset(offset + scroll_delta); |
| 308 num_scrolls_++; | 292 num_scrolls_++; |
| 309 } | 293 } |
| 310 | 294 |
| 311 virtual void Layout() OVERRIDE { | 295 virtual void Layout() OVERRIDE { |
| 312 EXPECT_VECTOR_EQ( | 296 EXPECT_VECTOR_EQ(gfx::Vector2d(), |
| 313 gfx::Vector2d(), expected_no_scroll_layer_->scroll_offset()); | 297 expected_no_scroll_layer_->scroll_offset()); |
| 314 | 298 |
| 315 switch (layer_tree_host()->commit_number()) { | 299 switch (layer_tree_host()->commit_number()) { |
| 316 case 0: | 300 case 0: |
| 317 EXPECT_VECTOR_EQ( | 301 EXPECT_VECTOR_EQ(initial_offset_, |
| 318 initial_offset_, | 302 expected_scroll_layer_->scroll_offset()); |
| 319 expected_scroll_layer_->scroll_offset()); | |
| 320 break; | 303 break; |
| 321 case 1: | 304 case 1: |
| 322 EXPECT_VECTOR_EQ( | 305 EXPECT_VECTOR_EQ(initial_offset_ + scroll_amount_, |
| 323 initial_offset_ + scroll_amount_, | 306 expected_scroll_layer_->scroll_offset()); |
| 324 expected_scroll_layer_->scroll_offset()); | |
| 325 | 307 |
| 326 // Pretend like Javascript updated the scroll position itself. | 308 // Pretend like Javascript updated the scroll position itself. |
| 327 expected_scroll_layer_->SetScrollOffset(javascript_scroll_); | 309 expected_scroll_layer_->SetScrollOffset(javascript_scroll_); |
| 328 break; | 310 break; |
| 329 case 2: | 311 case 2: |
| 330 EXPECT_VECTOR_EQ( | 312 EXPECT_VECTOR_EQ(javascript_scroll_ + scroll_amount_, |
| 331 javascript_scroll_ + scroll_amount_, | 313 expected_scroll_layer_->scroll_offset()); |
| 332 expected_scroll_layer_->scroll_offset()); | |
| 333 break; | 314 break; |
| 334 } | 315 } |
| 335 } | 316 } |
| 336 | 317 |
| 337 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 318 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 338 LayerImpl* root_impl = impl->active_tree()->root_layer(); | 319 LayerImpl* root_impl = impl->active_tree()->root_layer(); |
| 339 LayerImpl* root_scroll_layer_impl = root_impl->children()[0]; | 320 LayerImpl* root_scroll_layer_impl = root_impl->children()[0]; |
| 340 LayerImpl* child_layer_impl = root_scroll_layer_impl->children()[0]; | 321 LayerImpl* child_layer_impl = root_scroll_layer_impl->children()[0]; |
| 341 | 322 |
| 342 LayerImpl* expected_scroll_layer_impl = NULL; | 323 LayerImpl* expected_scroll_layer_impl = NULL; |
| 343 LayerImpl* expected_no_scroll_layer_impl = NULL; | 324 LayerImpl* expected_no_scroll_layer_impl = NULL; |
| 344 if (scroll_child_layer_) { | 325 if (scroll_child_layer_) { |
| 345 expected_scroll_layer_impl = child_layer_impl; | 326 expected_scroll_layer_impl = child_layer_impl; |
| 346 expected_no_scroll_layer_impl = root_scroll_layer_impl; | 327 expected_no_scroll_layer_impl = root_scroll_layer_impl; |
| 347 } else { | 328 } else { |
| 348 expected_scroll_layer_impl = root_scroll_layer_impl; | 329 expected_scroll_layer_impl = root_scroll_layer_impl; |
| 349 expected_no_scroll_layer_impl = child_layer_impl; | 330 expected_no_scroll_layer_impl = child_layer_impl; |
| 350 } | 331 } |
| 351 | 332 |
| 352 EXPECT_VECTOR_EQ(gfx::Vector2d(), root_impl->ScrollDelta()); | 333 EXPECT_VECTOR_EQ(gfx::Vector2d(), root_impl->ScrollDelta()); |
| 353 EXPECT_VECTOR_EQ( | 334 EXPECT_VECTOR_EQ(gfx::Vector2d(), |
| 354 gfx::Vector2d(), | 335 expected_no_scroll_layer_impl->ScrollDelta()); |
| 355 expected_no_scroll_layer_impl->ScrollDelta()); | |
| 356 | 336 |
| 357 // Ensure device scale factor is affecting the layers. | 337 // Ensure device scale factor is affecting the layers. |
| 358 gfx::Size expected_content_bounds = gfx::ToCeiledSize( | 338 gfx::Size expected_content_bounds = gfx::ToCeiledSize( |
| 359 gfx::ScaleSize(root_scroll_layer_impl->bounds(), device_scale_factor_)); | 339 gfx::ScaleSize(root_scroll_layer_impl->bounds(), device_scale_factor_)); |
| 360 EXPECT_SIZE_EQ( | 340 EXPECT_SIZE_EQ(expected_content_bounds, |
| 361 expected_content_bounds, | 341 root_scroll_layer_->content_bounds()); |
| 362 root_scroll_layer_->content_bounds()); | |
| 363 | 342 |
| 364 expected_content_bounds = gfx::ToCeiledSize( | 343 expected_content_bounds = gfx::ToCeiledSize( |
| 365 gfx::ScaleSize(child_layer_impl->bounds(), device_scale_factor_)); | 344 gfx::ScaleSize(child_layer_impl->bounds(), device_scale_factor_)); |
| 366 EXPECT_SIZE_EQ(expected_content_bounds, child_layer_->content_bounds()); | 345 EXPECT_SIZE_EQ(expected_content_bounds, child_layer_->content_bounds()); |
| 367 | 346 |
| 368 switch (impl->active_tree()->source_frame_number()) { | 347 switch (impl->active_tree()->source_frame_number()) { |
| 369 case 0: { | 348 case 0: { |
| 370 // Gesture scroll on impl thread. | 349 // Gesture scroll on impl thread. |
| 371 InputHandler::ScrollStatus status = impl->ScrollBegin( | 350 InputHandler::ScrollStatus status = impl->ScrollBegin( |
| 372 gfx::ToCeiledPoint( | 351 gfx::ToCeiledPoint(expected_scroll_layer_impl->position() + |
| 373 expected_scroll_layer_impl->position() + | 352 gfx::Vector2dF(0.5f, 0.5f)), |
| 374 gfx::Vector2dF(0.5f, 0.5f)), | |
| 375 InputHandler::Gesture); | 353 InputHandler::Gesture); |
| 376 EXPECT_EQ(InputHandler::ScrollStarted, status); | 354 EXPECT_EQ(InputHandler::ScrollStarted, status); |
| 377 impl->ScrollBy(gfx::Point(), scroll_amount_); | 355 impl->ScrollBy(gfx::Point(), scroll_amount_); |
| 378 impl->ScrollEnd(); | 356 impl->ScrollEnd(); |
| 379 | 357 |
| 380 // Check the scroll is applied as a delta. | 358 // Check the scroll is applied as a delta. |
| 381 EXPECT_VECTOR_EQ( | 359 EXPECT_VECTOR_EQ(initial_offset_, |
| 382 initial_offset_, | 360 expected_scroll_layer_impl->scroll_offset()); |
| 383 expected_scroll_layer_impl->scroll_offset()); | 361 EXPECT_VECTOR_EQ(scroll_amount_, |
| 384 EXPECT_VECTOR_EQ( | 362 expected_scroll_layer_impl->ScrollDelta()); |
| 385 scroll_amount_, | |
| 386 expected_scroll_layer_impl->ScrollDelta()); | |
| 387 break; | 363 break; |
| 388 } | 364 } |
| 389 case 1: { | 365 case 1: { |
| 390 // Wheel scroll on impl thread. | 366 // Wheel scroll on impl thread. |
| 391 InputHandler::ScrollStatus status = impl->ScrollBegin( | 367 InputHandler::ScrollStatus status = impl->ScrollBegin( |
| 392 gfx::ToCeiledPoint( | 368 gfx::ToCeiledPoint(expected_scroll_layer_impl->position() + |
| 393 expected_scroll_layer_impl->position() + | 369 gfx::Vector2dF(0.5f, 0.5f)), |
| 394 gfx::Vector2dF(0.5f, 0.5f)), | |
| 395 InputHandler::Wheel); | 370 InputHandler::Wheel); |
| 396 EXPECT_EQ(InputHandler::ScrollStarted, status); | 371 EXPECT_EQ(InputHandler::ScrollStarted, status); |
| 397 impl->ScrollBy(gfx::Point(), scroll_amount_); | 372 impl->ScrollBy(gfx::Point(), scroll_amount_); |
| 398 impl->ScrollEnd(); | 373 impl->ScrollEnd(); |
| 399 | 374 |
| 400 // Check the scroll is applied as a delta. | 375 // Check the scroll is applied as a delta. |
| 401 EXPECT_VECTOR_EQ( | 376 EXPECT_VECTOR_EQ(javascript_scroll_, |
| 402 javascript_scroll_, | 377 expected_scroll_layer_impl->scroll_offset()); |
| 403 expected_scroll_layer_impl->scroll_offset()); | 378 EXPECT_VECTOR_EQ(scroll_amount_, |
| 404 EXPECT_VECTOR_EQ( | 379 expected_scroll_layer_impl->ScrollDelta()); |
| 405 scroll_amount_, | |
| 406 expected_scroll_layer_impl->ScrollDelta()); | |
| 407 break; | 380 break; |
| 408 } | 381 } |
| 409 case 2: | 382 case 2: |
| 410 | 383 |
| 411 EXPECT_VECTOR_EQ( | 384 EXPECT_VECTOR_EQ(javascript_scroll_ + scroll_amount_, |
| 412 javascript_scroll_ + scroll_amount_, | 385 expected_scroll_layer_impl->scroll_offset()); |
| 413 expected_scroll_layer_impl->scroll_offset()); | 386 EXPECT_VECTOR_EQ(gfx::Vector2d(), |
| 414 EXPECT_VECTOR_EQ( | 387 expected_scroll_layer_impl->ScrollDelta()); |
| 415 gfx::Vector2d(), | |
| 416 expected_scroll_layer_impl->ScrollDelta()); | |
| 417 | 388 |
| 418 EndTest(); | 389 EndTest(); |
| 419 break; | 390 break; |
| 420 } | 391 } |
| 421 } | 392 } |
| 422 | 393 |
| 423 virtual void AfterTest() OVERRIDE { | 394 virtual void AfterTest() OVERRIDE { |
| 424 if (scroll_child_layer_) { | 395 if (scroll_child_layer_) { |
| 425 EXPECT_EQ(0, num_scrolls_); | 396 EXPECT_EQ(0, num_scrolls_); |
| 426 EXPECT_VECTOR_EQ( | 397 EXPECT_VECTOR_EQ(javascript_scroll_ + scroll_amount_, |
| 427 javascript_scroll_ + scroll_amount_, | 398 final_scroll_offset_); |
| 428 final_scroll_offset_); | |
| 429 } else { | 399 } else { |
| 430 EXPECT_EQ(2, num_scrolls_); | 400 EXPECT_EQ(2, num_scrolls_); |
| 431 EXPECT_VECTOR_EQ(gfx::Vector2d(), final_scroll_offset_); | 401 EXPECT_VECTOR_EQ(gfx::Vector2d(), final_scroll_offset_); |
| 432 } | 402 } |
| 433 } | 403 } |
| 434 | 404 |
| 435 protected: | 405 protected: |
| 436 float device_scale_factor_; | 406 float device_scale_factor_; |
| 437 bool scroll_child_layer_; | 407 bool scroll_child_layer_; |
| 438 | 408 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 503 }; | 473 }; |
| 504 | 474 |
| 505 class ImplSidePaintingScrollTestSimple : public ImplSidePaintingScrollTest { | 475 class ImplSidePaintingScrollTestSimple : public ImplSidePaintingScrollTest { |
| 506 public: | 476 public: |
| 507 ImplSidePaintingScrollTestSimple() | 477 ImplSidePaintingScrollTestSimple() |
| 508 : initial_scroll_(10, 20), | 478 : initial_scroll_(10, 20), |
| 509 main_thread_scroll_(40, 5), | 479 main_thread_scroll_(40, 5), |
| 510 impl_thread_scroll1_(2, -1), | 480 impl_thread_scroll1_(2, -1), |
| 511 impl_thread_scroll2_(-3, 10), | 481 impl_thread_scroll2_(-3, 10), |
| 512 num_scrolls_(0), | 482 num_scrolls_(0), |
| 513 can_activate_(true) { | 483 can_activate_(true) {} |
| 514 } | |
| 515 | 484 |
| 516 virtual void BeginTest() OVERRIDE { | 485 virtual void BeginTest() OVERRIDE { |
| 517 layer_tree_host()->root_layer()->SetScrollable(true); | 486 layer_tree_host()->root_layer()->SetScrollable(true); |
| 518 layer_tree_host()->root_layer()->SetScrollOffset(initial_scroll_); | 487 layer_tree_host()->root_layer()->SetScrollOffset(initial_scroll_); |
| 519 PostSetNeedsCommitToMainThread(); | 488 PostSetNeedsCommitToMainThread(); |
| 520 } | 489 } |
| 521 | 490 |
| 522 virtual void Layout() OVERRIDE { | 491 virtual void Layout() OVERRIDE { |
| 523 Layer* root = layer_tree_host()->root_layer(); | 492 Layer* root = layer_tree_host()->root_layer(); |
| 524 if (!layer_tree_host()->commit_number()) { | 493 if (!layer_tree_host()->commit_number()) { |
| 525 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); | 494 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); |
| 526 } else { | 495 } else { |
| 527 EXPECT_VECTOR_EQ(root->scroll_offset(), | 496 EXPECT_VECTOR_EQ(root->scroll_offset(), |
| 528 initial_scroll_ + impl_thread_scroll1_); | 497 initial_scroll_ + impl_thread_scroll1_); |
| 529 | 498 |
| 530 // Pretend like Javascript updated the scroll position itself with a | 499 // Pretend like Javascript updated the scroll position itself with a |
| 531 // change of main_thread_scroll. | 500 // change of main_thread_scroll. |
| 532 root->SetScrollOffset(initial_scroll_ + | 501 root->SetScrollOffset(initial_scroll_ + main_thread_scroll_ + |
| 533 main_thread_scroll_ + | |
| 534 impl_thread_scroll1_); | 502 impl_thread_scroll1_); |
| 535 } | 503 } |
| 536 } | 504 } |
| 537 | 505 |
| 538 virtual bool CanActivatePendingTree() OVERRIDE { | 506 virtual bool CanActivatePendingTree() OVERRIDE { return can_activate_; } |
| 539 return can_activate_; | |
| 540 } | |
| 541 | 507 |
| 542 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 508 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 543 // We force a second draw here of the first commit before activating | 509 // We force a second draw here of the first commit before activating |
| 544 // the second commit. | 510 // the second commit. |
| 545 if (impl->active_tree()->source_frame_number() == 0) | 511 if (impl->active_tree()->source_frame_number() == 0) |
| 546 impl->SetNeedsRedraw(); | 512 impl->SetNeedsRedraw(); |
| 547 } | 513 } |
| 548 | 514 |
| 549 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 515 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 550 ImplSidePaintingScrollTest::DrawLayersOnThread(impl); | 516 ImplSidePaintingScrollTest::DrawLayersOnThread(impl); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 571 // CommitCompleteOnThread will trigger this function again | 537 // CommitCompleteOnThread will trigger this function again |
| 572 // and cause us to take the else clause. | 538 // and cause us to take the else clause. |
| 573 } else { | 539 } else { |
| 574 can_activate_ = true; | 540 can_activate_ = true; |
| 575 ASSERT_TRUE(pending_root); | 541 ASSERT_TRUE(pending_root); |
| 576 EXPECT_EQ(impl->pending_tree()->source_frame_number(), 1); | 542 EXPECT_EQ(impl->pending_tree()->source_frame_number(), 1); |
| 577 | 543 |
| 578 root->ScrollBy(impl_thread_scroll2_); | 544 root->ScrollBy(impl_thread_scroll2_); |
| 579 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); | 545 EXPECT_VECTOR_EQ(root->scroll_offset(), initial_scroll_); |
| 580 EXPECT_VECTOR_EQ(root->ScrollDelta(), | 546 EXPECT_VECTOR_EQ(root->ScrollDelta(), |
| 581 impl_thread_scroll1_ + impl_thread_scroll2_); | 547 impl_thread_scroll1_ + impl_thread_scroll2_); |
| 582 EXPECT_VECTOR_EQ(root->sent_scroll_delta(), impl_thread_scroll1_); | 548 EXPECT_VECTOR_EQ(root->sent_scroll_delta(), impl_thread_scroll1_); |
| 583 | 549 |
| 584 EXPECT_VECTOR_EQ(pending_root->scroll_offset(), | 550 EXPECT_VECTOR_EQ( |
| 551 pending_root->scroll_offset(), | |
| 585 initial_scroll_ + main_thread_scroll_ + impl_thread_scroll1_); | 552 initial_scroll_ + main_thread_scroll_ + impl_thread_scroll1_); |
| 586 EXPECT_VECTOR_EQ(pending_root->ScrollDelta(), impl_thread_scroll2_); | 553 EXPECT_VECTOR_EQ(pending_root->ScrollDelta(), impl_thread_scroll2_); |
| 587 EXPECT_VECTOR_EQ(pending_root->sent_scroll_delta(), gfx::Vector2d()); | 554 EXPECT_VECTOR_EQ(pending_root->sent_scroll_delta(), gfx::Vector2d()); |
| 588 } | 555 } |
| 589 break; | 556 break; |
| 590 case 1: | 557 case 1: |
| 591 EXPECT_FALSE(impl->pending_tree()); | 558 EXPECT_FALSE(impl->pending_tree()); |
| 592 EXPECT_VECTOR_EQ(root->scroll_offset(), | 559 EXPECT_VECTOR_EQ( |
| 560 root->scroll_offset(), | |
| 593 initial_scroll_ + main_thread_scroll_ + impl_thread_scroll1_); | 561 initial_scroll_ + main_thread_scroll_ + impl_thread_scroll1_); |
| 594 EXPECT_VECTOR_EQ(root->ScrollDelta(), impl_thread_scroll2_); | 562 EXPECT_VECTOR_EQ(root->ScrollDelta(), impl_thread_scroll2_); |
| 595 EXPECT_VECTOR_EQ(root->sent_scroll_delta(), gfx::Vector2d()); | 563 EXPECT_VECTOR_EQ(root->sent_scroll_delta(), gfx::Vector2d()); |
| 596 EndTest(); | 564 EndTest(); |
| 597 break; | 565 break; |
| 598 } | 566 } |
| 599 } | 567 } |
| 600 | 568 |
| 601 virtual void ApplyScrollAndScale( | 569 virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta, float scale) |
| 602 gfx::Vector2d scroll_delta, float scale) OVERRIDE { | 570 OVERRIDE { |
| 603 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); | 571 gfx::Vector2d offset = layer_tree_host()->root_layer()->scroll_offset(); |
| 604 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); | 572 layer_tree_host()->root_layer()->SetScrollOffset(offset + scroll_delta); |
| 605 num_scrolls_++; | 573 num_scrolls_++; |
| 606 } | 574 } |
| 607 | 575 |
| 608 virtual void AfterTest() OVERRIDE { | 576 virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_scrolls_); } |
| 609 EXPECT_EQ(1, num_scrolls_); | |
| 610 } | |
| 611 | 577 |
| 612 private: | 578 private: |
| 613 gfx::Vector2d initial_scroll_; | 579 gfx::Vector2d initial_scroll_; |
| 614 gfx::Vector2d main_thread_scroll_; | 580 gfx::Vector2d main_thread_scroll_; |
| 615 gfx::Vector2d impl_thread_scroll1_; | 581 gfx::Vector2d impl_thread_scroll1_; |
| 616 gfx::Vector2d impl_thread_scroll2_; | 582 gfx::Vector2d impl_thread_scroll2_; |
| 617 int num_scrolls_; | 583 int num_scrolls_; |
| 618 bool can_activate_; | 584 bool can_activate_; |
| 619 }; | 585 }; |
| 620 | 586 |
| 621 MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestSimple); | 587 MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestSimple); |
| 622 | 588 |
| 623 class LayerTreeHostScrollTestScrollZeroMaxScrollOffset | 589 class LayerTreeHostScrollTestScrollZeroMaxScrollOffset |
| 624 : public LayerTreeHostScrollTest { | 590 : public LayerTreeHostScrollTest { |
| 625 public: | 591 public: |
| 626 LayerTreeHostScrollTestScrollZeroMaxScrollOffset() {} | 592 LayerTreeHostScrollTestScrollZeroMaxScrollOffset() {} |
| 627 | 593 |
| 628 virtual void BeginTest() OVERRIDE { | 594 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 629 PostSetNeedsCommitToMainThread(); | |
| 630 } | |
| 631 | 595 |
| 632 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 596 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 633 LayerImpl* root = impl->active_tree()->root_layer(); | 597 LayerImpl* root = impl->active_tree()->root_layer(); |
| 634 root->SetScrollable(true); | 598 root->SetScrollable(true); |
| 635 | 599 |
| 636 root->SetMaxScrollOffset(gfx::Vector2d(100, 100)); | 600 root->SetMaxScrollOffset(gfx::Vector2d(100, 100)); |
| 637 EXPECT_EQ( | 601 EXPECT_EQ(InputHandler::ScrollStarted, |
| 638 InputHandler::ScrollStarted, | 602 root->TryScroll(gfx::PointF(0.0f, 1.0f), InputHandler::Gesture)); |
| 639 root->TryScroll( | |
| 640 gfx::PointF(0.0f, 1.0f), | |
| 641 InputHandler::Gesture)); | |
| 642 | 603 |
| 643 root->SetMaxScrollOffset(gfx::Vector2d(0, 0)); | 604 root->SetMaxScrollOffset(gfx::Vector2d(0, 0)); |
| 644 EXPECT_EQ( | 605 EXPECT_EQ(InputHandler::ScrollIgnored, |
| 645 InputHandler::ScrollIgnored, | 606 root->TryScroll(gfx::PointF(0.0f, 1.0f), InputHandler::Gesture)); |
| 646 root->TryScroll( | |
| 647 gfx::PointF(0.0f, 1.0f), | |
| 648 InputHandler::Gesture)); | |
| 649 | 607 |
| 650 root->SetMaxScrollOffset(gfx::Vector2d(-100, -100)); | 608 root->SetMaxScrollOffset(gfx::Vector2d(-100, -100)); |
| 651 EXPECT_EQ( | 609 EXPECT_EQ(InputHandler::ScrollIgnored, |
| 652 InputHandler::ScrollIgnored, | 610 root->TryScroll(gfx::PointF(0.0f, 1.0f), InputHandler::Gesture)); |
| 653 root->TryScroll( | |
| 654 gfx::PointF(0.0f, 1.0f), | |
| 655 InputHandler::Gesture)); | |
| 656 | 611 |
| 657 EndTest(); | 612 EndTest(); |
| 658 } | 613 } |
| 659 | 614 |
| 660 virtual void AfterTest() OVERRIDE {} | 615 virtual void AfterTest() OVERRIDE {} |
| 661 }; | 616 }; |
| 662 | 617 |
| 663 SINGLE_AND_MULTI_THREAD_TEST_F( | 618 SINGLE_AND_MULTI_THREAD_TEST_F( |
| 664 LayerTreeHostScrollTestScrollZeroMaxScrollOffset); | 619 LayerTreeHostScrollTestScrollZeroMaxScrollOffset); |
| 665 | 620 |
| 666 class ThreadCheckingInputHandlerClient : public InputHandlerClient { | 621 class ThreadCheckingInputHandlerClient : public InputHandlerClient { |
| 667 public: | 622 public: |
| 668 ThreadCheckingInputHandlerClient(base::SingleThreadTaskRunner* runner, | 623 ThreadCheckingInputHandlerClient(base::SingleThreadTaskRunner* runner, |
| 669 bool* received_stop_flinging) | 624 bool* received_stop_flinging) |
| 670 : task_runner_(runner) , | 625 : task_runner_(runner), received_stop_flinging_(received_stop_flinging) {} |
| 671 received_stop_flinging_(received_stop_flinging) {} | |
| 672 | |
| 673 virtual void BindToHandler(InputHandler* handler) OVERRIDE { | |
| 674 if (!task_runner_->BelongsToCurrentThread()) | |
| 675 ADD_FAILURE() << "BindToClient called on wrong thread"; | |
| 676 } | |
| 677 | 626 |
| 678 virtual void Animate(base::TimeTicks time) OVERRIDE { | 627 virtual void Animate(base::TimeTicks time) OVERRIDE { |
| 679 if (!task_runner_->BelongsToCurrentThread()) | 628 if (!task_runner_->BelongsToCurrentThread()) |
| 680 ADD_FAILURE() << "Animate called on wrong thread"; | 629 ADD_FAILURE() << "Animate called on wrong thread"; |
| 681 } | 630 } |
| 682 | 631 |
| 683 virtual void MainThreadHasStoppedFlinging() OVERRIDE { | 632 virtual void MainThreadHasStoppedFlinging() OVERRIDE { |
| 684 if (!task_runner_->BelongsToCurrentThread()) | 633 if (!task_runner_->BelongsToCurrentThread()) |
| 685 ADD_FAILURE() << "MainThreadHasStoppedFlinging called on wrong thread"; | 634 ADD_FAILURE() << "MainThreadHasStoppedFlinging called on wrong thread"; |
| 686 *received_stop_flinging_ = true; | 635 *received_stop_flinging_ = true; |
| 687 } | 636 } |
| 688 | 637 |
| 689 private: | 638 private: |
| 690 base::SingleThreadTaskRunner* task_runner_; | 639 base::SingleThreadTaskRunner* task_runner_; |
| 691 bool* received_stop_flinging_; | 640 bool* received_stop_flinging_; |
| 692 }; | 641 }; |
| 693 | 642 |
| 694 class ThreadCheckingFakeLayerTreeHostClient : public FakeLayerTreeHostClient { | 643 void BindInputHandlerOnCompositorThread( |
| 695 public: | 644 const base::WeakPtr<InputHandler>& input_handler, |
| 696 ThreadCheckingFakeLayerTreeHostClient( | 645 scoped_ptr<ThreadCheckingInputHandlerClient> client) { |
| 697 base::SingleThreadTaskRunner* task_runner, | 646 input_handler->BindToClient(client.release()); |
| 698 bool* received_stop_flinging) | 647 } |
| 699 : FakeLayerTreeHostClient(DIRECT_3D) , | |
| 700 task_runner_(task_runner), | |
| 701 received_stop_flinging_(received_stop_flinging) {} | |
| 702 | |
| 703 virtual scoped_ptr<InputHandlerClient> CreateInputHandlerClient() OVERRIDE { | |
| 704 return scoped_ptr<InputHandlerClient>(new ThreadCheckingInputHandlerClient( | |
| 705 task_runner_, received_stop_flinging_)).Pass(); | |
| 706 } | |
| 707 | |
| 708 private: | |
| 709 base::SingleThreadTaskRunner* task_runner_; | |
| 710 bool* received_stop_flinging_; | |
| 711 }; | |
| 712 | 648 |
| 713 TEST(LayerTreeHostFlingTest, DidStopFlingingThread) { | 649 TEST(LayerTreeHostFlingTest, DidStopFlingingThread) { |
| 714 base::Thread impl_thread("cc"); | 650 base::Thread impl_thread("cc"); |
| 715 impl_thread.Start(); | 651 impl_thread.Start(); |
| 716 scoped_ptr<cc::Thread> impl_ccthread = | 652 scoped_ptr<Thread> impl_ccthread = |
| 717 cc::ThreadImpl::CreateForDifferentThread( | 653 ThreadImpl::CreateForDifferentThread(impl_thread.message_loop_proxy()); |
| 718 impl_thread.message_loop_proxy()); | |
| 719 | 654 |
| 720 bool received_stop_flinging = false; | 655 bool received_stop_flinging = false; |
| 721 ThreadCheckingFakeLayerTreeHostClient client( | |
| 722 impl_thread.message_loop_proxy().get(), | |
| 723 &received_stop_flinging); | |
| 724 LayerTreeSettings settings; | 656 LayerTreeSettings settings; |
| 725 | 657 |
| 658 scoped_ptr<ThreadCheckingInputHandlerClient> input_handler_client( | |
| 659 new ThreadCheckingInputHandlerClient( | |
| 660 impl_thread.message_loop_proxy().get(), &received_stop_flinging)); | |
| 661 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); | |
| 662 | |
| 726 scoped_ptr<LayerTreeHost> layer_tree_host = | 663 scoped_ptr<LayerTreeHost> layer_tree_host = |
| 727 LayerTreeHost::Create(&client, settings, impl_ccthread.Pass()); | 664 LayerTreeHost::Create(&client, settings, impl_ccthread.Pass()); |
| 728 | 665 |
| 666 impl_thread.message_loop_proxy() | |
| 667 ->PostTask(FROM_HERE, | |
| 668 base::Bind(&BindInputHandlerOnCompositorThread, | |
| 669 layer_tree_host->GetInputHandler(), | |
| 670 base::Passed(input_handler_client.Pass()))); | |
|
danakj
2013/05/06 16:33:39
nit: base::Passed(&input_handler_client)
| |
| 671 | |
| 729 layer_tree_host->DidStopFlinging(); | 672 layer_tree_host->DidStopFlinging(); |
| 730 layer_tree_host.reset(); | 673 layer_tree_host.reset(); |
| 731 impl_thread.Stop(); | 674 impl_thread.Stop(); |
| 732 EXPECT_TRUE(received_stop_flinging); | 675 EXPECT_TRUE(received_stop_flinging); |
| 733 } | 676 } |
| 734 | 677 |
| 735 } // namespace | 678 } // namespace |
| 736 } // namespace cc | 679 } // namespace cc |
| OLD | NEW |