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

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

Issue 16871016: cc: Use BeginFrameArgs (Closed) Base URL: http://git.chromium.org/chromium/src.git@bfargs2
Patch Set: else if typo Created 7 years, 5 months 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
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/synchronization/lock.h" 9 #include "base/synchronization/lock.h"
10 #include "cc/animation/timing_function.h" 10 #include "cc/animation/timing_function.h"
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 }; 691 };
692 692
693 MULTI_THREAD_TEST_F(LayerTreeHostTestCommit); 693 MULTI_THREAD_TEST_F(LayerTreeHostTestCommit);
694 694
695 // This test verifies that LayerTreeHostImpl's current frame time gets 695 // This test verifies that LayerTreeHostImpl's current frame time gets
696 // updated in consecutive frames when it doesn't draw due to tree 696 // updated in consecutive frames when it doesn't draw due to tree
697 // activation failure. 697 // activation failure.
698 class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails 698 class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails
699 : public LayerTreeHostTest { 699 : public LayerTreeHostTest {
700 public: 700 public:
701 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails() : frame_(0) {} 701 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails()
702 : frame_count_with_pending_tree_(0) {}
702 703
703 virtual void BeginTest() OVERRIDE { 704 virtual void BeginTest() OVERRIDE {
704 layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); 705 layer_tree_host()->SetViewportSize(gfx::Size(20, 20));
705 layer_tree_host()->set_background_color(SK_ColorGRAY); 706 layer_tree_host()->set_background_color(SK_ColorGRAY);
706 707
707 PostSetNeedsCommitToMainThread(); 708 PostSetNeedsCommitToMainThread();
708 } 709 }
709 710
711 void WillBeginFrameOnThread(LayerTreeHostImpl* host_impl,
712 const BeginFrameArgs &args) OVERRIDE {
713 if (host_impl->pending_tree())
714 frame_count_with_pending_tree_++;
715 }
716
710 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { 717 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
711 if (frame_ >= 1) { 718 if (frame_count_with_pending_tree_ > 1) {
712 EXPECT_NE(first_frame_time_, impl->CurrentFrameTimeTicks()); 719 EXPECT_NE(first_frame_time_.ToInternalValue(),
720 impl->CurrentFrameTimeTicks().ToInternalValue());
713 EndTest(); 721 EndTest();
714 return; 722 return;
715 } 723 }
716 724
717 EXPECT_FALSE(impl->settings().impl_side_painting); 725 EXPECT_FALSE(impl->settings().impl_side_painting);
718 EndTest(); 726 EndTest();
719 } 727 }
720 728
721 virtual bool CanActivatePendingTree(LayerTreeHostImpl* impl) OVERRIDE { 729 virtual bool CanActivatePendingTree(LayerTreeHostImpl* impl) OVERRIDE {
722 if (frame_ >= 1) 730 return frame_count_with_pending_tree_ > 1;
723 return true;
724
725 return false;
726 } 731 }
727 732
728 virtual bool CanActivatePendingTreeIfNeeded(LayerTreeHostImpl* impl) 733 virtual bool CanActivatePendingTreeIfNeeded(LayerTreeHostImpl* impl)
729 OVERRIDE { 734 OVERRIDE {
730 frame_++; 735 if (frame_count_with_pending_tree_ > 1)
731 if (frame_ == 1) { 736 return true;
737
738 if (first_frame_time_.is_null()) {
732 first_frame_time_ = impl->CurrentFrameTimeTicks(); 739 first_frame_time_ = impl->CurrentFrameTimeTicks();
733 740
734 // Since base::TimeTicks::Now() uses a low-resolution clock on 741 // Since base::TimeTicks::Now() uses a low-resolution clock on
735 // Windows, we need to make sure that the clock has incremented past 742 // Windows, we need to make sure that the clock has incremented past
736 // first_frame_time_. 743 // first_frame_time_.
737 while (first_frame_time_ == base::TimeTicks::Now()) {} 744 while (first_frame_time_ == base::TimeTicks::Now()) {}
745 }
746 return false;
747 }
738 748
739 return false; 749 virtual void DidActivateTreeOnThread(LayerTreeHostImpl *impl) {
740 } 750 if (impl->settings().impl_side_painting)
741 751 EXPECT_NE(frame_count_with_pending_tree_, 1);
742 return true;
743 } 752 }
744 753
745 virtual void AfterTest() OVERRIDE {} 754 virtual void AfterTest() OVERRIDE {}
746 755
747 private: 756 private:
748 int frame_; 757 int frame_count_with_pending_tree_;
749 base::TimeTicks first_frame_time_; 758 base::TimeTicks first_frame_time_;
750 }; 759 };
751 760
752 SINGLE_AND_MULTI_THREAD_TEST_F( 761 SINGLE_AND_MULTI_THREAD_TEST_F(
753 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails); 762 LayerTreeHostTestFrameTimeUpdatesAfterActivationFails);
754 763
755 // This test verifies that LayerTreeHostImpl's current frame time gets 764 // This test verifies that LayerTreeHostImpl's current frame time gets
756 // updated in consecutive frames when it draws in each frame. 765 // updated in consecutive frames when it draws in each frame.
757 class LayerTreeHostTestFrameTimeUpdatesAfterDraw : public LayerTreeHostTest { 766 class LayerTreeHostTestFrameTimeUpdatesAfterDraw : public LayerTreeHostTest {
758 public: 767 public:
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 impl->ProcessScrollDeltas(); 840 impl->ProcessScrollDeltas();
832 // We get one commit before the first draw, and the animation doesn't happen 841 // We get one commit before the first draw, and the animation doesn't happen
833 // until the second draw. 842 // until the second draw.
834 switch (impl->active_tree()->source_frame_number()) { 843 switch (impl->active_tree()->source_frame_number()) {
835 case 0: 844 case 0:
836 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor()); 845 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor());
837 // We'll start an animation when we get back to the main thread. 846 // We'll start an animation when we get back to the main thread.
838 break; 847 break;
839 case 1: 848 case 1:
840 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor()); 849 EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor());
841 PostSetNeedsRedrawToMainThread();
842 break; 850 break;
843 case 2: 851 case 2:
844 EXPECT_EQ(1.25f, impl->active_tree()->page_scale_factor()); 852 EXPECT_EQ(1.25f, impl->active_tree()->page_scale_factor());
845 EndTest(); 853 EndTest();
846 break; 854 break;
847 default: 855 default:
848 NOTREACHED(); 856 NOTREACHED();
849 } 857 }
850 } 858 }
851 859
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 // surface. This prevents any contents drawing into surfaces 1549 // surface. This prevents any contents drawing into surfaces
1542 // from being allocated. 1550 // from being allocated.
1543 host_impl->SetMemoryPolicy( 1551 host_impl->SetMemoryPolicy(
1544 ManagedMemoryPolicy(100 * 100 * 4 * 2), true); 1552 ManagedMemoryPolicy(100 * 100 * 4 * 2), true);
1545 break; 1553 break;
1546 case 1: 1554 case 1:
1547 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId( 1555 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId(
1548 surface1_render_pass_id)); 1556 surface1_render_pass_id));
1549 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId( 1557 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId(
1550 surface2_render_pass_id)); 1558 surface2_render_pass_id));
1551
1552 EndTest(); 1559 EndTest();
1553 break; 1560 break;
1554 } 1561 }
1555 } 1562 }
1556 1563
1557 virtual void DidCommitAndDrawFrame() OVERRIDE { 1564 virtual void DidCommitAndDrawFrame() OVERRIDE {
1558 if (!TestEnded()) 1565 if (!TestEnded())
1559 root_layer_->SetNeedsDisplay(); 1566 root_layer_->SetNeedsDisplay();
1560 } 1567 }
1561 1568
1562 virtual void AfterTest() OVERRIDE { 1569 virtual void AfterTest() OVERRIDE {
1563 EXPECT_EQ(3u, root_layer_->update_count()); 1570 EXPECT_GE(root_layer_->update_count(), 2u);
1564 EXPECT_EQ(3u, surface_layer1_->update_count()); 1571 EXPECT_GE(surface_layer1_->update_count(), 2u);
1565 EXPECT_EQ(3u, surface_layer2_->update_count()); 1572 EXPECT_GE(surface_layer2_->update_count(), 2u);
1566 } 1573 }
1567 1574
1568 private: 1575 private:
1569 FakeContentLayerClient client_; 1576 FakeContentLayerClient client_;
1570 scoped_refptr<FakeContentLayer> root_layer_; 1577 scoped_refptr<FakeContentLayer> root_layer_;
1571 scoped_refptr<FakeContentLayer> surface_layer1_; 1578 scoped_refptr<FakeContentLayer> surface_layer1_;
1572 scoped_refptr<FakeContentLayer> replica_layer1_; 1579 scoped_refptr<FakeContentLayer> replica_layer1_;
1573 scoped_refptr<FakeContentLayer> surface_layer2_; 1580 scoped_refptr<FakeContentLayer> surface_layer2_;
1574 scoped_refptr<FakeContentLayer> replica_layer2_; 1581 scoped_refptr<FakeContentLayer> replica_layer2_;
1575 }; 1582 };
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
2309 private: 2316 private:
2310 base::TimeTicks frame_time_; 2317 base::TimeTicks frame_time_;
2311 }; 2318 };
2312 2319
2313 MULTI_THREAD_TEST_F(LayerTreeHostTestBeginFrameNotification); 2320 MULTI_THREAD_TEST_F(LayerTreeHostTestBeginFrameNotification);
2314 2321
2315 class LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled 2322 class LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled
2316 : public LayerTreeHostTest { 2323 : public LayerTreeHostTest {
2317 public: 2324 public:
2318 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 2325 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
2319 settings->begin_frame_scheduling_enabled = true; 2326 settings->begin_frame_scheduling_enabled = false;
2320 settings->using_synchronous_renderer_compositor = true; 2327 settings->using_synchronous_renderer_compositor = true;
2321 } 2328 }
2322 2329
2323 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 2330 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
2324 2331
2325 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 2332 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
2326 // The BeginFrame notification is turned off now but will get enabled 2333 // The BeginFrame notification is turned off now but will get enabled
2327 // once we return. End test while it's enabled. 2334 // once we return. End test while it's enabled.
2328 ImplThreadTaskRunner()->PostTask( 2335 ImplThreadTaskRunner()->PostTask(
2329 FROM_HERE, 2336 FROM_HERE, base::Bind(
2330 base::Bind(&LayerTreeHostTestBeginFrameNotification::EndTest, 2337 &LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled::EndTest,
2331 base::Unretained(this))); 2338 base::Unretained(this)));
2332 } 2339 }
2333 2340
2334 virtual void AfterTest() OVERRIDE {} 2341 virtual void AfterTest() OVERRIDE {}
2335 }; 2342 };
2336 2343
2337 MULTI_THREAD_TEST_F( 2344 MULTI_THREAD_TEST_F(
2338 LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled); 2345 LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled);
2339 2346
2340 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation 2347 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation
2341 : public LayerTreeHostTest { 2348 : public LayerTreeHostTest {
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
3042 layer_tree_host()->SetNeedsRedraw(); 3049 layer_tree_host()->SetNeedsRedraw();
3043 break; 3050 break;
3044 case 3: 3051 case 3:
3045 // CompositeAndReadback in Round 4, first commit. 3052 // CompositeAndReadback in Round 4, first commit.
3046 EXPECT_EQ(2, frame_); 3053 EXPECT_EQ(2, frame_);
3047 break; 3054 break;
3048 case 4: 3055 case 4:
3049 // Round 4 done. 3056 // Round 4 done.
3050 EXPECT_EQ(2, frame_); 3057 EXPECT_EQ(2, frame_);
3051 layer_tree_host()->SetNeedsCommit(); 3058 layer_tree_host()->SetNeedsCommit();
3059 // We cant SetNeedsRedraw immediately because it will race the commit.
3060 break;
3061 case 5:
3062 EXPECT_EQ(2, frame_);
3052 layer_tree_host()->SetNeedsRedraw(); 3063 layer_tree_host()->SetNeedsRedraw();
3053 break; 3064 break;
3054 } 3065 }
3055 } 3066 }
3056 3067
3057 virtual void DidCompleteSwapBuffers() OVERRIDE { 3068 virtual void DidCompleteSwapBuffers() OVERRIDE {
3058 int commit = layer_tree_host()->commit_number(); 3069 int commit = layer_tree_host()->commit_number();
3059 ++frame_; 3070 ++frame_;
3060 char pixels[4] = {0}; 3071 char pixels[4] = {0};
3061 switch (frame_) { 3072 switch (frame_) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
3162 FakeContentLayerClient client_; 3173 FakeContentLayerClient client_;
3163 scoped_refptr<FakePictureLayer> layer_; 3174 scoped_refptr<FakePictureLayer> layer_;
3164 bool initialized_gl_; 3175 bool initialized_gl_;
3165 int num_draws_; 3176 int num_draws_;
3166 }; 3177 };
3167 3178
3168 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize); 3179 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize);
3169 3180
3170 } // namespace 3181 } // namespace
3171 } // namespace cc 3182 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698