summaryrefslogtreecommitdiffstats
path: root/WebKit/android/WebCoreSupport/MemoryUsage.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-11-09 18:17:50 +0000
committerRussell Brenner <russellbrenner@google.com>2010-12-02 13:47:22 -0800
commite02b67f8cfa87b8e952bcae834e4f3d3937fcc98 (patch)
tree0971d84e250a354d4f741f0b42fc284d21da9ca0 /WebKit/android/WebCoreSupport/MemoryUsage.cpp
parent1c7e3f51abb8590ac714e6ceeb9a5931365053ea (diff)
downloadexternal_webkit-e02b67f8cfa87b8e952bcae834e4f3d3937fcc98.zip
external_webkit-e02b67f8cfa87b8e952bcae834e4f3d3937fcc98.tar.gz
external_webkit-e02b67f8cfa87b8e952bcae834e4f3d3937fcc98.tar.bz2
Merge WebKit at r72274: Implement PlatformBridge memory management methods for WebKit change 71639
Get device class specific memory constraints for V8. V8 can be more efficient in terms of memory management but to do so needs to know about what resources are available to it. This varies device to device on Android so add implement the functions that the the PlatformBridge needs to query the relevant values from Java. MemoryUsage.cpp will compile for JSC, but needs tuning to report correct JSC stats. It's currently a non-issue, as this routine is only used with V8, at present. Requires a frameworks/base change: https://android-git.corp.google.com/g/#change,78690 Bug: 3075565 Requires a previously upstreamed webkit change: http://trac.webkit.org/changeset/71639 Change-Id: I25ff54b5c8e25f5de5380e0d43e56551587adc5d
Diffstat (limited to 'WebKit/android/WebCoreSupport/MemoryUsage.cpp')
-rw-r--r--WebKit/android/WebCoreSupport/MemoryUsage.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/WebKit/android/WebCoreSupport/MemoryUsage.cpp b/WebKit/android/WebCoreSupport/MemoryUsage.cpp
new file mode 100644
index 0000000..f799a18
--- /dev/null
+++ b/WebKit/android/WebCoreSupport/MemoryUsage.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010 The Android Open Source Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "MemoryUsage.h"
+
+#include <malloc.h>
+#include <wtf/CurrentTime.h>
+
+#if USE(V8)
+#include <v8.h>
+#endif // USE(V8)
+
+using namespace WTF;
+
+class MemoryUsageCache {
+public:
+ MemoryUsageCache()
+ : m_cachedMemoryUsage(0)
+ , m_cacheTime(0)
+ {
+ }
+
+ int getCachedMemoryUsage(bool forceFresh);
+
+private:
+ unsigned m_cachedMemoryUsage;
+ double m_cacheTime;
+ static const int CACHE_VALIDITY_MS = 2000;
+};
+
+int MemoryUsageCache::getCachedMemoryUsage(bool forceFresh)
+{
+ if (!forceFresh && currentTimeMS() <= m_cacheTime + CACHE_VALIDITY_MS)
+ return m_cachedMemoryUsage;
+
+ struct mallinfo minfo = mallinfo();
+ m_cachedMemoryUsage = (minfo.hblkhd + minfo.arena) >> 20;
+
+#if USE(V8)
+ v8::HeapStatistics stat;
+ v8::V8::GetHeapStatistics(&stat);
+ unsigned v8Usage = stat.total_heap_size() >> 20;
+ m_cachedMemoryUsage += v8Usage;
+#endif // USE(V8)
+
+ m_cacheTime = currentTimeMS();
+ return m_cachedMemoryUsage;
+}
+
+int MemoryUsage::memoryUsageMb(bool forceFresh)
+{
+ static MemoryUsageCache cache;
+ return cache.getCachedMemoryUsage(forceFresh);
+}
+
+int MemoryUsage::m_lowMemoryUsageMb = 0;
+int MemoryUsage::m_highMemoryUsageMb = 0;
+