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 |