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

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

Issue 240163005: Deliver IPC messages together with SwapCompositorFrame (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: introduce a separate queue for with_swap messages Created 6 years, 6 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 | Annotate | Revision Log
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"
(...skipping 4466 matching lines...) Expand 10 before | Expand all | Expand 10 after
4477 { 4477 {
4478 // The first commit completes and causes swap buffer which finishes 4478 // The first commit completes and causes swap buffer which finishes
4479 // the promise. 4479 // the promise.
4480 base::AutoLock lock(swap_promise_result_[0].lock); 4480 base::AutoLock lock(swap_promise_result_[0].lock);
4481 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); 4481 EXPECT_TRUE(swap_promise_result_[0].did_swap_called);
4482 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); 4482 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called);
4483 EXPECT_TRUE(swap_promise_result_[0].dtor_called); 4483 EXPECT_TRUE(swap_promise_result_[0].dtor_called);
4484 } 4484 }
4485 4485
4486 { 4486 {
4487 // The second commit aborts. 4487 // The second commit is aborted since it contains no updates.
4488 base::AutoLock lock(swap_promise_result_[1].lock); 4488 base::AutoLock lock(swap_promise_result_[1].lock);
4489 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); 4489 EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
4490 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); 4490 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
4491 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_[1].reason); 4491 EXPECT_EQ(SwapPromise::COMMIT_NO_UPDATE, swap_promise_result_[1].reason);
4492 EXPECT_TRUE(swap_promise_result_[1].dtor_called); 4492 EXPECT_TRUE(swap_promise_result_[1].dtor_called);
4493 } 4493 }
4494 4494
4495 { 4495 {
4496 // The last commit completes but it does not cause swap buffer because 4496 // The last commit completes but it does not cause swap buffer because
4497 // there is no damage in the frame data. 4497 // there is no damage in the frame data.
4498 base::AutoLock lock(swap_promise_result_[2].lock); 4498 base::AutoLock lock(swap_promise_result_[2].lock);
4499 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); 4499 EXPECT_FALSE(swap_promise_result_[2].did_swap_called);
4500 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); 4500 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called);
4501 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); 4501 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason);
4502 EXPECT_TRUE(swap_promise_result_[2].dtor_called); 4502 EXPECT_TRUE(swap_promise_result_[2].dtor_called);
4503 } 4503 }
4504 } 4504 }
4505 4505
4506 int commit_count_; 4506 int commit_count_;
4507 int commit_complete_count_; 4507 int commit_complete_count_;
4508 TestSwapPromiseResult swap_promise_result_[3]; 4508 TestSwapPromiseResult swap_promise_result_[3];
4509 }; 4509 };
4510 4510
4511 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise); 4511 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise);
4512 4512
4513 class LayerTreeHostTestBreakSwapPromiseForAbortedCommit
4514 : public LayerTreeHostTest {
4515 protected:
4516 LayerTreeHostTestBreakSwapPromiseForAbortedCommit() : commit_count_(0) {}
4517
4518 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
4519 settings->throttle_frame_production = false;
4520 }
4521
4522 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
4523
4524 virtual void DidCommit() OVERRIDE {
4525 commit_count_++;
4526 if (commit_count_ == 1) {
4527 scoped_ptr<SwapPromise> swap_promise(
4528 new TestSwapPromise(&swap_promise_result_));
4529 layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
4530 }
4531 }
4532
4533 virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
4534 bool did_handle) OVERRIDE {
4535 EndTest();
4536 }
4537
4538 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
4539 // Initiate an abortable commit.
piman 2014/06/25 21:20:32 What causes this commit to be aborted?
mkosiba (inactive) 2014/06/25 22:08:33 I'd be thrilled to know too, to be honest. I spent
mkosiba (inactive) 2014/06/26 12:36:47 Ok, so I think this has something to do with the s
piman 2014/06/26 20:40:12 Mmh, I think the case where that happens is the Ea
mkosiba (inactive) 2014/06/27 14:18:59 That works, thanks!
4540 host_impl->SetNeedsCommit();
4541 }
4542
4543 virtual void AfterTest() OVERRIDE {
4544 EXPECT_EQ(commit_count_, 2);
4545 {
4546 base::AutoLock lock(swap_promise_result_.lock);
4547 EXPECT_FALSE(swap_promise_result_.did_swap_called);
4548 EXPECT_TRUE(swap_promise_result_.did_not_swap_called);
4549 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason);
4550 EXPECT_TRUE(swap_promise_result_.dtor_called);
4551 }
4552 }
4553
4554 int commit_count_;
4555 TestSwapPromiseResult swap_promise_result_;
4556 };
4557
4558 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromiseForAbortedCommit);
4559
4513 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { 4560 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor {
4514 public: 4561 public:
4515 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host, 4562 SimpleSwapPromiseMonitor(LayerTreeHost* layer_tree_host,
4516 LayerTreeHostImpl* layer_tree_host_impl, 4563 LayerTreeHostImpl* layer_tree_host_impl,
4517 int* set_needs_commit_count, 4564 int* set_needs_commit_count,
4518 int* set_needs_redraw_count) 4565 int* set_needs_redraw_count)
4519 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl), 4566 : SwapPromiseMonitor(layer_tree_host, layer_tree_host_impl),
4520 set_needs_commit_count_(set_needs_commit_count), 4567 set_needs_commit_count_(set_needs_commit_count),
4521 set_needs_redraw_count_(set_needs_redraw_count) {} 4568 set_needs_redraw_count_(set_needs_redraw_count) {}
4522 4569
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
4894 const gfx::Size bounds_; 4941 const gfx::Size bounds_;
4895 FakeContentLayerClient client_; 4942 FakeContentLayerClient client_;
4896 scoped_refptr<ContentLayerWithUpdateTracking> content_layer_; 4943 scoped_refptr<ContentLayerWithUpdateTracking> content_layer_;
4897 scoped_refptr<FakePictureLayer> picture_layer_; 4944 scoped_refptr<FakePictureLayer> picture_layer_;
4898 Layer* child_layer_; 4945 Layer* child_layer_;
4899 }; 4946 };
4900 4947
4901 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousPainting); 4948 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousPainting);
4902 4949
4903 } // namespace cc 4950 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698