| Index: remoting/client/jni/jni_gl_display_handler.h
|
| diff --git a/remoting/client/jni/jni_gl_display_handler.h b/remoting/client/jni/jni_gl_display_handler.h
|
| index 7ddfaaa6b85f9cc1d160a14409a451074499c1c6..ee2cc7cfac405086cca7375ac441a4c980ff871f 100644
|
| --- a/remoting/client/jni/jni_gl_display_handler.h
|
| +++ b/remoting/client/jni/jni_gl_display_handler.h
|
| @@ -5,23 +5,31 @@
|
| #ifndef REMOTING_CLIENT_JNI_JNI_GL_DISPLAY_HANDLER_H_
|
| #define REMOTING_CLIENT_JNI_JNI_GL_DISPLAY_HANDLER_H_
|
|
|
| +#include <EGL/egl.h>
|
| #include <jni.h>
|
|
|
| #include "base/android/scoped_java_ref.h"
|
| #include "base/macros.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "remoting/client/gl_renderer.h"
|
| +#include "remoting/client/gl_renderer_delegate.h"
|
| #include "remoting/client/jni/display_updater_factory.h"
|
| +#include "remoting/protocol/cursor_shape_stub.h"
|
|
|
| namespace remoting {
|
|
|
| class ChromotingJniRuntime;
|
| +class DualBufferFrameConsumer;
|
| +class EglThreadContext;
|
|
|
| // Handles OpenGL display operations. Draws desktop and cursor on the OpenGL
|
| // surface.
|
| // JNI functions should all be called on the UI thread. The display handler
|
| // itself should be deleted on the display thread.
|
| // Please see GlDisplay.java for documentations.
|
| -class JniGlDisplayHandler : public DisplayUpdaterFactory {
|
| +class JniGlDisplayHandler : public DisplayUpdaterFactory,
|
| + public protocol::CursorShapeStub,
|
| + public GlRendererDelegate {
|
| public:
|
| JniGlDisplayHandler(ChromotingJniRuntime* runtime);
|
| ~JniGlDisplayHandler() override;
|
| @@ -29,10 +37,19 @@ class JniGlDisplayHandler : public DisplayUpdaterFactory {
|
| // Sets the DesktopViewFactory for the Java client.
|
| void InitializeClient(
|
| const base::android::JavaRef<jobject>& java_client);
|
| +
|
| + // CursorShapeStub override.
|
| + void SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) override;
|
| +
|
| // DisplayUpdaterFactory overrides.
|
| std::unique_ptr<protocol::CursorShapeStub> CreateCursorShapeStub() override;
|
| std::unique_ptr<protocol::VideoRenderer> CreateVideoRenderer() override;
|
|
|
| + // GlrendererDelegate overrides.
|
| + bool CanRenderFrame() override;
|
| + void OnFrameRendered() override;
|
| + void OnSizeChanged(int width, int height) override;
|
| +
|
| static bool RegisterJni(JNIEnv* env);
|
|
|
| void OnSurfaceCreated(
|
| @@ -59,7 +76,8 @@ class JniGlDisplayHandler : public DisplayUpdaterFactory {
|
| JNIEnv* env,
|
| const base::android::JavaParamRef<jobject>& caller,
|
| int x,
|
| - int y);
|
| + int y,
|
| + bool followed_by_viewport_move);
|
|
|
| void OnCursorVisibilityChanged(
|
| JNIEnv* env,
|
| @@ -78,11 +96,25 @@ class JniGlDisplayHandler : public DisplayUpdaterFactory {
|
| jboolean enabled);
|
|
|
| private:
|
| - static void NotifyRenderEventOnUiThread(
|
| - base::android::ScopedJavaGlobalRef<jobject> java_client);
|
| + void SetRenderEventEnabledOnDisplayThread(bool enabled);
|
| +
|
| + static void NotifyRenderDoneOnUiThread(
|
| + base::android::ScopedJavaGlobalRef<jobject> java_display);
|
| +
|
| + void SurfaceCreatedOnDisplayThread(
|
| + base::android::ScopedJavaGlobalRef<jobject> surface);
|
| +
|
| + void SurfaceDestroyedOnDisplayThread();
|
| +
|
| + void ChangePixelTransformationOnDisplayThread(
|
| + base::android::ScopedJavaGlobalRef<jfloatArray> jmatrix);
|
| +
|
| + void ChangeCursorPositionOnDisplayThread(int x,
|
| + int y,
|
| + bool followed_by_viewport_move);
|
|
|
| static void ChangeCanvasSizeOnUiThread(
|
| - base::android::ScopedJavaGlobalRef<jobject> java_client,
|
| + base::android::ScopedJavaGlobalRef<jobject> java_display,
|
| int width,
|
| int height);
|
|
|
| @@ -90,6 +122,19 @@ class JniGlDisplayHandler : public DisplayUpdaterFactory {
|
|
|
| base::android::ScopedJavaGlobalRef<jobject> java_display_;
|
|
|
| + std::unique_ptr<EglThreadContext> egl_context_;
|
| +
|
| + base::WeakPtr<DualBufferFrameConsumer> frame_consumer_;
|
| +
|
| + bool render_event_enabled_ = false;
|
| + bool rendering_blocked_ = false;
|
| +
|
| + // |renderer_| must be deleted earlier than |egl_context_|.
|
| + GlRenderer renderer_;
|
| +
|
| + // Used on display thread.
|
| + base::WeakPtr<JniGlDisplayHandler> weak_ptr_;
|
| + base::WeakPtrFactory<JniGlDisplayHandler> weak_factory_;
|
| DISALLOW_COPY_AND_ASSIGN(JniGlDisplayHandler);
|
| };
|
|
|
|
|