Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "remoting/client/jni/jni_gl_display_handler.h" | 5 #include "remoting/client/jni/jni_gl_display_handler.h" |
| 6 | 6 |
| 7 #include <android/native_window_jni.h> | 7 #include <android/native_window_jni.h> |
| 8 #include <array> | 8 #include <array> |
| 9 | 9 |
| 10 #include "base/android/jni_android.h" | 10 #include "base/android/jni_android.h" |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 : runtime_(runtime), weak_factory_(this) { | 26 : runtime_(runtime), weak_factory_(this) { |
| 27 weak_ptr_ = weak_factory_.GetWeakPtr(); | 27 weak_ptr_ = weak_factory_.GetWeakPtr(); |
| 28 java_display_.Reset(Java_GlDisplay_createJavaDisplayObject( | 28 java_display_.Reset(Java_GlDisplay_createJavaDisplayObject( |
| 29 base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this))); | 29 base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this))); |
| 30 renderer_.SetDelegate(weak_ptr_); | 30 renderer_.SetDelegate(weak_ptr_); |
| 31 ui_task_poster_.reset(new QueuedTaskPoster(runtime->display_task_runner())); | 31 ui_task_poster_.reset(new QueuedTaskPoster(runtime->display_task_runner())); |
| 32 } | 32 } |
| 33 | 33 |
| 34 JniGlDisplayHandler::~JniGlDisplayHandler() { | 34 JniGlDisplayHandler::~JniGlDisplayHandler() { |
| 35 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); | 35 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
| 36 DCHECK(!ui_task_poster_) << "Invalidate() must be called on the UI thread " | |
| 37 "before deleting this object."; | |
| 38 } | |
| 39 | |
| 40 void JniGlDisplayHandler::Initialize( | |
| 41 const base::android::JavaRef<jobject>& java_client) { | |
| 42 Java_GlDisplay_initializeClient(base::android::AttachCurrentThread(), | |
| 43 java_display_, java_client); | |
| 44 } | |
| 45 | |
| 46 void JniGlDisplayHandler::Invalidate() { | |
| 47 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | |
| 36 Java_GlDisplay_invalidate(base::android::AttachCurrentThread(), | 48 Java_GlDisplay_invalidate(base::android::AttachCurrentThread(), |
| 37 java_display_); | 49 java_display_); |
| 38 runtime_->ui_task_runner()->DeleteSoon(FROM_HERE, ui_task_poster_.release()); | 50 ui_task_poster_.reset(); |
| 39 } | |
| 40 | |
| 41 void JniGlDisplayHandler::InitializeClient( | |
| 42 const base::android::JavaRef<jobject>& java_client) { | |
| 43 return Java_GlDisplay_initializeClient(base::android::AttachCurrentThread(), | |
| 44 java_display_, java_client); | |
| 45 } | 51 } |
| 46 | 52 |
| 47 std::unique_ptr<protocol::CursorShapeStub> | 53 std::unique_ptr<protocol::CursorShapeStub> |
| 48 JniGlDisplayHandler::CreateCursorShapeStub() { | 54 JniGlDisplayHandler::CreateCursorShapeStub() { |
| 49 return base::MakeUnique<CursorShapeStubProxy>( | 55 return base::MakeUnique<CursorShapeStubProxy>( |
| 50 weak_ptr_, runtime_->display_task_runner()); | 56 weak_ptr_, runtime_->display_task_runner()); |
| 51 } | 57 } |
| 52 | 58 |
| 53 std::unique_ptr<protocol::VideoRenderer> | 59 std::unique_ptr<protocol::VideoRenderer> |
| 54 JniGlDisplayHandler::CreateVideoRenderer() { | 60 JniGlDisplayHandler::CreateVideoRenderer() { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 101 } | 107 } |
| 102 | 108 |
| 103 void JniGlDisplayHandler::OnPixelTransformationChanged( | 109 void JniGlDisplayHandler::OnPixelTransformationChanged( |
| 104 JNIEnv* env, | 110 JNIEnv* env, |
| 105 const base::android::JavaParamRef<jobject>& caller, | 111 const base::android::JavaParamRef<jobject>& caller, |
| 106 const base::android::JavaParamRef<jfloatArray>& jmatrix) { | 112 const base::android::JavaParamRef<jfloatArray>& jmatrix) { |
| 107 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 113 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 108 DCHECK(env->GetArrayLength(jmatrix.obj()) == 9); | 114 DCHECK(env->GetArrayLength(jmatrix.obj()) == 9); |
| 109 std::array<float, 9> matrix; | 115 std::array<float, 9> matrix; |
| 110 env->GetFloatArrayRegion(jmatrix.obj(), 0, 9, matrix.data()); | 116 env->GetFloatArrayRegion(jmatrix.obj(), 0, 9, matrix.data()); |
| 111 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnPixelTransformationChanged, | 117 QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnPixelTransformationChanged, |
| 112 renderer_.GetWeakPtr(), matrix)); | 118 renderer_.GetWeakPtr(), matrix)); |
| 113 } | 119 } |
| 114 | 120 |
| 115 void JniGlDisplayHandler::OnCursorPixelPositionChanged( | 121 void JniGlDisplayHandler::OnCursorPixelPositionChanged( |
| 116 JNIEnv* env, | 122 JNIEnv* env, |
| 117 const base::android::JavaParamRef<jobject>& caller, | 123 const base::android::JavaParamRef<jobject>& caller, |
| 118 float x, | 124 float x, |
| 119 float y) { | 125 float y) { |
| 120 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 126 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 121 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorMoved, | 127 QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnCursorMoved, |
| 122 renderer_.GetWeakPtr(), x, y)); | 128 renderer_.GetWeakPtr(), x, y)); |
| 123 } | 129 } |
| 124 | 130 |
| 125 void JniGlDisplayHandler::OnCursorVisibilityChanged( | 131 void JniGlDisplayHandler::OnCursorVisibilityChanged( |
| 126 JNIEnv* env, | 132 JNIEnv* env, |
| 127 const base::android::JavaParamRef<jobject>& caller, | 133 const base::android::JavaParamRef<jobject>& caller, |
| 128 bool visible) { | 134 bool visible) { |
| 129 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 135 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 130 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorVisibilityChanged, | 136 QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnCursorVisibilityChanged, |
| 131 renderer_.GetWeakPtr(), visible)); | 137 renderer_.GetWeakPtr(), visible)); |
| 132 } | 138 } |
| 133 | 139 |
| 134 void JniGlDisplayHandler::OnCursorInputFeedback( | 140 void JniGlDisplayHandler::OnCursorInputFeedback( |
| 135 JNIEnv* env, | 141 JNIEnv* env, |
| 136 const base::android::JavaParamRef<jobject>& caller, | 142 const base::android::JavaParamRef<jobject>& caller, |
| 137 float x, | 143 float x, |
| 138 float y, | 144 float y, |
| 139 float diameter) { | 145 float diameter) { |
| 140 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 146 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 141 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorInputFeedback, | 147 QueueTaskOnDisplayThread(base::Bind(&GlRenderer::OnCursorInputFeedback, |
| 142 renderer_.GetWeakPtr(), x, y, diameter)); | 148 renderer_.GetWeakPtr(), x, y, diameter)); |
| 143 } | 149 } |
| 144 | 150 |
| 151 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`.
| |
| 152 if (!ui_task_poster_) { | |
| 153 return; | |
| 154 } | |
|
Sergey Ulanov
2016/09/20 18:09:34
indentation
Yuwei
2016/09/20 19:20:38
Done.
| |
| 155 ui_task_poster_->AddTask(task); | |
| 156 } | |
| 157 | |
| 145 bool JniGlDisplayHandler::CanRenderFrame() { | 158 bool JniGlDisplayHandler::CanRenderFrame() { |
| 146 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); | 159 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
| 147 return egl_context_ && egl_context_->IsWindowBound(); | 160 return egl_context_ && egl_context_->IsWindowBound(); |
| 148 } | 161 } |
| 149 | 162 |
| 150 void JniGlDisplayHandler::OnFrameRendered() { | 163 void JniGlDisplayHandler::OnFrameRendered() { |
| 151 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); | 164 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
| 152 egl_context_->SwapBuffers(); | 165 egl_context_->SwapBuffers(); |
| 153 runtime_->ui_task_runner()->PostTask( | 166 runtime_->ui_task_runner()->PostTask( |
| 154 FROM_HERE, base::Bind(&JniGlDisplayHandler::NotifyRenderDoneOnUiThread, | 167 FROM_HERE, base::Bind(&JniGlDisplayHandler::NotifyRenderDoneOnUiThread, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 199 // static | 212 // static |
| 200 void JniGlDisplayHandler::ChangeCanvasSizeOnUiThread( | 213 void JniGlDisplayHandler::ChangeCanvasSizeOnUiThread( |
| 201 base::android::ScopedJavaGlobalRef<jobject> java_display, | 214 base::android::ScopedJavaGlobalRef<jobject> java_display, |
| 202 int width, | 215 int width, |
| 203 int height) { | 216 int height) { |
| 204 JNIEnv* env = base::android::AttachCurrentThread(); | 217 JNIEnv* env = base::android::AttachCurrentThread(); |
| 205 Java_GlDisplay_changeCanvasSize(env, java_display, width, height); | 218 Java_GlDisplay_changeCanvasSize(env, java_display, width, height); |
| 206 } | 219 } |
| 207 | 220 |
| 208 } // namespace remoting | 221 } // namespace remoting |
| OLD | NEW |