| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index 962e8569b21753acf8a39184c9bd3d7779656184..cb4c109c755da9f4561faf5bda244e6551fbcdb5 100644
|
| --- a/content/renderer/render_thread_impl.cc
|
| +++ b/content/renderer/render_thread_impl.cc
|
| @@ -560,21 +560,30 @@ void RenderThreadImpl::ScheduleIdleHandler(double initial_delay_s) {
|
| void RenderThreadImpl::IdleHandler() {
|
| #if !defined(OS_MACOSX) && defined(USE_TCMALLOC)
|
| MallocExtension::instance()->ReleaseFreeMemory();
|
| -#endif
|
| -
|
| - v8::V8::IdleNotification();
|
| + #endif
|
|
|
| - // Schedule next invocation.
|
| - // Dampen the delay using the algorithm:
|
| - // delay = delay + 1 / (delay + 2)
|
| - // Using floor(delay) has a dampening effect such as:
|
| - // 1s, 1, 1, 2, 2, 2, 2, 3, 3, ...
|
| - // Note that idle_notification_delay_in_s_ would be reset to
|
| - // kInitialIdleHandlerDelayS in RenderThreadImpl::WidgetHidden.
|
| - ScheduleIdleHandler(idle_notification_delay_in_s_ +
|
| - 1.0 / (idle_notification_delay_in_s_ + 2.0));
|
| -
|
| - FOR_EACH_OBSERVER(RenderProcessObserver, observers_, IdleNotification());
|
| + if (hidden_widget_count_ < widget_count_ &&
|
| + content::GetContentClient()->renderer()->RunIdleHandlerWhenUserIdle()) {
|
| + if (!v8::V8::IdleNotification()) {
|
| + ScheduleIdleHandler(kInitialIdleHandlerDelayS);
|
| + } else {
|
| + idle_timer_.Stop();
|
| + }
|
| + } else {
|
| + v8::V8::IdleNotification();
|
| +
|
| + // Schedule next invocation.
|
| + // Dampen the delay using the algorithm:
|
| + // delay = delay + 1 / (delay + 2)
|
| + // Using floor(delay) has a dampening effect such as:
|
| + // 1s, 1, 1, 2, 2, 2, 2, 3, 3, ...
|
| + // Note that idle_notification_delay_in_s_ would be reset to
|
| + // kInitialIdleHandlerDelayS in RenderThreadImpl::WidgetHidden.
|
| + ScheduleIdleHandler(idle_notification_delay_in_s_ +
|
| + 1.0 / (idle_notification_delay_in_s_ + 2.0));
|
| +
|
| + FOR_EACH_OBSERVER(RenderProcessObserver, observers_, IdleNotification());
|
| + }
|
| }
|
|
|
| double RenderThreadImpl::GetIdleNotificationDelayInS() const {
|
| @@ -789,3 +798,4 @@ RenderThreadImpl::GetFileThreadMessageLoopProxy() {
|
| }
|
| return file_thread_->message_loop_proxy();
|
| }
|
| +
|
|
|