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

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

Issue 60513007: Add SwapPromise support to LayerTreeHost and LayerTreeImpl (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: address Dana's comments Created 7 years, 1 month 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/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
11 #include "cc/animation/timing_function.h" 11 #include "cc/animation/timing_function.h"
12 #include "cc/base/swap_promise.h"
12 #include "cc/debug/frame_rate_counter.h" 13 #include "cc/debug/frame_rate_counter.h"
13 #include "cc/layers/content_layer.h" 14 #include "cc/layers/content_layer.h"
14 #include "cc/layers/content_layer_client.h" 15 #include "cc/layers/content_layer_client.h"
15 #include "cc/layers/io_surface_layer.h" 16 #include "cc/layers/io_surface_layer.h"
16 #include "cc/layers/layer_impl.h" 17 #include "cc/layers/layer_impl.h"
17 #include "cc/layers/painted_scrollbar_layer.h" 18 #include "cc/layers/painted_scrollbar_layer.h"
18 #include "cc/layers/picture_layer.h" 19 #include "cc/layers/picture_layer.h"
19 #include "cc/layers/solid_color_layer.h" 20 #include "cc/layers/solid_color_layer.h"
20 #include "cc/layers/video_layer.h" 21 #include "cc/layers/video_layer.h"
21 #include "cc/output/begin_frame_args.h" 22 #include "cc/output/begin_frame_args.h"
(...skipping 5186 matching lines...) Expand 10 before | Expand all | Expand 10 after
5208 size_t first_output_surface_memory_limit_; 5209 size_t first_output_surface_memory_limit_;
5209 size_t second_output_surface_memory_limit_; 5210 size_t second_output_surface_memory_limit_;
5210 FakeContentLayerClient client_; 5211 FakeContentLayerClient client_;
5211 scoped_refptr<FakeContentLayer> root_; 5212 scoped_refptr<FakeContentLayer> root_;
5212 }; 5213 };
5213 5214
5214 // No output to copy for delegated renderers. 5215 // No output to copy for delegated renderers.
5215 SINGLE_AND_MULTI_THREAD_TEST_F( 5216 SINGLE_AND_MULTI_THREAD_TEST_F(
5216 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface); 5217 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface);
5217 5218
5219 struct TestSwapPromiseResult {
5220 TestSwapPromiseResult() : did_swap_called(false),
5221 did_not_swap_called(false),
5222 dtor_called(false),
5223 reason(SwapPromise::DID_NOT_SWAP_UNKNOWN) {
5224 }
5225
5226 bool did_swap_called;
5227 bool did_not_swap_called;
5228 bool dtor_called;
5229 SwapPromise::DidNotSwapReason reason;
5230 };
5231
5232 class TestSwapPromise : public SwapPromise {
5233 public:
5234 explicit TestSwapPromise(TestSwapPromiseResult* result)
5235 : SwapPromise(SWAP_PROMISE_UNKNOWN),
5236 result_(result) {
5237 }
5238
5239 virtual ~TestSwapPromise() {
5240 result_->dtor_called = true;
5241 }
5242
5243 virtual void DidSwap() OVERRIDE {
5244 EXPECT_FALSE(result_->did_swap_called);
5245 EXPECT_FALSE(result_->did_not_swap_called);
5246 result_->did_swap_called = true;
5247 }
5248
5249 virtual void DidNotSwap(DidNotSwapReason reason) {
5250 EXPECT_FALSE(result_->did_swap_called);
5251 EXPECT_FALSE(result_->did_not_swap_called);
5252 result_->did_not_swap_called = true;
5253 result_->reason = reason;
5254 }
5255
5256 private:
5257 // Not owned.
5258 TestSwapPromiseResult* result_;
5259 };
5260
5261 class LayerTreeHostTestBreakSwapPromise
5262 : public LayerTreeHostTest {
5263 protected:
5264 LayerTreeHostTestBreakSwapPromise()
5265 : commit_count_(0), commit_complete_count_(0) {
5266 }
5267
5268 virtual void WillBeginMainFrame() OVERRIDE {
5269 ASSERT_LE(commit_count_, 2);
5270 scoped_ptr<SwapPromise> swap_promise(new TestSwapPromise(
5271 &swap_promise_result_[commit_count_]));
5272 layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
5273 }
5274
5275 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
5276
5277 virtual void DidCommit() OVERRIDE {
5278 commit_count_++;
5279 if (commit_count_ == 2) {
5280 // This commit will finish.
5281 layer_tree_host()->SetNeedsCommit();
5282 }
5283 }
5284
5285 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
5286 commit_complete_count_++;
5287 if (commit_complete_count_ == 1) {
5288 // This commit will be aborted because no actual update.
5289 PostSetNeedsUpdateLayersToMainThread();
5290 } else {
5291 EndTest();
5292 }
5293 }
5294
5295 virtual void AfterTest() OVERRIDE {
5296 // 3 commits are scheduled. 2 completes. 1 is aborted.
5297 EXPECT_EQ(commit_count_, 3);
5298 EXPECT_EQ(commit_complete_count_, 2);
5299
5300 // The first commit completes and causes swap buffer which finishes
5301 // the promise.
5302 EXPECT_TRUE(swap_promise_result_[0].did_swap_called);
5303 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called);
5304 EXPECT_TRUE(swap_promise_result_[0].dtor_called);
5305
5306 // The second commit aborts.
5307 EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
5308 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
5309 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_[1].reason);
5310 EXPECT_TRUE(swap_promise_result_[1].dtor_called);
5311
5312 // The last commit completes but it does not cause swap buffer because
5313 // there is no damage in the frame data.
5314 EXPECT_FALSE(swap_promise_result_[2].did_swap_called);
5315 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called);
5316 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason);
5317 EXPECT_TRUE(swap_promise_result_[2].dtor_called);
5318 }
5319
5320 int commit_count_;
5321 int commit_complete_count_;
5322 TestSwapPromiseResult swap_promise_result_[3];
5323 };
5324
5325 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise);
5326
5218 } // namespace cc 5327 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698