Merge "Surface: Release references to BlastBufferQueue and SurfaceControl on Surface#destroy" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-09-09 00:19:57 +00:00
committed by Android (Google) Code Review
3 changed files with 11 additions and 1 deletions

View File

@@ -98,6 +98,7 @@ public class Surface implements Parcelable {
private static native int nativeSetFrameRate( private static native int nativeSetFrameRate(
long nativeObject, float frameRate, int compatibility, int changeFrameRateStrategy); long nativeObject, float frameRate, int compatibility, int changeFrameRateStrategy);
private static native void nativeDestroy(long nativeObject);
public static final @android.annotation.NonNull Parcelable.Creator<Surface> CREATOR = public static final @android.annotation.NonNull Parcelable.Creator<Surface> CREATOR =
new Parcelable.Creator<Surface>() { new Parcelable.Creator<Surface>() {
@@ -339,6 +340,9 @@ public class Surface implements Parcelable {
*/ */
@UnsupportedAppUsage @UnsupportedAppUsage
public void destroy() { public void destroy() {
if (mNativeObject != 0) {
nativeDestroy(mNativeObject);
}
release(); release();
} }

View File

@@ -903,7 +903,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
mSurfaceAlpha = 1f; mSurfaceAlpha = 1f;
synchronized (mSurfaceControlLock) { synchronized (mSurfaceControlLock) {
mSurface.release(); mSurface.destroy();
if (mBlastBufferQueue != null) { if (mBlastBufferQueue != null) {
mBlastBufferQueue.destroy(); mBlastBufferQueue.destroy();
mBlastBufferQueue = null; mBlastBufferQueue = null;

View File

@@ -449,6 +449,11 @@ static jint nativeSetFrameRate(JNIEnv* env, jclass clazz, jlong nativeObject, jf
int(changeFrameRateStrategy)); int(changeFrameRateStrategy));
} }
static void nativeDestroy(JNIEnv* env, jclass clazz, jlong nativeObject) {
sp<Surface> surface(reinterpret_cast<Surface*>(nativeObject));
surface->destroy();
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
static const JNINativeMethod gSurfaceMethods[] = { static const JNINativeMethod gSurfaceMethods[] = {
@@ -477,6 +482,7 @@ static const JNINativeMethod gSurfaceMethods[] = {
{"nativeSetAutoRefreshEnabled", "(JZ)I", (void*)nativeSetAutoRefreshEnabled}, {"nativeSetAutoRefreshEnabled", "(JZ)I", (void*)nativeSetAutoRefreshEnabled},
{"nativeSetFrameRate", "(JFII)I", (void*)nativeSetFrameRate}, {"nativeSetFrameRate", "(JFII)I", (void*)nativeSetFrameRate},
{"nativeGetFromBlastBufferQueue", "(JJ)J", (void*)nativeGetFromBlastBufferQueue}, {"nativeGetFromBlastBufferQueue", "(JJ)J", (void*)nativeGetFromBlastBufferQueue},
{"nativeDestroy", "(J)V", (void*)nativeDestroy},
}; };
int register_android_view_Surface(JNIEnv* env) int register_android_view_Surface(JNIEnv* env)