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; |
} |