diff options
Diffstat (limited to 'Source/WebKit/android/nav/WebView.cpp')
-rw-r--r-- | Source/WebKit/android/nav/WebView.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp index 8835f70..a528e9a 100644 --- a/Source/WebKit/android/nav/WebView.cpp +++ b/Source/WebKit/android/nav/WebView.cpp @@ -75,6 +75,15 @@ #include <wtf/text/AtomicString.h> #include <wtf/text/CString.h> +// Free as much as we possible can +#define TRIM_MEMORY_COMPLETE 80 +// Free a lot (all textures gone) +#define TRIM_MEMORY_MODERATE 60 +// More moderate free (keep bare minimum to restore quickly-ish - possibly clear all textures) +#define TRIM_MEMORY_BACKGROUND 40 +// Moderate free (clear cached tiles, keep visible ones) +#define TRIM_MEMORY_UI_HIDDEN 20 + namespace android { static jfieldID gWebViewField; @@ -1581,7 +1590,6 @@ class GLDrawFunctor : Functor { WebCore::IntRect clip(info->clipLeft, info->clipTop, info->clipRight - info->clipLeft, info->clipBottom - info->clipTop); - TilesManager::instance()->shader()->setWebViewMatrix(info->transform); bool retVal = (*wvInstance.*funcPtr)(localViewRect, &inval, webViewRect, titlebarHeight, clip, scale, extras); if (retVal) { @@ -2563,6 +2571,14 @@ static jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring key) return 0; } +static void nativeOnTrimMemory(JNIEnv *env, jobject obj, jint level) +{ + if (TilesManager::hardwareAccelerationEnabled()) { + bool freeAllTextures = (level > TRIM_MEMORY_UI_HIDDEN); + TilesManager::instance()->deallocateTextures(freeAllTextures); + } +} + static void nativeDumpDisplayTree(JNIEnv* env, jobject jwebview, jstring jurl) { #ifdef ANDROID_DUMP_DISPLAY_TREE @@ -2866,6 +2882,8 @@ static JNINativeMethod gJavaWebViewMethods[] = { (void*) nativeSetProperty }, { "nativeGetProperty", "(Ljava/lang/String;)Ljava/lang/String;", (void*) nativeGetProperty }, + { "nativeOnTrimMemory", "(I)V", + (void*) nativeOnTrimMemory }, }; int registerWebView(JNIEnv* env) |