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 "cc/animation/animation_curve.h" | 7 #include "cc/animation/animation_curve.h" |
8 #include "cc/animation/layer_animation_controller.h" | 8 #include "cc/animation/layer_animation_controller.h" |
9 #include "cc/animation/timing_function.h" | 9 #include "cc/animation/timing_function.h" |
10 #include "cc/layers/layer.h" | 10 #include "cc/layers/layer.h" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
97 } | 97 } |
98 EndTest(); | 98 EndTest(); |
99 } | 99 } |
100 | 100 |
101 virtual void AfterTest() OVERRIDE {} | 101 virtual void AfterTest() OVERRIDE {} |
102 | 102 |
103 private: | 103 private: |
104 int num_animates_; | 104 int num_animates_; |
105 }; | 105 }; |
106 | 106 |
107 // Temporarily suppressed per crbug.com/280706. | 107 MULTI_THREAD_TEST_F( |
108 //MULTI_THREAD_TEST_F( | 108 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback); |
109 // LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback); | |
110 | 109 |
111 // Add a layer animation and confirm that | 110 // Add a layer animation and confirm that |
112 // LayerTreeHostImpl::updateAnimationState does get called and continues to | 111 // LayerTreeHostImpl::updateAnimationState does get called and continues to |
113 // get called. | 112 // get called. |
114 class LayerTreeHostAnimationTestAddAnimation | 113 class LayerTreeHostAnimationTestAddAnimation |
115 : public LayerTreeHostAnimationTest { | 114 : public LayerTreeHostAnimationTest { |
116 public: | 115 public: |
117 LayerTreeHostAnimationTestAddAnimation() | 116 LayerTreeHostAnimationTestAddAnimation() |
118 : num_animates_(0), | 117 : num_animates_(0), |
119 received_animation_started_notification_(false), | 118 received_animation_started_notification_(false), |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 | 286 |
288 virtual void AfterTest() OVERRIDE {} | 287 virtual void AfterTest() OVERRIDE {} |
289 | 288 |
290 private: | 289 private: |
291 int num_animates_; | 290 int num_animates_; |
292 }; | 291 }; |
293 | 292 |
294 SINGLE_AND_MULTI_THREAD_TEST_F( | 293 SINGLE_AND_MULTI_THREAD_TEST_F( |
295 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded); | 294 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded); |
296 | 295 |
296 // Ensures that animations do not tick when we are backgrounded and | |
297 // and the active tree's root layer is null. | |
298 class LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree | |
299 : public LayerTreeHostAnimationTest { | |
300 public: | |
301 virtual void BeginTest() OVERRIDE { | |
302 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); | |
303 } | |
304 | |
305 virtual void NotifyAnimationFinished(double time) OVERRIDE { | |
306 // Replace animated commits with a null root layer commit. | |
307 layer_tree_host()->SetRootLayer(make_scoped_refptr<Layer>(NULL)); | |
308 } | |
309 | |
310 virtual void DidCommit() OVERRIDE { | |
311 // This alternates setting the root tree null and root tree with animation. | |
danakj
2013/08/29 17:22:17
"setting the root tree null" - i think you mean se
| |
312 switch (layer_tree_host()->source_frame_number()) { | |
313 case 1: | |
314 // Wait for NotifyAnimationFinished to set the root layer to null. | |
315 break; | |
316 case 2: | |
317 SetupTree(); | |
318 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); | |
danakj
2013/08/29 17:22:17
This is going to be racey, you're post-tasking the
| |
319 break; | |
320 case 3: | |
321 // Wait for NotifyAnimationFinished to set the root layer to null. | |
322 break; | |
323 case 4: | |
324 EndTest(); | |
325 break; | |
326 } | |
327 } | |
328 | |
329 virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { | |
330 // At the start of every commit, block activations and make sure | |
331 // we are backgrounded. | |
332 host_impl->BlockNotifyReadyToActivateForTesting(true); | |
333 PostSetVisibleToMainThread(false); | |
334 } | |
335 | |
336 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { | |
337 if (host_impl->settings().impl_side_painting) { | |
338 // We block activation for several ticks to make sure that, even though | |
339 // there is a pending tree with animations, we still do not background | |
340 // tick if the active tree has a null root layer. | |
341 if (host_impl->pending_tree()->source_frame_number() < 4) { | |
342 base::MessageLoopProxy::current()->PostDelayedTask( | |
343 FROM_HERE, | |
344 base::Bind( | |
345 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree: : | |
danakj
2013/08/29 17:22:17
80 col. save the Bind() result in a callback befor
| |
346 UnblockActivations, | |
347 base::Unretained(this), | |
348 host_impl), | |
349 4 * LowFrequencyAnimationInterval()); | |
350 } | |
351 } else { | |
352 UnblockActivations(host_impl); | |
danakj
2013/08/29 17:22:17
if (!impl paint) do this and early out? maybe tha
| |
353 } | |
354 } | |
355 | |
356 virtual void UnblockActivations(LayerTreeHostImpl* host_impl) { | |
357 host_impl->BlockNotifyReadyToActivateForTesting(false); | |
358 | |
359 // Initiate the next commit after a delay to give us a chance to background | |
360 // tick if the root layer isn't null. | |
361 base::MessageLoopProxy::current()->PostDelayedTask( | |
362 FROM_HERE, | |
363 base::Bind( | |
364 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree:: | |
365 InitiateNextCommit, | |
366 base::Unretained(this)), | |
367 4 * LowFrequencyAnimationInterval()); | |
368 } | |
369 | |
370 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { | |
371 // Verify that we are actually alternating null root layers. | |
372 switch (host_impl->active_tree()->source_frame_number()) { | |
373 case 1: | |
374 case 3: | |
375 EXPECT_FALSE(host_impl->active_tree()->root_layer()); | |
376 break; | |
377 case 0: | |
378 case 2: | |
379 EXPECT_TRUE(host_impl->active_tree()->root_layer()); | |
380 break; | |
381 } | |
382 } | |
383 | |
384 virtual void InitiateNextCommit() { | |
danakj
2013/08/29 17:22:17
not virtual?
| |
385 // The next commit is blocked until we become visible again. | |
386 PostSetVisibleToMainThread(true); | |
387 } | |
388 | |
389 virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl, | |
390 base::TimeTicks monotonic_time) OVERRIDE { | |
391 EXPECT_TRUE(host_impl->active_tree()->root_layer()); | |
392 } | |
393 | |
394 virtual void AfterTest() OVERRIDE {} | |
395 }; | |
396 | |
397 SINGLE_AND_MULTI_THREAD_TEST_F( | |
398 LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree); | |
399 | |
297 // Ensure that an animation's timing function is respected. | 400 // Ensure that an animation's timing function is respected. |
298 class LayerTreeHostAnimationTestAddAnimationWithTimingFunction | 401 class LayerTreeHostAnimationTestAddAnimationWithTimingFunction |
299 : public LayerTreeHostAnimationTest { | 402 : public LayerTreeHostAnimationTest { |
300 public: | 403 public: |
301 LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {} | 404 LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {} |
302 | 405 |
303 virtual void SetupTree() OVERRIDE { | 406 virtual void SetupTree() OVERRIDE { |
304 LayerTreeHostAnimationTest::SetupTree(); | 407 LayerTreeHostAnimationTest::SetupTree(); |
305 content_ = FakeContentLayer::Create(&client_); | 408 content_ = FakeContentLayer::Create(&client_); |
306 content_->SetBounds(gfx::Size(4, 4)); | 409 content_->SetBounds(gfx::Size(4, 4)); |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
798 int finished_times_; | 901 int finished_times_; |
799 FakeContentLayerClient client_; | 902 FakeContentLayerClient client_; |
800 scoped_refptr<FakeContentLayer> content_; | 903 scoped_refptr<FakeContentLayer> content_; |
801 }; | 904 }; |
802 | 905 |
803 MULTI_THREAD_TEST_F( | 906 MULTI_THREAD_TEST_F( |
804 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations); | 907 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations); |
805 | 908 |
806 } // namespace | 909 } // namespace |
807 } // namespace cc | 910 } // namespace cc |
OLD | NEW |