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