Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index 5a40d7e5039dc38c3e92b2a7c1ed0257391b9824..98bcd746f325f899ff55d6a97b679fb821664151 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,12 @@ 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); |
+ |
+ // When defer commit is turned off, we should start new BeginMainFrame to |
+ // handle previous deferred BeginMainFrame. |
+ if (!defer_commits) |
+ SetNeedsCommit(); |
} |
bool SingleThreadProxy::CommitRequested() const { |
@@ -660,9 +661,9 @@ void SingleThreadProxy::ScheduledActionSendBeginMainFrame() { |
void SingleThreadProxy::BeginMainFrame() { |
if (defer_commits_) { |
- DCHECK(!commit_was_deferred_); |
- commit_was_deferred_ = true; |
- layer_tree_host_->DidDeferCommit(); |
+ TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommits", |
+ TRACE_EVENT_SCOPE_THREAD); |
+ BeginMainFrameAbortedOnImplThread(); |
return; |
} |