diff options
| author | 2015-11-12 19:08:20 -0800 | |
|---|---|---|
| committer | 2015-11-16 12:12:15 -0800 | |
| commit | 608797e210dae48d4b9ece8aeaaa3293ecf066dd (patch) | |
| tree | 76bed0c178779a179a4c75dfcfaa1bf0bd659374 | |
| parent | c89cc4419ece41015196e31ff8d144c45a9e356e (diff) | |
Remove unnecessary DisplayContent.mDisplaySizeLock synchronization.
All operations are performed with WindowManagerService.mWindowMap lock
held, therefore the second lock is not necessary.
Change-Id: I762fb322ddeb8b45191a3d297de0d33a10674f8a
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 31 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 125 |
2 files changed, 56 insertions, 100 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e264c437241c..4e38f67511dd 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -55,17 +55,6 @@ class DisplayContent { * from mDisplayWindows; */ private final WindowList mWindows = new WindowList(); - // This protects the following display size properties, so that - // getDisplaySize() doesn't need to acquire the global lock. This is - // needed because the window manager sometimes needs to use ActivityThread - // while it has its global state locked (for example to load animation - // resources), but the ActivityThread also needs get the current display - // size sometimes when it has its package lock held. - // - // These will only be modified with both mWindowMap and mDisplaySizeLock - // held (in that order) so the window manager doesn't need to acquire this - // lock when needing these values in its normal operation. - final Object mDisplaySizeLock = new Object(); int mInitialDisplayWidth = 0; int mInitialDisplayHeight = 0; int mInitialDisplayDensity = 0; @@ -202,18 +191,16 @@ class DisplayContent { } void initializeDisplayBaseInfo() { - synchronized(mDisplaySizeLock) { - // Bootstrap the default logical display from the display manager. - final DisplayInfo newDisplayInfo = - mService.mDisplayManagerInternal.getDisplayInfo(mDisplayId); - if (newDisplayInfo != null) { - mDisplayInfo.copyFrom(newDisplayInfo); - } - mBaseDisplayWidth = mInitialDisplayWidth = mDisplayInfo.logicalWidth; - mBaseDisplayHeight = mInitialDisplayHeight = mDisplayInfo.logicalHeight; - mBaseDisplayDensity = mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi; - mBaseDisplayRect.set(0, 0, mBaseDisplayWidth, mBaseDisplayHeight); + // Bootstrap the default logical display from the display manager. + final DisplayInfo newDisplayInfo = + mService.mDisplayManagerInternal.getDisplayInfo(mDisplayId); + if (newDisplayInfo != null) { + mDisplayInfo.copyFrom(newDisplayInfo); } + mBaseDisplayWidth = mInitialDisplayWidth = mDisplayInfo.logicalWidth; + mBaseDisplayHeight = mInitialDisplayHeight = mDisplayInfo.logicalHeight; + mBaseDisplayDensity = mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi; + mBaseDisplayRect.set(0, 0, mBaseDisplayWidth, mBaseDisplayHeight); } void getLogicalDisplayRect(Rect out) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 92eacd6b750f..4293f0a48e5d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6908,27 +6908,25 @@ public class WindowManagerService extends IWindowManager.Stub final int appWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation); final int appHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation); final DisplayInfo displayInfo = displayContent.getDisplayInfo(); - synchronized(displayContent.mDisplaySizeLock) { - displayInfo.rotation = mRotation; - displayInfo.logicalWidth = dw; - displayInfo.logicalHeight = dh; - displayInfo.logicalDensityDpi = displayContent.mBaseDisplayDensity; - displayInfo.appWidth = appWidth; - displayInfo.appHeight = appHeight; - displayInfo.getLogicalMetrics(mRealDisplayMetrics, - CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); - displayInfo.getAppMetrics(mDisplayMetrics); - if (displayContent.mDisplayScalingDisabled) { - displayInfo.flags |= Display.FLAG_SCALING_DISABLED; - } else { - displayInfo.flags &= ~Display.FLAG_SCALING_DISABLED; - } + displayInfo.rotation = mRotation; + displayInfo.logicalWidth = dw; + displayInfo.logicalHeight = dh; + displayInfo.logicalDensityDpi = displayContent.mBaseDisplayDensity; + displayInfo.appWidth = appWidth; + displayInfo.appHeight = appHeight; + displayInfo.getLogicalMetrics(mRealDisplayMetrics, + CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); + displayInfo.getAppMetrics(mDisplayMetrics); + if (displayContent.mDisplayScalingDisabled) { + displayInfo.flags |= Display.FLAG_SCALING_DISABLED; + } else { + displayInfo.flags &= ~Display.FLAG_SCALING_DISABLED; + } - mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager( - displayContent.getDisplayId(), displayInfo); + mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager( + displayContent.getDisplayId(), displayInfo); - displayContent.mBaseDisplayRect.set(0, 0, dw, dh); - } + displayContent.mBaseDisplayRect.set(0, 0, dw, dh); if (false) { Slog.i(TAG, "Set app display size: " + appWidth + " x " + appHeight); } @@ -8060,10 +8058,8 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mWindowMap) { final DisplayContent displayContent = getDisplayContentLocked(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { - synchronized(displayContent.mDisplaySizeLock) { - size.x = displayContent.mInitialDisplayWidth; - size.y = displayContent.mInitialDisplayHeight; - } + size.x = displayContent.mInitialDisplayWidth; + size.y = displayContent.mInitialDisplayHeight; } } } @@ -8073,10 +8069,8 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mWindowMap) { final DisplayContent displayContent = getDisplayContentLocked(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { - synchronized(displayContent.mDisplaySizeLock) { - size.x = displayContent.mBaseDisplayWidth; - size.y = displayContent.mBaseDisplayHeight; - } + size.x = displayContent.mBaseDisplayWidth; + size.y = displayContent.mBaseDisplayHeight; } } } @@ -8145,13 +8139,9 @@ public class WindowManagerService extends IWindowManager.Stub } } - private void setForcedDisplayScalingModeLocked(DisplayContent displayContent, - int mode) { + private void setForcedDisplayScalingModeLocked(DisplayContent displayContent, int mode) { Slog.i(TAG, "Using display scaling mode: " + (mode == 0 ? "auto" : "off")); - - synchronized(displayContent.mDisplaySizeLock) { - displayContent.mDisplayScalingDisabled = (mode != 0); - } + displayContent.mDisplayScalingDisabled = (mode != 0); reconfigureDisplayLocked(displayContent); } @@ -8169,13 +8159,11 @@ public class WindowManagerService extends IWindowManager.Stub try { width = Integer.parseInt(sizeStr.substring(0, pos)); height = Integer.parseInt(sizeStr.substring(pos+1)); - synchronized(displayContent.mDisplaySizeLock) { - if (displayContent.mBaseDisplayWidth != width - || displayContent.mBaseDisplayHeight != height) { - Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height); - displayContent.mBaseDisplayWidth = width; - displayContent.mBaseDisplayHeight = height; - } + if (displayContent.mBaseDisplayWidth != width + || displayContent.mBaseDisplayHeight != height) { + Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height); + displayContent.mBaseDisplayWidth = width; + displayContent.mBaseDisplayHeight = height; } } catch (NumberFormatException ex) { } @@ -8192,11 +8180,9 @@ public class WindowManagerService extends IWindowManager.Stub int density; try { density = Integer.parseInt(densityStr); - synchronized(displayContent.mDisplaySizeLock) { - if (displayContent.mBaseDisplayDensity != density) { - Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density); - displayContent.mBaseDisplayDensity = density; - } + if (displayContent.mBaseDisplayDensity != density) { + Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density); + displayContent.mBaseDisplayDensity = density; } } catch (NumberFormatException ex) { } @@ -8206,21 +8192,16 @@ public class WindowManagerService extends IWindowManager.Stub int mode = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.DISPLAY_SCALING_FORCE, 0); if (mode != 0) { - synchronized(displayContent.mDisplaySizeLock) { - Slog.i(TAG, "FORCED DISPLAY SCALING DISABLED"); - displayContent.mDisplayScalingDisabled = true; - } + Slog.i(TAG, "FORCED DISPLAY SCALING DISABLED"); + displayContent.mDisplayScalingDisabled = true; } } // displayContent must not be null private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) { Slog.i(TAG, "Using new display size: " + width + "x" + height); - - synchronized(displayContent.mDisplaySizeLock) { - displayContent.mBaseDisplayWidth = width; - displayContent.mBaseDisplayHeight = height; - } + displayContent.mBaseDisplayWidth = width; + displayContent.mBaseDisplayHeight = height; reconfigureDisplayLocked(displayContent); } @@ -8256,9 +8237,7 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mWindowMap) { final DisplayContent displayContent = getDisplayContentLocked(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { - synchronized(displayContent.mDisplaySizeLock) { - return displayContent.mInitialDisplayDensity; - } + return displayContent.mInitialDisplayDensity; } } return -1; @@ -8269,9 +8248,7 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mWindowMap) { final DisplayContent displayContent = getDisplayContentLocked(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { - synchronized(displayContent.mDisplaySizeLock) { - return displayContent.mBaseDisplayDensity; - } + return displayContent.mBaseDisplayDensity; } } return -1; @@ -8306,10 +8283,7 @@ public class WindowManagerService extends IWindowManager.Stub // displayContent must not be null private void setForcedDisplayDensityLocked(DisplayContent displayContent, int density) { Slog.i(TAG, "Using new display density: " + density); - - synchronized(displayContent.mDisplaySizeLock) { - displayContent.mBaseDisplayDensity = density; - } + displayContent.mBaseDisplayDensity = density; reconfigureDisplayLocked(displayContent); } @@ -8400,12 +8374,10 @@ public class WindowManagerService extends IWindowManager.Stub private void setOverscanLocked(DisplayContent displayContent, int left, int top, int right, int bottom) { final DisplayInfo displayInfo = displayContent.getDisplayInfo(); - synchronized (displayContent.mDisplaySizeLock) { - displayInfo.overscanLeft = left; - displayInfo.overscanTop = top; - displayInfo.overscanRight = right; - displayInfo.overscanBottom = bottom; - } + displayInfo.overscanLeft = left; + displayInfo.overscanTop = top; + displayInfo.overscanRight = right; + displayInfo.overscanBottom = bottom; mDisplaySettings.setOverscanLocked(displayInfo.uniqueId, displayInfo.name, left, top, right, bottom); @@ -9992,14 +9964,11 @@ public class WindowManagerService extends IWindowManager.Stub DisplayInfo displayInfo = displayContent.getDisplayInfo(); final Rect rect = new Rect(); mDisplaySettings.getOverscanLocked(displayInfo.name, displayInfo.uniqueId, rect); - synchronized (displayContent.mDisplaySizeLock) { - displayInfo.overscanLeft = rect.left; - displayInfo.overscanTop = rect.top; - displayInfo.overscanRight = rect.right; - displayInfo.overscanBottom = rect.bottom; - mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager( - displayId, displayInfo); - } + displayInfo.overscanLeft = rect.left; + displayInfo.overscanTop = rect.top; + displayInfo.overscanRight = rect.right; + displayInfo.overscanBottom = rect.bottom; + mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager(displayId, displayInfo); configureDisplayPolicyLocked(displayContent); // TODO: Create an input channel for each display with touch capability. |