| Index: cc/trees/thread_proxy.cc
|
| diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
|
| index 931923f225352e5e301785de9794bf0613533298..a33bd7a50b0f0c706a6c990eebaab0d3caa8ecd7 100644
|
| --- a/cc/trees/thread_proxy.cc
|
| +++ b/cc/trees/thread_proxy.cc
|
| @@ -81,7 +81,7 @@ ThreadProxy::ThreadProxy(
|
| LayerTreeHost* layer_tree_host,
|
| scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
|
| : Proxy(impl_task_runner),
|
| - animate_requested_(false),
|
| + update_requested_(false),
|
| commit_requested_(false),
|
| commit_request_sent_to_impl_thread_(false),
|
| created_offscreen_context_provider_(false),
|
| @@ -350,24 +350,14 @@ const RendererCapabilities& ThreadProxy::GetRendererCapabilities() const {
|
| return renderer_capabilities_main_thread_copy_;
|
| }
|
|
|
| -void ThreadProxy::SetNeedsAnimate() {
|
| - DCHECK(IsMainThread());
|
| - if (animate_requested_)
|
| - return;
|
| -
|
| - TRACE_EVENT0("cc", "ThreadProxy::SetNeedsAnimate");
|
| - animate_requested_ = true;
|
| - can_cancel_commit_ = false;
|
| - SendCommitRequestToImplThreadIfNeeded();
|
| -}
|
| -
|
| void ThreadProxy::SetNeedsUpdateLayers() {
|
| DCHECK(IsMainThread());
|
|
|
| - if (commit_request_sent_to_impl_thread_)
|
| + if (update_requested_)
|
| return;
|
| TRACE_EVENT0("cc", "ThreadProxy::SetNeedsUpdateLayers");
|
|
|
| + update_requested_ = true;
|
| SendCommitRequestToImplThreadIfNeeded();
|
| }
|
|
|
| @@ -785,10 +775,10 @@ void ThreadProxy::BeginMainFrame(
|
| commit_requested_ = true;
|
| commit_request_sent_to_impl_thread_ = true;
|
|
|
| - // On the other hand, the AnimationRequested flag needs to be cleared
|
| - // here so that any animation requests generated by the apply or animate
|
| + // On the other hand, the update_requested_ flag needs to be cleared
|
| + // here so that any update requests generated by the apply or animate
|
| // callbacks will trigger another frame.
|
| - animate_requested_ = false;
|
| + update_requested_ = false;
|
|
|
| if (!in_composite_and_readback_ && !layer_tree_host()->visible()) {
|
| commit_requested_ = false;
|
| @@ -851,7 +841,8 @@ void ThreadProxy::BeginMainFrame(
|
| bool can_cancel_this_commit =
|
| can_cancel_commit_ &&
|
| !in_composite_and_readback_ &&
|
| - !evicted_ui_resources;
|
| + !evicted_ui_resources &&
|
| + !layer_tree_host()->next_commit_forces_redraw();
|
| can_cancel_commit_ = true;
|
|
|
| scoped_ptr<ResourceUpdateQueue> queue =
|
| @@ -865,6 +856,17 @@ void ThreadProxy::BeginMainFrame(
|
|
|
| layer_tree_host()->WillCommit();
|
|
|
| + // Before calling animate, we set update_requested_ to false. If it is true
|
| + // now, it means SetNeedsUpdateLayers was called again. Depending on during
|
| + // which phase of the commit SetNeedsUpdateLayers was called,
|
| + // commit_request_sent_to_impl_thread_ may be already cleared or not.
|
| + // We call SetNeedsUpdateLayers here to make sure a commit always gets posted.
|
| + if (update_requested_) {
|
| + // Forces SetNeedsUpdateLayers to consider posting a commit task.
|
| + update_requested_ = false;
|
| + SetNeedsUpdateLayers();
|
| + }
|
| +
|
| if (!updated && can_cancel_this_commit) {
|
| TRACE_EVENT0("cc", "EarlyOut_NoUpdates");
|
| bool did_handle = true;
|
| @@ -882,16 +884,6 @@ void ThreadProxy::BeginMainFrame(
|
| return;
|
| }
|
|
|
| - // Before calling animate, we set animate_requested_ to false. If it is true
|
| - // now, it means SetNeedAnimate was called again, but during a state when
|
| - // commit_request_sent_to_impl_thread_ = true. We need to force that call to
|
| - // happen again now so that the commit request is sent to the impl thread.
|
| - if (animate_requested_) {
|
| - // Forces SetNeedsAnimate to consider posting a commit task.
|
| - animate_requested_ = false;
|
| - SetNeedsAnimate();
|
| - }
|
| -
|
| scoped_refptr<ContextProvider> offscreen_context_provider;
|
| if (renderer_capabilities_main_thread_copy_.using_offscreen_context3d &&
|
| layer_tree_host()->needs_offscreen_context()) {
|
|
|