| Index: cc/trees/thread_proxy.cc
|
| diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
|
| index 4793cc5ecf5c27d3458a870230af7569bea5d5c0..8110cbba6a1d38eecb997b030d4d596f656a54f8 100644
|
| --- a/cc/trees/thread_proxy.cc
|
| +++ b/cc/trees/thread_proxy.cc
|
| @@ -437,13 +437,21 @@ void ThreadProxy::SetDeferCommits(bool defer_commits) {
|
| else
|
| TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this);
|
|
|
| - if (!main().defer_commits && main().pending_deferred_commit) {
|
| - Proxy::MainThreadTaskRunner()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ThreadProxy::BeginMainFrame,
|
| - main_thread_weak_ptr_,
|
| - base::Passed(&main().pending_deferred_commit)));
|
| - }
|
| + Proxy::ImplThreadTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ThreadProxy::SetDeferCommitsOnImplThread,
|
| + impl_thread_weak_ptr_,
|
| + defer_commits));
|
| +
|
| + // When defer commit is turned off, we should start new BeginMainFrame to
|
| + // handle previous deferred BeginMainFrame.
|
| + if (!main().defer_commits)
|
| + SetNeedsCommit();
|
| +}
|
| +
|
| +void ThreadProxy::SetDeferCommitsOnImplThread(bool defer_commits) const {
|
| + DCHECK(IsImplThread());
|
| + impl().scheduler->SetDeferCommits(defer_commits);
|
| }
|
|
|
| bool ThreadProxy::CommitRequested() const {
|
| @@ -686,10 +694,16 @@ void ThreadProxy::BeginMainFrame(
|
| DCHECK(IsMainThread());
|
|
|
| if (main().defer_commits) {
|
| - main().pending_deferred_commit = begin_main_frame_state.Pass();
|
| - layer_tree_host()->DidDeferCommit();
|
| - TRACE_EVENT_INSTANT0(
|
| - "cc", "EarlyOut_DeferCommits", TRACE_EVENT_SCOPE_THREAD);
|
| + TRACE_EVENT_INSTANT0("cc",
|
| + "EarlyOut_DeferCommits",
|
| + TRACE_EVENT_SCOPE_THREAD);
|
| +
|
| + bool did_handle = false;
|
| + Proxy::ImplThreadTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread,
|
| + impl_thread_weak_ptr_,
|
| + did_handle));
|
| return;
|
| }
|
|
|
|
|