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 cc4f28fb05fad1fcb1b638fc0338e85e89a5e199..fb0c9c8c7c8cfaa6665560cbbbf730b2b12db71d 100644 |
--- a/cc/trees/layer_tree_host_unittest_context.cc |
+++ b/cc/trees/layer_tree_host_unittest_context.cc |
@@ -404,40 +404,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); |
@@ -1694,12 +1710,7 @@ class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame |
deferred_ = true; |
// Defer commits before the BeginFrame arrives, causing it to be delayed. |
- MainThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeHostContextTestLoseAfterSendingBeginMainFrame:: |
- DeferCommitsOnMainThread, |
- base::Unretained(this), |
- true)); |
+ PostSetDeferCommitsToMainThread(true); |
// Meanwhile, lose the context while we are in defer commits. |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, |
@@ -1712,16 +1723,7 @@ class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame |
LoseContext(); |
// After losing the context, stop deferring commits. |
- MainThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeHostContextTestLoseAfterSendingBeginMainFrame:: |
- DeferCommitsOnMainThread, |
- base::Unretained(this), |
- false)); |
- } |
- |
- void DeferCommitsOnMainThread(bool defer_commits) { |
- layer_tree_host()->SetDeferCommits(defer_commits); |
+ PostSetDeferCommitsToMainThread(false); |
} |
void WillBeginMainFrame() override { |