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

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

Issue 2338473002: [Remoting Android] JniGlDisplayHandler calls invalidate() on UI thread (Closed)
Patch Set: Remove DisplayUpdaterFactory 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..b1b837732791eddec967a851e6ecf5f1f8647320 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,7 +114,7 @@ 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,
+ QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnPixelTransformationChanged,
renderer_.GetWeakPtr(), matrix));
}
@@ -118,7 +124,7 @@ void JniGlDisplayHandler::OnCursorPixelPositionChanged(
float x,
float y) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
- ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorMoved,
+ QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnCursorMoved,
renderer_.GetWeakPtr(), x, y));
}
@@ -127,7 +133,7 @@ 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,
+ QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnCursorVisibilityChanged,
renderer_.GetWeakPtr(), visible));
}
@@ -138,10 +144,17 @@ void JniGlDisplayHandler::OnCursorInputFeedback(
float y,
float diameter) {
DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
- ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorInputFeedback,
+ QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnCursorInputFeedback,
renderer_.GetWeakPtr(), x, y, diameter));
}
+void JniGlDisplayHandler::QueueTaskOnDisplayThread(const base::Closure& task) {
Sergey Ulanov 2016/09/20 18:09:34 this functions posts tasks to the UI thread, so th
Yuwei 2016/09/20 19:20:37 Changed to `PostSequentialTaskOnDisplayThread`.
+ if (!ui_task_poster_) {
+ return;
+ }
Sergey Ulanov 2016/09/20 18:09:34 indentation
Yuwei 2016/09/20 19:20:38 Done.
+ ui_task_poster_->AddTask(task);
+}
+
bool JniGlDisplayHandler::CanRenderFrame() {
DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
return egl_context_ && egl_context_->IsWindowBound();

Powered by Google App Engine
This is Rietveld 408576698