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

Unified Diff: android_webview/browser/shared_renderer_state.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/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

Powered by Google App Engine
This is Rietveld 408576698