Index: cc/trees/layer_tree_host_unittest_context.cc |
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc |
index 7c766fe8bedc60376fafb543e8f51667e2c40682..06719989aee376f605aa1e959e1cb7d029d5b208 100644 |
--- a/cc/trees/layer_tree_host_unittest_context.cc |
+++ b/cc/trees/layer_tree_host_unittest_context.cc |
@@ -382,6 +382,71 @@ class LayerTreeHostClientNotReadyDoesNotCreateOutputSurface |
SINGLE_AND_MULTI_THREAD_TEST_F( |
LayerTreeHostClientNotReadyDoesNotCreateOutputSurface); |
+// This tests the OutputSurface release logic in the following sequence. |
+// SetUp LTH and create and init OutputSurface |
+// LTH::SetVisible(false); |
+// LTH::ReleaseOutputSurface(); |
+// ... |
+// Create and init new OutputSurface |
+// LTH::SetVisible(true); |
+class LayerTreeHostClientTakeAwayOutputSurface |
+ : public LayerTreeHostContextTest { |
+ public: |
+ LayerTreeHostClientTakeAwayOutputSurface() |
+ : LayerTreeHostContextTest(), setos_counter_(0) {} |
+ |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ void RequestNewOutputSurface() override { |
+ if (layer_tree_host()->visible()) |
+ CreateAndSetOutputSurface(); |
+ else |
+ EndTest(); |
no sievers
2015/09/14 21:28:13
Can we still go through and create another OutputS
sohanjg
2015/09/15 06:39:34
Yes, in the current form we were getting RequestNe
|
+ } |
+ |
+ void CreateAndSetOutputSurface() { |
+ scoped_ptr<OutputSurface> surface = |
+ LayerTreeHostContextTest::CreateOutputSurface(); |
+ CHECK(surface); |
+ setos_counter_++; |
+ layer_tree_host()->SetOutputSurface(surface.Pass()); |
+ } |
+ |
+ void HideAndReleaseOutputSurface() { |
+ EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); |
+ layer_tree_host()->SetVisible(false); |
+ scoped_ptr<OutputSurface> surface = |
+ layer_tree_host()->ReleaseOutputSurface(); |
+ CHECK(surface); |
+ surface->context_provider()->DetachFromThread(); |
+ MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&LayerTreeHostClientTakeAwayOutputSurface::MakeVisible, |
+ base::Unretained(this))); |
+ } |
+ |
+ void DidInitializeOutputSurface() override { |
+ if (setos_counter_ == 1) { |
+ EXPECT_TRUE(layer_tree_host()->visible()); |
no sievers
2015/09/14 21:28:13
I think you can pull this out of the if-block rega
sohanjg
2015/09/15 06:39:34
Done.
|
+ MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, base::Bind(&LayerTreeHostClientTakeAwayOutputSurface:: |
+ HideAndReleaseOutputSurface, |
+ base::Unretained(this))); |
+ } |
+ } |
+ |
+ void MakeVisible() { |
+ EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); |
+ layer_tree_host()->SetVisible(true); |
+ } |
+ |
+ void AfterTest() override {} |
+ |
+ int setos_counter_; |
+}; |
+ |
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostClientTakeAwayOutputSurface); |
+ |
class MultipleCompositeDoesNotCreateOutputSurface |
: public LayerTreeHostContextTest { |
public: |