diff options
author | Teng-Hui Zhu <ztenghui@google.com> | 2012-01-27 13:10:30 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-01-27 13:10:30 -0800 |
commit | d20973e94e7db71c38eb5c0885b3c4f225bc6384 (patch) | |
tree | 1ff00a0edec7cce94d252e2c513acddd366f3b24 /Source/WebKit/android/nav | |
parent | fa53c5bbe6d719d32a95e7c694e476c8b9002107 (diff) | |
parent | e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147d (diff) | |
download | external_webkit-d20973e94e7db71c38eb5c0885b3c4f225bc6384.zip external_webkit-d20973e94e7db71c38eb5c0885b3c4f225bc6384.tar.gz external_webkit-d20973e94e7db71c38eb5c0885b3c4f225bc6384.tar.bz2 |
Merge "Clean up tranfer queue before EGL context destroy"
Diffstat (limited to 'Source/WebKit/android/nav')
-rw-r--r-- | Source/WebKit/android/nav/WebView.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp index 78881a9..6c49bb7 100644 --- a/Source/WebKit/android/nav/WebView.cpp +++ b/Source/WebKit/android/nav/WebView.cpp @@ -450,8 +450,9 @@ bool drawGL(WebCore::IntRect& viewRect, WebCore::IntRect* invalRect, return false; if (!m_glWebViewState) { + TilesManager::instance()->setHighEndGfx(m_isHighEndGfx); + m_glWebViewState = new GLWebViewState(); - m_glWebViewState->setHighEndGfx(m_isHighEndGfx); m_glWebViewState->glExtras()->setCursorRingExtra(&m_ring); m_glWebViewState->glExtras()->setFindOnPageExtra(&m_findOnPage); if (m_baseLayer->content()) { @@ -2640,6 +2641,14 @@ static jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring jkey) static void nativeOnTrimMemory(JNIEnv *env, jobject obj, jint level) { if (TilesManager::hardwareAccelerationEnabled()) { + // When we got TRIM_MEMORY_MODERATE or TRIM_MEMORY_COMPLETE, we should + // make sure the transfer queue is empty and then abandon the Surface + // Texture to avoid ANR b/c framework may destroy the EGL context. + // Refer to WindowManagerImpl.java for conditions we followed. + if (level >= TRIM_MEMORY_MODERATE + && !TilesManager::instance()->highEndGfx()) + TilesManager::instance()->transferQueue()->emptyQueue(); + bool freeAllTextures = (level > TRIM_MEMORY_UI_HIDDEN), glTextures = true; TilesManager::instance()->discardTextures(freeAllTextures, glTextures); } |