Chromium Code Reviews| Index: android_webview/native/aw_contents.cc |
| diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc |
| index 37e05a588c0e6b0a7255f557b1981848b15de928..084aed52986bb00ca9c1caff9c9aec0ebb793bc2 100644 |
| --- a/android_webview/native/aw_contents.cc |
| +++ b/android_webview/native/aw_contents.cc |
| @@ -356,7 +356,7 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
| : ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT); |
| ScopedAllowGL allow_gl; |
| - if (!shared_renderer_state_.IsHardwareAllowed()) { |
| + if (shared_renderer_state_.IsInsideHardwareRelease()) { |
| hardware_renderer_.reset(); |
| return; |
| } |
| @@ -843,7 +843,6 @@ void AwContents::SetIsPaused(JNIEnv* env, jobject obj, bool paused) { |
| void AwContents::OnAttachedToWindow(JNIEnv* env, jobject obj, int w, int h) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - shared_renderer_state_.SetHardwareAllowed(true); |
| browser_view_renderer_.OnAttachedToWindow(w, h); |
| } |
| @@ -859,7 +858,12 @@ void AwContents::InitializeHardwareDrawIfNeeded() { |
| void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - shared_renderer_state_.SetHardwareAllowed(false); |
| + ReleaseHardwareDrawIfNeeded(); |
| + browser_view_renderer_.OnDetachedFromWindow(); |
| +} |
| + |
| +void AwContents::ReleaseHardwareDrawIfNeeded() { |
| + shared_renderer_state_.SetInsideHardwareRelease(true); |
|
hush (inactive)
2014/07/21 21:14:04
how about base::AutoReset on a boolean member vari
boliu
2014/07/21 22:34:32
That's not thread safe, although something like au
hush (inactive)
2014/07/21 22:54:37
Okay. lgtm
On 2014/07/21 22:34:32, boliu wrote:
|
| bool hardware_initialized = browser_view_renderer_.hardware_enabled(); |
| if (hardware_initialized) { |
| @@ -871,10 +875,9 @@ void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) { |
| info.mode = AwDrawGLInfo::kModeProcess; |
| DrawGL(&info); |
| } |
| + browser_view_renderer_.ReleaseHardware(); |
| } |
| - |
| DCHECK(!hardware_renderer_); |
| - browser_view_renderer_.OnDetachedFromWindow(); |
| GLViewRendererManager* manager = GLViewRendererManager::GetInstance(); |
| @@ -890,6 +893,8 @@ void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) { |
| // Flush any invoke functors that's caused by OnDetachedFromWindow. |
| RequestDrawGL(NULL, true); |
| } |
| + |
| + shared_renderer_state_.SetInsideHardwareRelease(false); |
| } |
| base::android::ScopedJavaLocalRef<jbyteArray> |
| @@ -1132,6 +1137,14 @@ void AwContents::TrimMemory(JNIEnv* env, |
| jint level, |
| jboolean visible) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + enum { |
| + TRIM_MEMORY_MODERATE = 60, |
| + }; |
| + if (level >= TRIM_MEMORY_MODERATE) { |
| + ReleaseHardwareDrawIfNeeded(); |
| + return; |
| + } |
| + |
| browser_view_renderer_.TrimMemory(level, visible); |
| } |