diff options
| -rw-r--r-- | core/java/android/view/SurfaceView.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index f559d42b6f55..e59073999683 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -114,6 +114,9 @@ public class SurfaceView extends View { SurfaceSession mSurfaceSession; SurfaceControl mSurfaceControl; + // In the case of format changes we switch out the surface in-place + // we need to preserve the old one until the new one has drawn. + SurfaceControl mDeferredDestroySurfaceControl; final Rect mTmpRect = new Rect(); final Configuration mConfiguration = new Configuration(); @@ -475,6 +478,7 @@ public class SurfaceView extends View { if (creating) { mSurfaceSession = new SurfaceSession(viewRoot.mSurface); + mDeferredDestroySurfaceControl = mSurfaceControl; mSurfaceControl = new SurfaceControl(mSurfaceSession, "SurfaceView - " + viewRoot.getTitle().toString(), mSurfaceWidth, mSurfaceHeight, mFormat, @@ -676,6 +680,12 @@ public class SurfaceView extends View { Log.i(TAG, System.identityHashCode(this) + " " + "finishedDrawing"); } + + if (mDeferredDestroySurfaceControl != null) { + mDeferredDestroySurfaceControl.destroy(); + mDeferredDestroySurfaceControl = null; + } + mHandler.sendEmptyMessage(DRAW_FINISHED_MSG); } |