OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |