| Index: cc/trees/thread_proxy.cc
|
| diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
|
| index d727ace7569bd495b4ae9ece9d60feac28f0fecf..f14e38b92f41602c0f22f46bf9991a29725ee8ac 100644
|
| --- a/cc/trees/thread_proxy.cc
|
| +++ b/cc/trees/thread_proxy.cc
|
| @@ -116,7 +116,11 @@ ThreadProxy::CompositorThreadOnly::CompositorThreadOnly(ThreadProxy* proxy,
|
| input_throttled_until_commit(false),
|
| animations_frozen_until_next_draw(false),
|
| did_commit_after_animating(false),
|
| - renew_tree_priority_pending(false),
|
| + smoothness_priority_expiration_notifier(
|
| + proxy->ImplThreadTaskRunner(),
|
| + base::Bind(&ThreadProxy::RenewTreePriority, base::Unretained(proxy)),
|
| + base::TimeDelta::FromMilliseconds(
|
| + kSmoothnessTakesPriorityExpirationDelay * 1000)),
|
| weak_factory(proxy) {
|
| }
|
|
|
| @@ -1401,20 +1405,15 @@ void ThreadProxy::RenewTreePriority() {
|
| (impl().layer_tree_host_impl->IsCurrentlyScrolling() &&
|
| !impl().layer_tree_host_impl->scroll_affects_scroll_handler());
|
|
|
| - base::TimeTicks now = impl().layer_tree_host_impl->CurrentFrameTimeTicks();
|
| -
|
| - // Update expiration time if smoothness currently takes priority.
|
| - if (smoothness_takes_priority) {
|
| - impl().smoothness_takes_priority_expiration_time =
|
| - now + base::TimeDelta::FromMilliseconds(
|
| - kSmoothnessTakesPriorityExpirationDelay * 1000);
|
| - }
|
| + // Schedule expiration if smoothness currently takes priority.
|
| + if (smoothness_takes_priority)
|
| + impl().smoothness_priority_expiration_notifier.Schedule();
|
|
|
| // We use the same priority for both trees by default.
|
| TreePriority priority = SAME_PRIORITY_FOR_BOTH_TREES;
|
|
|
| - // Smoothness takes priority if expiration time is in the future.
|
| - if (impl().smoothness_takes_priority_expiration_time > now)
|
| + // Smoothness takes priority if we have an expiration for it scheduled.
|
| + if (impl().smoothness_priority_expiration_notifier.HasPendingNotification())
|
| priority = SMOOTHNESS_TAKES_PRIORITY;
|
|
|
| // New content always takes priority when the active tree has
|
| @@ -1442,31 +1441,6 @@ void ThreadProxy::RenewTreePriority() {
|
| .layer_tree_host_impl->output_surface()
|
| ->UpdateSmoothnessTakesPriority(priority == SMOOTHNESS_TAKES_PRIORITY);
|
| }
|
| -
|
| - base::TimeDelta delay =
|
| - impl().smoothness_takes_priority_expiration_time - now;
|
| -
|
| - // Need to make sure a delayed task is posted when we have smoothness
|
| - // takes priority expiration time in the future.
|
| - if (delay <= base::TimeDelta())
|
| - return;
|
| - if (impl().renew_tree_priority_pending)
|
| - return;
|
| -
|
| - Proxy::ImplThreadTaskRunner()->PostDelayedTask(
|
| - FROM_HERE,
|
| - base::Bind(&ThreadProxy::RenewTreePriorityOnImplThread,
|
| - impl_thread_weak_ptr_),
|
| - delay);
|
| -
|
| - impl().renew_tree_priority_pending = true;
|
| -}
|
| -
|
| -void ThreadProxy::RenewTreePriorityOnImplThread() {
|
| - DCHECK(impl().renew_tree_priority_pending);
|
| - impl().renew_tree_priority_pending = false;
|
| -
|
| - RenewTreePriority();
|
| }
|
|
|
| void ThreadProxy::PostDelayedScrollbarFadeOnImplThread(
|
|
|