Index: chrome/browser/renderer_host/backing_store.cc |
diff --git a/chrome/browser/renderer_host/backing_store.cc b/chrome/browser/renderer_host/backing_store.cc |
index 8f8a1c98f925ad728b3a48362239911983bf870e..b354e5944822ca803a586c1cb126b1e131ff28fe 100644 |
--- a/chrome/browser/renderer_host/backing_store.cc |
+++ b/chrome/browser/renderer_host/backing_store.cc |
@@ -4,7 +4,9 @@ |
#include "chrome/browser/renderer_host/backing_store.h" |
+#include "base/sys_info.h" |
#include "chrome/browser/renderer_host/render_widget_host.h" |
+#include "chrome/common/chrome_constants.h" |
namespace { |
@@ -12,11 +14,20 @@ typedef OwningMRUCache<RenderWidgetHost*, BackingStore*> BackingStoreCache; |
static BackingStoreCache* cache = NULL; |
// Returns the size of the backing store cache. |
-// TODO(iyengar) Make this dynamic, i.e. based on the available resources |
-// on the machine. |
static int GetBackingStoreCacheSize() { |
- const int kMaxSize = 5; |
- return kMaxSize; |
+ // This uses a similar approach to GetMaxRendererProcessCount. The goal |
+ // is to reduce memory pressure and swapping on low-resource machines. |
+ static const int kMaxDibCountByRamTier[] = { |
+ 2, // less than 256MB |
+ 3, // 256MB |
+ 4, // 512MB |
+ 5 // 768MB and above |
+ }; |
+ |
+ static int max_size = kMaxDibCountByRamTier[ |
+ std::min(base::SysInfo::AmountOfPhysicalMemoryMB() / 256, |
+ static_cast<int>(arraysize(kMaxDibCountByRamTier)) - 1)]; |
+ return max_size; |
} |
// Creates the backing store for the host based on the dimensions passed in. |