| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_GL_ANDROID_SCOPED_JAVA_SURFACE_H_ |
| #define UI_GL_ANDROID_SCOPED_JAVA_SURFACE_H_ |
| |
| #include <jni.h> |
| |
| #include "base/android/scoped_java_ref.h" |
| #include "base/move.h" |
| #include "ui/gl/gl_export.h" |
| |
| namespace gfx { |
| |
| class SurfaceTexture; |
| |
| // A helper class for holding a scoped reference to a Java Surface instance. |
| // When going out of scope, Surface.release() is called on the Java object to |
| // make sure server-side references (esp. wrt graphics memory) are released. |
| class GL_EXPORT ScopedJavaSurface { |
| MOVE_ONLY_TYPE_FOR_CPP_03(ScopedJavaSurface, RValue); |
| |
| public: |
| ScopedJavaSurface(); |
| |
| // Wraps an existing Java Surface object in a ScopedJavaSurface. |
| explicit ScopedJavaSurface(const base::android::JavaRef<jobject>& surface); |
| |
| // Creates a Java Surface from a SurfaceTexture and wraps it in a |
| // ScopedJavaSurface. |
| explicit ScopedJavaSurface(const SurfaceTexture* surface_texture); |
| |
| // Move constructor. Take the surface from another ScopedJavaSurface object, |
| // the latter no longer owns the surface afterwards. |
| ScopedJavaSurface(RValue rvalue); |
| ScopedJavaSurface& operator=(RValue rhs); |
| |
| // Creates a ScopedJavaSurface that is owned externally, i.e., |
| // someone else is responsible to call Surface.release(). |
| static ScopedJavaSurface AcquireExternalSurface(jobject surface); |
| |
| ~ScopedJavaSurface(); |
| |
| // Check whether the surface is an empty one. |
| bool IsEmpty() const; |
| |
| // Check whether the surface is hardware protected so that no readback is |
| // possible. |
| bool is_protected() const { return is_protected_; } |
| |
| const base::android::JavaRef<jobject>& j_surface() const { |
| return j_surface_; |
| } |
| |
| private: |
| // Performs destructive move from |other| to this. |
| void MoveFrom(ScopedJavaSurface& other); |
| |
| bool auto_release_; |
| bool is_protected_; |
| |
| base::android::ScopedJavaGlobalRef<jobject> j_surface_; |
| }; |
| |
| } // namespace gfx |
| |
| #endif // UI_GL_ANDROID_SCOPED_JAVA_SURFACE_H_ |