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

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

Issue 2338473002: [Remoting Android] JniGlDisplayHandler calls invalidate() on UI thread (Closed)
Patch Set: Reviewer's Feedback 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
« no previous file with comments | « remoting/client/jni/jni_gl_display_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..2edb220e1fdb411e261809a5fdd442ce9d5143fc 100644
--- a/remoting/client/jni/jni_gl_display_handler.cc
+++ b/remoting/client/jni/jni_gl_display_handler.cc
@@ -33,15 +33,21 @@ 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_) << "Invalidate() must be called on the UI thread "
+ "before deleting this object.";
}
-void JniGlDisplayHandler::InitializeClient(
+void JniGlDisplayHandler::Initialize(
const base::android::JavaRef<jobject>& java_client) {
- return Java_GlDisplay_initializeClient(base::android::AttachCurrentThread(),
- java_display_, java_client);
+ Java_GlDisplay_initializeClient(base::android::AttachCurrentThread(),
+ java_display_, java_client);
+}
+
+void JniGlDisplayHandler::Invalidate() {
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ Java_GlDisplay_invalidate(base::android::AttachCurrentThread(),
+ java_display_);
+ ui_task_poster_.reset();
}
std::unique_ptr<protocol::CursorShapeStub>
@@ -108,8 +114,9 @@ void JniGlDisplayHandler::OnPixelTransformationChanged(
DCHECK(env->GetArrayLength(jmatrix.obj()) == 9);
std::array<float, 9> matrix;
env->GetFloatArrayRegion(jmatrix.obj(), 0, 9, matrix.data());
- ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnPixelTransformationChanged,
- renderer_.GetWeakPtr(), matrix));
+ PostSequentialTaskOnDisplayThread(
+ base::Bind(&GlRenderer::OnPixelTransformationChanged,
+ renderer_.GetWeakPtr(), matrix));
}
void JniGlDisplayHandler::OnCursorPixelPositionChanged(
@@ -118,8 +125,8 @@ void JniGlDisplayHandler::OnCursorPixelPositionChanged(
float x,
float y) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
- ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorMoved,
- renderer_.GetWeakPtr(), x, y));
+ PostSequentialTaskOnDisplayThread(
+ base::Bind(&GlRenderer::OnCursorMoved, renderer_.GetWeakPtr(), x, y));
}
void JniGlDisplayHandler::OnCursorVisibilityChanged(
@@ -127,8 +134,8 @@ void JniGlDisplayHandler::OnCursorVisibilityChanged(
const base::android::JavaParamRef<jobject>& caller,
bool visible) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
- ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorVisibilityChanged,
- renderer_.GetWeakPtr(), visible));
+ PostSequentialTaskOnDisplayThread(base::Bind(
+ &GlRenderer::OnCursorVisibilityChanged, renderer_.GetWeakPtr(), visible));
}
void JniGlDisplayHandler::OnCursorInputFeedback(
@@ -138,8 +145,17 @@ void JniGlDisplayHandler::OnCursorInputFeedback(
float y,
float diameter) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
- ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorInputFeedback,
- renderer_.GetWeakPtr(), x, y, diameter));
+ PostSequentialTaskOnDisplayThread(
+ base::Bind(&GlRenderer::OnCursorInputFeedback, renderer_.GetWeakPtr(), x,
+ y, diameter));
+}
+
+void JniGlDisplayHandler::PostSequentialTaskOnDisplayThread(
+ const base::Closure& task) {
+ if (!ui_task_poster_) {
+ return;
+ }
+ ui_task_poster_->AddTask(task);
}
bool JniGlDisplayHandler::CanRenderFrame() {
« no previous file with comments | « 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