diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-11 16:30:35 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-11 16:30:35 +0000 |
commit | 92218694a696e560c7127e11690ca38e53213a4d (patch) | |
tree | 7ad81378c34840c0cfe443a44fa3ee501086d30c /cc/trees | |
parent | 6b038f1a191f5e6e36660fda9aeb19cadd7cf3fa (diff) | |
download | chromium_src-92218694a696e560c7127e11690ca38e53213a4d.zip chromium_src-92218694a696e560c7127e11690ca38e53213a4d.tar.gz chromium_src-92218694a696e560c7127e11690ca38e53213a4d.tar.bz2 |
cc: Test losing the output surface during deferred commits.
This adds a unit test that would fail after landing
the https://codereview.chromium.org/287193003 CL without any further
changes, documenting one regression it caused.
R=brianderson, enne
BUG=376649,374287
Review URL: https://codereview.chromium.org/321193002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276428 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/trees')
-rw-r--r-- | cc/trees/layer_tree_host_unittest_context.cc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc index 47edbb1..879e534 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( + 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 |