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

Unified Diff: remoting/client/jni/jni_gl_display_handler.cc

Issue 2338473002: [Remoting Android] JniGlDisplayHandler calls invalidate() on UI thread (Closed)
Patch Set: Created 4 years, 3 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: remoting/client/jni/jni_gl_display_handler.cc
diff --git a/remoting/client/jni/jni_gl_display_handler.cc b/remoting/client/jni/jni_gl_display_handler.cc
index 7ab77ebcbd9db5cec9501431e831bc6536991461..df09ed4b5a9df5cca503e4b3ff2d173bd9924c4d 100644
--- a/remoting/client/jni/jni_gl_display_handler.cc
+++ b/remoting/client/jni/jni_gl_display_handler.cc
@@ -33,9 +33,7 @@ JniGlDisplayHandler::JniGlDisplayHandler(ChromotingJniRuntime* runtime)
JniGlDisplayHandler::~JniGlDisplayHandler() {
DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
- Java_GlDisplay_invalidate(base::android::AttachCurrentThread(),
- java_display_);
- runtime_->ui_task_runner()->DeleteSoon(FROM_HERE, ui_task_poster_.release());
+ DCHECK(!ui_task_poster_) << "Destroy() has not been called.";
}
void JniGlDisplayHandler::InitializeClient(
@@ -63,6 +61,16 @@ JniGlDisplayHandler::CreateVideoRenderer() {
return base::MakeUnique<SoftwareVideoRenderer>(std::move(consumer));
}
+void JniGlDisplayHandler::Destroy() {
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ Java_GlDisplay_invalidate(base::android::AttachCurrentThread(),
+ java_display_);
+ ui_task_poster_.reset();
+ runtime_->display_task_runner()->PostTask(
+ FROM_HERE, base::Bind(&JniGlDisplayHandler::DeleteOnDisplayThread,
+ weak_ptr_));
+}
+
// static
bool JniGlDisplayHandler::RegisterJni(JNIEnv* env) {
return RegisterNativesImpl(env);
@@ -142,6 +150,10 @@ void JniGlDisplayHandler::OnCursorInputFeedback(
renderer_.GetWeakPtr(), x, y, diameter));
}
+void JniGlDisplayHandler::DeleteOnDisplayThread() {
+ delete this;
+}
+
bool JniGlDisplayHandler::CanRenderFrame() {
DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
return egl_context_ && egl_context_->IsWindowBound();
« remoting/client/jni/display_updater_factory.h ('K') | « remoting/client/jni/jni_gl_display_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698