Chromium Code Reviews| Index: remoting/client/jni/jni_frame_consumer.cc |
| diff --git a/remoting/client/jni/jni_frame_consumer.cc b/remoting/client/jni/jni_frame_consumer.cc |
| index 71c9b148d8d9b4cc74e90fe64e70aafcbde85c54..bb0bad4eefa0eb83589dad470e32450a7a454765 100644 |
| --- a/remoting/client/jni/jni_frame_consumer.cc |
| +++ b/remoting/client/jni/jni_frame_consumer.cc |
| @@ -14,6 +14,7 @@ |
| #include "remoting/client/jni/chromoting_jni_instance.h" |
| #include "remoting/client/jni/chromoting_jni_runtime.h" |
| #include "remoting/client/jni/jni_client.h" |
| +#include "remoting/client/jni/jni_display_handler.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" |
| #include "ui/gfx/android/java_bitmap.h" |
| @@ -22,9 +23,9 @@ namespace remoting { |
| class JniFrameConsumer::Renderer { |
| public: |
| - Renderer(ChromotingJniRuntime* jni_runtime, JniClient* jni_client) : |
| - jni_runtime_(jni_runtime), |
| - jni_client_(jni_client) {} |
| + Renderer(ChromotingJniRuntime* jni_runtime, |
| + base::WeakPtr<JniDisplayHandler> display) |
| + : jni_runtime_(jni_runtime), display_handler_(display) {} |
| ~Renderer() { |
| DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread()); |
| } |
| @@ -35,7 +36,7 @@ class JniFrameConsumer::Renderer { |
| // Used to obtain task runner references and make calls to Java methods. |
| ChromotingJniRuntime* jni_runtime_; |
| - JniClient* jni_client_; |
| + base::WeakPtr<JniDisplayHandler> display_handler_; |
| // This global reference is required, instead of a local reference, so it |
| // remains valid for the lifetime of |bitmap_| - gfx::JavaBitmap does not |
| @@ -52,6 +53,9 @@ class JniFrameConsumer::Renderer { |
| void JniFrameConsumer::Renderer::RenderFrame( |
| std::unique_ptr<webrtc::DesktopFrame> frame) { |
| DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread()); |
| + if (!display_handler_) { |
| + return; |
| + } |
| if (!bitmap_ || bitmap_->size().width() != frame->size().width() || |
| bitmap_->size().height() != frame->size().height()) { |
| @@ -61,11 +65,11 @@ void JniFrameConsumer::Renderer::RenderFrame( |
| // |bitmap_| must be deleted before |bitmap_global_ref_| is released. |
| bitmap_.reset(); |
| bitmap_global_ref_.Reset( |
| - env, |
| - jni_client_->NewBitmap(frame->size().width(), frame->size().height()) |
| - .obj()); |
| + env, display_handler_ |
| + ->NewBitmap(frame->size().width(), frame->size().height()) |
|
Lambros
2016/05/28 00:43:06
Is this 'git cl format'ed? Seems like too much ind
Yuwei
2016/06/01 21:30:11
Yep... git cl format actually makes it like this..
|
| + .obj()); |
| bitmap_.reset(new gfx::JavaBitmap(bitmap_global_ref_.obj())); |
| - jni_client_->UpdateFrameBitmap(bitmap_global_ref_.obj()); |
| + display_handler_->UpdateFrameBitmap(bitmap_global_ref_); |
| } |
| // Copy pixels from |frame| into the Java Bitmap. |
| @@ -84,13 +88,13 @@ void JniFrameConsumer::Renderer::RenderFrame( |
| bitmap_->stride(), buffer_rect, i.rect()); |
| } |
| - jni_client_->RedrawCanvas(); |
| + display_handler_->RedrawCanvas(); |
| } |
| JniFrameConsumer::JniFrameConsumer(ChromotingJniRuntime* jni_runtime, |
| - JniClient* jni_client) |
| + base::WeakPtr<JniDisplayHandler> display) |
| : jni_runtime_(jni_runtime), |
| - renderer_(new Renderer(jni_runtime, jni_client)), |
| + renderer_(new Renderer(jni_runtime, display)), |
| weak_factory_(this) {} |
| JniFrameConsumer::~JniFrameConsumer() { |