Chromium Code Reviews| 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 47edbb144a3d11b40e71b21a18370491a1e13abe..879e5347e311078e380b072780e3c6ff6f393cd9 100644 |
| --- a/cc/trees/layer_tree_host_unittest_context.cc |
| +++ b/cc/trees/layer_tree_host_unittest_context.cc |
| @@ -1473,5 +1473,64 @@ class LayerTreeHostContextTestSurfaceCreateCallback |
| SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback); |
| +class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame |
| + : public LayerTreeHostContextTest { |
| + protected: |
| + virtual void BeginTest() OVERRIDE { |
| + deferred_ = false; |
| + PostSetNeedsCommitToMainThread(); |
| + } |
| + |
| + virtual void ScheduledActionWillSendBeginMainFrame() OVERRIDE { |
| + if (deferred_) |
| + return; |
| + 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)); |
| + // Meanwhile, lose the context while we are in defer commits. |
| + ImplThreadTaskRunner()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&LayerTreeHostContextTestLoseAfterSendingBeginMainFrame:: |
| + LoseContextOnImplThread, |
| + base::Unretained(this))); |
| + } |
| + |
| + void LoseContextOnImplThread() { |
| + LoseContext(); |
| + |
| + // After losing the context, stop deferring commits. |
| + MainThreadTaskRunner()->PostTask( |
|
enne (OOO)
2014/06/10 18:43:32
This seems racy. Couldn't DeferCommitsOnMainThrea
danakj
2014/06/10 18:46:24
I think not because after ScheduledActionWillSendB
enne (OOO)
2014/06/10 18:59:43
Oh, right. ScheduledActionWillSendBeginMainFrame
|
| + FROM_HERE, |
| + base::Bind(&LayerTreeHostContextTestLoseAfterSendingBeginMainFrame:: |
| + DeferCommitsOnMainThread, |
| + base::Unretained(this), |
| + false)); |
| + } |
| + |
| + void DeferCommitsOnMainThread(bool defer_commits) { |
| + layer_tree_host()->SetDeferCommits(defer_commits); |
| + } |
| + |
| + virtual void WillBeginMainFrame() OVERRIDE { |
| + // Don't begin a frame with a lost surface. |
| + EXPECT_FALSE(layer_tree_host()->output_surface_lost()); |
| + } |
| + |
| + virtual void DidCommitAndDrawFrame() OVERRIDE { EndTest(); } |
| + |
| + virtual void AfterTest() OVERRIDE {} |
| + |
| + bool deferred_; |
| +}; |
| + |
| +// TODO(danakj): We don't use scheduler with SingleThreadProxy yet. |
| +MULTI_THREAD_TEST_F(LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); |
| + |
| } // namespace |
| } // namespace cc |