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 d608b91130ddd9a476ce8d7caf64159d61b71be8..f3fea7fda945f25e17c36d0fdb36fa94c81d2d53 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -529,7 +529,8 @@ class LayerTreeHostTestSetNextCommitForcesRedraw : public LayerTreeHostTest { |
scoped_refptr<ContentLayer> root_layer_; |
}; |
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNextCommitForcesRedraw); |
+SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( |
+ LayerTreeHostTestSetNextCommitForcesRedraw); |
// Tests that if a layer is not drawn because of some reason in the parent then |
// its damage is preserved until the next time it is drawn. |
@@ -737,7 +738,8 @@ class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails |
virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
EXPECT_EQ(frame_count_with_pending_tree_, 0); |
- impl->BlockNotifyReadyToActivateForTesting(true); |
+ if (impl->settings().impl_side_painting) |
+ impl->BlockNotifyReadyToActivateForTesting(true); |
} |
virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl, |
@@ -748,7 +750,8 @@ class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails |
if (frame_count_with_pending_tree_ == 1) { |
EXPECT_EQ(first_frame_time_.ToInternalValue(), 0); |
first_frame_time_ = impl->CurrentBeginFrameArgs().frame_time; |
- } else if (frame_count_with_pending_tree_ == 2) { |
+ } else if (frame_count_with_pending_tree_ == 2 && |
+ impl->settings().impl_side_painting) { |
impl->BlockNotifyReadyToActivateForTesting(false); |
} |
} |
@@ -777,7 +780,7 @@ class LayerTreeHostTestFrameTimeUpdatesAfterActivationFails |
base::TimeTicks first_frame_time_; |
}; |
-SINGLE_AND_MULTI_THREAD_TEST_F( |
+SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( |
LayerTreeHostTestFrameTimeUpdatesAfterActivationFails); |
// This test verifies that LayerTreeHostImpl's current frame time gets |
@@ -2406,12 +2409,18 @@ class LayerTreeHostTestChangeLayerPropertiesInPaintContents |
LayerTreeHostTestChangeLayerPropertiesInPaintContents() : num_commits_(0) {} |
virtual void SetupTree() override { |
- scoped_refptr<ContentLayer> root_layer = ContentLayer::Create(&client_); |
+ if (layer_tree_host()->settings().impl_side_painting) { |
+ scoped_refptr<PictureLayer> root_layer = PictureLayer::Create(&client_); |
+ layer_tree_host()->SetRootLayer(root_layer); |
+ } else { |
+ scoped_refptr<ContentLayer> root_layer = ContentLayer::Create(&client_); |
+ layer_tree_host()->SetRootLayer(root_layer); |
+ } |
+ Layer* root_layer = layer_tree_host()->root_layer(); |
root_layer->SetIsDrawable(true); |
root_layer->SetBounds(gfx::Size(1, 1)); |
- layer_tree_host()->SetRootLayer(root_layer); |
- client_.set_layer(root_layer.get()); |
+ client_.set_layer(root_layer); |
LayerTreeHostTest::SetupTree(); |
} |
@@ -2419,7 +2428,7 @@ class LayerTreeHostTestChangeLayerPropertiesInPaintContents |
virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
virtual void AfterTest() override {} |
- virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
+ virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
num_commits_++; |
if (num_commits_ == 1) { |
LayerImpl* root_layer = host_impl->active_tree()->root_layer(); |
@@ -2436,7 +2445,8 @@ class LayerTreeHostTestChangeLayerPropertiesInPaintContents |
int num_commits_; |
}; |
-SINGLE_THREAD_TEST_F(LayerTreeHostTestChangeLayerPropertiesInPaintContents); |
+SINGLE_AND_MULTI_THREAD_TEST_F( |
+ LayerTreeHostTestChangeLayerPropertiesInPaintContents); |
class MockIOSurfaceWebGraphicsContext3D : public TestWebGraphicsContext3D { |
public: |
@@ -5079,4 +5089,81 @@ class LayerTreeHostTestActivateOnInvisible : public LayerTreeHostTest { |
// TODO(vmpstr): Enable with single thread impl-side painting. |
MULTI_THREAD_TEST_F(LayerTreeHostTestActivateOnInvisible); |
+// Do a synchronous composite and assert that the swap promise succeeds. |
+class LayerTreeHostTestSynchronousCompositeSwapPromise |
+ : public LayerTreeHostTest { |
+ public: |
+ LayerTreeHostTestSynchronousCompositeSwapPromise() : commit_count_(0) {} |
+ |
+ virtual void InitializeSettings(LayerTreeSettings* settings) override { |
+ settings->single_thread_proxy_scheduler = false; |
+ } |
+ |
+ virtual void BeginTest() override { |
+ // Successful composite. |
+ scoped_ptr<SwapPromise> swap_promise0( |
+ new TestSwapPromise(&swap_promise_result_[0])); |
+ layer_tree_host()->QueueSwapPromise(swap_promise0.Pass()); |
+ layer_tree_host()->Composite(gfx::FrameTime::Now()); |
+ |
+ // Fail to swap. |
danakj
2014/10/08 19:45:14
add "(no damage)"
|
+ scoped_ptr<SwapPromise> swap_promise1( |
+ new TestSwapPromise(&swap_promise_result_[1])); |
+ layer_tree_host()->QueueSwapPromise(swap_promise1.Pass()); |
+ layer_tree_host()->SetNeedsCommit(); |
+ layer_tree_host()->Composite(gfx::FrameTime::Now()); |
+ |
+ // Fail to draw. |
+ scoped_ptr<SwapPromise> swap_promise2( |
+ new TestSwapPromise(&swap_promise_result_[2])); |
+ layer_tree_host()->QueueSwapPromise(swap_promise2.Pass()); |
+ layer_tree_host()->SetNeedsDisplayOnAllLayers(); |
+ layer_tree_host()->SetVisible(false); |
+ layer_tree_host()->Composite(gfx::FrameTime::Now()); |
+ |
+ EndTest(); |
+ } |
+ |
+ virtual void DidCommit() override { |
+ commit_count_++; |
+ ASSERT_LE(commit_count_, 3); |
+ } |
+ |
+ virtual void AfterTest() override { |
+ EXPECT_EQ(3, commit_count_); |
+ |
+ // Initial swap promise should have succeded. |
+ { |
+ base::AutoLock lock(swap_promise_result_[0].lock); |
+ EXPECT_TRUE(swap_promise_result_[0].did_swap_called); |
+ EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); |
+ EXPECT_TRUE(swap_promise_result_[0].dtor_called); |
+ } |
+ |
+ // Second swap promise fails to swap. |
+ { |
+ base::AutoLock lock(swap_promise_result_[1].lock); |
+ 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); |
+ EXPECT_TRUE(swap_promise_result_[1].dtor_called); |
+ } |
+ |
+ // Third swap promises also fails to swap (and draw). |
+ { |
+ base::AutoLock lock(swap_promise_result_[2].lock); |
+ 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); |
+ EXPECT_TRUE(swap_promise_result_[2].dtor_called); |
+ } |
+ } |
+ |
+ int commit_count_; |
+ TestSwapPromiseResult swap_promise_result_[3]; |
+}; |
+ |
+// Impl-side painting is not supported for synchronous compositing. |
+SINGLE_THREAD_NOIMPL_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise); |
+ |
} // namespace cc |