| Index: cc/trees/thread_proxy.cc
|
| diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
|
| index 1eed641f22a3179e8f18a1f209b28a204831081a..3060b82b070c2a58612f9af58d7b44c0faba3b3f 100644
|
| --- a/cc/trees/thread_proxy.cc
|
| +++ b/cc/trees/thread_proxy.cc
|
| @@ -481,12 +481,16 @@ 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));
|
| +}
|
| +
|
| +void ThreadProxy::SetDeferCommitsOnImplThread(bool defer_commits) const {
|
| + DCHECK(IsImplThread());
|
| + impl().scheduler->SetDeferCommits(defer_commits);
|
| }
|
|
|
| bool ThreadProxy::CommitRequested() const {
|
| @@ -736,14 +740,6 @@ void ThreadProxy::BeginMainFrame(
|
| TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("cc.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);
|
| - return;
|
| - }
|
| -
|
| // If the commit finishes, LayerTreeHost will transfer its swap promises to
|
| // LayerTreeImpl. The destructor of SwapPromiseChecker checks LayerTressHost's
|
| // swap promises.
|
| @@ -753,20 +749,21 @@ void ThreadProxy::BeginMainFrame(
|
| main().commit_request_sent_to_impl_thread = false;
|
| main().animate_requested = false;
|
|
|
| - if (!layer_tree_host()->visible()) {
|
| + bool need_to_abort_begin_main_frame = true;
|
| + if (main().defer_commits) {
|
| + layer_tree_host()->DidDeferCommit();
|
| + TRACE_EVENT_INSTANT0(
|
| + "cc", "EarlyOut_DeferCommits", TRACE_EVENT_SCOPE_THREAD);
|
| + } else if (!layer_tree_host()->visible()) {
|
| TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD);
|
| - bool did_handle = false;
|
| - Proxy::ImplThreadTaskRunner()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread,
|
| - impl_thread_weak_ptr_,
|
| - did_handle));
|
| - return;
|
| - }
|
| -
|
| - if (layer_tree_host()->output_surface_lost()) {
|
| + } else if (layer_tree_host()->output_surface_lost()) {
|
| TRACE_EVENT_INSTANT0(
|
| "cc", "EarlyOut_OutputSurfaceLost", TRACE_EVENT_SCOPE_THREAD);
|
| + } else {
|
| + need_to_abort_begin_main_frame = false;
|
| + }
|
| +
|
| + if (need_to_abort_begin_main_frame) {
|
| bool did_handle = false;
|
| Proxy::ImplThreadTaskRunner()->PostTask(
|
| FROM_HERE,
|
|
|