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 24ffcd46e4e3a933a2089b59773c81211692600f..49f7e170632b7b739a01631b79ae53a60856e0f1 100644 |
--- a/cc/trees/layer_tree_host_unittest_context.cc |
+++ b/cc/trees/layer_tree_host_unittest_context.cc |
@@ -411,40 +411,56 @@ class MultipleCompositeDoesNotCreateOutputSurface |
SINGLE_THREAD_NOIMPL_TEST_F(MultipleCompositeDoesNotCreateOutputSurface); |
+// This test makes sure that once a SingleThreadProxy issues a |
+// DidFailToInitializeOutputSurface, that future Composite calls will not |
+// trigger additional requests for output surfaces. |
class FailedCreateDoesNotCreateExtraOutputSurface |
: public LayerTreeHostContextTest { |
public: |
FailedCreateDoesNotCreateExtraOutputSurface() |
- : LayerTreeHostContextTest(), request_count_(0) {} |
+ : LayerTreeHostContextTest(), num_requests_(0), has_failed_(false) {} |
void InitializeSettings(LayerTreeSettings* settings) override { |
settings->single_thread_proxy_scheduler = false; |
} |
void RequestNewOutputSurface() override { |
- if (request_count_ == 0) { |
- ExpectCreateToFail(); |
- layer_tree_host()->SetOutputSurface( |
- make_scoped_ptr(new FailureOutputSurface(false))); |
- } |
+ num_requests_++; |
+ // There should be one initial request and then one request from |
+ // the LayerTreeTest test hooks DidFailToInitializeOutputSurface (which is |
+ // hard to skip). This second request is just ignored and is test cruft. |
+ EXPECT_LE(num_requests_, 2); |
+ if (num_requests_ > 1) |
+ return; |
+ ExpectCreateToFail(); |
+ layer_tree_host()->SetOutputSurface( |
+ make_scoped_ptr(new FailureOutputSurface(false))); |
} |
void BeginTest() override { |
+ // First composite tries to create a surface. |
layer_tree_host()->Composite(base::TimeTicks()); |
+ EXPECT_EQ(num_requests_, 2); |
+ EXPECT_TRUE(has_failed_); |
+ |
+ // Second composite should not request or fail. |
layer_tree_host()->Composite(base::TimeTicks()); |
+ EXPECT_EQ(num_requests_, 2); |
+ EndTest(); |
} |
void DidInitializeOutputSurface() override { EXPECT_TRUE(false); } |
void DidFailToInitializeOutputSurface() override { |
LayerTreeHostContextTest::DidFailToInitializeOutputSurface(); |
- EXPECT_GE(2, ++request_count_); |
- EndTest(); |
+ EXPECT_FALSE(has_failed_); |
+ has_failed_ = true; |
} |
void AfterTest() override {} |
- int request_count_; |
+ int num_requests_; |
+ bool has_failed_; |
}; |
SINGLE_THREAD_NOIMPL_TEST_F(FailedCreateDoesNotCreateExtraOutputSurface); |