summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/display/VirtualDisplayAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/display/VirtualDisplayAdapter.java')
-rw-r--r--services/java/com/android/server/display/VirtualDisplayAdapter.java22
1 files changed, 12 insertions, 10 deletions
diff --git a/services/java/com/android/server/display/VirtualDisplayAdapter.java b/services/java/com/android/server/display/VirtualDisplayAdapter.java
index 3a71361..46d473c 100644
--- a/services/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -58,7 +58,7 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
try {
appToken.linkToDeath(device, 0);
} catch (RemoteException ex) {
- device.releaseLocked();
+ device.destroyLocked();
return null;
}
@@ -72,6 +72,7 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
public DisplayDevice releaseVirtualDisplayLocked(IBinder appToken) {
VirtualDisplayDevice device = mVirtualDisplayDevices.remove(appToken);
if (device != null) {
+ device.destroyLocked();
appToken.unlinkToDeath(device, 0);
}
@@ -85,6 +86,7 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
if (device != null) {
Slog.i(TAG, "Virtual display device released because application token died: "
+ device.mOwnerPackageName);
+ device.destroyLocked();
sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_REMOVED);
}
}
@@ -100,7 +102,6 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
private final int mDensityDpi;
private final int mFlags;
- private boolean mReleased;
private Surface mSurface;
private DisplayDeviceInfo mInfo;
@@ -122,24 +123,25 @@ final class VirtualDisplayAdapter extends DisplayAdapter {
@Override
public void binderDied() {
synchronized (getSyncRoot()) {
- if (!mReleased) {
+ if (mSurface != null) {
handleBinderDiedLocked(mAppToken);
}
}
}
- public void releaseLocked() {
- mReleased = true;
- sendTraversalRequestLocked();
+ public void destroyLocked() {
+ if (mSurface != null) {
+ mSurface.release();
+ mSurface = null;
+ }
+ SurfaceControl.destroyDisplay(getDisplayTokenLocked());
}
@Override
public void performTraversalInTransactionLocked() {
- if (mReleased && mSurface != null) {
- mSurface.destroy();
- mSurface = null;
+ if (mSurface != null) {
+ setSurfaceInTransactionLocked(mSurface);
}
- setSurfaceInTransactionLocked(mSurface);
}
@Override