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

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

Issue 2591363002: Adding drawable to CRD andorid and iOS gl rendering pipeline. (Closed)
Patch Set: Minor cleanup of an unused const. Created 4 years 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 ChromotingJniRuntime* runtime_; 55 ChromotingJniRuntime* runtime_;
56 base::WeakPtr<JniGlDisplayHandler> shell_; 56 base::WeakPtr<JniGlDisplayHandler> shell_;
57 57
58 // Will be std::move'd when GrabFrameConsumer() is called. 58 // Will be std::move'd when GrabFrameConsumer() is called.
59 std::unique_ptr<DualBufferFrameConsumer> owned_frame_consumer_; 59 std::unique_ptr<DualBufferFrameConsumer> owned_frame_consumer_;
60 60
61 base::WeakPtr<DualBufferFrameConsumer> frame_consumer_; 61 base::WeakPtr<DualBufferFrameConsumer> frame_consumer_;
62 62
63 ANativeWindow* window_ = nullptr; 63 ANativeWindow* window_ = nullptr;
64 std::unique_ptr<EglThreadContext> egl_context_; 64 std::unique_ptr<EglThreadContext> egl_context_;
65 GlRenderer renderer_; 65 GlRenderer* renderer_ = GlRenderer::CreateGlRendererWithDesktop();
joedow 2016/12/22 00:29:03 This member should be initialized with a nullptr a
nicholss 2017/01/09 18:50:24 Done.
66 66
67 // Used on display thread. 67 // Used on display thread.
68 base::WeakPtr<Core> weak_ptr_; 68 base::WeakPtr<Core> weak_ptr_;
69 base::WeakPtrFactory<Core> weak_factory_; 69 base::WeakPtrFactory<Core> weak_factory_;
70 70
71 DISALLOW_COPY_AND_ASSIGN(Core); 71 DISALLOW_COPY_AND_ASSIGN(Core);
72 }; 72 };
73 73
74 JniGlDisplayHandler::Core::Core(ChromotingJniRuntime* runtime, 74 JniGlDisplayHandler::Core::Core(ChromotingJniRuntime* runtime,
75 base::WeakPtr<JniGlDisplayHandler> shell) 75 base::WeakPtr<JniGlDisplayHandler> shell)
76 : runtime_(runtime), shell_(shell), weak_factory_(this) { 76 : runtime_(runtime), shell_(shell), weak_factory_(this) {
77 weak_ptr_ = weak_factory_.GetWeakPtr(); 77 weak_ptr_ = weak_factory_.GetWeakPtr();
78 renderer_.SetDelegate(weak_ptr_); 78 renderer_->SetDelegate(weak_ptr_);
79 owned_frame_consumer_.reset(new DualBufferFrameConsumer( 79 owned_frame_consumer_.reset(new DualBufferFrameConsumer(
80 base::Bind(&GlRenderer::OnFrameReceived, renderer_.GetWeakPtr()), 80 base::Bind(&GlRenderer::OnFrameReceived, renderer_->GetWeakPtr()),
81 runtime_->display_task_runner(), 81 runtime_->display_task_runner(),
82 protocol::FrameConsumer::PixelFormat::FORMAT_RGBA)); 82 protocol::FrameConsumer::PixelFormat::FORMAT_RGBA));
83 frame_consumer_ = owned_frame_consumer_->GetWeakPtr(); 83 frame_consumer_ = owned_frame_consumer_->GetWeakPtr();
84 } 84 }
85 85
86 JniGlDisplayHandler::Core::~Core() {} 86 JniGlDisplayHandler::Core::~Core() {}
87 87
88 bool JniGlDisplayHandler::Core::CanRenderFrame() { 88 bool JniGlDisplayHandler::Core::CanRenderFrame() {
89 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 89 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
90 return egl_context_ && egl_context_->IsWindowBound(); 90 return egl_context_ && egl_context_->IsWindowBound();
91 } 91 }
92 92
93 void JniGlDisplayHandler::Core::OnFrameRendered() { 93 void JniGlDisplayHandler::Core::OnFrameRendered() {
94 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 94 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
95 egl_context_->SwapBuffers(); 95 egl_context_->SwapBuffers();
96 runtime_->ui_task_runner()->PostTask( 96 runtime_->ui_task_runner()->PostTask(
97 FROM_HERE, base::Bind(&JniGlDisplayHandler::OnRenderDone, shell_)); 97 FROM_HERE, base::Bind(&JniGlDisplayHandler::OnRenderDone, shell_));
98 } 98 }
99 99
100 void JniGlDisplayHandler::Core::OnSizeChanged(int width, int height) { 100 void JniGlDisplayHandler::Core::OnSizeChanged(int width, int height) {
101 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 101 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
102 runtime_->ui_task_runner()->PostTask( 102 runtime_->ui_task_runner()->PostTask(
103 FROM_HERE, base::Bind(&JniGlDisplayHandler::OnCanvasSizeChanged, shell_, 103 FROM_HERE, base::Bind(&JniGlDisplayHandler::OnCanvasSizeChanged, shell_,
104 width, height)); 104 width, height));
105 } 105 }
106 106
107 void JniGlDisplayHandler::Core::SetCursorShape( 107 void JniGlDisplayHandler::Core::SetCursorShape(
108 const protocol::CursorShapeInfo& cursor_shape) { 108 const protocol::CursorShapeInfo& cursor_shape) {
109 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 109 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
110 renderer_.OnCursorShapeChanged(cursor_shape); 110 renderer_->OnCursorShapeChanged(cursor_shape);
111 } 111 }
112 112
113 std::unique_ptr<protocol::FrameConsumer> 113 std::unique_ptr<protocol::FrameConsumer>
114 JniGlDisplayHandler::Core::GrabFrameConsumer() { 114 JniGlDisplayHandler::Core::GrabFrameConsumer() {
115 DCHECK(owned_frame_consumer_) << "The frame consumer is already grabbed."; 115 DCHECK(owned_frame_consumer_) << "The frame consumer is already grabbed.";
116 return std::move(owned_frame_consumer_); 116 return std::move(owned_frame_consumer_);
117 } 117 }
118 118
119 void JniGlDisplayHandler::Core::SurfaceCreated( 119 void JniGlDisplayHandler::Core::SurfaceCreated(
120 base::android::ScopedJavaGlobalRef<jobject> surface) { 120 base::android::ScopedJavaGlobalRef<jobject> surface) {
121 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 121 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
122 DCHECK(!egl_context_); 122 DCHECK(!egl_context_);
123 DCHECK(!window_); 123 DCHECK(!window_);
124 renderer_.RequestCanvasSize(); 124 renderer_->RequestCanvasSize();
125 window_ = ANativeWindow_fromSurface(base::android::AttachCurrentThread(), 125 window_ = ANativeWindow_fromSurface(base::android::AttachCurrentThread(),
126 surface.obj()); 126 surface.obj());
127 egl_context_.reset(new EglThreadContext()); 127 egl_context_.reset(new EglThreadContext());
128 egl_context_->BindToWindow(window_); 128 egl_context_->BindToWindow(window_);
129 renderer_.OnSurfaceCreated(static_cast<int>(egl_context_->client_version())); 129 renderer_->OnSurfaceCreated(static_cast<int>(egl_context_->client_version()));
130 runtime_->network_task_runner()->PostTask( 130 runtime_->network_task_runner()->PostTask(
131 FROM_HERE, base::Bind(&DualBufferFrameConsumer::RequestFullDesktopFrame, 131 FROM_HERE, base::Bind(&DualBufferFrameConsumer::RequestFullDesktopFrame,
132 frame_consumer_)); 132 frame_consumer_));
133 } 133 }
134 134
135 void JniGlDisplayHandler::Core::SurfaceChanged(int width, int height) { 135 void JniGlDisplayHandler::Core::SurfaceChanged(int width, int height) {
136 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 136 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
137 renderer_.OnSurfaceChanged(width, height); 137 renderer_->OnSurfaceChanged(width, height);
138 } 138 }
139 139
140 void JniGlDisplayHandler::Core::SurfaceDestroyed() { 140 void JniGlDisplayHandler::Core::SurfaceDestroyed() {
141 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 141 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
142 DCHECK(egl_context_); 142 DCHECK(egl_context_);
143 DCHECK(window_); 143 DCHECK(window_);
144 renderer_.OnSurfaceDestroyed(); 144 renderer_->OnSurfaceDestroyed();
145 egl_context_.reset(); 145 egl_context_.reset();
146 ANativeWindow_release(window_); 146 ANativeWindow_release(window_);
147 window_ = nullptr; 147 window_ = nullptr;
148 } 148 }
149 149
150 void JniGlDisplayHandler::Core::SetTransformation( 150 void JniGlDisplayHandler::Core::SetTransformation(
151 const std::array<float, 9>& matrix) { 151 const std::array<float, 9>& matrix) {
152 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 152 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
153 renderer_.OnPixelTransformationChanged(matrix); 153 renderer_->OnPixelTransformationChanged(matrix);
154 } 154 }
155 155
156 void JniGlDisplayHandler::Core::MoveCursor(float x, float y) { 156 void JniGlDisplayHandler::Core::MoveCursor(float x, float y) {
157 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 157 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
158 renderer_.OnCursorMoved(x, y); 158 renderer_->OnCursorMoved(x, y);
159 } 159 }
160 160
161 void JniGlDisplayHandler::Core::SetCursorVisibility(bool visible) { 161 void JniGlDisplayHandler::Core::SetCursorVisibility(bool visible) {
162 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 162 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
163 renderer_.OnCursorVisibilityChanged(visible); 163 renderer_->OnCursorVisibilityChanged(visible);
164 } 164 }
165 165
166 void JniGlDisplayHandler::Core::StartInputFeedback(float x, 166 void JniGlDisplayHandler::Core::StartInputFeedback(float x,
167 float y, 167 float y,
168 float diameter) { 168 float diameter) {
169 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); 169 DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
170 renderer_.OnCursorInputFeedback(x, y, diameter); 170 renderer_->OnCursorInputFeedback(x, y, diameter);
171 } 171 }
172 172
173 base::WeakPtr<JniGlDisplayHandler::Core> 173 base::WeakPtr<JniGlDisplayHandler::Core>
174 JniGlDisplayHandler::Core::GetWeakPtr() { 174 JniGlDisplayHandler::Core::GetWeakPtr() {
175 return weak_ptr_; 175 return weak_ptr_;
176 } 176 }
177 177
178 // Shell implementations. 178 // Shell implementations.
179 179
180 JniGlDisplayHandler::JniGlDisplayHandler( 180 JniGlDisplayHandler::JniGlDisplayHandler(
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 java_display_); 291 java_display_);
292 } 292 }
293 293
294 void JniGlDisplayHandler::OnCanvasSizeChanged(int width, int height) { 294 void JniGlDisplayHandler::OnCanvasSizeChanged(int width, int height) {
295 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); 295 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
296 Java_GlDisplay_changeCanvasSize(base::android::AttachCurrentThread(), 296 Java_GlDisplay_changeCanvasSize(base::android::AttachCurrentThread(),
297 java_display_, width, height); 297 java_display_, width, height);
298 } 298 }
299 299
300 } // namespace remoting 300 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698