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

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: Javadoc Created 4 years, 8 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
« no previous file with comments | « android_webview/native/aw_contents.h ('k') | android_webview/native/aw_gl_functor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/native/aw_contents.cc
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 1f41bb6af4eb8644218dc871e1fce20fda81c159..707e7cdaf25b92d4da8ea01678aacadaf1c4cc39 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -25,6 +25,7 @@
#include "android_webview/native/aw_contents_client_bridge.h"
#include "android_webview/native/aw_contents_io_thread_client_impl.h"
#include "android_webview/native/aw_contents_lifecycle_notifier.h"
+#include "android_webview/native/aw_gl_functor.h"
#include "android_webview/native/aw_message_port_service_impl.h"
#include "android_webview/native/aw_pdf_exporter.h"
#include "android_webview/native/aw_picture.h"
@@ -97,18 +98,6 @@ using content::BrowserThread;
using content::ContentViewCore;
using content::WebContents;
-extern "C" {
-static AwDrawGLFunction DrawGLFunction;
-static void DrawGLFunction(long view_context,
- AwDrawGLInfo* draw_info,
- void* spare) {
- // |view_context| is the value that was returned from the java
- // AwContents.onPrepareDrawGL; this cast must match the code there.
- reinterpret_cast<android_webview::RenderThreadManager*>(view_context)
- ->DrawGL(draw_info);
-}
-}
-
namespace android_webview {
namespace {
@@ -181,9 +170,7 @@ AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID(
}
AwContents::AwContents(std::unique_ptr<WebContents> web_contents)
- : render_thread_manager_(
- this,
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
+ : functor_(nullptr),
browser_view_renderer_(
this,
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
@@ -192,7 +179,6 @@ AwContents::AwContents(std::unique_ptr<WebContents> web_contents)
web_contents_(std::move(web_contents)),
renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()) {
base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1);
- browser_view_renderer_.SetRenderThreadManager(&render_thread_manager_);
icon_helper_.reset(new IconHelper(web_contents_.get()));
icon_helper_->SetListener(this);
web_contents_->SetUserData(android_webview::kAwContentsUserDataKey,
@@ -305,6 +291,7 @@ AwContents::~AwContents() {
base::MemoryPressureListener::NotifyMemoryPressure(
base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
}
+ SetAwGLFunctor(nullptr);
AwContentsLifecycleNotifier::OnWebViewDestroyed();
}
@@ -319,6 +306,29 @@ base::android::ScopedJavaLocalRef<jobject> AwContents::GetWebContents(
return web_contents_->GetJavaWebContents();
}
+void AwContents::SetAwGLFunctor(AwGLFunctor* functor) {
+ if (functor == functor_) {
+ return;
+ }
+ if (functor_) {
+ functor_->SetBrowserViewRenderer(nullptr);
+ }
+ functor_ = functor;
+ if (functor_) {
+ browser_view_renderer_.SetRenderThreadManager(
+ functor_->GetRenderThreadManager());
+ functor_->SetBrowserViewRenderer(&browser_view_renderer_);
+ } else {
+ browser_view_renderer_.SetRenderThreadManager(nullptr);
+ }
+}
+
+void AwContents::SetAwGLFunctor(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj,
+ jlong gl_functor) {
+ SetAwGLFunctor(reinterpret_cast<AwGLFunctor*>(gl_functor));
+}
+
void AwContents::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) {
java_ref_.reset();
delete this;
@@ -354,21 +364,11 @@ static void SetAwDrawGLFunctionTable(JNIEnv* env,
const JavaParamRef<jclass>&,
jlong function_table) {}
-static jlong GetAwDrawGLFunction(JNIEnv* env, const JavaParamRef<jclass>&) {
- return reinterpret_cast<intptr_t>(&DrawGLFunction);
-}
-
// static
jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) {
return base::subtle::NoBarrier_Load(&g_instance_count);
}
-jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env,
- const JavaParamRef<jobject>& obj) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- return reinterpret_cast<intptr_t>(&render_thread_manager_);
-}
-
namespace {
void DocumentHasImagesCallback(const ScopedJavaGlobalRef<jobject>& message,
bool has_images) {
@@ -751,15 +751,6 @@ void AwContents::OnParentDrawConstraintsUpdated() {
browser_view_renderer_.OnParentDrawConstraintsUpdated();
}
-bool AwContents::RequestDrawGL(bool wait_for_completion) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
- return false;
- return Java_AwContents_requestDrawGL(env, obj.obj(), wait_for_completion);
-}
-
void AwContents::PostInvalidate() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
JNIEnv* env = AttachCurrentThread();
@@ -895,7 +886,6 @@ void AwContents::OnAttachedToWindow(JNIEnv* env,
void AwContents::OnDetachedFromWindow(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- render_thread_manager_.DeleteHardwareRendererOnUI();
browser_view_renderer_.OnDetachedFromWindow();
}
@@ -903,13 +893,6 @@ bool AwContents::IsVisible(JNIEnv* env, const JavaParamRef<jobject>& obj) {
return browser_view_renderer_.IsClientVisible();
}
-void AwContents::DetachFunctorFromView() {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (!obj.is_null())
- Java_AwContents_detachFunctorFromView(env, obj.obj());
-}
-
base::android::ScopedJavaLocalRef<jbyteArray> AwContents::GetOpaqueState(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
@@ -1241,9 +1224,6 @@ void AwContents::TrimMemory(JNIEnv* env,
if (level < TRIM_MEMORY_BACKGROUND && visible)
return;
- if (level >= TRIM_MEMORY_MODERATE)
- render_thread_manager_.DeleteHardwareRendererOnUI();
-
browser_view_renderer_.TrimMemory();
}
« no previous file with comments | « android_webview/native/aw_contents.h ('k') | android_webview/native/aw_gl_functor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698