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

Unified Diff: android_webview/native/aw_contents.cc

Issue 1844343005: WIP - Control the lifetime of RenderThreadManager from Java. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/native/aw_contents.cc
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 3c3b85be2471f676ebc845f9093e8d226c41b37a..3f2b7f8658ddfe96d2700df4adb1853b33c3bdd9 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -180,16 +180,15 @@ AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID(
}
AwContents::AwContents(scoped_ptr<WebContents> web_contents)
- : shared_renderer_state_(
- this, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
+ : shared_renderer_state_(nullptr),
browser_view_renderer_(
- this, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
+ this,
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisablePageVisibility)),
web_contents_(std::move(web_contents)),
renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()) {
base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1);
- browser_view_renderer_.SetSharedRendererState(&shared_renderer_state_);
icon_helper_.reset(new IconHelper(web_contents_.get()));
icon_helper_->SetListener(this);
web_contents_->SetUserData(android_webview::kAwContentsUserDataKey,
@@ -210,6 +209,21 @@ AwContents::AwContents(scoped_ptr<WebContents> web_contents)
AwContentsLifecycleNotifier::OnWebViewCreated();
}
+void AwContents::CreateSharedRendererState() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ DCHECK(!shared_renderer_state_);
+ shared_renderer_state_ = new SharedRendererState(
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI));
+ shared_renderer_state_->SetClient(this);
+ browser_view_renderer_.SetSharedRendererState(shared_renderer_state_);
+}
+
+jlong AwContents::CreateSharedRendererState(JNIEnv* env,
+ const JavaParamRef<jobject>& obj) {
+ CreateSharedRendererState();
+ return reinterpret_cast<intptr_t>(shared_renderer_state_);
+}
+
void AwContents::SetJavaPeers(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
@@ -364,7 +378,7 @@ jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) {
jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- return reinterpret_cast<intptr_t>(&shared_renderer_state_);
+ return reinterpret_cast<intptr_t>(shared_renderer_state_);
}
namespace {
@@ -895,7 +909,7 @@ void AwContents::OnAttachedToWindow(JNIEnv* env,
void AwContents::OnDetachedFromWindow(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- shared_renderer_state_.DeleteHardwareRendererOnUI();
+ shared_renderer_state_->DeleteHardwareRendererOnUI();
browser_view_renderer_.OnDetachedFromWindow();
}
@@ -1234,7 +1248,7 @@ void AwContents::TrimMemory(JNIEnv* env,
return;
if (level >= TRIM_MEMORY_MODERATE)
- shared_renderer_state_.DeleteHardwareRendererOnUI();
+ shared_renderer_state_->DeleteHardwareRendererOnUI();
browser_view_renderer_.TrimMemory();
}

Powered by Google App Engine
This is Rietveld 408576698