OLD | NEW |
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 Loading... |
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. |
| 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 Loading... |
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 |
OLD | NEW |