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

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

Issue 1126963006: Move VISUAL_STATE promise to activation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: improve existing tests Created 5 years, 7 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
« no previous file with comments | « cc/trees/layer_tree_host.cc ('k') | cc/trees/layer_tree_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/location.h" 10 #include "base/location.h"
(...skipping 4909 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 EXPECT_FALSE(result_->did_activate_called &&
4974 reason == DidNotSwapReason::ACTIVATION_FAILS);
boliu 2015/05/15 03:50:50 Actually on second thought, this is not strict eno
Tobias Sargeant 2015/05/15 16:30:49 Done.
4962 result_->did_not_swap_called = true; 4975 result_->did_not_swap_called = true;
4963 result_->reason = reason; 4976 result_->reason = reason;
4964 } 4977 }
4965 4978
4966 int64 TraceId() const override { return 0; } 4979 int64 TraceId() const override { return 0; }
4967 4980
4968 private: 4981 private:
4969 // Not owned. 4982 // Not owned.
4970 TestSwapPromiseResult* result_; 4983 TestSwapPromiseResult* result_;
4971 }; 4984 };
(...skipping 13 matching lines...) Expand all
4985 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 4998 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
4986 4999
4987 void DidCommit() override { 5000 void DidCommit() override {
4988 commit_count_++; 5001 commit_count_++;
4989 if (commit_count_ == 2) { 5002 if (commit_count_ == 2) {
4990 // This commit will finish. 5003 // This commit will finish.
4991 layer_tree_host()->SetNeedsCommit(); 5004 layer_tree_host()->SetNeedsCommit();
4992 } 5005 }
4993 } 5006 }
4994 5007
5008 void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
5009 if (host_impl->pending_tree()) {
5010 int frame = host_impl->pending_tree()->source_frame_number();
5011 base::AutoLock lock(swap_promise_result_[frame].lock);
5012 EXPECT_FALSE(swap_promise_result_[frame].did_activate_called);
5013 EXPECT_FALSE(swap_promise_result_[frame].did_swap_called);
5014 }
5015 }
5016
5017 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
5018 int frame = host_impl->active_tree()->source_frame_number();
5019 base::AutoLock lock(swap_promise_result_[frame].lock);
5020 EXPECT_TRUE(swap_promise_result_[frame].did_activate_called);
5021 EXPECT_FALSE(swap_promise_result_[frame].did_swap_called);
5022 }
5023
4995 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { 5024 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
4996 commit_complete_count_++; 5025 commit_complete_count_++;
4997 if (commit_complete_count_ == 1) { 5026 if (commit_complete_count_ == 1) {
4998 // This commit will be aborted because no actual update. 5027 // This commit will be aborted because no actual update.
4999 PostSetNeedsUpdateLayersToMainThread(); 5028 PostSetNeedsUpdateLayersToMainThread();
5000 } else { 5029 } else {
5001 EndTest(); 5030 EndTest();
5002 } 5031 }
5003 } 5032 }
5004 5033
5005 void AfterTest() override { 5034 void AfterTest() override {
5006 // 3 commits are scheduled. 2 completes. 1 is aborted. 5035 // 3 commits are scheduled. 2 completes. 1 is aborted.
5007 EXPECT_EQ(commit_count_, 3); 5036 EXPECT_EQ(commit_count_, 3);
5008 EXPECT_EQ(commit_complete_count_, 2); 5037 EXPECT_EQ(commit_complete_count_, 2);
5009 5038
5010 { 5039 {
5011 // The first commit completes and causes swap buffer which finishes 5040 // The first commit completes and causes swap buffer which finishes
5012 // the promise. 5041 // the promise.
5013 base::AutoLock lock(swap_promise_result_[0].lock); 5042 base::AutoLock lock(swap_promise_result_[0].lock);
5014 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); 5043 EXPECT_TRUE(swap_promise_result_[0].did_swap_called);
5015 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); 5044 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called);
5016 EXPECT_TRUE(swap_promise_result_[0].dtor_called); 5045 EXPECT_TRUE(swap_promise_result_[0].dtor_called);
5017 } 5046 }
5018 5047
5019 { 5048 {
5020 // The second commit is aborted since it contains no updates. 5049 // The second commit is aborted since it contains no updates.
5021 base::AutoLock lock(swap_promise_result_[1].lock); 5050 base::AutoLock lock(swap_promise_result_[1].lock);
5051 EXPECT_FALSE(swap_promise_result_[1].did_activate_called);
5022 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); 5052 EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
5023 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); 5053 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
5024 EXPECT_EQ(SwapPromise::COMMIT_NO_UPDATE, swap_promise_result_[1].reason); 5054 EXPECT_EQ(SwapPromise::COMMIT_NO_UPDATE, swap_promise_result_[1].reason);
5025 EXPECT_TRUE(swap_promise_result_[1].dtor_called); 5055 EXPECT_TRUE(swap_promise_result_[1].dtor_called);
5026 } 5056 }
5027 5057
5028 { 5058 {
5029 // The last commit completes but it does not cause swap buffer because 5059 // The last commit completes but it does not cause swap buffer because
5030 // there is no damage in the frame data. 5060 // there is no damage in the frame data.
5031 base::AutoLock lock(swap_promise_result_[2].lock); 5061 base::AutoLock lock(swap_promise_result_[2].lock);
5062 EXPECT_TRUE(swap_promise_result_[2].did_activate_called);
5032 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); 5063 EXPECT_FALSE(swap_promise_result_[2].did_swap_called);
5033 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); 5064 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called);
5034 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); 5065 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason);
5035 EXPECT_TRUE(swap_promise_result_[2].dtor_called); 5066 EXPECT_TRUE(swap_promise_result_[2].dtor_called);
5036 } 5067 }
5037 } 5068 }
5038 5069
5039 int commit_count_; 5070 int commit_count_;
5040 int commit_complete_count_; 5071 int commit_complete_count_;
5041 TestSwapPromiseResult swap_promise_result_[3]; 5072 TestSwapPromiseResult swap_promise_result_[3];
(...skipping 29 matching lines...) Expand all
5071 make_scoped_ptr(new TestSwapPromise(&swap_promise_result_))); 5102 make_scoped_ptr(new TestSwapPromise(&swap_promise_result_)));
5072 break; 5103 break;
5073 case 2: 5104 case 2:
5074 break; 5105 break;
5075 default: 5106 default:
5076 NOTREACHED(); 5107 NOTREACHED();
5077 break; 5108 break;
5078 } 5109 }
5079 } 5110 }
5080 5111
5112 void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
5113 if (host_impl->pending_tree() &&
5114 host_impl->pending_tree()->source_frame_number() == 1) {
5115 base::AutoLock lock(swap_promise_result_.lock);
5116 EXPECT_FALSE(swap_promise_result_.did_activate_called);
5117 EXPECT_FALSE(swap_promise_result_.did_swap_called);
5118 }
5119 }
5120
5121 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
5122 if (host_impl->active_tree()->source_frame_number() == 1) {
5123 base::AutoLock lock(swap_promise_result_.lock);
5124 EXPECT_TRUE(swap_promise_result_.did_activate_called);
5125 EXPECT_FALSE(swap_promise_result_.did_swap_called);
5126 }
5127 }
5128
5129 void ActivationCallback() {
5130 // DidActivate needs to happen before the tree activation callback.
5131 base::AutoLock lock(swap_promise_result_.lock);
5132 EXPECT_TRUE(swap_promise_result_.did_activate_called);
5133 }
5134
5135 void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
5136 SetCallback(layer_tree_host()->settings().impl_side_painting &&
5137 host_impl->active_tree()->source_frame_number() == 0);
boliu 2015/05/15 03:50:50 SwapPromise is only queued in frame 1, but this is
Tobias Sargeant 2015/05/15 16:30:49 Done.
5138 }
5139
5140 void SetCallback(bool enable) {
5141 output_surface()->SetTreeActivationCallback(
5142 enable
5143 ? base::Bind(&LayerTreeHostTestKeepSwapPromise::ActivationCallback,
5144 base::Unretained(this))
5145 : base::Closure());
5146 }
5147
5081 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 5148 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override {
5082 EXPECT_TRUE(result); 5149 EXPECT_TRUE(result);
5083 if (host_impl->active_tree()->source_frame_number() >= 1) { 5150 if (host_impl->active_tree()->source_frame_number() >= 1) {
5084 // The commit changes layers so it should cause a swap. 5151 // The commit changes layers so it should cause a swap.
5085 base::AutoLock lock(swap_promise_result_.lock); 5152 base::AutoLock lock(swap_promise_result_.lock);
5086 EXPECT_TRUE(swap_promise_result_.did_swap_called); 5153 EXPECT_TRUE(swap_promise_result_.did_swap_called);
5087 EXPECT_FALSE(swap_promise_result_.did_not_swap_called); 5154 EXPECT_FALSE(swap_promise_result_.did_not_swap_called);
5088 EXPECT_TRUE(swap_promise_result_.dtor_called); 5155 EXPECT_TRUE(swap_promise_result_.dtor_called);
5089 EndTest(); 5156 EndTest();
5090 } 5157 }
(...skipping 29 matching lines...) Expand all
5120 } 5187 }
5121 5188
5122 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, 5189 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
5123 CommitEarlyOutReason reason) override { 5190 CommitEarlyOutReason reason) override {
5124 EndTest(); 5191 EndTest();
5125 } 5192 }
5126 5193
5127 void AfterTest() override { 5194 void AfterTest() override {
5128 { 5195 {
5129 base::AutoLock lock(swap_promise_result_.lock); 5196 base::AutoLock lock(swap_promise_result_.lock);
5197 EXPECT_FALSE(swap_promise_result_.did_activate_called);
5130 EXPECT_FALSE(swap_promise_result_.did_swap_called); 5198 EXPECT_FALSE(swap_promise_result_.did_swap_called);
5131 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); 5199 EXPECT_TRUE(swap_promise_result_.did_not_swap_called);
5132 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); 5200 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason);
5133 EXPECT_TRUE(swap_promise_result_.dtor_called); 5201 EXPECT_TRUE(swap_promise_result_.dtor_called);
5134 } 5202 }
5135 } 5203 }
5136 5204
5137 TestSwapPromiseResult swap_promise_result_; 5205 TestSwapPromiseResult swap_promise_result_;
5138 }; 5206 };
5139 5207
(...skipping 29 matching lines...) Expand all
5169 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, 5237 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
5170 CommitEarlyOutReason reason) override { 5238 CommitEarlyOutReason reason) override {
5171 // This is needed so that the impl-thread state matches main-thread state. 5239 // This is needed so that the impl-thread state matches main-thread state.
5172 host_impl->DidLoseOutputSurface(); 5240 host_impl->DidLoseOutputSurface();
5173 EndTest(); 5241 EndTest();
5174 } 5242 }
5175 5243
5176 void AfterTest() override { 5244 void AfterTest() override {
5177 { 5245 {
5178 base::AutoLock lock(swap_promise_result_.lock); 5246 base::AutoLock lock(swap_promise_result_.lock);
5247 EXPECT_FALSE(swap_promise_result_.did_activate_called);
5179 EXPECT_FALSE(swap_promise_result_.did_swap_called); 5248 EXPECT_FALSE(swap_promise_result_.did_swap_called);
5180 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); 5249 EXPECT_TRUE(swap_promise_result_.did_not_swap_called);
5181 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); 5250 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason);
5182 EXPECT_TRUE(swap_promise_result_.dtor_called); 5251 EXPECT_TRUE(swap_promise_result_.dtor_called);
5183 } 5252 }
5184 } 5253 }
5185 5254
5186 bool output_surface_lost_triggered_; 5255 bool output_surface_lost_triggered_;
5187 TestSwapPromiseResult swap_promise_result_; 5256 TestSwapPromiseResult swap_promise_result_;
5188 }; 5257 };
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
5822 { 5891 {
5823 base::AutoLock lock(swap_promise_result_[0].lock); 5892 base::AutoLock lock(swap_promise_result_[0].lock);
5824 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); 5893 EXPECT_TRUE(swap_promise_result_[0].did_swap_called);
5825 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); 5894 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called);
5826 EXPECT_TRUE(swap_promise_result_[0].dtor_called); 5895 EXPECT_TRUE(swap_promise_result_[0].dtor_called);
5827 } 5896 }
5828 5897
5829 // Second swap promise fails to swap. 5898 // Second swap promise fails to swap.
5830 { 5899 {
5831 base::AutoLock lock(swap_promise_result_[1].lock); 5900 base::AutoLock lock(swap_promise_result_[1].lock);
5901 EXPECT_TRUE(swap_promise_result_[1].did_activate_called);
5832 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); 5902 EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
5833 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); 5903 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
5834 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); 5904 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason);
5835 EXPECT_TRUE(swap_promise_result_[1].dtor_called); 5905 EXPECT_TRUE(swap_promise_result_[1].dtor_called);
5836 } 5906 }
5837 5907
5838 // Third swap promises also fails to swap (and draw). 5908 // Third swap promises also fails to swap (and draw).
5839 { 5909 {
5840 base::AutoLock lock(swap_promise_result_[2].lock); 5910 base::AutoLock lock(swap_promise_result_[2].lock);
5911 EXPECT_TRUE(swap_promise_result_[2].did_activate_called);
5841 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); 5912 EXPECT_FALSE(swap_promise_result_[2].did_swap_called);
5842 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); 5913 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called);
5843 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); 5914 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason);
5844 EXPECT_TRUE(swap_promise_result_[2].dtor_called); 5915 EXPECT_TRUE(swap_promise_result_[2].dtor_called);
5845 } 5916 }
5846 } 5917 }
5847 5918
5848 int commit_count_; 5919 int commit_count_;
5849 TestSwapPromiseResult swap_promise_result_[3]; 5920 TestSwapPromiseResult swap_promise_result_[3];
5850 }; 5921 };
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after
7186 void AfterTest() override {} 7257 void AfterTest() override {}
7187 7258
7188 scoped_refptr<FakePictureLayer> content_child_layer_; 7259 scoped_refptr<FakePictureLayer> content_child_layer_;
7189 FakeContentLayerClient client_; 7260 FakeContentLayerClient client_;
7190 }; 7261 };
7191 7262
7192 SINGLE_AND_MULTI_THREAD_TEST_F( 7263 SINGLE_AND_MULTI_THREAD_TEST_F(
7193 LayerTreeTestReflectionMaskLayerForSurfaceWithUnclippedChild); 7264 LayerTreeTestReflectionMaskLayerForSurfaceWithUnclippedChild);
7194 7265
7195 } // namespace cc 7266 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host.cc ('k') | cc/trees/layer_tree_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698