Chromium Code Reviews| 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 |