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..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(); |
|
Yuwei
2016/09/12 21:34:44
Releasing |ui_task_poster_| here may not be very s
Yuwei
2016/09/13 19:06:18
I think it's better to just null-check before usin
|
| + 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(); |