summaryrefslogtreecommitdiffstats
path: root/cc/trees
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-11 16:30:35 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-11 16:30:35 +0000
commit92218694a696e560c7127e11690ca38e53213a4d (patch)
tree7ad81378c34840c0cfe443a44fa3ee501086d30c /cc/trees
parent6b038f1a191f5e6e36660fda9aeb19cadd7cf3fa (diff)
downloadchromium_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.cc59
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