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

Side by Side 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 unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698