Chromium Code Reviews| Index: cc/trees/single_thread_proxy.cc |
| diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
| index f15c7ec269256105167466e691e5d94d306d60a4..486260d8476a6978ee9b82ddbf053e0160dc90a6 100644 |
| --- a/cc/trees/single_thread_proxy.cc |
| +++ b/cc/trees/single_thread_proxy.cc |
| @@ -44,7 +44,6 @@ SingleThreadProxy::SingleThreadProxy( |
| next_frame_is_newly_committed_frame_(false), |
| inside_draw_(false), |
| defer_commits_(false), |
| - commit_was_deferred_(false), |
| commit_requested_(false), |
| inside_synchronous_composite_(false), |
| output_surface_creation_requested_(false), |
| @@ -300,10 +299,7 @@ void SingleThreadProxy::SetDeferCommits(bool defer_commits) { |
| TRACE_EVENT_ASYNC_END0("cc", "SingleThreadProxy::SetDeferCommits", this); |
| defer_commits_ = defer_commits; |
| - if (!defer_commits_ && commit_was_deferred_) { |
| - commit_was_deferred_ = false; |
| - BeginMainFrame(); |
| - } |
| + scheduler_on_impl_thread_->SetDeferCommits(defer_commits); |
| } |
| bool SingleThreadProxy::CommitRequested() const { |
| @@ -660,26 +656,25 @@ void SingleThreadProxy::ScheduledActionSendBeginMainFrame() { |
| } |
| void SingleThreadProxy::BeginMainFrame() { |
| - if (defer_commits_) { |
| - DCHECK(!commit_was_deferred_); |
| - commit_was_deferred_ = true; |
| - layer_tree_host_->DidDeferCommit(); |
| - return; |
| - } |
| - |
| // This checker assumes NotifyReadyToCommit in this stack causes a synchronous |
| // commit. |
| ScopedAbortRemainingSwapPromises swap_promise_checker(layer_tree_host_); |
| - if (!layer_tree_host_->visible()) { |
| + bool need_to_abort_begin_main_frame = true; |
| + if (defer_commits_) { |
|
danakj
2014/11/19 16:31:34
nit: i mildly prefer a few early outs/returns inst
simonhong
2014/11/26 15:52:53
Done.
|
| + TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommits", |
| + TRACE_EVENT_SCOPE_THREAD); |
| + layer_tree_host_->DidDeferCommit(); |
|
brianderson
2014/11/19 19:55:07
It looks like LTH::DidDeferCommit() is only used b
simonhong
2014/11/26 15:52:53
This change breaks below three tests.
* LayerTreeH
brianderson
2014/12/03 02:12:10
The scheduler tests are good, but I think we shoul
|
| + } else if (!layer_tree_host_->visible()) { |
| TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD); |
| - BeginMainFrameAbortedOnImplThread(); |
| - 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) { |
| BeginMainFrameAbortedOnImplThread(); |
| return; |
| } |