diff options
author | ulan@chromium.org <ulan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-25 15:31:37 +0000 |
---|---|---|
committer | ulan@chromium.org <ulan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-25 15:31:37 +0000 |
commit | 5702108f1a94abd517bae415c335404b1a0397b7 (patch) | |
tree | fbd1cefa9a60f1ed840604f0c785615767e31d84 /webkit/glue | |
parent | 72f8b1933c2b845adb359de1f841de108055a96e (diff) | |
download | chromium_src-5702108f1a94abd517bae415c335404b1a0397b7.zip chromium_src-5702108f1a94abd517bae415c335404b1a0397b7.tar.gz chromium_src-5702108f1a94abd517bae415c335404b1a0397b7.tar.bz2 |
Set Android/V8 memory limits from dalvik.vm.heapsize.
Fix memory usage computation for Android.
BUG=b/6182964
Review URL: https://chromiumcodereview.appspot.com/10113009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139038 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/webkitplatformsupport_impl.cc | 49 | ||||
-rw-r--r-- | webkit/glue/webkitplatformsupport_impl.h | 9 |
2 files changed, 39 insertions, 19 deletions
diff --git a/webkit/glue/webkitplatformsupport_impl.cc b/webkit/glue/webkitplatformsupport_impl.cc index 73e2e08..6003cce 100644 --- a/webkit/glue/webkitplatformsupport_impl.cc +++ b/webkit/glue/webkitplatformsupport_impl.cc @@ -24,6 +24,7 @@ #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/synchronization/lock.h" +#include "base/sys_info.h" #include "base/time.h" #include "base/utf_string_conversions.h" #include "grit/webkit_chromium_resources.h" @@ -668,8 +669,8 @@ WebKit::WebString WebKitPlatformSupportImpl::signedPublicKeyAndChallengeString( return WebKit::WebString(""); } -#if defined(OS_LINUX) -static size_t memoryUsageMBLinux() { +#if defined(OS_LINUX) || defined(OS_ANDROID) +static size_t memoryUsageMB() { struct mallinfo minfo = mallinfo(); uint64_t mem_usage = #if defined(USE_TCMALLOC) @@ -683,10 +684,8 @@ static size_t memoryUsageMBLinux() { v8::V8::GetHeapStatistics(&stat); return mem_usage + (static_cast<uint64_t>(stat.total_heap_size()) >> 20); } -#endif - -#if defined(OS_MACOSX) -static size_t memoryUsageMBMac() { +#elif defined(OS_MACOSX) +static size_t memoryUsageMB() { using base::ProcessMetrics; static ProcessMetrics* process_metrics = // The default port provider is sufficient to get data for the current @@ -696,10 +695,8 @@ static size_t memoryUsageMBMac() { DCHECK(process_metrics); return process_metrics->GetWorkingSetSize() >> 20; } -#endif - -#if !defined(OS_LINUX) && !defined(OS_MACOSX) -static size_t memoryUsageMBGeneric() { +#else +static size_t memoryUsageMB() { using base::ProcessMetrics; static ProcessMetrics* process_metrics = ProcessMetrics::CreateProcessMetrics(base::GetCurrentProcessHandle()); @@ -715,14 +712,7 @@ static size_t getMemoryUsageMB(bool bypass_cache) { mem_usage_cache_singleton->IsCachedValueValid(¤t_mem_usage)) return current_mem_usage; - current_mem_usage = -#if defined(OS_LINUX) - memoryUsageMBLinux(); -#elif defined(OS_MACOSX) - memoryUsageMBMac(); -#else - memoryUsageMBGeneric(); -#endif + current_mem_usage = memoryUsageMB(); mem_usage_cache_singleton->SetMemoryValue(current_mem_usage); return current_mem_usage; } @@ -735,6 +725,29 @@ size_t WebKitPlatformSupportImpl::actualMemoryUsageMB() { return getMemoryUsageMB(true); } +#if defined(OS_ANDROID) +size_t WebKitPlatformSupportImpl::lowMemoryUsageMB() { + // If memory usage is below this threshold, do not bother forcing GC. + // Allow us to use up to our memory class value before V8's GC kicks in. + // These values have been determined by experimentation. + return base::SysInfo::DalvikHeapSizeMB() / 2; +} + +size_t WebKitPlatformSupportImpl::highMemoryUsageMB() { + // If memory usage is above this threshold, force GC more aggressively. + return base::SysInfo::DalvikHeapSizeMB() * 3 / 4; +} + +size_t WebKitPlatformSupportImpl::highUsageDeltaMB() { + // If memory usage is above highMemoryUsageMB() and memory usage increased by + // more than highUsageDeltaMB() since the last GC, then force GC. + // Note that this limit should be greater than the amount of memory for V8 + // internal data structures that are released on GC and reallocated during JS + // execution (about 8MB). Otherwise, it will cause too aggressive GCs. + return base::SysInfo::DalvikHeapSizeMB() / 8; +} +#endif + void WebKitPlatformSupportImpl::SuspendSharedTimer() { ++shared_timer_suspended_; } diff --git a/webkit/glue/webkitplatformsupport_impl.h b/webkit/glue/webkitplatformsupport_impl.h index 46dd048..635e1b2 100644 --- a/webkit/glue/webkitplatformsupport_impl.h +++ b/webkit/glue/webkitplatformsupport_impl.h @@ -18,7 +18,9 @@ #include "webkit/glue/webthemeengine_impl_win.h" #elif defined(OS_MACOSX) #include "webkit/glue/webthemeengine_impl_mac.h" -#elif defined(OS_POSIX) +#elif defined(OS_ANDROID) +#include "webkit/glue/webthemeengine_impl_android.h" +#elif defined(OS_POSIX) && !defined(OS_ANDROID) #include "webkit/glue/webthemeengine_impl_linux.h" #endif @@ -61,6 +63,11 @@ class WEBKIT_GLUE_EXPORT WebKitPlatformSupportImpl : const WebKit::WebURL& url); virtual size_t memoryUsageMB(); virtual size_t actualMemoryUsageMB(); +#if defined(OS_ANDROID) // Other OSes just use the default values. + virtual size_t lowMemoryUsageMB() OVERRIDE; + virtual size_t highMemoryUsageMB() OVERRIDE; + virtual size_t highUsageDeltaMB() OVERRIDE; +#endif virtual WebKit::WebURLLoader* createURLLoader(); virtual WebKit::WebSocketStreamHandle* createSocketStreamHandle(); virtual WebKit::WebString userAgent(const WebKit::WebURL& url); |