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 35fca8b88cbec037ad3fa08fa000be74c27ae9cf..99b2093c0809a4491feb22506890d68d0f750640 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,9 @@ AwContents::~AwContents() { |
| base::MemoryPressureListener::NotifyMemoryPressure( |
| base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); |
| } |
| + if (functor_) { |
|
boliu
2016/04/07 18:14:03
SetAwGLFunctor(nullptr) instead to avoid spreading
Tobias Sargeant
2016/04/07 21:07:35
Done.
|
| + functor_->SetBrowserViewRenderer(nullptr); |
| + } |
| AwContentsLifecycleNotifier::OnWebViewDestroyed(); |
| } |
| @@ -319,6 +308,25 @@ base::android::ScopedJavaLocalRef<jobject> AwContents::GetWebContents( |
| return web_contents_->GetJavaWebContents(); |
| } |
| +void AwContents::SetAwGLFunctor(JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& obj, |
| + jlong gl_functor) { |
| + AwGLFunctor* functor = reinterpret_cast<AwGLFunctor*>(gl_functor); |
| + if (functor != functor_) { |
|
boliu
2016/04/07 18:14:03
style: you can unindent the rest of the function i
Tobias Sargeant
2016/04/07 21:07:36
Done.
boliu
2016/04/07 21:30:32
No you didn't :p
|
| + 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::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| java_ref_.reset(); |
| delete this; |
| @@ -354,21 +362,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 +749,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 +884,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 +891,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 +1222,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(); |
| } |