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

Side by Side Diff: cc/layers/surface_layer_unittest.cc

Issue 1292773003: Queue latency info swap promises in a separate already-active queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use different return value for failed draw in test, to avoid NOTREACHED() Created 5 years, 3 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 | « no previous file | cc/trees/latency_info_swap_promise_monitor.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <set> 5 #include <set>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/thread_task_runner_handle.h" 10 #include "base/thread_task_runner_handle.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 layer_tree_host()->SetRootLayer(layer_); 136 layer_tree_host()->SetRootLayer(layer_);
137 137
138 // Should have SurfaceSequence from first tree. 138 // Should have SurfaceSequence from first tree.
139 SurfaceSequence expected(1u, 1u); 139 SurfaceSequence expected(1u, 1u);
140 EXPECT_TRUE(required_id_ == SurfaceId(1)); 140 EXPECT_TRUE(required_id_ == SurfaceId(1));
141 EXPECT_EQ(1u, required_set_.size()); 141 EXPECT_EQ(1u, required_set_.size());
142 EXPECT_TRUE(required_set_.count(expected)); 142 EXPECT_TRUE(required_set_.count(expected));
143 143
144 gfx::Size bounds(100, 100); 144 gfx::Size bounds(100, 100);
145 layer_tree_host()->SetViewportSize(bounds); 145 layer_tree_host()->SetViewportSize(bounds);
146
147 blank_layer_ = SolidColorLayer::Create(layer_settings());
148 blank_layer_->SetIsDrawable(true);
149 blank_layer_->SetBounds(gfx::Size(10, 10));
150
146 PostSetNeedsCommitToMainThread(); 151 PostSetNeedsCommitToMainThread();
147 } 152 }
148 153
154 virtual void ChangeTree() = 0;
155
149 void DidCommitAndDrawFrame() override { 156 void DidCommitAndDrawFrame() override {
150 base::ThreadTaskRunnerHandle::Get()->PostTask( 157 base::ThreadTaskRunnerHandle::Get()->PostTask(
151 FROM_HERE, base::Bind(&SurfaceLayerSwapPromise::ChangeTree, 158 FROM_HERE, base::Bind(&SurfaceLayerSwapPromise::ChangeTree,
152 base::Unretained(this))); 159 base::Unretained(this)));
153 } 160 }
154 161
155 void ChangeTree() { 162 protected:
163 int commit_count_;
164 bool sequence_was_satisfied_;
165 scoped_refptr<SurfaceLayer> layer_;
166 scoped_refptr<Layer> blank_layer_;
167 SurfaceSequence satisfied_sequence_;
168
169 SurfaceId required_id_;
170 std::set<SurfaceSequence> required_set_;
171 };
172
173 // Check that SurfaceSequence is sent through swap promise.
174 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise {
175 public:
176 SurfaceLayerSwapPromiseWithDraw() : SurfaceLayerSwapPromise() {}
177
178 void ChangeTree() override {
156 ++commit_count_; 179 ++commit_count_;
157 switch (commit_count_) { 180 switch (commit_count_) {
158 case 1: 181 case 1:
159 // Remove SurfaceLayer from tree to cause SwapPromise to be created. 182 // Remove SurfaceLayer from tree to cause SwapPromise to be created.
160 blank_layer_ = SolidColorLayer::Create(layer_settings());
161 blank_layer_->SetIsDrawable(true);
162 blank_layer_->SetBounds(gfx::Size(10, 10));
163 layer_tree_host()->SetRootLayer(blank_layer_); 183 layer_tree_host()->SetRootLayer(blank_layer_);
164 break; 184 break;
165 case 2: 185 case 2:
166 break; 186 break;
167 default: 187 default:
168 NOTREACHED(); 188 NOTREACHED();
169 break; 189 break;
170 } 190 }
171 } 191 }
172 192
(...skipping 13 matching lines...) Expand all
186 } 206 }
187 } 207 }
188 208
189 void AfterTest() override { 209 void AfterTest() override {
190 EXPECT_TRUE(required_id_ == SurfaceId(1)); 210 EXPECT_TRUE(required_id_ == SurfaceId(1));
191 EXPECT_EQ(1u, required_set_.size()); 211 EXPECT_EQ(1u, required_set_.size());
192 // Sequence should have been satisfied through Swap, not with the 212 // Sequence should have been satisfied through Swap, not with the
193 // callback. 213 // callback.
194 EXPECT_TRUE(satisfied_sequence_.is_null()); 214 EXPECT_TRUE(satisfied_sequence_.is_null());
195 } 215 }
196
197 private:
198 int commit_count_;
199 bool sequence_was_satisfied_;
200 scoped_refptr<SurfaceLayer> layer_;
201 scoped_refptr<Layer> blank_layer_;
202 SurfaceSequence satisfied_sequence_;
203
204 SurfaceId required_id_;
205 std::set<SurfaceSequence> required_set_;
206 }; 216 };
207 217
208 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is 218 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is
209 // fixed. 219 // fixed.
210 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); 220 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw);
221
222 // Check that SurfaceSequence is sent through swap promise and resolved when
223 // swap fails.
224 class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise {
225 public:
226 SurfaceLayerSwapPromiseWithoutDraw() : SurfaceLayerSwapPromise() {}
227
228 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
229 LayerTreeHostImpl::FrameData* frame,
230 DrawResult draw_result) override {
231 return DRAW_ABORTED_MISSING_HIGH_RES_CONTENT;
232 }
233
234 void ChangeTree() override {
235 ++commit_count_;
236 switch (commit_count_) {
237 case 1:
238 // Remove SurfaceLayer from tree to cause SwapPromise to be created.
239 layer_tree_host()->SetRootLayer(blank_layer_);
240 break;
241 case 2:
242 layer_tree_host()->SetNeedsCommit();
243 break;
244 default:
245 EndTest();
246 break;
247 }
248 }
249
250 void AfterTest() override {
251 EXPECT_TRUE(required_id_ == SurfaceId(1));
252 EXPECT_EQ(1u, required_set_.size());
253 // Sequence should have been satisfied with the callback.
254 EXPECT_TRUE(satisfied_sequence_ == SurfaceSequence(1u, 1u));
255 }
256 };
257
258 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw);
211 259
212 } // namespace 260 } // namespace
213 } // namespace cc 261 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/trees/latency_info_swap_promise_monitor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698