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

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 tests and address comments 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
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 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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698