diff options
author | Ben Murdoch <benm@google.com> | 2010-11-09 18:17:50 +0000 |
---|---|---|
committer | Russell Brenner <russellbrenner@google.com> | 2010-12-02 13:47:22 -0800 |
commit | e02b67f8cfa87b8e952bcae834e4f3d3937fcc98 (patch) | |
tree | 0971d84e250a354d4f741f0b42fc284d21da9ca0 /WebKit/android/WebCoreSupport/MemoryUsage.cpp | |
parent | 1c7e3f51abb8590ac714e6ceeb9a5931365053ea (diff) | |
download | external_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.cpp | 81 |
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; + |