Index: cc/layers/surface_layer_unittest.cc |
diff --git a/cc/layers/surface_layer_unittest.cc b/cc/layers/surface_layer_unittest.cc |
index eac14a0c245f30b61d1b0b1d7228729db7ad8d83..e35b88683d81e1a1df7bad71be07623c954a57d9 100644 |
--- a/cc/layers/surface_layer_unittest.cc |
+++ b/cc/layers/surface_layer_unittest.cc |
@@ -143,23 +143,43 @@ class SurfaceLayerSwapPromise : public LayerTreeTest { |
gfx::Size bounds(100, 100); |
layer_tree_host()->SetViewportSize(bounds); |
+ |
+ blank_layer_ = SolidColorLayer::Create(layer_settings()); |
+ blank_layer_->SetIsDrawable(true); |
+ blank_layer_->SetBounds(gfx::Size(10, 10)); |
+ |
PostSetNeedsCommitToMainThread(); |
} |
+ virtual void ChangeTree() = 0; |
+ |
void DidCommitAndDrawFrame() override { |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&SurfaceLayerSwapPromise::ChangeTree, |
base::Unretained(this))); |
} |
- void ChangeTree() { |
+ protected: |
+ int commit_count_; |
+ bool sequence_was_satisfied_; |
+ scoped_refptr<SurfaceLayer> layer_; |
+ scoped_refptr<Layer> blank_layer_; |
+ SurfaceSequence satisfied_sequence_; |
+ |
+ SurfaceId required_id_; |
+ std::set<SurfaceSequence> required_set_; |
+}; |
+ |
+// Check that SurfaceSequence is sent through swap promise. |
+class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { |
+ public: |
+ SurfaceLayerSwapPromiseWithDraw() : SurfaceLayerSwapPromise() {} |
+ |
+ void ChangeTree() override { |
++commit_count_; |
switch (commit_count_) { |
case 1: |
// Remove SurfaceLayer from tree to cause SwapPromise to be created. |
- blank_layer_ = SolidColorLayer::Create(layer_settings()); |
- blank_layer_->SetIsDrawable(true); |
- blank_layer_->SetBounds(gfx::Size(10, 10)); |
layer_tree_host()->SetRootLayer(blank_layer_); |
break; |
case 2: |
@@ -193,21 +213,49 @@ class SurfaceLayerSwapPromise : public LayerTreeTest { |
// callback. |
EXPECT_TRUE(satisfied_sequence_.is_null()); |
} |
- |
- private: |
- int commit_count_; |
- bool sequence_was_satisfied_; |
- scoped_refptr<SurfaceLayer> layer_; |
- scoped_refptr<Layer> blank_layer_; |
- SurfaceSequence satisfied_sequence_; |
- |
- SurfaceId required_id_; |
- std::set<SurfaceSequence> required_set_; |
}; |
// TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is |
// fixed. |
-MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); |
+MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); |
+ |
+// Check that SurfaceSequence is sent through swap promise and resolved when |
+// swap fails. |
+class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise { |
+ public: |
+ SurfaceLayerSwapPromiseWithoutDraw() : SurfaceLayerSwapPromise() {} |
+ |
+ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
+ LayerTreeHostImpl::FrameData* frame, |
+ DrawResult draw_result) override { |
+ return DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; |
+ } |
+ |
+ void ChangeTree() override { |
+ ++commit_count_; |
+ switch (commit_count_) { |
+ case 1: |
+ // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
+ layer_tree_host()->SetRootLayer(blank_layer_); |
+ break; |
+ case 2: |
+ layer_tree_host()->SetNeedsCommit(); |
+ break; |
+ default: |
+ EndTest(); |
+ break; |
+ } |
+ } |
+ |
+ void AfterTest() override { |
+ EXPECT_TRUE(required_id_ == SurfaceId(1)); |
+ EXPECT_EQ(1u, required_set_.size()); |
+ // Sequence should have been satisfied with the callback. |
+ EXPECT_TRUE(satisfied_sequence_ == SurfaceSequence(1u, 1u)); |
+ } |
+}; |
+ |
+MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); |
} // namespace |
} // namespace cc |