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

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

Issue 337693005: cc: Control defer_commits logic by Scheduler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years 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 | Annotate | Revision Log
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/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 2005 matching lines...) Expand 10 before | Expand all | Expand 10 after
2016 FakeContentLayerClient client_; 2016 FakeContentLayerClient client_;
2017 scoped_refptr<Layer> layer_; 2017 scoped_refptr<Layer> layer_;
2018 int num_commit_complete_; 2018 int num_commit_complete_;
2019 int num_draw_layers_; 2019 int num_draw_layers_;
2020 }; 2020 };
2021 2021
2022 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousInvalidate); 2022 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousInvalidate);
2023 2023
2024 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest { 2024 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest {
2025 public: 2025 public:
2026 LayerTreeHostTestDeferCommits() 2026 LayerTreeHostTestDeferCommits() : num_complete_commits_(0) {}
2027 : num_commits_deferred_(0), num_complete_commits_(0) {}
2028 2027
2029 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 2028 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
2030 2029
2031 void DidDeferCommit() override { 2030 void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
2032 num_commits_deferred_++; 2031 bool visible) override {
2033 layer_tree_host()->SetDeferCommits(false); 2032 if (visible)
2033 return;
2034
2035 PostSetDeferCommitsToMainThread(false);
2036 PostSetNeedsCommitToMainThread();
brianderson 2014/12/03 02:12:11 We should make sure we don't need to PostSetNeedsC
simonhong 2015/01/19 14:53:33 Yep, this is not needed. When defer commit is turn
2037 PostSetVisibleToMainThread(true);
2034 } 2038 }
2035 2039
2036 void DidCommit() override { 2040 void DidCommit() override {
2037 num_complete_commits_++; 2041 num_complete_commits_++;
2038 switch (num_complete_commits_) { 2042 switch (num_complete_commits_) {
2039 case 1: 2043 case 1:
2040 EXPECT_EQ(0, num_commits_deferred_);
2041 layer_tree_host()->SetDeferCommits(true); 2044 layer_tree_host()->SetDeferCommits(true);
2042 PostSetNeedsCommitToMainThread(); 2045 PostSetNeedsCommitToMainThread();
2046 PostSetVisibleToMainThread(false);
brianderson 2014/12/03 02:12:11 Instead of playing with visibility in this test, i
simonhong 2015/01/19 14:53:33 Done.
2043 break; 2047 break;
2044 case 2: 2048 case 2:
2045 EndTest(); 2049 EndTest();
2046 break; 2050 break;
2047 default: 2051 default:
2048 NOTREACHED(); 2052 NOTREACHED();
2049 break; 2053 break;
2050 } 2054 }
2051 } 2055 }
2052 2056
2053 void AfterTest() override { 2057 void AfterTest() override {
2054 EXPECT_EQ(1, num_commits_deferred_);
2055 EXPECT_EQ(2, num_complete_commits_); 2058 EXPECT_EQ(2, num_complete_commits_);
2056 } 2059 }
2057 2060
2058 private: 2061 private:
2059 int num_commits_deferred_;
2060 int num_complete_commits_; 2062 int num_complete_commits_;
2061 }; 2063 };
2062 2064
2063 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits); 2065 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits);
2064 2066
2065 class LayerTreeHostWithProxy : public LayerTreeHost { 2067 class LayerTreeHostWithProxy : public LayerTreeHost {
2066 public: 2068 public:
2067 LayerTreeHostWithProxy(FakeLayerTreeHostClient* client, 2069 LayerTreeHostWithProxy(FakeLayerTreeHostClient* client,
2068 const LayerTreeSettings& settings, 2070 const LayerTreeSettings& settings,
2069 scoped_ptr<FakeProxy> proxy) 2071 scoped_ptr<FakeProxy> proxy)
(...skipping 2646 matching lines...) Expand 10 before | Expand all | Expand 10 after
4716 } 4718 }
4717 } 4719 }
4718 4720
4719 int commit_count_; 4721 int commit_count_;
4720 int commit_complete_count_; 4722 int commit_complete_count_;
4721 TestSwapPromiseResult swap_promise_result_[3]; 4723 TestSwapPromiseResult swap_promise_result_[3];
4722 }; 4724 };
4723 4725
4724 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise); 4726 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise);
4725 4727
4726 class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit
brianderson 2014/12/03 02:12:11 Please don't delete these tests. The new scheduler
simonhong 2015/01/19 14:53:33 I think scenarios that these two tests want to sim
enne (OOO) 2015/01/23 01:35:21 I do not think this is true. These tests use defe
simonhong 2015/01/28 19:44:24 Done.
4727 : public LayerTreeHostTest {
4728 protected:
4729 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
4730
4731 void DidCommit() override {
4732 layer_tree_host()->SetDeferCommits(true);
4733 layer_tree_host()->SetNeedsCommit();
4734 }
4735
4736 void DidDeferCommit() override {
4737 layer_tree_host()->SetVisible(false);
4738 scoped_ptr<SwapPromise> swap_promise(
4739 new TestSwapPromise(&swap_promise_result_));
4740 layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
4741 layer_tree_host()->SetDeferCommits(false);
4742 }
4743
4744 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
4745 bool did_handle) override {
4746 EndTest();
4747 }
4748
4749 void AfterTest() override {
4750 {
4751 base::AutoLock lock(swap_promise_result_.lock);
4752 EXPECT_FALSE(swap_promise_result_.did_swap_called);
4753 EXPECT_TRUE(swap_promise_result_.did_not_swap_called);
4754 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason);
4755 EXPECT_TRUE(swap_promise_result_.dtor_called);
4756 }
4757 }
4758
4759 TestSwapPromiseResult swap_promise_result_;
4760 };
4761
4762 SINGLE_AND_MULTI_THREAD_TEST_F(
4763 LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit);
4764
4765 class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit
4766 : public LayerTreeHostTest {
4767 protected:
4768 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
4769
4770 void DidCommit() override {
4771 if (TestEnded())
4772 return;
4773 layer_tree_host()->SetDeferCommits(true);
4774 layer_tree_host()->SetNeedsCommit();
4775 }
4776
4777 void DidDeferCommit() override {
4778 layer_tree_host()->DidLoseOutputSurface();
4779 scoped_ptr<SwapPromise> swap_promise(
4780 new TestSwapPromise(&swap_promise_result_));
4781 layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
4782 layer_tree_host()->SetDeferCommits(false);
4783 }
4784
4785 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
4786 bool did_handle) override {
4787 EndTest();
4788 // This lets the test finally commit and exit.
4789 MainThreadTaskRunner()->PostTask(
4790 FROM_HERE,
4791 base::Bind(&LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit::
4792 FindOutputSurface,
4793 base::Unretained(this)));
4794 }
4795
4796 void FindOutputSurface() {
4797 layer_tree_host()->OnCreateAndInitializeOutputSurfaceAttempted(true);
4798 }
4799
4800 void AfterTest() override {
4801 {
4802 base::AutoLock lock(swap_promise_result_.lock);
4803 EXPECT_FALSE(swap_promise_result_.did_swap_called);
4804 EXPECT_TRUE(swap_promise_result_.did_not_swap_called);
4805 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason);
4806 EXPECT_TRUE(swap_promise_result_.dtor_called);
4807 }
4808 }
4809
4810 TestSwapPromiseResult swap_promise_result_;
4811 };
4812
4813 SINGLE_AND_MULTI_THREAD_TEST_F(
4814 LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit);
4815
4816 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { 4728 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor {
4817 public: 4729 public:
4818 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, 4730 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host,
4819 LayerTreeHostImpl* layer_tree_host_impl, 4731 LayerTreeHostImpl* layer_tree_host_impl,
4820 int* set_needs_commit_count, 4732 int* set_needs_commit_count,
4821 int* set_needs_redraw_count) 4733 int* set_needs_redraw_count)
4822 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), 4734 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl),
4823 set_needs_commit_count_(set_needs_commit_count) {} 4735 set_needs_commit_count_(set_needs_commit_count) {}
4824 4736
4825 ~SimpleSwapPromiseMonitor() override {} 4737 ~SimpleSwapPromiseMonitor() override {}
(...skipping 1035 matching lines...) Expand 10 before | Expand all | Expand 10 after
5861 5773
5862 FakeContentLayerClient client_; 5774 FakeContentLayerClient client_;
5863 int step_; 5775 int step_;
5864 int continuous_draws_; 5776 int continuous_draws_;
5865 base::WaitableEvent playback_allowed_event_; 5777 base::WaitableEvent playback_allowed_event_;
5866 }; 5778 };
5867 5779
5868 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousDrawWhenCreatingVisibleTiles); 5780 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousDrawWhenCreatingVisibleTiles);
5869 5781
5870 } // namespace cc 5782 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698