summaryrefslogtreecommitdiffstats
path: root/services/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com')
-rw-r--r--services/java/com/android/server/display/DisplayManagerService.java12
-rw-r--r--services/java/com/android/server/display/OverlayDisplayAdapter.java18
-rw-r--r--services/java/com/android/server/display/VirtualDisplayAdapter.java22
-rw-r--r--services/java/com/android/server/display/WifiDisplayAdapter.java15
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