| 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();
|
| + 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();
|
|
|