| Index: content/renderer/render_thread_impl.cc
|
| ===================================================================
|
| --- content/renderer/render_thread_impl.cc (revision 283285)
|
| +++ content/renderer/render_thread_impl.cc (working copy)
|
| @@ -899,6 +899,9 @@
|
| if (!v8::V8::IdleNotification()) {
|
| continue_timer = true;
|
| }
|
| + if (!base::DiscardableMemory::ReduceMemoryUsage()) {
|
| + continue_timer = true;
|
| + }
|
|
|
| // Schedule next invocation.
|
| // Dampen the delay using the algorithm (if delay is in seconds):
|
| @@ -940,10 +943,17 @@
|
| int idle_hint = static_cast<int>(new_delay_ms / 10);
|
| if (cpu_usage < kIdleCPUUsageThresholdInPercents) {
|
| base::allocator::ReleaseFreeMemory();
|
| - if (v8::V8::IdleNotification(idle_hint)) {
|
| - // V8 finished collecting garbage.
|
| +
|
| + bool finished_idle_work = true;
|
| + if (!v8::V8::IdleNotification(idle_hint))
|
| + finished_idle_work = false;
|
| + if (!base::DiscardableMemory::ReduceMemoryUsage())
|
| + finished_idle_work = false;
|
| +
|
| + // V8 finished collecting garbage and discardable memory system has no
|
| + // more idle work left.
|
| + if (finished_idle_work)
|
| new_delay_ms = kLongIdleHandlerDelayMs;
|
| - }
|
| }
|
| }
|
| ScheduleIdleHandler(new_delay_ms);
|
|
|