Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: cc/trees/layer_tree_host_unittest_animation.cc

Issue 26880010: gfx: Add FrameTime and DisplayTime classes (Closed) Base URL: http://git.chromium.org/chromium/src.git@checkHighResNow4
Patch Set: WIP Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "cc/layers/layer_impl.h" 11 #include "cc/layers/layer_impl.h"
12 #include "cc/test/animation_test_common.h" 12 #include "cc/test/animation_test_common.h"
13 #include "cc/test/fake_content_layer.h" 13 #include "cc/test/fake_content_layer.h"
14 #include "cc/test/fake_content_layer_client.h" 14 #include "cc/test/fake_content_layer_client.h"
15 #include "cc/test/layer_tree_test.h" 15 #include "cc/test/layer_tree_test.h"
16 #include "cc/trees/layer_tree_impl.h" 16 #include "cc/trees/layer_tree_impl.h"
17 #include "ui/gfx/frame_time.h"
17 18
18 namespace cc { 19 namespace cc {
19 namespace { 20 namespace {
20 21
21 class LayerTreeHostAnimationTest : public LayerTreeTest { 22 class LayerTreeHostAnimationTest : public LayerTreeTest {
22 public: 23 public:
23 virtual void SetupTree() OVERRIDE { 24 virtual void SetupTree() OVERRIDE {
24 LayerTreeTest::SetupTree(); 25 LayerTreeTest::SetupTree();
25 layer_tree_host()->root_layer()->set_layer_animation_delegate(this); 26 layer_tree_host()->root_layer()->set_layer_animation_delegate(this);
26 } 27 }
27 }; 28 };
28 29
29 // Makes sure that SetNeedsAnimate does not cause the CommitRequested() state to 30 // Makes sure that SetNeedsAnimate does not cause the CommitRequested() state to
30 // be set. 31 // be set.
31 class LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested 32 class LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested
32 : public LayerTreeHostAnimationTest { 33 : public LayerTreeHostAnimationTest {
33 public: 34 public:
34 LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested() 35 LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested()
35 : num_commits_(0) {} 36 : num_commits_(0) {}
36 37
37 virtual void BeginTest() OVERRIDE { 38 virtual void BeginTest() OVERRIDE {
38 PostSetNeedsCommitToMainThread(); 39 PostSetNeedsCommitToMainThread();
39 } 40 }
40 41
41 virtual void Animate(base::TimeTicks monotonic_time) OVERRIDE { 42 virtual void Animate(gfx::FrameTime monotonic_time) OVERRIDE {
42 // We skip the first commit becasue its the commit that populates the 43 // We skip the first commit becasue its the commit that populates the
43 // impl thread with a tree. After the second commit, the test is done. 44 // impl thread with a tree. After the second commit, the test is done.
44 if (num_commits_ != 1) 45 if (num_commits_ != 1)
45 return; 46 return;
46 47
47 layer_tree_host()->SetNeedsAnimate(); 48 layer_tree_host()->SetNeedsAnimate();
48 // Right now, CommitRequested is going to be true, because during 49 // Right now, CommitRequested is going to be true, because during
49 // BeginFrame, we force CommitRequested to true to prevent requests from 50 // BeginFrame, we force CommitRequested to true to prevent requests from
50 // hitting the impl thread. But, when the next DidCommit happens, we should 51 // hitting the impl thread. But, when the next DidCommit happens, we should
51 // verify that CommitRequested has gone back to false. 52 // verify that CommitRequested has gone back to false.
(...skipping 30 matching lines...) Expand all
82 class LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback 83 class LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback
83 : public LayerTreeHostAnimationTest { 84 : public LayerTreeHostAnimationTest {
84 public: 85 public:
85 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback() 86 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback()
86 : num_animates_(0) {} 87 : num_animates_(0) {}
87 88
88 virtual void BeginTest() OVERRIDE { 89 virtual void BeginTest() OVERRIDE {
89 PostSetNeedsCommitToMainThread(); 90 PostSetNeedsCommitToMainThread();
90 } 91 }
91 92
92 virtual void Animate(base::TimeTicks) OVERRIDE { 93 virtual void Animate(gfx::FrameTime) OVERRIDE {
93 if (!num_animates_) { 94 if (!num_animates_) {
94 layer_tree_host()->SetNeedsAnimate(); 95 layer_tree_host()->SetNeedsAnimate();
95 num_animates_++; 96 num_animates_++;
96 return; 97 return;
97 } 98 }
98 EndTest(); 99 EndTest();
99 } 100 }
100 101
101 virtual void AfterTest() OVERRIDE {} 102 virtual void AfterTest() OVERRIDE {}
102 103
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 public: 183 public:
183 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws() 184 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws()
184 : started_animating_(false) {} 185 : started_animating_(false) {}
185 186
186 virtual void BeginTest() OVERRIDE { 187 virtual void BeginTest() OVERRIDE {
187 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 188 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
188 } 189 }
189 190
190 virtual void AnimateLayers( 191 virtual void AnimateLayers(
191 LayerTreeHostImpl* host_impl, 192 LayerTreeHostImpl* host_impl,
192 base::TimeTicks monotonic_time) OVERRIDE { 193 gfx::FrameTime monotonic_time) OVERRIDE {
193 started_animating_ = true; 194 started_animating_ = true;
194 } 195 }
195 196
196 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 197 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
197 if (started_animating_) 198 if (started_animating_)
198 EndTest(); 199 EndTest();
199 } 200 }
200 201
201 virtual bool PrepareToDrawOnThread( 202 virtual bool PrepareToDrawOnThread(
202 LayerTreeHostImpl* host_impl, 203 LayerTreeHostImpl* host_impl,
(...skipping 17 matching lines...) Expand all
220 public: 221 public:
221 LayerTreeHostAnimationTestAnimationsGetDeleted() 222 LayerTreeHostAnimationTestAnimationsGetDeleted()
222 : started_animating_(false) {} 223 : started_animating_(false) {}
223 224
224 virtual void BeginTest() OVERRIDE { 225 virtual void BeginTest() OVERRIDE {
225 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 226 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
226 } 227 }
227 228
228 virtual void AnimateLayers( 229 virtual void AnimateLayers(
229 LayerTreeHostImpl* host_impl, 230 LayerTreeHostImpl* host_impl,
230 base::TimeTicks monotonic_time) OVERRIDE { 231 gfx::FrameTime monotonic_time) OVERRIDE {
231 bool have_animations = !host_impl->animation_registrar()-> 232 bool have_animations = !host_impl->animation_registrar()->
232 active_animation_controllers().empty(); 233 active_animation_controllers().empty();
233 if (!started_animating_ && have_animations) { 234 if (!started_animating_ && have_animations) {
234 started_animating_ = true; 235 started_animating_ = true;
235 return; 236 return;
236 } 237 }
237 238
238 if (started_animating_ && !have_animations) 239 if (started_animating_ && !have_animations)
239 EndTest(); 240 EndTest();
240 } 241 }
(...skipping 21 matching lines...) Expand all
262 263
263 virtual void BeginTest() OVERRIDE { 264 virtual void BeginTest() OVERRIDE {
264 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 265 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
265 } 266 }
266 267
267 // Use WillAnimateLayers to set visible false before the animation runs and 268 // Use WillAnimateLayers to set visible false before the animation runs and
268 // causes a commit, so we block the second visible animate in single-thread 269 // causes a commit, so we block the second visible animate in single-thread
269 // mode. 270 // mode.
270 virtual void WillAnimateLayers( 271 virtual void WillAnimateLayers(
271 LayerTreeHostImpl* host_impl, 272 LayerTreeHostImpl* host_impl,
272 base::TimeTicks monotonic_time) OVERRIDE { 273 gfx::FrameTime monotonic_time) OVERRIDE {
273 // Verify that the host can draw, it's just not visible. 274 // Verify that the host can draw, it's just not visible.
274 EXPECT_TRUE(host_impl->CanDraw()); 275 EXPECT_TRUE(host_impl->CanDraw());
275 if (num_animates_ < 2) { 276 if (num_animates_ < 2) {
276 if (!num_animates_) { 277 if (!num_animates_) {
277 // We have a long animation running. It should continue to tick even 278 // We have a long animation running. It should continue to tick even
278 // if we are not visible. 279 // if we are not visible.
279 PostSetVisibleToMainThread(false); 280 PostSetVisibleToMainThread(false);
280 } 281 }
281 num_animates_++; 282 num_animates_++;
282 return; 283 return;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 base::Bind( 395 base::Bind(
395 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree:: 396 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree::
396 InitiateNextCommit, 397 InitiateNextCommit,
397 base::Unretained(this), 398 base::Unretained(this),
398 host_impl), 399 host_impl),
399 4 * LowFrequencyAnimationInterval()); 400 4 * LowFrequencyAnimationInterval());
400 } 401 }
401 } 402 }
402 403
403 virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl, 404 virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl,
404 base::TimeTicks monotonic_time) OVERRIDE { 405 gfx::FrameTime monotonic_time) OVERRIDE {
405 EXPECT_TRUE(host_impl->active_tree()->root_layer()); 406 EXPECT_TRUE(host_impl->active_tree()->root_layer());
406 active_tree_was_animated_ = true; 407 active_tree_was_animated_ = true;
407 } 408 }
408 409
409 void InitiateNextCommit(LayerTreeHostImpl* host_impl) { 410 void InitiateNextCommit(LayerTreeHostImpl* host_impl) {
410 // Verify that we actually animated when we should have. 411 // Verify that we actually animated when we should have.
411 bool has_active_tree = host_impl->active_tree()->root_layer(); 412 bool has_active_tree = host_impl->active_tree()->root_layer();
412 EXPECT_EQ(has_active_tree, active_tree_was_animated_); 413 EXPECT_EQ(has_active_tree, active_tree_was_animated_);
413 414
414 // The next commit is blocked until we become visible again. 415 // The next commit is blocked until we become visible again.
(...skipping 20 matching lines...) Expand all
435 content_->SetBounds(gfx::Size(4, 4)); 436 content_->SetBounds(gfx::Size(4, 4));
436 layer_tree_host()->root_layer()->AddChild(content_); 437 layer_tree_host()->root_layer()->AddChild(content_);
437 } 438 }
438 439
439 virtual void BeginTest() OVERRIDE { 440 virtual void BeginTest() OVERRIDE {
440 PostAddAnimationToMainThread(content_.get()); 441 PostAddAnimationToMainThread(content_.get());
441 } 442 }
442 443
443 virtual void AnimateLayers( 444 virtual void AnimateLayers(
444 LayerTreeHostImpl* host_impl, 445 LayerTreeHostImpl* host_impl,
445 base::TimeTicks monotonic_time) OVERRIDE { 446 gfx::FrameTime monotonic_time) OVERRIDE {
446 LayerAnimationController* controller_impl = 447 LayerAnimationController* controller_impl =
447 host_impl->active_tree()->root_layer()->children()[0]-> 448 host_impl->active_tree()->root_layer()->children()[0]->
448 layer_animation_controller(); 449 layer_animation_controller();
449 Animation* animation = 450 Animation* animation =
450 controller_impl->GetAnimation(Animation::Opacity); 451 controller_impl->GetAnimation(Animation::Opacity);
451 if (!animation) 452 if (!animation)
452 return; 453 return;
453 454
454 const FloatAnimationCurve* curve = 455 const FloatAnimationCurve* curve =
455 animation->curve()->ToFloatAnimationCurve(); 456 animation->curve()->ToFloatAnimationCurve();
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 Animation::Opacity)); 636 Animation::Opacity));
636 layer->layer_animation_controller()->AddAnimation(animation.Pass()); 637 layer->layer_animation_controller()->AddAnimation(animation.Pass());
637 638
638 // We add the animation *before* attaching the layer to the tree. 639 // We add the animation *before* attaching the layer to the tree.
639 layer_tree_host()->root_layer()->AddChild(layer); 640 layer_tree_host()->root_layer()->AddChild(layer);
640 } 641 }
641 } 642 }
642 643
643 virtual void AnimateLayers( 644 virtual void AnimateLayers(
644 LayerTreeHostImpl* impl_host, 645 LayerTreeHostImpl* impl_host,
645 base::TimeTicks monotonic_time) OVERRIDE { 646 gfx::FrameTime monotonic_time) OVERRIDE {
646 EndTest(); 647 EndTest();
647 } 648 }
648 649
649 virtual void AfterTest() OVERRIDE {} 650 virtual void AfterTest() OVERRIDE {}
650 }; 651 };
651 652
652 SINGLE_AND_MULTI_THREAD_TEST_F( 653 SINGLE_AND_MULTI_THREAD_TEST_F(
653 LayerTreeHostAnimationTestLayerAddedWithAnimation); 654 LayerTreeHostAnimationTestLayerAddedWithAnimation);
654 655
655 class LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount 656 class LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount
656 : public LayerTreeHostAnimationTest { 657 : public LayerTreeHostAnimationTest {
657 public: 658 public:
658 LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount() 659 LayerTreeHostAnimationTestCompositeAndReadbackAnimateCount()
659 : animated_commit_(-1) { 660 : animated_commit_(-1) {
660 } 661 }
661 662
662 virtual void Animate(base::TimeTicks) OVERRIDE { 663 virtual void Animate(gfx::FrameTime) OVERRIDE {
663 // We shouldn't animate on the CompositeAndReadback-forced commit, but we 664 // We shouldn't animate on the CompositeAndReadback-forced commit, but we
664 // should for the SetNeedsCommit-triggered commit. 665 // should for the SetNeedsCommit-triggered commit.
665 animated_commit_ = layer_tree_host()->source_frame_number(); 666 animated_commit_ = layer_tree_host()->source_frame_number();
666 EXPECT_NE(2, animated_commit_); 667 EXPECT_NE(2, animated_commit_);
667 } 668 }
668 669
669 virtual void BeginTest() OVERRIDE { 670 virtual void BeginTest() OVERRIDE {
670 PostSetNeedsCommitToMainThread(); 671 PostSetNeedsCommitToMainThread();
671 } 672 }
672 673
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 public: 708 public:
708 LayerTreeHostAnimationTestContinuousAnimate() 709 LayerTreeHostAnimationTestContinuousAnimate()
709 : num_commit_complete_(0), 710 : num_commit_complete_(0),
710 num_draw_layers_(0) { 711 num_draw_layers_(0) {
711 } 712 }
712 713
713 virtual void BeginTest() OVERRIDE { 714 virtual void BeginTest() OVERRIDE {
714 PostSetNeedsCommitToMainThread(); 715 PostSetNeedsCommitToMainThread();
715 } 716 }
716 717
717 virtual void Animate(base::TimeTicks) OVERRIDE { 718 virtual void Animate(gfx::FrameTime) OVERRIDE {
718 if (num_draw_layers_ == 2) 719 if (num_draw_layers_ == 2)
719 return; 720 return;
720 layer_tree_host()->SetNeedsAnimate(); 721 layer_tree_host()->SetNeedsAnimate();
721 } 722 }
722 723
723 virtual void Layout() OVERRIDE { 724 virtual void Layout() OVERRIDE {
724 layer_tree_host()->root_layer()->SetNeedsDisplay(); 725 layer_tree_host()->root_layer()->SetNeedsDisplay();
725 } 726 }
726 727
727 virtual void CommitCompleteOnThread(LayerTreeHostImpl* tree_impl) OVERRIDE { 728 virtual void CommitCompleteOnThread(LayerTreeHostImpl* tree_impl) OVERRIDE {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 int finished_times_; 928 int finished_times_;
928 FakeContentLayerClient client_; 929 FakeContentLayerClient client_;
929 scoped_refptr<FakeContentLayer> content_; 930 scoped_refptr<FakeContentLayer> content_;
930 }; 931 };
931 932
932 MULTI_THREAD_TEST_F( 933 MULTI_THREAD_TEST_F(
933 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations); 934 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations);
934 935
935 } // namespace 936 } // namespace
936 } // namespace cc 937 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698