Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: content/renderer/render_thread_impl.cc

Issue 336273003: base: Add soft memory limit to DiscardableMemoryManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix mac build Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/memory/discardable_memory_win.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_thread_impl.h" 5 #include "content/renderer/render_thread_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <vector> 10 #include <vector>
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 946
947 base::allocator::ReleaseFreeMemory(); 947 base::allocator::ReleaseFreeMemory();
948 948
949 // Continue the idle timer if the webkit shared timer is not suspended or 949 // Continue the idle timer if the webkit shared timer is not suspended or
950 // something is left to do. 950 // something is left to do.
951 bool continue_timer = !webkit_shared_timer_suspended_; 951 bool continue_timer = !webkit_shared_timer_suspended_;
952 952
953 if (!v8::V8::IdleNotification()) { 953 if (!v8::V8::IdleNotification()) {
954 continue_timer = true; 954 continue_timer = true;
955 } 955 }
956 if (!base::DiscardableMemory::ReduceMemoryUsage()) {
957 continue_timer = true;
958 }
956 959
957 // Schedule next invocation. 960 // Schedule next invocation.
958 // Dampen the delay using the algorithm (if delay is in seconds): 961 // Dampen the delay using the algorithm (if delay is in seconds):
959 // delay = delay + 1 / (delay + 2) 962 // delay = delay + 1 / (delay + 2)
960 // Using floor(delay) has a dampening effect such as: 963 // Using floor(delay) has a dampening effect such as:
961 // 1s, 1, 1, 2, 2, 2, 2, 3, 3, ... 964 // 1s, 1, 1, 2, 2, 2, 2, 3, 3, ...
962 // If the delay is in milliseconds, the above formula is equivalent to: 965 // If the delay is in milliseconds, the above formula is equivalent to:
963 // delay_ms / 1000 = delay_ms / 1000 + 1 / (delay_ms / 1000 + 2) 966 // delay_ms / 1000 = delay_ms / 1000 + 1 / (delay_ms / 1000 + 2)
964 // which is equivalent to 967 // which is equivalent to
965 // delay_ms = delay_ms + 1000*1000 / (delay_ms + 2000). 968 // delay_ms = delay_ms + 1000*1000 / (delay_ms + 2000).
(...skipping 21 matching lines...) Expand all
987 if (idle_notifications_to_skip_ > 0) { 990 if (idle_notifications_to_skip_ > 0) {
988 idle_notifications_to_skip_--; 991 idle_notifications_to_skip_--;
989 } else { 992 } else {
990 int cpu_usage = 0; 993 int cpu_usage = 0;
991 Send(new ViewHostMsg_GetCPUUsage(&cpu_usage)); 994 Send(new ViewHostMsg_GetCPUUsage(&cpu_usage));
992 // Idle notification hint roughly specifies the expected duration of the 995 // Idle notification hint roughly specifies the expected duration of the
993 // idle pause. We set it proportional to the idle timer delay. 996 // idle pause. We set it proportional to the idle timer delay.
994 int idle_hint = static_cast<int>(new_delay_ms / 10); 997 int idle_hint = static_cast<int>(new_delay_ms / 10);
995 if (cpu_usage < kIdleCPUUsageThresholdInPercents) { 998 if (cpu_usage < kIdleCPUUsageThresholdInPercents) {
996 base::allocator::ReleaseFreeMemory(); 999 base::allocator::ReleaseFreeMemory();
997 if (v8::V8::IdleNotification(idle_hint)) { 1000
998 // V8 finished collecting garbage. 1001 bool finished_idle_work = true;
1002 if (!v8::V8::IdleNotification(idle_hint))
1003 finished_idle_work = false;
1004 if (!base::DiscardableMemory::ReduceMemoryUsage())
1005 finished_idle_work = false;
1006
1007 // V8 finished collecting garbage and discardable memory system has no
1008 // more idle work left.
1009 if (finished_idle_work)
999 new_delay_ms = kLongIdleHandlerDelayMs; 1010 new_delay_ms = kLongIdleHandlerDelayMs;
1000 }
1001 } 1011 }
1002 } 1012 }
1003 ScheduleIdleHandler(new_delay_ms); 1013 ScheduleIdleHandler(new_delay_ms);
1004 } 1014 }
1005 1015
1006 int64 RenderThreadImpl::GetIdleNotificationDelayInMs() const { 1016 int64 RenderThreadImpl::GetIdleNotificationDelayInMs() const {
1007 return idle_notification_delay_in_ms_; 1017 return idle_notification_delay_in_ms_;
1008 } 1018 }
1009 1019
1010 void RenderThreadImpl::SetIdleNotificationDelayInMs( 1020 void RenderThreadImpl::SetIdleNotificationDelayInMs(
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 hidden_widget_count_--; 1575 hidden_widget_count_--;
1566 1576
1567 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { 1577 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) {
1568 return; 1578 return;
1569 } 1579 }
1570 1580
1571 ScheduleIdleHandler(kLongIdleHandlerDelayMs); 1581 ScheduleIdleHandler(kLongIdleHandlerDelayMs);
1572 } 1582 }
1573 1583
1574 } // namespace content 1584 } // namespace content
OLDNEW
« no previous file with comments | « base/memory/discardable_memory_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698