From 9a48cbf9d3a95b322fc4af97df4b4a0368013523 Mon Sep 17 00:00:00 2001 From: "deanm@chromium.org" Date: Fri, 29 May 2009 14:05:32 +0000 Subject: Scale backing store cache size. The approach is borrowed from render_process_host's kMaxRenderersByRamTier. The values were chosen to keep a minimal number of DIBs in the extreme low RAM case, and scale up linearly from there to the previous (constant) value of 5. Patch by Joel Stanley. BUG=12028 Review URL: http://codereview.chromium.org/115452 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17183 0039d316-1c4b-4281-b951-d872f2087c98 --- AUTHORS | 1 + chrome/browser/renderer_host/backing_store.cc | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/AUTHORS b/AUTHORS index 182aa64..f907400 100644 --- a/AUTHORS +++ b/AUTHORS @@ -39,3 +39,4 @@ Robert Sesek Janwar Dinata Will Hirsch Yoav Zilberberg +Joel Stanley diff --git a/chrome/browser/renderer_host/backing_store.cc b/chrome/browser/renderer_host/backing_store.cc index 8f8a1c9..1516e8b 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 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::max(base::SysInfo::AmountOfPhysicalMemoryMB() / 256, + static_cast(arraysize(kMaxDibCountByRamTier)) - 1)]; + return max_size; } // Creates the backing store for the host based on the dimensions passed in. -- cgit v1.1