Chromium Code Reviews| Index: android_webview/browser/shared_renderer_state.cc |
| diff --git a/android_webview/browser/shared_renderer_state.cc b/android_webview/browser/shared_renderer_state.cc |
| index af9da3effa80f90f02faed87ff361da011c16efc..a3330135c4d7c3a53b4b88162172cc5638f4feb9 100644 |
| --- a/android_webview/browser/shared_renderer_state.cc |
| +++ b/android_webview/browser/shared_renderer_state.cc |
| @@ -11,12 +11,14 @@ |
| #include "android_webview/browser/hardware_renderer.h" |
| #include "android_webview/browser/scoped_app_gl_state_restore.h" |
| #include "android_webview/browser/shared_renderer_state_client.h" |
| +#include "android_webview/jni/SharedRendererState_jni.h" |
| #include "android_webview/public/browser/draw_gl.h" |
| #include "base/bind.h" |
| #include "base/lazy_instance.h" |
| #include "base/location.h" |
| #include "base/time/time.h" |
| #include "base/trace_event/trace_event_argument.h" |
| +#include "content/public/browser/browser_thread.h" |
| namespace android_webview { |
| @@ -87,18 +89,26 @@ base::LazyInstance<internal::RequestDrawGLTracker> g_request_draw_gl_tracker = |
| } |
| SharedRendererState::SharedRendererState( |
| - SharedRendererStateClient* client, |
| const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop) |
| : ui_loop_(ui_loop), |
| - client_(client), |
| + client_(nullptr), |
| renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()), |
| hardware_renderer_has_frame_(false), |
| inside_hardware_release_(false), |
| weak_factory_on_ui_thread_(this) { |
| DCHECK(ui_loop_->BelongsToCurrentThread()); |
| - DCHECK(client_); |
| ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); |
| - ResetRequestDrawGLCallback(); |
| +} |
| + |
| +void SharedRendererState::SetClient(SharedRendererStateClient* client) { |
| + DCHECK((!client_ && client) || (client_ && !client)); |
| + if (client_) { |
| + request_draw_gl_cancelable_closure_.Cancel(); |
| + } |
| + client_ = client; |
| + if (client_) { |
| + ResetRequestDrawGLCallback(); |
| + } |
| } |
| SharedRendererState::~SharedRendererState() { |
| @@ -141,6 +151,7 @@ void SharedRendererState::ResetRequestDrawGLCallback() { |
| } |
| void SharedRendererState::ClientRequestDrawGLOnUI() { |
| + DCHECK(client_); |
|
boliu
2016/04/01 03:13:39
How can you enforce this? This is not called by th
|
| DCHECK(ui_loop_->BelongsToCurrentThread()); |
| ResetRequestDrawGLCallback(); |
| g_request_draw_gl_tracker.Get().SetQueuedFunctorOnUi(this); |
| @@ -151,6 +162,7 @@ void SharedRendererState::ClientRequestDrawGLOnUI() { |
| } |
| void SharedRendererState::UpdateParentDrawConstraintsOnUI() { |
| + DCHECK(client_); |
| DCHECK(ui_loop_->BelongsToCurrentThread()); |
| client_->OnParentDrawConstraintsUpdated(); |
| } |
| @@ -315,6 +327,7 @@ void SharedRendererState::DrawGL(AwDrawGLInfo* draw_info) { |
| } |
| void SharedRendererState::DeleteHardwareRendererOnUI() { |
| + DCHECK(client_); |
| DCHECK(ui_loop_->BelongsToCurrentThread()); |
| InsideHardwareReleaseReset auto_inside_hardware_release_reset(this); |
| @@ -377,4 +390,14 @@ SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { |
| shared_renderer_state_->SetInsideHardwareRelease(false); |
| } |
| +static void Destroy(JNIEnv* env, |
| + const JavaParamRef<jclass>&, |
| + jlong shared_renderer_state) { |
| + delete reinterpret_cast<SharedRendererState*>(shared_renderer_state); |
| +} |
| + |
| +bool RegisterSharedRendererState(JNIEnv* env) { |
| + return RegisterNativesImpl(env); |
| +} |
| + |
| } // namespace android_webview |