Chromium Code Reviews| 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(); |