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

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

Issue 2338473002: [Remoting Android] JniGlDisplayHandler calls invalidate() on UI thread (Closed)
Patch Set: null-check ui_task_poster_ before using it 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..78111899b18b18169029456a308148993802e5fe 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);
@@ -105,6 +113,9 @@ void JniGlDisplayHandler::OnPixelTransformationChanged(
const base::android::JavaParamRef<jobject>& caller,
const base::android::JavaParamRef<jfloatArray>& jmatrix) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ if (!ui_task_poster_) {
+ return;
Hzj_jie 2016/09/13 17:56:29 Suggest to add a PostTaskToDisplayThread(const bas
Yuwei 2016/09/13 19:06:18 Done. Slightly different name.
+ }
DCHECK(env->GetArrayLength(jmatrix.obj()) == 9);
std::array<float, 9> matrix;
env->GetFloatArrayRegion(jmatrix.obj(), 0, 9, matrix.data());
@@ -118,6 +129,9 @@ void JniGlDisplayHandler::OnCursorPixelPositionChanged(
float x,
float y) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ if (!ui_task_poster_) {
+ return;
+ }
ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorMoved,
renderer_.GetWeakPtr(), x, y));
}
@@ -127,6 +141,9 @@ void JniGlDisplayHandler::OnCursorVisibilityChanged(
const base::android::JavaParamRef<jobject>& caller,
bool visible) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ if (!ui_task_poster_) {
+ return;
+ }
ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorVisibilityChanged,
renderer_.GetWeakPtr(), visible));
}
@@ -138,10 +155,17 @@ void JniGlDisplayHandler::OnCursorInputFeedback(
float y,
float diameter) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ if (!ui_task_poster_) {
+ return;
+ }
ui_task_poster_->AddTask(base::Bind(&GlRenderer::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