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

Side by Side Diff: remoting/client/jni/jni_gl_display_handler.cc

Issue 2745583008: Refactoring out the chromoting jni runtime class in favor of chromoting client runtime. (Closed)
Patch Set: Missed out on a () Created 3 years, 9 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"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "jni/GlDisplay_jni.h" 14 #include "jni/GlDisplay_jni.h"
15 #include "remoting/client/chromoting_client_runtime.h"
15 #include "remoting/client/cursor_shape_stub_proxy.h" 16 #include "remoting/client/cursor_shape_stub_proxy.h"
16 #include "remoting/client/display/gl_canvas.h" 17 #include "remoting/client/display/gl_canvas.h"
17 #include "remoting/client/dual_buffer_frame_consumer.h" 18 #include "remoting/client/dual_buffer_frame_consumer.h"
18 #include "remoting/client/jni/chromoting_jni_runtime.h"
19 #include "remoting/client/jni/egl_thread_context.h" 19 #include "remoting/client/jni/egl_thread_context.h"
20 #include "remoting/client/software_video_renderer.h" 20 #include "remoting/client/software_video_renderer.h"
21 #include "remoting/protocol/frame_consumer.h" 21 #include "remoting/protocol/frame_consumer.h"
22 22
23 namespace remoting { 23 namespace remoting {
24 24
25 // The core that lives on the display thread. Must not be created on the display 25 // The core that lives on the display thread. Must not be created on the display
26 // thread. 26 // thread.
27 class JniGlDisplayHandler::Core : public protocol::CursorShapeStub, 27 class JniGlDisplayHandler::Core : public protocol::CursorShapeStub,
28 public GlRendererDelegate { 28 public GlRendererDelegate {
29 public: 29 public:
30 Core(ChromotingJniRuntime* runtime, base::WeakPtr<JniGlDisplayHandler> shell); 30 Core(base::WeakPtr<JniGlDisplayHandler> shell);
31 ~Core() override; 31 ~Core() override;
32 32
33 // GlRendererDelegate interface. 33 // GlRendererDelegate interface.
34 bool CanRenderFrame() override; 34 bool CanRenderFrame() override;
35 void OnFrameRendered() override; 35 void OnFrameRendered() override;
36 void OnSizeChanged(int width, int height) override; 36 void OnSizeChanged(int width, int height) override;
37 37
38 // CursorShapeStub interface. 38 // CursorShapeStub interface.
39 void SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) override; 39 void SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) override;
40 40
(...skipping 12 matching lines...) Expand all
53 void MoveCursor(float x, float y); 53 void MoveCursor(float x, float y);
54 void SetCursorVisibility(bool visible); 54 void SetCursorVisibility(bool visible);
55 void StartInputFeedback(float x, float y, float diameter); 55 void StartInputFeedback(float x, float y, float diameter);
56 56
57 base::WeakPtr<Core> GetWeakPtr(); 57 base::WeakPtr<Core> GetWeakPtr();
58 58
59 private: 59 private:
60 // Initializes the core on the display thread. 60 // Initializes the core on the display thread.
61 void Initialize(); 61 void Initialize();
62 62
63 ChromotingJniRuntime* runtime_; 63 ChromotingClientRuntime* runtime_;
64 base::WeakPtr<JniGlDisplayHandler> shell_; 64 base::WeakPtr<JniGlDisplayHandler> shell_;
65 65
66 // Will be std::move'd when GrabFrameConsumer() is called. 66 // Will be std::move'd when GrabFrameConsumer() is called.
67 std::unique_ptr<DualBufferFrameConsumer> owned_frame_consumer_; 67 std::unique_ptr<DualBufferFrameConsumer> owned_frame_consumer_;
68 68
69 base::WeakPtr<DualBufferFrameConsumer> frame_consumer_; 69 base::WeakPtr<DualBufferFrameConsumer> frame_consumer_;
70 70
71 ANativeWindow* window_ = nullptr; 71 ANativeWindow* window_ = nullptr;
72 std::unique_ptr<EglThreadContext> egl_context_; 72 std::unique_ptr<EglThreadContext> egl_context_;
73 std::unique_ptr<GlRenderer> renderer_; 73 std::unique_ptr<GlRenderer> renderer_;
74 74
75 // Used on display thread. 75 // Used on display thread.
76 base::WeakPtr<Core> weak_ptr_; 76 base::WeakPtr<Core> weak_ptr_;
77 base::WeakPtrFactory<Core> weak_factory_; 77 base::WeakPtrFactory<Core> weak_factory_;
78 78
79 DISALLOW_COPY_AND_ASSIGN(Core); 79 DISALLOW_COPY_AND_ASSIGN(Core);
80 }; 80 };
81 81
82 JniGlDisplayHandler::Core::Core(ChromotingJniRuntime* runtime, 82 JniGlDisplayHandler::Core::Core(base::WeakPtr<JniGlDisplayHandler> shell)
83 base::WeakPtr<JniGlDisplayHandler> shell) 83 : shell_(shell), weak_factory_(this) {
84 : runtime_(runtime), shell_(shell), weak_factory_(this) { 84 runtime_ = ChromotingClientRuntime::GetInstance();
85 DCHECK(!runtime_->display_task_runner()->BelongsToCurrentThread()); 85 DCHECK(!runtime_->display_task_runner()->BelongsToCurrentThread());
86 runtime_->display_task_runner()->PostTask( 86 runtime_->display_task_runner()->PostTask(
87 FROM_HERE, base::Bind(&JniGlDisplayHandler::Core::Initialize, 87 FROM_HERE, base::Bind(&JniGlDisplayHandler::Core::Initialize,
88 base::Unretained(this))); 88 base::Unretained(this)));
89 89
90 weak_ptr_ = weak_factory_.GetWeakPtr(); 90 weak_ptr_ = weak_factory_.GetWeakPtr();
91 91
92 // Do not bind GlRenderer::OnFrameReceived. |renderer_| is not ready yet. 92 // Do not bind GlRenderer::OnFrameReceived. |renderer_| is not ready yet.
93 owned_frame_consumer_.reset(new DualBufferFrameConsumer( 93 owned_frame_consumer_.reset(new DualBufferFrameConsumer(
94 base::Bind(&JniGlDisplayHandler::Core::OnFrameReceived, weak_ptr_), 94 base::Bind(&JniGlDisplayHandler::Core::OnFrameReceived, weak_ptr_),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 void JniGlDisplayHandler::Core::Initialize() { 202 void JniGlDisplayHandler::Core::Initialize() {
203 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 203 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
204 204
205 renderer_ = GlRenderer::CreateGlRendererWithDesktop(); 205 renderer_ = GlRenderer::CreateGlRendererWithDesktop();
206 renderer_->SetDelegate(weak_ptr_); 206 renderer_->SetDelegate(weak_ptr_);
207 } 207 }
208 208
209 // Shell implementations. 209 // Shell implementations.
210 210
211 JniGlDisplayHandler::JniGlDisplayHandler( 211 JniGlDisplayHandler::JniGlDisplayHandler(
212 ChromotingJniRuntime* runtime,
213 const base::android::JavaRef<jobject>& java_client) 212 const base::android::JavaRef<jobject>& java_client)
214 : runtime_(runtime), 213 : runtime_(ChromotingClientRuntime::GetInstance()),
215 ui_task_poster_(runtime->display_task_runner()), 214 ui_task_poster_(runtime_->display_task_runner()),
216 weak_factory_(this) { 215 weak_factory_(this) {
217 core_.reset(new Core(runtime_, weak_factory_.GetWeakPtr())); 216 core_.reset(new Core(weak_factory_.GetWeakPtr()));
218 JNIEnv* env = base::android::AttachCurrentThread(); 217 JNIEnv* env = base::android::AttachCurrentThread();
219 java_display_.Reset(Java_GlDisplay_createJavaDisplayObject( 218 java_display_.Reset(Java_GlDisplay_createJavaDisplayObject(
220 env, reinterpret_cast<intptr_t>(this))); 219 env, reinterpret_cast<intptr_t>(this)));
221 Java_GlDisplay_initializeClient(env, java_display_, java_client); 220 Java_GlDisplay_initializeClient(env, java_display_, java_client);
222 } 221 }
223 222
224 JniGlDisplayHandler::~JniGlDisplayHandler() { 223 JniGlDisplayHandler::~JniGlDisplayHandler() {
225 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); 224 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
226 Java_GlDisplay_invalidate(base::android::AttachCurrentThread(), 225 Java_GlDisplay_invalidate(base::android::AttachCurrentThread(),
227 java_display_); 226 java_display_);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 java_display_); 321 java_display_);
323 } 322 }
324 323
325 void JniGlDisplayHandler::OnCanvasSizeChanged(int width, int height) { 324 void JniGlDisplayHandler::OnCanvasSizeChanged(int width, int height) {
326 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); 325 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
327 Java_GlDisplay_changeCanvasSize(base::android::AttachCurrentThread(), 326 Java_GlDisplay_changeCanvasSize(base::android::AttachCurrentThread(),
328 java_display_, width, height); 327 java_display_, width, height);
329 } 328 }
330 329
331 } // namespace remoting 330 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698