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/location.h" | 10 #include "base/location.h" |
(...skipping 4909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4920 size_t second_output_surface_memory_limit_; | 4920 size_t second_output_surface_memory_limit_; |
4921 FakeContentLayerClient client_; | 4921 FakeContentLayerClient client_; |
4922 scoped_refptr<Layer> root_; | 4922 scoped_refptr<Layer> root_; |
4923 }; | 4923 }; |
4924 | 4924 |
4925 SINGLE_AND_MULTI_THREAD_TEST_F( | 4925 SINGLE_AND_MULTI_THREAD_TEST_F( |
4926 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface); | 4926 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface); |
4927 | 4927 |
4928 struct TestSwapPromiseResult { | 4928 struct TestSwapPromiseResult { |
4929 TestSwapPromiseResult() | 4929 TestSwapPromiseResult() |
4930 : did_swap_called(false), | 4930 : did_activate_called(false), |
4931 did_swap_called(false), | |
4931 did_not_swap_called(false), | 4932 did_not_swap_called(false), |
4932 dtor_called(false), | 4933 dtor_called(false), |
4933 reason(SwapPromise::DID_NOT_SWAP_UNKNOWN) {} | 4934 reason(SwapPromise::COMMIT_FAILS) {} |
4934 | 4935 |
4936 bool did_activate_called; | |
4935 bool did_swap_called; | 4937 bool did_swap_called; |
4936 bool did_not_swap_called; | 4938 bool did_not_swap_called; |
4937 bool dtor_called; | 4939 bool dtor_called; |
4938 SwapPromise::DidNotSwapReason reason; | 4940 SwapPromise::DidNotSwapReason reason; |
4939 base::Lock lock; | 4941 base::Lock lock; |
4940 }; | 4942 }; |
4941 | 4943 |
4942 class TestSwapPromise : public SwapPromise { | 4944 class TestSwapPromise : public SwapPromise { |
4943 public: | 4945 public: |
4944 explicit TestSwapPromise(TestSwapPromiseResult* result) : result_(result) {} | 4946 explicit TestSwapPromise(TestSwapPromiseResult* result) : result_(result) {} |
4945 | 4947 |
4946 ~TestSwapPromise() override { | 4948 ~TestSwapPromise() override { |
4947 base::AutoLock lock(result_->lock); | 4949 base::AutoLock lock(result_->lock); |
4948 result_->dtor_called = true; | 4950 result_->dtor_called = true; |
4949 } | 4951 } |
4950 | 4952 |
4953 void DidActivate() override { | |
4954 base::AutoLock lock(result_->lock); | |
4955 EXPECT_FALSE(result_->did_activate_called); | |
4956 EXPECT_FALSE(result_->did_swap_called); | |
4957 EXPECT_FALSE(result_->did_not_swap_called); | |
4958 result_->did_activate_called = true; | |
4959 } | |
4960 | |
4951 void DidSwap(CompositorFrameMetadata* metadata) override { | 4961 void DidSwap(CompositorFrameMetadata* metadata) override { |
4952 base::AutoLock lock(result_->lock); | 4962 base::AutoLock lock(result_->lock); |
4963 EXPECT_TRUE(result_->did_activate_called); | |
4953 EXPECT_FALSE(result_->did_swap_called); | 4964 EXPECT_FALSE(result_->did_swap_called); |
4954 EXPECT_FALSE(result_->did_not_swap_called); | 4965 EXPECT_FALSE(result_->did_not_swap_called); |
4955 result_->did_swap_called = true; | 4966 result_->did_swap_called = true; |
4956 } | 4967 } |
4957 | 4968 |
4958 void DidNotSwap(DidNotSwapReason reason) override { | 4969 void DidNotSwap(DidNotSwapReason reason) override { |
4959 base::AutoLock lock(result_->lock); | 4970 base::AutoLock lock(result_->lock); |
4960 EXPECT_FALSE(result_->did_swap_called); | 4971 EXPECT_FALSE(result_->did_swap_called); |
4961 EXPECT_FALSE(result_->did_not_swap_called); | 4972 EXPECT_FALSE(result_->did_not_swap_called); |
4973 auto implies = [](bool a, bool b) -> bool { return !a || b; }; | |
4974 EXPECT_TRUE(implies(reason == DidNotSwapReason::ACTIVATION_FAILS, | |
boliu
2015/05/14 14:40:21
That's overkill. Can you just write it as EXPECT_T
Tobias Sargeant
2015/05/14 21:40:48
Yes, but then we're almost back to where we starte
| |
4975 !result_->did_activate_called)); | |
4962 result_->did_not_swap_called = true; | 4976 result_->did_not_swap_called = true; |
4963 result_->reason = reason; | 4977 result_->reason = reason; |
4964 } | 4978 } |
4965 | 4979 |
4966 int64 TraceId() const override { return 0; } | 4980 int64 TraceId() const override { return 0; } |
4967 | 4981 |
4968 private: | 4982 private: |
4969 // Not owned. | 4983 // Not owned. |
4970 TestSwapPromiseResult* result_; | 4984 TestSwapPromiseResult* result_; |
4971 }; | 4985 }; |
(...skipping 13 matching lines...) Expand all Loading... | |
4985 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4999 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4986 | 5000 |
4987 void DidCommit() override { | 5001 void DidCommit() override { |
4988 commit_count_++; | 5002 commit_count_++; |
4989 if (commit_count_ == 2) { | 5003 if (commit_count_ == 2) { |
4990 // This commit will finish. | 5004 // This commit will finish. |
4991 layer_tree_host()->SetNeedsCommit(); | 5005 layer_tree_host()->SetNeedsCommit(); |
4992 } | 5006 } |
4993 } | 5007 } |
4994 | 5008 |
5009 void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | |
5010 if (host_impl->pending_tree()) { | |
boliu
2015/05/14 14:40:21
Is this check the same as "host_impl->settings().i
Tobias Sargeant
2015/05/14 21:40:48
No, it's not the same.
If you assert that pending
boliu
2015/05/15 03:50:49
You should DCHECK pending_tree() only if impl_side
| |
5011 int frame = host_impl->pending_tree()->source_frame_number(); | |
5012 base::AutoLock lock(swap_promise_result_[frame].lock); | |
5013 EXPECT_FALSE(swap_promise_result_[frame].did_activate_called); | |
5014 EXPECT_FALSE(swap_promise_result_[frame].did_swap_called); | |
5015 } | |
5016 } | |
5017 | |
5018 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | |
5019 int frame = host_impl->active_tree()->source_frame_number(); | |
5020 base::AutoLock lock(swap_promise_result_[frame].lock); | |
5021 EXPECT_TRUE(swap_promise_result_[frame].did_activate_called); | |
5022 EXPECT_FALSE(swap_promise_result_[frame].did_swap_called); | |
5023 } | |
5024 | |
4995 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 5025 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
4996 commit_complete_count_++; | 5026 commit_complete_count_++; |
4997 if (commit_complete_count_ == 1) { | 5027 if (commit_complete_count_ == 1) { |
4998 // This commit will be aborted because no actual update. | 5028 // This commit will be aborted because no actual update. |
4999 PostSetNeedsUpdateLayersToMainThread(); | 5029 PostSetNeedsUpdateLayersToMainThread(); |
5000 } else { | 5030 } else { |
5001 EndTest(); | 5031 EndTest(); |
5002 } | 5032 } |
5003 } | 5033 } |
5004 | 5034 |
5005 void AfterTest() override { | 5035 void AfterTest() override { |
5006 // 3 commits are scheduled. 2 completes. 1 is aborted. | 5036 // 3 commits are scheduled. 2 completes. 1 is aborted. |
5007 EXPECT_EQ(commit_count_, 3); | 5037 EXPECT_EQ(commit_count_, 3); |
5008 EXPECT_EQ(commit_complete_count_, 2); | 5038 EXPECT_EQ(commit_complete_count_, 2); |
5009 | 5039 |
5010 { | 5040 { |
5011 // The first commit completes and causes swap buffer which finishes | 5041 // The first commit completes and causes swap buffer which finishes |
5012 // the promise. | 5042 // the promise. |
5013 base::AutoLock lock(swap_promise_result_[0].lock); | 5043 base::AutoLock lock(swap_promise_result_[0].lock); |
5014 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); | 5044 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); |
5015 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); | 5045 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); |
5016 EXPECT_TRUE(swap_promise_result_[0].dtor_called); | 5046 EXPECT_TRUE(swap_promise_result_[0].dtor_called); |
5017 } | 5047 } |
5018 | 5048 |
5019 { | 5049 { |
5020 // The second commit is aborted since it contains no updates. | 5050 // The second commit is aborted since it contains no updates. |
5021 base::AutoLock lock(swap_promise_result_[1].lock); | 5051 base::AutoLock lock(swap_promise_result_[1].lock); |
5052 EXPECT_FALSE(swap_promise_result_[1].did_activate_called); | |
5022 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); | 5053 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); |
5023 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); | 5054 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); |
5024 EXPECT_EQ(SwapPromise::COMMIT_NO_UPDATE, swap_promise_result_[1].reason); | 5055 EXPECT_EQ(SwapPromise::COMMIT_NO_UPDATE, swap_promise_result_[1].reason); |
5025 EXPECT_TRUE(swap_promise_result_[1].dtor_called); | 5056 EXPECT_TRUE(swap_promise_result_[1].dtor_called); |
5026 } | 5057 } |
5027 | 5058 |
5028 { | 5059 { |
5029 // The last commit completes but it does not cause swap buffer because | 5060 // The last commit completes but it does not cause swap buffer because |
5030 // there is no damage in the frame data. | 5061 // there is no damage in the frame data. |
5031 base::AutoLock lock(swap_promise_result_[2].lock); | 5062 base::AutoLock lock(swap_promise_result_[2].lock); |
5063 EXPECT_TRUE(swap_promise_result_[2].did_activate_called); | |
5032 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); | 5064 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); |
5033 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); | 5065 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); |
5034 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); | 5066 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); |
5035 EXPECT_TRUE(swap_promise_result_[2].dtor_called); | 5067 EXPECT_TRUE(swap_promise_result_[2].dtor_called); |
5036 } | 5068 } |
5037 } | 5069 } |
5038 | 5070 |
5039 int commit_count_; | 5071 int commit_count_; |
5040 int commit_complete_count_; | 5072 int commit_complete_count_; |
5041 TestSwapPromiseResult swap_promise_result_[3]; | 5073 TestSwapPromiseResult swap_promise_result_[3]; |
(...skipping 29 matching lines...) Expand all Loading... | |
5071 make_scoped_ptr(new TestSwapPromise(&swap_promise_result_))); | 5103 make_scoped_ptr(new TestSwapPromise(&swap_promise_result_))); |
5072 break; | 5104 break; |
5073 case 2: | 5105 case 2: |
5074 break; | 5106 break; |
5075 default: | 5107 default: |
5076 NOTREACHED(); | 5108 NOTREACHED(); |
5077 break; | 5109 break; |
5078 } | 5110 } |
5079 } | 5111 } |
5080 | 5112 |
5113 void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | |
5114 if (host_impl->pending_tree() && | |
5115 host_impl->pending_tree()->source_frame_number() == 1) { | |
5116 base::AutoLock lock(swap_promise_result_.lock); | |
5117 EXPECT_FALSE(swap_promise_result_.did_activate_called); | |
5118 EXPECT_FALSE(swap_promise_result_.did_swap_called); | |
5119 } | |
5120 } | |
5121 | |
5122 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | |
5123 if (host_impl->active_tree()->source_frame_number() == 1) { | |
5124 base::AutoLock lock(swap_promise_result_.lock); | |
5125 EXPECT_TRUE(swap_promise_result_.did_activate_called); | |
5126 EXPECT_FALSE(swap_promise_result_.did_swap_called); | |
5127 } | |
5128 } | |
5129 | |
5081 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { | 5130 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { |
5082 EXPECT_TRUE(result); | 5131 EXPECT_TRUE(result); |
5083 if (host_impl->active_tree()->source_frame_number() >= 1) { | 5132 if (host_impl->active_tree()->source_frame_number() >= 1) { |
5084 // The commit changes layers so it should cause a swap. | 5133 // The commit changes layers so it should cause a swap. |
5085 base::AutoLock lock(swap_promise_result_.lock); | 5134 base::AutoLock lock(swap_promise_result_.lock); |
5086 EXPECT_TRUE(swap_promise_result_.did_swap_called); | 5135 EXPECT_TRUE(swap_promise_result_.did_swap_called); |
5087 EXPECT_FALSE(swap_promise_result_.did_not_swap_called); | 5136 EXPECT_FALSE(swap_promise_result_.did_not_swap_called); |
5088 EXPECT_TRUE(swap_promise_result_.dtor_called); | 5137 EXPECT_TRUE(swap_promise_result_.dtor_called); |
5089 EndTest(); | 5138 EndTest(); |
5090 } | 5139 } |
(...skipping 29 matching lines...) Expand all Loading... | |
5120 } | 5169 } |
5121 | 5170 |
5122 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, | 5171 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
5123 CommitEarlyOutReason reason) override { | 5172 CommitEarlyOutReason reason) override { |
5124 EndTest(); | 5173 EndTest(); |
5125 } | 5174 } |
5126 | 5175 |
5127 void AfterTest() override { | 5176 void AfterTest() override { |
5128 { | 5177 { |
5129 base::AutoLock lock(swap_promise_result_.lock); | 5178 base::AutoLock lock(swap_promise_result_.lock); |
5179 EXPECT_FALSE(swap_promise_result_.did_activate_called); | |
5130 EXPECT_FALSE(swap_promise_result_.did_swap_called); | 5180 EXPECT_FALSE(swap_promise_result_.did_swap_called); |
5131 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); | 5181 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); |
5132 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); | 5182 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); |
5133 EXPECT_TRUE(swap_promise_result_.dtor_called); | 5183 EXPECT_TRUE(swap_promise_result_.dtor_called); |
5134 } | 5184 } |
5135 } | 5185 } |
5136 | 5186 |
5137 TestSwapPromiseResult swap_promise_result_; | 5187 TestSwapPromiseResult swap_promise_result_; |
5138 }; | 5188 }; |
5139 | 5189 |
(...skipping 29 matching lines...) Expand all Loading... | |
5169 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, | 5219 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
5170 CommitEarlyOutReason reason) override { | 5220 CommitEarlyOutReason reason) override { |
5171 // This is needed so that the impl-thread state matches main-thread state. | 5221 // This is needed so that the impl-thread state matches main-thread state. |
5172 host_impl->DidLoseOutputSurface(); | 5222 host_impl->DidLoseOutputSurface(); |
5173 EndTest(); | 5223 EndTest(); |
5174 } | 5224 } |
5175 | 5225 |
5176 void AfterTest() override { | 5226 void AfterTest() override { |
5177 { | 5227 { |
5178 base::AutoLock lock(swap_promise_result_.lock); | 5228 base::AutoLock lock(swap_promise_result_.lock); |
5229 EXPECT_FALSE(swap_promise_result_.did_activate_called); | |
5179 EXPECT_FALSE(swap_promise_result_.did_swap_called); | 5230 EXPECT_FALSE(swap_promise_result_.did_swap_called); |
5180 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); | 5231 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); |
5181 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); | 5232 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); |
5182 EXPECT_TRUE(swap_promise_result_.dtor_called); | 5233 EXPECT_TRUE(swap_promise_result_.dtor_called); |
5183 } | 5234 } |
5184 } | 5235 } |
5185 | 5236 |
5186 bool output_surface_lost_triggered_; | 5237 bool output_surface_lost_triggered_; |
5187 TestSwapPromiseResult swap_promise_result_; | 5238 TestSwapPromiseResult swap_promise_result_; |
5188 }; | 5239 }; |
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5822 { | 5873 { |
5823 base::AutoLock lock(swap_promise_result_[0].lock); | 5874 base::AutoLock lock(swap_promise_result_[0].lock); |
5824 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); | 5875 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); |
5825 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); | 5876 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); |
5826 EXPECT_TRUE(swap_promise_result_[0].dtor_called); | 5877 EXPECT_TRUE(swap_promise_result_[0].dtor_called); |
5827 } | 5878 } |
5828 | 5879 |
5829 // Second swap promise fails to swap. | 5880 // Second swap promise fails to swap. |
5830 { | 5881 { |
5831 base::AutoLock lock(swap_promise_result_[1].lock); | 5882 base::AutoLock lock(swap_promise_result_[1].lock); |
5883 EXPECT_TRUE(swap_promise_result_[1].did_activate_called); | |
5832 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); | 5884 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); |
5833 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); | 5885 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); |
5834 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); | 5886 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); |
5835 EXPECT_TRUE(swap_promise_result_[1].dtor_called); | 5887 EXPECT_TRUE(swap_promise_result_[1].dtor_called); |
5836 } | 5888 } |
5837 | 5889 |
5838 // Third swap promises also fails to swap (and draw). | 5890 // Third swap promises also fails to swap (and draw). |
5839 { | 5891 { |
5840 base::AutoLock lock(swap_promise_result_[2].lock); | 5892 base::AutoLock lock(swap_promise_result_[2].lock); |
5893 EXPECT_TRUE(swap_promise_result_[2].did_activate_called); | |
5841 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); | 5894 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); |
5842 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); | 5895 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); |
5843 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); | 5896 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); |
5844 EXPECT_TRUE(swap_promise_result_[2].dtor_called); | 5897 EXPECT_TRUE(swap_promise_result_[2].dtor_called); |
5845 } | 5898 } |
5846 } | 5899 } |
5847 | 5900 |
5848 int commit_count_; | 5901 int commit_count_; |
5849 TestSwapPromiseResult swap_promise_result_[3]; | 5902 TestSwapPromiseResult swap_promise_result_[3]; |
5850 }; | 5903 }; |
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7186 void AfterTest() override {} | 7239 void AfterTest() override {} |
7187 | 7240 |
7188 scoped_refptr<FakePictureLayer> content_child_layer_; | 7241 scoped_refptr<FakePictureLayer> content_child_layer_; |
7189 FakeContentLayerClient client_; | 7242 FakeContentLayerClient client_; |
7190 }; | 7243 }; |
7191 | 7244 |
7192 SINGLE_AND_MULTI_THREAD_TEST_F( | 7245 SINGLE_AND_MULTI_THREAD_TEST_F( |
7193 LayerTreeTestReflectionMaskLayerForSurfaceWithUnclippedChild); | 7246 LayerTreeTestReflectionMaskLayerForSurfaceWithUnclippedChild); |
7194 | 7247 |
7195 } // namespace cc | 7248 } // namespace cc |
OLD | NEW |