Commit 92218694 authored by danakj@chromium.org's avatar danakj@chromium.org

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
parent 6b038f1a
...@@ -75,6 +75,7 @@ class ThreadProxyForTest : public ThreadProxy { ...@@ -75,6 +75,7 @@ class ThreadProxyForTest : public ThreadProxy {
} }
virtual void ScheduledActionSendBeginMainFrame() OVERRIDE { virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {
test_hooks_->ScheduledActionWillSendBeginMainFrame();
ThreadProxy::ScheduledActionSendBeginMainFrame(); ThreadProxy::ScheduledActionSendBeginMainFrame();
test_hooks_->ScheduledActionSendBeginMainFrame(); test_hooks_->ScheduledActionSendBeginMainFrame();
} }
......
...@@ -80,6 +80,7 @@ class TestHooks : public AnimationDelegate { ...@@ -80,6 +80,7 @@ class TestHooks : public AnimationDelegate {
// Hooks for SchedulerClient. // Hooks for SchedulerClient.
virtual void ScheduledActionBeginOutputSurfaceCreation() {} virtual void ScheduledActionBeginOutputSurfaceCreation() {}
virtual void ScheduledActionWillSendBeginMainFrame() {}
virtual void ScheduledActionSendBeginMainFrame() {} virtual void ScheduledActionSendBeginMainFrame() {}
virtual void ScheduledActionCommit() {} virtual void ScheduledActionCommit() {}
virtual void ScheduledActionDrawAndSwapIfPossible() {} virtual void ScheduledActionDrawAndSwapIfPossible() {}
......
...@@ -1473,5 +1473,64 @@ class LayerTreeHostContextTestSurfaceCreateCallback ...@@ -1473,5 +1473,64 @@ class LayerTreeHostContextTestSurfaceCreateCallback
SINGLE_AND_MULTI_THREAD_TEST_F(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
} // namespace cc } // namespace cc
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment