Display magnifier does not release its surface on destroy.

Change-Id: I0b9448c8859b0167632652060b08072dc8c9c0a5
This commit is contained in:
Svetoslav
2013-01-22 18:11:42 -08:00
parent 80943d8daa
commit cb9a61bdc4
2 changed files with 17 additions and 2 deletions

View File

@@ -228,6 +228,10 @@ final class DisplayMagnifier {
return spec;
}
public void destroyLocked() {
mMagnifedViewport.destroyWindow();
}
/** NOTE: This has to be called within a surface transaction. */
public void drawMagnifiedRegionBorderIfNeededLocked() {
mMagnifedViewport.drawWindowIfNeededLocked();
@@ -258,7 +262,7 @@ final class DisplayMagnifier {
private final int mBorderWidth;
private final int mHalfBorderWidth;
private ViewportWindow mWindow;
private final ViewportWindow mWindow;
private boolean mFullRedrawNeeded;
@@ -459,6 +463,10 @@ final class DisplayMagnifier {
mWindow.drawIfNeeded();
}
public void destroyWindow() {
mWindow.releaseSurface();
}
private final class ViewportWindow {
private static final String SURFACE_TITLE = "Magnification Overlay";
@@ -640,6 +648,10 @@ final class DisplayMagnifier {
}
}
}
public void releaseSurface() {
mSurface.release();
}
}
}

View File

@@ -3039,7 +3039,10 @@ public class WindowManagerService extends IWindowManager.Stub
mDisplayMagnifier = new DisplayMagnifier(this, callbacks);
} else {
if (callbacks == null) {
mDisplayMagnifier = null;
if (mDisplayMagnifier != null) {
mDisplayMagnifier.destroyLocked();
mDisplayMagnifier = null;
}
} else {
throw new IllegalStateException("Magnification callbacks already set!");
}