| 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..32cc8d1a4de9b85bde117fc05a2975615f2e386b 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() {
|
| + InsideHardwareReleaseReset inside_reset(&shared_renderer_state_);
|
|
|
| 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();
|
|
|
| @@ -1132,6 +1135,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);
|
| }
|
|
|
|
|