Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index b9f6a4849131dfa14431b6f7a0b48dd4fe81fab9..5fcddc50c30196714f3f4aa2abf1962311997bb8 100644 |
--- a/cc/trees/single_thread_proxy.cc |
+++ b/cc/trees/single_thread_proxy.cc |
@@ -47,6 +47,7 @@ SingleThreadProxy::SingleThreadProxy( |
next_frame_is_newly_committed_frame_(false), |
inside_draw_(false), |
defer_commits_(false), |
+ animate_requested_(false), |
commit_requested_(false), |
inside_synchronous_composite_(false), |
output_surface_creation_requested_(false), |
@@ -178,7 +179,13 @@ void SingleThreadProxy::SetNeedsAnimate() { |
TRACE_EVENT0("cc", "SingleThreadProxy::SetNeedsAnimate"); |
DCHECK(Proxy::IsMainThread()); |
client_->ScheduleAnimation(); |
- SetNeedsCommit(); |
+ if (animate_requested_) { |
+ return; |
+ } |
+ DebugScopedSetImplThread impl(this); |
+ if (scheduler_on_impl_thread_) |
+ scheduler_on_impl_thread_->SetNeedsCommit(); |
+ animate_requested_ = true; |
} |
void SingleThreadProxy::SetNeedsUpdateLayers() { |
@@ -809,6 +816,7 @@ void SingleThreadProxy::SendBeginMainFrameNotExpectedSoon() { |
void SingleThreadProxy::BeginMainFrame() { |
commit_requested_ = false; |
+ animate_requested_ = false; |
if (defer_commits_) { |
TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit", |
@@ -837,7 +845,9 @@ void SingleThreadProxy::BeginMainFrame() { |
return; |
} |
- // Prevent new commits from being requested inside DoBeginMainFrame. |
+ // Prevent new commits from being requested inside DoBeginMainFrame. But don't |
+ // do the same for animate_requested_ because animations can request a new |
+ // frame inside of the commit. |
commit_requested_ = true; |
const BeginFrameArgs& begin_frame_args = |