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 16 matching lines...) Expand all Loading... |
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 Java_GlDisplay_invalidate(base::android::AttachCurrentThread(), | 36 Java_GlDisplay_invalidate(base::android::AttachCurrentThread(), |
37 java_display_.obj()); | 37 java_display_); |
38 runtime_->ui_task_runner()->DeleteSoon(FROM_HERE, ui_task_poster_.release()); | 38 runtime_->ui_task_runner()->DeleteSoon(FROM_HERE, ui_task_poster_.release()); |
39 } | 39 } |
40 | 40 |
41 void JniGlDisplayHandler::InitializeClient( | 41 void JniGlDisplayHandler::InitializeClient( |
42 const base::android::JavaRef<jobject>& java_client) { | 42 const base::android::JavaRef<jobject>& java_client) { |
43 return Java_GlDisplay_initializeClient(base::android::AttachCurrentThread(), | 43 return Java_GlDisplay_initializeClient(base::android::AttachCurrentThread(), |
44 java_display_.obj(), | 44 java_display_, java_client); |
45 java_client.obj()); | |
46 } | 45 } |
47 | 46 |
48 std::unique_ptr<protocol::CursorShapeStub> | 47 std::unique_ptr<protocol::CursorShapeStub> |
49 JniGlDisplayHandler::CreateCursorShapeStub() { | 48 JniGlDisplayHandler::CreateCursorShapeStub() { |
50 return base::WrapUnique( | 49 return base::WrapUnique( |
51 new CursorShapeStubProxy(weak_ptr_, runtime_->display_task_runner())); | 50 new CursorShapeStubProxy(weak_ptr_, runtime_->display_task_runner())); |
52 } | 51 } |
53 | 52 |
54 std::unique_ptr<protocol::VideoRenderer> | 53 std::unique_ptr<protocol::VideoRenderer> |
55 JniGlDisplayHandler::CreateVideoRenderer() { | 54 JniGlDisplayHandler::CreateVideoRenderer() { |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 void JniGlDisplayHandler::SetCursorShape( | 165 void JniGlDisplayHandler::SetCursorShape( |
167 const protocol::CursorShapeInfo& cursor_shape) { | 166 const protocol::CursorShapeInfo& cursor_shape) { |
168 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); | 167 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
169 renderer_.OnCursorShapeChanged(cursor_shape); | 168 renderer_.OnCursorShapeChanged(cursor_shape); |
170 } | 169 } |
171 | 170 |
172 // static | 171 // static |
173 void JniGlDisplayHandler::NotifyRenderDoneOnUiThread( | 172 void JniGlDisplayHandler::NotifyRenderDoneOnUiThread( |
174 base::android::ScopedJavaGlobalRef<jobject> java_display) { | 173 base::android::ScopedJavaGlobalRef<jobject> java_display) { |
175 Java_GlDisplay_canvasRendered(base::android::AttachCurrentThread(), | 174 Java_GlDisplay_canvasRendered(base::android::AttachCurrentThread(), |
176 java_display.obj()); | 175 java_display); |
177 } | 176 } |
178 | 177 |
179 void JniGlDisplayHandler::SurfaceCreatedOnDisplayThread( | 178 void JniGlDisplayHandler::SurfaceCreatedOnDisplayThread( |
180 base::android::ScopedJavaGlobalRef<jobject> surface) { | 179 base::android::ScopedJavaGlobalRef<jobject> surface) { |
181 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); | 180 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
182 renderer_.RequestCanvasSize(); | 181 renderer_.RequestCanvasSize(); |
183 ANativeWindow* window = ANativeWindow_fromSurface( | 182 ANativeWindow* window = ANativeWindow_fromSurface( |
184 base::android::AttachCurrentThread(), surface.obj()); | 183 base::android::AttachCurrentThread(), surface.obj()); |
185 egl_context_.reset(new EglThreadContext()); | 184 egl_context_.reset(new EglThreadContext()); |
186 egl_context_->BindToWindow(window); | 185 egl_context_->BindToWindow(window); |
187 ANativeWindow_release(window); | 186 ANativeWindow_release(window); |
188 renderer_.OnSurfaceCreated(static_cast<int>(egl_context_->client_version())); | 187 renderer_.OnSurfaceCreated(static_cast<int>(egl_context_->client_version())); |
189 runtime_->network_task_runner()->PostTask( | 188 runtime_->network_task_runner()->PostTask( |
190 FROM_HERE, base::Bind(&DualBufferFrameConsumer::RequestFullDesktopFrame, | 189 FROM_HERE, base::Bind(&DualBufferFrameConsumer::RequestFullDesktopFrame, |
191 frame_consumer_)); | 190 frame_consumer_)); |
192 } | 191 } |
193 | 192 |
194 void JniGlDisplayHandler::SurfaceDestroyedOnDisplayThread() { | 193 void JniGlDisplayHandler::SurfaceDestroyedOnDisplayThread() { |
195 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); | 194 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
196 renderer_.OnSurfaceDestroyed(); | 195 renderer_.OnSurfaceDestroyed(); |
197 egl_context_.reset(); | 196 egl_context_.reset(); |
198 } | 197 } |
199 | 198 |
200 // static | 199 // static |
201 void JniGlDisplayHandler::ChangeCanvasSizeOnUiThread( | 200 void JniGlDisplayHandler::ChangeCanvasSizeOnUiThread( |
202 base::android::ScopedJavaGlobalRef<jobject> java_display, | 201 base::android::ScopedJavaGlobalRef<jobject> java_display, |
203 int width, | 202 int width, |
204 int height) { | 203 int height) { |
205 JNIEnv* env = base::android::AttachCurrentThread(); | 204 JNIEnv* env = base::android::AttachCurrentThread(); |
206 Java_GlDisplay_changeCanvasSize(env, java_display.obj(), width, height); | 205 Java_GlDisplay_changeCanvasSize(env, java_display, width, height); |
207 } | 206 } |
208 | 207 |
209 } // namespace remoting | 208 } // namespace remoting |
OLD | NEW |