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, |