Merge "another small step towards fixing [2501808] sapphire: OOM in GPU Surface area"

This commit is contained in:
Mathias Agopian
2010-03-23 20:17:13 -07:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ import android.util.Log;
*/
public class Surface implements Parcelable {
private static final String LOG_TAG = "Surface";
private static final boolean DEBUG_RELEASE = false;
/* flags used in constructor (keep in sync with ISurfaceComposer.h) */
@@ -155,6 +156,9 @@ public class Surface implements Parcelable {
// non compatibility mode.
private Matrix mCompatibleMatrix;
@SuppressWarnings("unused")
private Exception mCreationStack;
/**
* Exception thrown when a surface couldn't be created or resized
*/
@@ -181,6 +185,9 @@ public class Surface implements Parcelable {
public Surface(SurfaceSession s,
int pid, int display, int w, int h, int format, int flags)
throws OutOfResourcesException {
if (DEBUG_RELEASE) {
mCreationStack = new Exception();
}
mCanvas = new CompatibleCanvas();
init(s,pid,null,display,w,h,format,flags);
}
@@ -192,6 +199,9 @@ public class Surface implements Parcelable {
public Surface(SurfaceSession s,
int pid, String name, int display, int w, int h, int format, int flags)
throws OutOfResourcesException {
if (DEBUG_RELEASE) {
mCreationStack = new Exception();
}
mCanvas = new CompatibleCanvas();
init(s,pid,name,display,w,h,format,flags);
}
@@ -202,6 +212,9 @@ public class Surface implements Parcelable {
* {@hide}
*/
public Surface() {
if (DEBUG_RELEASE) {
mCreationStack = new Exception();
}
mCanvas = new CompatibleCanvas();
}
@@ -407,6 +420,15 @@ public class Surface implements Parcelable {
/* no user serviceable parts here ... */
@Override
protected void finalize() throws Throwable {
if (mSurface != 0 || mSurfaceControl != 0) {
if (DEBUG_RELEASE) {
Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() ("
+ mSurface + ", " + mSurfaceControl + ")", mCreationStack);
} else {
Log.w(LOG_TAG, "Surface.finalize() has work. You should have called release() ("
+ mSurface + ", " + mSurfaceControl + ")");
}
}
release();
}

View File

@@ -422,7 +422,7 @@ public class SurfaceView extends View {
if (visibleChanged && (!visible || mNewSurfaceNeeded)) {
reportSurfaceDestroyed();
}
mNewSurfaceNeeded = false;
mSurfaceLock.lock();
@@ -470,6 +470,8 @@ public class SurfaceView extends View {
c.surfaceChanged(mSurfaceHolder, mFormat, mWidth, mHeight);
}
}
} else {
mSurface.release();
}
} finally {
mIsCreating = false;