Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1804)

Side by Side Diff: android_webview/native/aw_contents.cc

Issue 349653004: Merge 279934 "aw: Fix hardware teardown race" (Closed) Base URL: svn://svn.chromium.org/chrome/branches/2062/src/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/native/aw_contents.h" 5 #include "android_webview/native/aw_contents.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "android_webview/browser/aw_browser_context.h" 9 #include "android_webview/browser/aw_browser_context.h"
10 #include "android_webview/browser/aw_browser_main_parts.h" 10 #include "android_webview/browser/aw_browser_main_parts.h"
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 } 351 }
352 352
353 ScopedAppGLStateRestore state_restore( 353 ScopedAppGLStateRestore state_restore(
354 draw_info->mode == AwDrawGLInfo::kModeDraw 354 draw_info->mode == AwDrawGLInfo::kModeDraw
355 ? ScopedAppGLStateRestore::MODE_DRAW 355 ? ScopedAppGLStateRestore::MODE_DRAW
356 : ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT); 356 : ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
357 ScopedAllowGL allow_gl; 357 ScopedAllowGL allow_gl;
358 358
359 if (!shared_renderer_state_.IsHardwareAllowed()) { 359 if (!shared_renderer_state_.IsHardwareAllowed()) {
360 hardware_renderer_.reset(); 360 hardware_renderer_.reset();
361 shared_renderer_state_.SetHardwareInitialized(false);
362 return; 361 return;
363 } 362 }
364 363
365 if (draw_info->mode != AwDrawGLInfo::kModeDraw) 364 if (draw_info->mode != AwDrawGLInfo::kModeDraw)
366 return; 365 return;
367 366
368 if (!hardware_renderer_) { 367 if (!hardware_renderer_) {
369 DCHECK(!shared_renderer_state_.IsHardwareInitialized());
370 hardware_renderer_.reset(new HardwareRenderer(&shared_renderer_state_)); 368 hardware_renderer_.reset(new HardwareRenderer(&shared_renderer_state_));
371 shared_renderer_state_.SetHardwareInitialized(true);
372 } 369 }
373 370
374 if (hardware_renderer_->DrawGL(state_restore.stencil_enabled(), 371 if (hardware_renderer_->DrawGL(state_restore.stencil_enabled(),
375 state_restore.framebuffer_binding_ext(), 372 state_restore.framebuffer_binding_ext(),
376 draw_info)) { 373 draw_info)) {
377 browser_view_renderer_.DidDrawDelegated(); 374 browser_view_renderer_.DidDrawDelegated();
378 } 375 }
379 } 376 }
380 377
381 namespace { 378 namespace {
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 if (renderer_manager_key_ == manager->NullKey()) { 856 if (renderer_manager_key_ == manager->NullKey()) {
860 renderer_manager_key_ = manager->PushBack(&shared_renderer_state_); 857 renderer_manager_key_ = manager->PushBack(&shared_renderer_state_);
861 DeferredGpuCommandService::SetInstance(); 858 DeferredGpuCommandService::SetInstance();
862 } 859 }
863 } 860 }
864 861
865 void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) { 862 void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) {
866 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 863 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
867 shared_renderer_state_.SetHardwareAllowed(false); 864 shared_renderer_state_.SetHardwareAllowed(false);
868 865
869 bool hardware_initialized = shared_renderer_state_.IsHardwareInitialized(); 866 bool hardware_initialized = browser_view_renderer_.hardware_enabled();
870 if (hardware_initialized) { 867 if (hardware_initialized) {
871 bool draw_functor_succeeded = RequestDrawGL(NULL, true); 868 bool draw_functor_succeeded = RequestDrawGL(NULL, true);
872 if (!draw_functor_succeeded) { 869 if (!draw_functor_succeeded) {
873 LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?"; 870 LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?";
874 // Calling release on wrong thread intentionally. 871 // Calling release on wrong thread intentionally.
875 AwDrawGLInfo info; 872 AwDrawGLInfo info;
876 info.mode = AwDrawGLInfo::kModeProcess; 873 info.mode = AwDrawGLInfo::kModeProcess;
877 DrawGL(&info); 874 DrawGL(&info);
878 } 875 }
879 } 876 }
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 jboolean network_up) { 1128 jboolean network_up) {
1132 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1133 render_view_host_ext_->SetJsOnlineProperty(network_up); 1130 render_view_host_ext_->SetJsOnlineProperty(network_up);
1134 } 1131 }
1135 1132
1136 void AwContents::TrimMemory(JNIEnv* env, 1133 void AwContents::TrimMemory(JNIEnv* env,
1137 jobject obj, 1134 jobject obj,
1138 jint level, 1135 jint level,
1139 jboolean visible) { 1136 jboolean visible) {
1140 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1141
1142 if (!shared_renderer_state_.IsHardwareInitialized())
1143 return;
1144
1145 browser_view_renderer_.TrimMemory(level, visible); 1138 browser_view_renderer_.TrimMemory(level, visible);
1146 } 1139 }
1147 1140
1148 void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) { 1141 void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) {
1149 g_should_download_favicons = true; 1142 g_should_download_favicons = true;
1150 } 1143 }
1151 1144
1152 } // namespace android_webview 1145 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/shared_renderer_state.cc ('k') | android_webview/native/aw_dev_tools_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698