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

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: Reviewer's Feedback 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
« no previous file with comments | « remoting/client/jni/jni_gl_display_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 PostSequentialTaskOnDisplayThread(
112 renderer_.GetWeakPtr(), matrix)); 118 base::Bind(&GlRenderer::OnPixelTransformationChanged,
119 renderer_.GetWeakPtr(), matrix));
113 } 120 }
114 121
115 void JniGlDisplayHandler::OnCursorPixelPositionChanged( 122 void JniGlDisplayHandler::OnCursorPixelPositionChanged(
116 JNIEnv* env, 123 JNIEnv* env,
117 const base::android::JavaParamRef<jobject>& caller, 124 const base::android::JavaParamRef<jobject>& caller,
118 float x, 125 float x,
119 float y) { 126 float y) {
120 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); 127 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
121 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorMoved, 128 PostSequentialTaskOnDisplayThread(
122 renderer_.GetWeakPtr(), x, y)); 129 base::Bind(&GlRenderer::OnCursorMoved, renderer_.GetWeakPtr(), x, y));
123 } 130 }
124 131
125 void JniGlDisplayHandler::OnCursorVisibilityChanged( 132 void JniGlDisplayHandler::OnCursorVisibilityChanged(
126 JNIEnv* env, 133 JNIEnv* env,
127 const base::android::JavaParamRef<jobject>& caller, 134 const base::android::JavaParamRef<jobject>& caller,
128 bool visible) { 135 bool visible) {
129 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); 136 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
130 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorVisibilityChanged, 137 PostSequentialTaskOnDisplayThread(base::Bind(
131 renderer_.GetWeakPtr(), visible)); 138 &GlRenderer::OnCursorVisibilityChanged, renderer_.GetWeakPtr(), visible));
132 } 139 }
133 140
134 void JniGlDisplayHandler::OnCursorInputFeedback( 141 void JniGlDisplayHandler::OnCursorInputFeedback(
135 JNIEnv* env, 142 JNIEnv* env,
136 const base::android::JavaParamRef<jobject>& caller, 143 const base::android::JavaParamRef<jobject>& caller,
137 float x, 144 float x,
138 float y, 145 float y,
139 float diameter) { 146 float diameter) {
140 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); 147 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
141 ui_task_poster_->AddTask(base::Bind(&GlRenderer::OnCursorInputFeedback, 148 PostSequentialTaskOnDisplayThread(
142 renderer_.GetWeakPtr(), x, y, diameter)); 149 base::Bind(&GlRenderer::OnCursorInputFeedback, renderer_.GetWeakPtr(), x,
150 y, diameter));
151 }
152
153 void JniGlDisplayHandler::PostSequentialTaskOnDisplayThread(
154 const base::Closure& task) {
155 if (!ui_task_poster_) {
156 return;
157 }
158 ui_task_poster_->AddTask(task);
143 } 159 }
144 160
145 bool JniGlDisplayHandler::CanRenderFrame() { 161 bool JniGlDisplayHandler::CanRenderFrame() {
146 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 162 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
147 return egl_context_ && egl_context_->IsWindowBound(); 163 return egl_context_ && egl_context_->IsWindowBound();
148 } 164 }
149 165
150 void JniGlDisplayHandler::OnFrameRendered() { 166 void JniGlDisplayHandler::OnFrameRendered() {
151 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 167 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
152 egl_context_->SwapBuffers(); 168 egl_context_->SwapBuffers();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 // static 215 // static
200 void JniGlDisplayHandler::ChangeCanvasSizeOnUiThread( 216 void JniGlDisplayHandler::ChangeCanvasSizeOnUiThread(
201 base::android::ScopedJavaGlobalRef<jobject> java_display, 217 base::android::ScopedJavaGlobalRef<jobject> java_display,
202 int width, 218 int width,
203 int height) { 219 int height) {
204 JNIEnv* env = base::android::AttachCurrentThread(); 220 JNIEnv* env = base::android::AttachCurrentThread();
205 Java_GlDisplay_changeCanvasSize(env, java_display, width, height); 221 Java_GlDisplay_changeCanvasSize(env, java_display, width, height);
206 } 222 }
207 223
208 } // namespace remoting 224 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/jni/jni_gl_display_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698