diff options
Diffstat (limited to 'services/java/com')
4 files changed, 29 insertions, 38 deletions
diff --git a/services/java/com/android/server/display/DisplayManagerService.java b/services/java/com/android/server/display/DisplayManagerService.java index 4b3463c..659163c 100644 --- a/services/java/com/android/server/display/DisplayManagerService.java +++ b/services/java/com/android/server/display/DisplayManagerService.java @@ -154,9 +154,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { // List of all currently connected display devices. private final ArrayList<DisplayDevice> mDisplayDevices = new ArrayList<DisplayDevice>(); - // List of all removed display devices. - private final ArrayList<DisplayDevice> mRemovedDisplayDevices = new ArrayList<DisplayDevice>(); - // List of all logical displays indexed by logical display id. private final SparseArray<LogicalDisplay> mLogicalDisplays = new SparseArray<LogicalDisplay>(); @@ -798,7 +795,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { Slog.i(TAG, "Display device removed: " + device.getDisplayDeviceInfoLocked()); - mRemovedDisplayDevices.add(device); updateLogicalDisplaysLocked(); scheduleTraversalLocked(false); } @@ -900,14 +896,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { } private void performTraversalInTransactionLocked() { - // Perform one last traversal for each removed display device. - final int removedCount = mRemovedDisplayDevices.size(); - for (int i = 0; i < removedCount; i++) { - DisplayDevice device = mRemovedDisplayDevices.get(i); - device.performTraversalInTransactionLocked(); - } - mRemovedDisplayDevices.clear(); - // Clear all viewports before configuring displays so that we can keep // track of which ones we have configured. clearViewportsLocked(); diff --git a/services/java/com/android/server/display/OverlayDisplayAdapter.java b/services/java/com/android/server/display/OverlayDisplayAdapter.java index ce402a5..007acf7 100644 --- a/services/java/com/android/server/display/OverlayDisplayAdapter.java +++ b/services/java/com/android/server/display/OverlayDisplayAdapter.java @@ -211,11 +211,13 @@ final class OverlayDisplayAdapter extends DisplayAdapter { mSurfaceTexture = surfaceTexture; } - public void clearSurfaceTextureLocked() { - if (mSurfaceTexture != null) { - mSurfaceTexture = null; + public void destroyLocked() { + mSurfaceTexture = null; + if (mSurface != null) { + mSurface.release(); + mSurface = null; } - sendTraversalRequestLocked(); + SurfaceControl.destroyDisplay(getDisplayTokenLocked()); } @Override @@ -225,12 +227,6 @@ final class OverlayDisplayAdapter extends DisplayAdapter { mSurface = new Surface(mSurfaceTexture); } setSurfaceInTransactionLocked(mSurface); - } else { - setSurfaceInTransactionLocked(null); - if (mSurface != null) { - mSurface.destroy(); - mSurface = null; - } } } @@ -307,7 +303,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { public void onWindowDestroyed() { synchronized (getSyncRoot()) { if (mDevice != null) { - mDevice.clearSurfaceTextureLocked(); + mDevice.destroyLocked(); sendDisplayDeviceEventLocked(mDevice, DISPLAY_DEVICE_EVENT_REMOVED); } } 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 diff --git a/services/java/com/android/server/display/WifiDisplayAdapter.java b/services/java/com/android/server/display/WifiDisplayAdapter.java index 11d3819..a9da30f 100644 --- a/services/java/com/android/server/display/WifiDisplayAdapter.java +++ b/services/java/com/android/server/display/WifiDisplayAdapter.java @@ -374,7 +374,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { private void removeDisplayDeviceLocked() { if (mDisplayDevice != null) { - mDisplayDevice.clearSurfaceLocked(); + mDisplayDevice.destroyLocked(); sendDisplayDeviceEventLocked(mDisplayDevice, DISPLAY_DEVICE_EVENT_REMOVED); mDisplayDevice = null; @@ -633,9 +633,12 @@ final class WifiDisplayAdapter extends DisplayAdapter { mSurface = surface; } - public void clearSurfaceLocked() { - mSurface = null; - sendTraversalRequestLocked(); + public void destroyLocked() { + if (mSurface != null) { + mSurface.release(); + mSurface = null; + } + SurfaceControl.destroyDisplay(getDisplayTokenLocked()); } public void setNameLocked(String name) { @@ -645,7 +648,9 @@ final class WifiDisplayAdapter extends DisplayAdapter { @Override public void performTraversalInTransactionLocked() { - setSurfaceInTransactionLocked(mSurface); + if (mSurface != null) { + setSurfaceInTransactionLocked(mSurface); + } } @Override |