Chromium Code Reviews| Index: cc/trees/layer_tree_host_unittest.cc |
| diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
| index 51ea3d91a69aba3cdad2746c61acb6849d9c2e2f..f14d700776e8193e1b9e4ded569341d6fd990513 100644 |
| --- a/cc/trees/layer_tree_host_unittest.cc |
| +++ b/cc/trees/layer_tree_host_unittest.cc |
| @@ -4927,11 +4927,13 @@ SINGLE_AND_MULTI_THREAD_TEST_F( |
| struct TestSwapPromiseResult { |
| TestSwapPromiseResult() |
| - : did_swap_called(false), |
| + : did_activate_called(false), |
| + did_swap_called(false), |
| did_not_swap_called(false), |
| dtor_called(false), |
| - reason(SwapPromise::DID_NOT_SWAP_UNKNOWN) {} |
| + reason(SwapPromise::COMMIT_FAILS) {} |
| + bool did_activate_called; |
| bool did_swap_called; |
| bool did_not_swap_called; |
| bool dtor_called; |
| @@ -4948,8 +4950,17 @@ class TestSwapPromise : public SwapPromise { |
| result_->dtor_called = true; |
| } |
| + void DidActivate() override { |
| + base::AutoLock lock(result_->lock); |
| + EXPECT_FALSE(result_->did_activate_called); |
| + EXPECT_FALSE(result_->did_swap_called); |
| + EXPECT_FALSE(result_->did_not_swap_called); |
| + result_->did_activate_called = true; |
| + } |
| + |
| void DidSwap(CompositorFrameMetadata* metadata) override { |
| base::AutoLock lock(result_->lock); |
| + EXPECT_TRUE(result_->did_activate_called); |
| EXPECT_FALSE(result_->did_swap_called); |
| EXPECT_FALSE(result_->did_not_swap_called); |
| result_->did_swap_called = true; |
| @@ -4959,6 +4970,8 @@ class TestSwapPromise : public SwapPromise { |
| base::AutoLock lock(result_->lock); |
| EXPECT_FALSE(result_->did_swap_called); |
| EXPECT_FALSE(result_->did_not_swap_called); |
| + EXPECT_FALSE(result_->did_activate_called && |
| + reason == DidNotSwapReason::ACTIVATION_FAILS); |
|
boliu
2015/05/15 03:50:50
Actually on second thought, this is not strict eno
Tobias Sargeant
2015/05/15 16:30:49
Done.
|
| result_->did_not_swap_called = true; |
| result_->reason = reason; |
| } |
| @@ -4992,6 +5005,22 @@ class LayerTreeHostTestBreakSwapPromise : public LayerTreeHostTest { |
| } |
| } |
| + void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
| + if (host_impl->pending_tree()) { |
| + int frame = host_impl->pending_tree()->source_frame_number(); |
| + base::AutoLock lock(swap_promise_result_[frame].lock); |
| + EXPECT_FALSE(swap_promise_result_[frame].did_activate_called); |
| + EXPECT_FALSE(swap_promise_result_[frame].did_swap_called); |
| + } |
| + } |
| + |
| + void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
| + int frame = host_impl->active_tree()->source_frame_number(); |
| + base::AutoLock lock(swap_promise_result_[frame].lock); |
| + EXPECT_TRUE(swap_promise_result_[frame].did_activate_called); |
| + EXPECT_FALSE(swap_promise_result_[frame].did_swap_called); |
| + } |
| + |
| void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
| commit_complete_count_++; |
| if (commit_complete_count_ == 1) { |
| @@ -5019,6 +5048,7 @@ class LayerTreeHostTestBreakSwapPromise : public LayerTreeHostTest { |
| { |
| // The second commit is aborted since it contains no updates. |
| base::AutoLock lock(swap_promise_result_[1].lock); |
| + EXPECT_FALSE(swap_promise_result_[1].did_activate_called); |
| EXPECT_FALSE(swap_promise_result_[1].did_swap_called); |
| EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); |
| EXPECT_EQ(SwapPromise::COMMIT_NO_UPDATE, swap_promise_result_[1].reason); |
| @@ -5029,6 +5059,7 @@ class LayerTreeHostTestBreakSwapPromise : public LayerTreeHostTest { |
| // The last commit completes but it does not cause swap buffer because |
| // there is no damage in the frame data. |
| base::AutoLock lock(swap_promise_result_[2].lock); |
| + EXPECT_TRUE(swap_promise_result_[2].did_activate_called); |
| EXPECT_FALSE(swap_promise_result_[2].did_swap_called); |
| EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); |
| EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); |
| @@ -5078,6 +5109,42 @@ class LayerTreeHostTestKeepSwapPromise : public LayerTreeTest { |
| } |
| } |
| + void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
| + if (host_impl->pending_tree() && |
| + host_impl->pending_tree()->source_frame_number() == 1) { |
| + base::AutoLock lock(swap_promise_result_.lock); |
| + EXPECT_FALSE(swap_promise_result_.did_activate_called); |
| + EXPECT_FALSE(swap_promise_result_.did_swap_called); |
| + } |
| + } |
| + |
| + void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
| + if (host_impl->active_tree()->source_frame_number() == 1) { |
| + base::AutoLock lock(swap_promise_result_.lock); |
| + EXPECT_TRUE(swap_promise_result_.did_activate_called); |
| + EXPECT_FALSE(swap_promise_result_.did_swap_called); |
| + } |
| + } |
| + |
| + void ActivationCallback() { |
| + // DidActivate needs to happen before the tree activation callback. |
| + base::AutoLock lock(swap_promise_result_.lock); |
| + EXPECT_TRUE(swap_promise_result_.did_activate_called); |
| + } |
| + |
| + void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override { |
| + SetCallback(layer_tree_host()->settings().impl_side_painting && |
| + host_impl->active_tree()->source_frame_number() == 0); |
|
boliu
2015/05/15 03:50:50
SwapPromise is only queued in frame 1, but this is
Tobias Sargeant
2015/05/15 16:30:49
Done.
|
| + } |
| + |
| + void SetCallback(bool enable) { |
| + output_surface()->SetTreeActivationCallback( |
| + enable |
| + ? base::Bind(&LayerTreeHostTestKeepSwapPromise::ActivationCallback, |
| + base::Unretained(this)) |
| + : base::Closure()); |
| + } |
| + |
| void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { |
| EXPECT_TRUE(result); |
| if (host_impl->active_tree()->source_frame_number() >= 1) { |
| @@ -5127,6 +5194,7 @@ class LayerTreeHostTestBreakSwapPromiseForVisibility |
| void AfterTest() override { |
| { |
| base::AutoLock lock(swap_promise_result_.lock); |
| + EXPECT_FALSE(swap_promise_result_.did_activate_called); |
| EXPECT_FALSE(swap_promise_result_.did_swap_called); |
| EXPECT_TRUE(swap_promise_result_.did_not_swap_called); |
| EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); |
| @@ -5176,6 +5244,7 @@ class LayerTreeHostTestBreakSwapPromiseForContext : public LayerTreeHostTest { |
| void AfterTest() override { |
| { |
| base::AutoLock lock(swap_promise_result_.lock); |
| + EXPECT_FALSE(swap_promise_result_.did_activate_called); |
| EXPECT_FALSE(swap_promise_result_.did_swap_called); |
| EXPECT_TRUE(swap_promise_result_.did_not_swap_called); |
| EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); |
| @@ -5829,6 +5898,7 @@ class LayerTreeHostTestSynchronousCompositeSwapPromise |
| // Second swap promise fails to swap. |
| { |
| base::AutoLock lock(swap_promise_result_[1].lock); |
| + EXPECT_TRUE(swap_promise_result_[1].did_activate_called); |
| EXPECT_FALSE(swap_promise_result_[1].did_swap_called); |
| EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); |
| EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); |
| @@ -5838,6 +5908,7 @@ class LayerTreeHostTestSynchronousCompositeSwapPromise |
| // Third swap promises also fails to swap (and draw). |
| { |
| base::AutoLock lock(swap_promise_result_[2].lock); |
| + EXPECT_TRUE(swap_promise_result_[2].did_activate_called); |
| EXPECT_FALSE(swap_promise_result_[2].did_swap_called); |
| EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); |
| EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); |