diff options
40 files changed, 397 insertions, 395 deletions
diff --git a/services/core/Android.bp b/services/core/Android.bp index 2fa2941efe7f..888ad1da3fcc 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -55,7 +55,7 @@ java_genrule { srcs: [":services.core.unboosted"], tools: ["lockedregioncodeinjection"], cmd: "$(location lockedregioncodeinjection) " + - " --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/wm/WindowHashMap;\" " + + " --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " + " --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " + " --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " + " -o $(out) " + diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 9edb3d07ca32..e4d1cfe943a8 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -735,7 +735,7 @@ final class AccessibilityController { } public void setShown(boolean shown, boolean animate) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mShown == shown) { return; } @@ -750,13 +750,13 @@ final class AccessibilityController { @SuppressWarnings("unused") // Called reflectively from an animator. public int getAlpha() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { return mAlpha; } } public void setAlpha(int alpha) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mAlpha == alpha) { return; } @@ -769,7 +769,7 @@ final class AccessibilityController { } public void setBounds(Region bounds) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mBounds.equals(bounds)) { return; } @@ -782,7 +782,7 @@ final class AccessibilityController { } public void updateSize() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mWindowManager.getDefaultDisplay().getRealSize(mTempPoint); mSurfaceControl.setSize(mTempPoint.x, mTempPoint.y); invalidate(mDirtyRect); @@ -801,7 +801,7 @@ final class AccessibilityController { /** NOTE: This has to be called within a surface transaction. */ public void drawIfNeeded() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (!mInvalidated) { return; } @@ -948,7 +948,7 @@ final class AccessibilityController { } break; case MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED : { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mMagnifedViewport.isMagnifyingLocked() || isForceShowingMagnifiableBoundsLocked()) { mMagnifedViewport.setMagnifiedRegionBorderShownLocked(true, true); @@ -1039,7 +1039,7 @@ final class AccessibilityController { boolean windowsChanged = false; List<WindowInfo> windows = new ArrayList<WindowInfo>(); - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { // Do not send the windows if there is no current focus as // the window manager is still looking for where to put it. // We will do the work when we get a focus change callback. diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 10a1be52b71e..089640b32dd3 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -1924,7 +1924,7 @@ public class AppTransition implements Dump { } catch (RemoteException e) { Slog.w(TAG, "Failed to fetch app transition specs: " + e); } - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mNextAppTransitionAnimationsSpecsPending = false; overridePendingAppTransitionMultiThumb(specs, mNextAppTransitionFutureCallback, null /* finishedCallback */, @@ -2220,7 +2220,7 @@ public class AppTransition implements Dump { } private void handleAppTransitionTimeout() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final DisplayContent dc = mDisplayContent; if (dc == null) { return; diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java index 7435ea5e532f..584c1e4e3bae 100644 --- a/services/core/java/com/android/server/wm/AppWindowContainerController.java +++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java @@ -135,7 +135,7 @@ public class AppWindowContainerController final StartingData startingData; final AppWindowToken container; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "mContainer was null while trying to" + " add starting window"); @@ -169,7 +169,7 @@ public class AppWindowContainerController } if (surface != null) { boolean abort = false; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // If the window was successfully added, then // we need to remove it. if (container.removed || container.startingData == null) { @@ -219,7 +219,7 @@ public class AppWindowContainerController super(listener, service); mHandler = new H(service.mH.getLooper()); mToken = token; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { AppWindowToken atoken = mRoot.getAppWindowToken(mToken.asBinder()); if (atoken != null) { // TODO: Should this throw an exception instead? @@ -256,7 +256,7 @@ public class AppWindowContainerController } public void removeContainer(int displayId) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc == null) { Slog.w(TAG_WM, "removeAppToken: Attempted to remove binder token: " @@ -274,7 +274,7 @@ public class AppWindowContainerController } public void reparent(TaskWindowContainerController taskController, int position) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_ADD_REMOVE) Slog.i(TAG_WM, "reparent: moving app token=" + mToken + " to task=" + taskController + " at " + position); if (mContainer == null) { @@ -294,7 +294,7 @@ public class AppWindowContainerController public Configuration setOrientation(int requestedOrientation, int displayId, Configuration displayConfig, boolean freezeScreenIfNeeded) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to set orientation of non-existing app token: " + mToken); @@ -310,7 +310,7 @@ public class AppWindowContainerController } public int getOrientation() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { return SCREEN_ORIENTATION_UNSPECIFIED; } @@ -320,7 +320,7 @@ public class AppWindowContainerController } public void setDisablePreviewScreenshots(boolean disable) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to set disable screenshots of non-existing app" + " token: " + mToken); @@ -331,7 +331,7 @@ public class AppWindowContainerController } public void setVisibility(boolean visible, boolean deferHidingClient) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to set visibility of non-existing app token: " + mToken); @@ -449,7 +449,7 @@ public class AppWindowContainerController * of Keyguard flags it's going to set on its windows. */ public void notifyUnknownVisibilityLaunched() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.getDisplayContent().mUnknownAppVisibilityController.notifyLaunched( mContainer); @@ -461,7 +461,7 @@ public class AppWindowContainerController CharSequence nonLocalizedLabel, int labelRes, int icon, int logo, int windowFlags, IBinder transferFrom, boolean newTask, boolean taskSwitch, boolean processRunning, boolean allowTaskSnapshot, boolean activityCreated, boolean fromRecents) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "setAppStartingWindow: token=" + mToken + " pkg=" + pkg + " transferFrom=" + transferFrom + " newTask=" + newTask + " taskSwitch=" + taskSwitch + " processRunning=" + processRunning @@ -611,7 +611,7 @@ public class AppWindowContainerController } public void removeStartingWindow() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer.startingWindow == null) { if (mContainer.startingData != null) { // Starting window has not been added yet, but it is scheduled to be added. @@ -664,7 +664,7 @@ public class AppWindowContainerController } public void pauseKeyDispatching() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.getDisplayContent().getInputMonitor().pauseDispatchingLw(mContainer); } @@ -672,7 +672,7 @@ public class AppWindowContainerController } public void resumeKeyDispatching() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.getDisplayContent().getInputMonitor().resumeDispatchingLw(mContainer); } @@ -680,7 +680,7 @@ public class AppWindowContainerController } public void notifyAppResumed(boolean wasStopped) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to notify resumed of non-existing app token: " + mToken); return; @@ -690,7 +690,7 @@ public class AppWindowContainerController } public void notifyAppStopping() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to notify stopping on non-existing app token: " + mToken); @@ -701,7 +701,7 @@ public class AppWindowContainerController } public void notifyAppStopped() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to notify stopped of non-existing app token: " + mToken); @@ -712,7 +712,7 @@ public class AppWindowContainerController } public void startFreezingScreen(int configChanges) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to freeze screen with non-existing app token: " + mContainer); @@ -729,7 +729,7 @@ public class AppWindowContainerController } public void stopFreezingScreen(boolean force) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { return; } @@ -740,7 +740,7 @@ public class AppWindowContainerController } public void registerRemoteAnimations(RemoteAnimationDefinition definition) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "Attempted to register remote animations with non-existing app" + " token: " + mToken); @@ -775,7 +775,7 @@ public class AppWindowContainerController * Apply override app transition base on options & animation type. */ public void applyOptionsLocked(ActivityOptions pendingOptions, Intent intent) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final int animationType = pendingOptions.getAnimationType(); final DisplayContent displayContent = mContainer.getDisplayContent(); switch (animationType) { @@ -875,7 +875,7 @@ public class AppWindowContainerController * signal on the WM side. */ public void setWillCloseOrEnterPip(boolean willCloseOrEnterPip) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { return; } diff --git a/services/core/java/com/android/server/wm/DisplayWindowController.java b/services/core/java/com/android/server/wm/DisplayWindowController.java index 01d556a699e8..f7722160c63b 100644 --- a/services/core/java/com/android/server/wm/DisplayWindowController.java +++ b/services/core/java/com/android/server/wm/DisplayWindowController.java @@ -52,7 +52,7 @@ public class DisplayWindowController super(listener, WindowManagerService.getInstance()); mDisplayId = display.getDisplayId(); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final long callingIdentity = Binder.clearCallingIdentity(); try { mRoot.createDisplayContent(display, this /* controller */); @@ -75,7 +75,7 @@ public class DisplayWindowController @Override public void removeContainer() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if(mContainer == null) { if (DEBUG_DISPLAY) Slog.i(TAG_WM, "removeDisplay: could not find displayId=" + mDisplayId); @@ -102,7 +102,7 @@ public class DisplayWindowController * {@link android.hardware.display.DisplayManager.DisplayListener#onDisplayChanged(int)}. */ public void onDisplayChanged() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { if (DEBUG_DISPLAY) Slog.i(TAG_WM, "onDisplayChanged: could not find display=" + mDisplayId); @@ -118,7 +118,7 @@ public class DisplayWindowController */ public void positionChildAt(StackWindowController child, int position, boolean includingParents) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_STACK) Slog.i(TAG_WM, "positionTaskStackAt: positioning stack=" + child + " at " + position); if (mContainer == null) { @@ -140,7 +140,7 @@ public class DisplayWindowController * attempt to update the IME target before all information about the Windows have been updated. */ public void deferUpdateImeTarget() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(mDisplayId); if (dc != null) { dc.deferUpdateImeTarget(); @@ -152,7 +152,7 @@ public class DisplayWindowController * Resumes updating the IME target after deferring. See {@link #deferUpdateImeTarget()} */ public void continueUpdateImeTarget() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(mDisplayId); if (dc != null) { dc.continueUpdateImeTarget(); @@ -167,7 +167,7 @@ public class DisplayWindowController * @param moveFocusNow Specifies if we should update the focused window immediately. */ public void setFocusedApp(IBinder token, boolean moveFocusNow) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { if (DEBUG_FOCUS_LIGHT) Slog.i(TAG_WM, "setFocusedApp: could not find displayId=" + mDisplayId); @@ -213,21 +213,21 @@ public class DisplayWindowController public void prepareAppTransition(@WindowManager.TransitionType int transit, boolean alwaysKeepCurrent, @WindowManager.TransitionFlags int flags, boolean forceOverride) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId).prepareAppTransition(transit, alwaysKeepCurrent, flags, forceOverride); } } public void executeAppTransition() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId).executeAppTransition(); } } public void overridePendingAppTransition(String packageName, int enterAnim, int exitAnim, IRemoteCallback startedCallback) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId).mAppTransition.overridePendingAppTransition( packageName, enterAnim, exitAnim, startedCallback); } @@ -235,7 +235,7 @@ public class DisplayWindowController public void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth, int startHeight) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId).mAppTransition.overridePendingAppTransitionScaleUp( startX, startY, startWidth, startHeight); } @@ -243,7 +243,7 @@ public class DisplayWindowController public void overridePendingAppTransitionClipReveal(int startX, int startY, int startWidth, int startHeight) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId) .mAppTransition.overridePendingAppTransitionClipReveal(startX, startY, startWidth, startHeight); @@ -252,7 +252,7 @@ public class DisplayWindowController public void overridePendingAppTransitionThumb(GraphicBuffer srcThumb, int startX, int startY, IRemoteCallback startedCallback, boolean scaleUp) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId) .mAppTransition.overridePendingAppTransitionThumb(srcThumb, startX, startY, startedCallback, scaleUp); @@ -262,7 +262,7 @@ public class DisplayWindowController public void overridePendingAppTransitionAspectScaledThumb(GraphicBuffer srcThumb, int startX, int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, boolean scaleUp) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId) .mAppTransition.overridePendingAppTransitionAspectScaledThumb(srcThumb, startX, startY, targetWidth, targetHeight, startedCallback, scaleUp); @@ -272,7 +272,7 @@ public class DisplayWindowController public void overridePendingAppTransitionMultiThumb(AppTransitionAnimationSpec[] specs, IRemoteCallback onAnimationStartedCallback, IRemoteCallback onAnimationFinishedCallback, boolean scaleUp) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId) .mAppTransition.overridePendingAppTransitionMultiThumb(specs, onAnimationStartedCallback, onAnimationFinishedCallback, scaleUp); @@ -280,14 +280,14 @@ public class DisplayWindowController } public void overridePendingAppTransitionStartCrossProfileApps() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId) .mAppTransition.overridePendingAppTransitionStartCrossProfileApps(); } } public void overridePendingAppTransitionInPlace(String packageName, int anim) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.getDisplayContent(mDisplayId) .mAppTransition.overrideInPlaceAppTransition(packageName, anim); } @@ -299,7 +299,7 @@ public class DisplayWindowController * @return The pending app transition of the display. */ public @TransitionType int getPendingAppTransition() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mRoot.getDisplayContent(mDisplayId).mAppTransition.getAppTransition(); } } diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 84c3aa39531f..985ce0648db6 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -821,7 +821,7 @@ public class DockedStackDividerController { mService.mWaitingForDrawnCallback.run(); } mService.mWaitingForDrawnCallback = () -> { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mAnimationStartDelayed = false; if (mDelayedImeWin != null) { mDelayedImeWin.endDelayingAnimationStart(); diff --git a/services/core/java/com/android/server/wm/DragDropController.java b/services/core/java/com/android/server/wm/DragDropController.java index f42e97908724..ce8c979d3f87 100644 --- a/services/core/java/com/android/server/wm/DragDropController.java +++ b/services/core/java/com/android/server/wm/DragDropController.java @@ -104,7 +104,7 @@ class DragDropController { final boolean callbackResult = mCallback.get().prePerformDrag(window, dragToken, touchSource, touchX, touchY, thumbCenterX, thumbCenterY, data); try { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { try { if (!callbackResult) { Slog.w(TAG_WM, "IDragDropCallback rejects the performDrag request"); @@ -209,7 +209,7 @@ class DragDropController { mCallback.get().preReportDropResult(window, consumed); try { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mDragState == null) { // Most likely the drop recipient ANRed and we ended the drag // out from under it. Log the issue and move on. @@ -248,7 +248,7 @@ class DragDropController { mCallback.get().preCancelDragAndDrop(dragToken); try { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mDragState == null) { Slog.w(TAG_WM, "cancelDragAndDrop() without prepareDrag()"); throw new IllegalStateException("cancelDragAndDrop() without prepareDrag()"); @@ -277,7 +277,7 @@ class DragDropController { * @param newY Y coordinate value in dp in the screen coordinate */ void handleMotionEvent(boolean keepHandling, float newX, float newY) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (!dragDropActiveLocked()) { // The drag has ended but the clean-up message has not been processed by // window manager. Drop events that occur after this until window manager @@ -352,7 +352,7 @@ class DragDropController { Slog.w(TAG_WM, "Timeout ending drag to win " + win); } - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { // !!! TODO: ANR the drag-receiving app if (mDragState != null) { mDragState.mDragResult = false; @@ -368,14 +368,14 @@ class DragDropController { final DragState.InputInterceptor interceptor = (DragState.InputInterceptor) msg.obj; if (interceptor == null) return; - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { interceptor.tearDown(); } break; } case MSG_ANIMATION_END: { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mDragState == null) { Slog.wtf(TAG_WM, "mDragState unexpectedly became null while " + "plyaing animation"); diff --git a/services/core/java/com/android/server/wm/InputManagerCallback.java b/services/core/java/com/android/server/wm/InputManagerCallback.java index 10d77e59b0b3..f823caadad79 100644 --- a/services/core/java/com/android/server/wm/InputManagerCallback.java +++ b/services/core/java/com/android/server/wm/InputManagerCallback.java @@ -53,7 +53,7 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal return; } - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { WindowState windowState = (WindowState) inputWindowHandle.windowState; if (windowState != null) { Slog.i(TAG_WM, "WINDOW DIED " + windowState); @@ -74,7 +74,7 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal AppWindowToken appWindowToken = null; WindowState windowState = null; boolean aboveSystem = false; - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (inputWindowHandle != null) { windowState = (WindowState) inputWindowHandle.windowState; if (windowState != null) { diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index ed3e6c6ad810..0e4ab53e5c56 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -96,7 +96,7 @@ final class InputMonitor { @Override public void dismiss() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mInputMonitor.destroyInputConsumer(mWindowHandle.name)) { mInputEventReceiver.dispose(); } diff --git a/services/core/java/com/android/server/wm/PinnedStackController.java b/services/core/java/com/android/server/wm/PinnedStackController.java index 52b0241998b4..405aaab5910b 100644 --- a/services/core/java/com/android/server/wm/PinnedStackController.java +++ b/services/core/java/com/android/server/wm/PinnedStackController.java @@ -142,7 +142,7 @@ class PinnedStackController { @Override public int getDisplayRotation() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { return mDisplayInfo.rotation; } } @@ -288,7 +288,7 @@ class PinnedStackController { * will apply the default bounds to the provided snap fraction. */ Rect getDefaultBounds(float snapFraction) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final Rect insetBounds = new Rect(); getInsetBounds(insetBounds); @@ -324,7 +324,7 @@ class PinnedStackController { * new orientation of the device if necessary. */ boolean onTaskStackBoundsChanged(Rect targetBounds, Rect outBounds) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo(); if (mDisplayInfo.equals(displayInfo)) { // We are already in the right orientation, ignore @@ -481,7 +481,7 @@ class PinnedStackController { */ private void notifyMovementBoundsChanged(boolean fromImeAdjustment, boolean fromShelfAdjustment) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mPinnedStackListener == null) { return; } @@ -513,7 +513,7 @@ class PinnedStackController { * @return the bounds on the screen that the PIP can be visible in. */ private void getInsetBounds(Rect outRect) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mService.mPolicy.getStableInsetsLw(mDisplayInfo.rotation, mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, mDisplayInfo.displayCutout, mTmpInsets); outRect.set(mTmpInsets.left + mScreenEdgeInsets.x, mTmpInsets.top + mScreenEdgeInsets.y, @@ -527,7 +527,7 @@ class PinnedStackController { * controller. */ private Rect getMovementBounds(Rect stackBounds) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { return getMovementBounds(stackBounds, true /* adjustForIme */, true /* adjustForShelf */); } @@ -538,7 +538,7 @@ class PinnedStackController { * controller. */ private Rect getMovementBounds(Rect stackBounds, boolean adjustForIme, boolean adjustForShelf) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final Rect movementBounds = new Rect(); getInsetBounds(movementBounds); @@ -554,7 +554,7 @@ class PinnedStackController { * Applies the minimized offsets to the given stack bounds. */ private void applyMinimizedOffset(Rect stackBounds, Rect movementBounds) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mTmpDisplaySize.set(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight); mService.getStableInsetsLocked(mDisplayContent.getDisplayId(), mStableInsets); mSnapAlgorithm.applyMinimizedOffset(stackBounds, movementBounds, mTmpDisplaySize, diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowController.java b/services/core/java/com/android/server/wm/PinnedStackWindowController.java index 1807eeb0ed52..bbdcc62ddbc0 100644 --- a/services/core/java/com/android/server/wm/PinnedStackWindowController.java +++ b/services/core/java/com/android/server/wm/PinnedStackWindowController.java @@ -47,7 +47,7 @@ public class PinnedStackWindowController extends StackWindowController { * default bounds. */ public Rect getPictureInPictureBounds(float aspectRatio, Rect stackBounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (!mService.mSupportsPictureInPicture || mContainer == null) { return null; } @@ -78,7 +78,7 @@ public class PinnedStackWindowController extends StackWindowController { */ public void animateResizePinnedStack(Rect toBounds, Rect sourceHintBounds, int animationDuration, boolean fromFullscreen) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { throw new IllegalArgumentException("Pinned stack container not found :("); } @@ -133,7 +133,7 @@ public class PinnedStackWindowController extends StackWindowController { * Sets the current picture-in-picture aspect ratio. */ public void setPictureInPictureAspectRatio(float aspectRatio) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (!mService.mSupportsPictureInPicture || mContainer == null) { return; } @@ -160,7 +160,7 @@ public class PinnedStackWindowController extends StackWindowController { * Sets the current picture-in-picture actions. */ public void setPictureInPictureActions(List<RemoteAction> actions) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (!mService.mSupportsPictureInPicture || mContainer == null) { return; } @@ -174,7 +174,7 @@ public class PinnedStackWindowController extends StackWindowController { * from fullscreen to non-fullscreen bounds. */ public boolean deferScheduleMultiWindowModeChanged() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mContainer.deferScheduleMultiWindowModeChanged(); } } @@ -183,7 +183,7 @@ public class PinnedStackWindowController extends StackWindowController { * @return whether the bounds are currently animating to fullscreen. */ public boolean isAnimatingBoundsToFullscreen() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mContainer.isAnimatingBoundsToFullscreen(); } } @@ -192,7 +192,7 @@ public class PinnedStackWindowController extends StackWindowController { * @return whether the stack can be resized from the bounds animation. */ public boolean pinnedStackResizeDisallowed() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mContainer.pinnedStackResizeDisallowed(); } } diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java index 0ec4baf06099..f5acdccf07f4 100644 --- a/services/core/java/com/android/server/wm/RemoteAnimationController.java +++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java @@ -182,7 +182,7 @@ class RemoteAnimationController implements DeathRecipient { if (DEBUG_REMOTE_ANIMATIONS) Slog.d(TAG, "onAnimationFinished(): mPendingAnimations=" + mPendingAnimations.size()); mHandler.removeCallbacks(mTimeoutRunnable); - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { unlinkToDeathOfRunner(); releaseFinishedCallback(); mService.openSurfaceTransaction(); diff --git a/services/core/java/com/android/server/wm/RootWindowContainerController.java b/services/core/java/com/android/server/wm/RootWindowContainerController.java index 93be6e9b68e3..11762201852b 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainerController.java +++ b/services/core/java/com/android/server/wm/RootWindowContainerController.java @@ -25,7 +25,7 @@ public class RootWindowContainerController public RootWindowContainerController(RootWindowContainerListener listener) { super(listener, WindowManagerService.getInstance()); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.setController(this); } } @@ -39,7 +39,7 @@ public class RootWindowContainerController /** Move the display to the given position. */ public void positionChildAt(DisplayWindowController child, int position) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mContainer.positionChildAt(position, child.mContainer); } } diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index acc9c038bd9c..b411fad814c5 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -143,7 +143,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public void binderDied() { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mCallback.asBinder().unlinkToDeath(this, 0); mClientDead = true; killSessionLocked(); @@ -229,14 +229,14 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public void setInTouchMode(boolean mode) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mService.mInTouchMode = mode; } } @Override public boolean getInTouchMode() { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { return mService.mInTouchMode; } } @@ -244,7 +244,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public boolean performHapticFeedback(IWindow window, int effectId, boolean always) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { long ident = Binder.clearCallingIdentity(); try { return mService.mPolicy.performHapticFeedbackLw( @@ -317,7 +317,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public void setWallpaperPosition(IBinder window, float x, float y, float xStep, float yStep) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { long ident = Binder.clearCallingIdentity(); try { mService.mRoot.mWallpaperController.setWindowWallpaperPosition( @@ -331,14 +331,14 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public void wallpaperOffsetsComplete(IBinder window) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mService.mRoot.mWallpaperController.wallpaperOffsetsComplete(window); } } @Override public void setWallpaperDisplayOffset(IBinder window, int x, int y) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { long ident = Binder.clearCallingIdentity(); try { mService.mRoot.mWallpaperController.setWindowWallpaperDisplayOffset( @@ -352,7 +352,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public Bundle sendWallpaperCommand(IBinder window, String action, int x, int y, int z, Bundle extras, boolean sync) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { long ident = Binder.clearCallingIdentity(); try { return mService.mRoot.mWallpaperController.sendWindowWallpaperCommand( @@ -366,14 +366,14 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public void wallpaperCommandComplete(IBinder window, Bundle result) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mService.mRoot.mWallpaperController.wallpaperCommandComplete(window); } } @Override public void onRectangleOnScreenRequested(IBinder token, Rect rectangle) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final long identity = Binder.clearCallingIdentity(); try { mService.onRectangleOnScreenRequested(token, rectangle); diff --git a/services/core/java/com/android/server/wm/StackWindowController.java b/services/core/java/com/android/server/wm/StackWindowController.java index 40a002b39319..c920b9e639b3 100644 --- a/services/core/java/com/android/server/wm/StackWindowController.java +++ b/services/core/java/com/android/server/wm/StackWindowController.java @@ -67,7 +67,7 @@ public class StackWindowController mStackId = stackId; mHandler = new H(new WeakReference<>(this), service.mH.getLooper()); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc == null) { throw new IllegalArgumentException("Trying to add stackId=" + stackId @@ -81,7 +81,7 @@ public class StackWindowController @Override public void removeContainer() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.removeIfPossible(); super.removeContainer(); @@ -90,7 +90,7 @@ public class StackWindowController } public void reparent(int displayId, Rect outStackBounds, boolean onTop) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { throw new IllegalArgumentException("Trying to move unknown stackId=" + mStackId + " to displayId=" + displayId); @@ -108,7 +108,7 @@ public class StackWindowController } public void positionChildAt(TaskWindowContainerController child, int position) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_STACK) Slog.i(TAG_WM, "positionChildAt: positioning task=" + child + " at " + position); if (child.mContainer == null) { @@ -132,7 +132,7 @@ public class StackWindowController return; } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final Task childTask = child.mContainer; if (childTask == null) { Slog.e(TAG_WM, "positionChildAtTop: task=" + child + " not found"); @@ -155,7 +155,7 @@ public class StackWindowController return; } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final Task childTask = child.mContainer; if (childTask == null) { Slog.e(TAG_WM, "positionChildAtBottom: task=" + child + " not found"); @@ -179,7 +179,7 @@ public class StackWindowController */ public void resize(Rect bounds, SparseArray<Rect> taskBounds, SparseArray<Rect> taskTempInsetBounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { throw new IllegalArgumentException("resizeStack: stack " + this + " not found."); } @@ -194,7 +194,7 @@ public class StackWindowController } public void onPipAnimationEndResize() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mContainer.onPipAnimationEndResize(); } } @@ -204,7 +204,7 @@ public class StackWindowController */ public void getStackDockedModeBounds(Rect currentTempTaskBounds, Rect outStackBounds, Rect outTempTaskBounds, boolean ignoreVisibility) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.getStackDockedModeBoundsLocked(currentTempTaskBounds, outStackBounds, outTempTaskBounds, ignoreVisibility); @@ -216,7 +216,7 @@ public class StackWindowController } public void prepareFreezingTaskBounds() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { throw new IllegalArgumentException("prepareFreezingTaskBounds: stack " + this + " not found."); @@ -226,7 +226,7 @@ public class StackWindowController } public void getRawBounds(Rect outBounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer.matchParentBounds()) { outBounds.setEmpty(); } else { @@ -236,7 +236,7 @@ public class StackWindowController } public void getBounds(Rect outBounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.getBounds(outBounds); return; @@ -246,7 +246,7 @@ public class StackWindowController } public void getBoundsForNewConfiguration(Rect outBounds) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mContainer.getBoundsForNewConfiguration(outBounds); } } @@ -261,7 +261,7 @@ public class StackWindowController Rect nonDecorBounds, Rect stableBounds, boolean overrideWidth, boolean overrideHeight, float density, Configuration config, Configuration parentConfig, int windowingMode) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final TaskStack stack = mContainer; final DisplayContent displayContent = stack.getDisplayContent(); final DisplayInfo di = displayContent.getDisplayInfo(); diff --git a/services/core/java/com/android/server/wm/SurfaceAnimator.java b/services/core/java/com/android/server/wm/SurfaceAnimator.java index ba3d091f4a08..3ea615a3b58a 100644 --- a/services/core/java/com/android/server/wm/SurfaceAnimator.java +++ b/services/core/java/com/android/server/wm/SurfaceAnimator.java @@ -71,7 +71,7 @@ class SurfaceAnimator { private OnAnimationFinishedCallback getFinishedCallback( @Nullable Runnable animationFinishedCallback) { return anim -> { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final SurfaceAnimator target = mService.mAnimationTransferMap.remove(anim); if (target != null) { target.mInnerAnimationFinishedCallback.onAnimationFinished(anim); diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java index d2696c0479af..66ebc9b27358 100644 --- a/services/core/java/com/android/server/wm/TaskPositioner.java +++ b/services/core/java/com/android/server/wm/TaskPositioner.java @@ -159,7 +159,7 @@ class TaskPositioner { if (DEBUG_TASK_POSITIONING){ Slog.w(TAG, "ACTION_MOVE @ {" + newX + ", " + newY + "}"); } - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mDragEnded = notifyMoveLocked(newX, newY); mTask.getDimBounds(mTmpRect); } @@ -192,7 +192,7 @@ class TaskPositioner { if (mDragEnded) { final boolean wasResizing = mResizing; - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { endDragLocked(); mTask.getDimBounds(mTmpRect); } @@ -397,7 +397,7 @@ class TaskPositioner { // bounds yet. This will guarantee that the app starts the backdrop renderer before // configuration changes which could cause an activity restart. if (mResizing) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { notifyMoveLocked(startX, startY); } diff --git a/services/core/java/com/android/server/wm/TaskPositioningController.java b/services/core/java/com/android/server/wm/TaskPositioningController.java index 25148d15343a..f2d3dca27cf9 100644 --- a/services/core/java/com/android/server/wm/TaskPositioningController.java +++ b/services/core/java/com/android/server/wm/TaskPositioningController.java @@ -61,7 +61,7 @@ class TaskPositioningController { boolean startMovingTask(IWindow window, float startX, float startY) { WindowState win = null; - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { win = mService.windowForClientLocked(null, window, false); // win shouldn't be null here, pass it down to startPositioningLocked // to get warning if it's null. @@ -79,7 +79,7 @@ class TaskPositioningController { void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { mHandler.post(() -> { int taskId = -1; - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final Task task = displayContent.findTaskForResizePoint(x, y); if (task != null) { if (!startPositioningLocked(task.getTopVisibleAppMainWindow(), true /*resize*/, @@ -152,7 +152,7 @@ class TaskPositioningController { mHandler.post(() -> { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "finishPositioning"); - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mTaskPositioner != null) { mTaskPositioner.unregister(); mTaskPositioner = null; diff --git a/services/core/java/com/android/server/wm/TaskSnapshotCache.java b/services/core/java/com/android/server/wm/TaskSnapshotCache.java index 7bf4edb2c97a..8175c4a1b528 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotCache.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotCache.java @@ -58,7 +58,7 @@ class TaskSnapshotCache { @Nullable TaskSnapshot getSnapshot(int taskId, int userId, boolean restoreFromDisk, boolean reducedResolution) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { // Try the running cache. final CacheEntry entry = mRunningCache.get(taskId); if (entry != null) { diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index 0d5469bd4847..b84d20d5c63e 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -436,7 +436,7 @@ class TaskSnapshotController { // We can't take a snapshot when screen is off, so take a snapshot now! mHandler.post(() -> { try { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mTmpTasks.clear(); mService.mRoot.forAllTasks(task -> { if (task.isVisible()) { diff --git a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java index 67d2be874a31..a7b0272d4b0d 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java @@ -149,7 +149,7 @@ class TaskSnapshotSurface implements StartingSurface { final int windowFlags; final int windowPrivateFlags; final int currentOrientation; - synchronized (service.mWindowMap) { + synchronized (service.mGlobalLock) { final WindowState mainWindow = token.findMainWindow(); final Task task = token.getTask(); if (task == null) { @@ -248,7 +248,7 @@ class TaskSnapshotSurface implements StartingSurface { @Override public void remove() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final long now = SystemClock.uptimeMillis(); if (mSizeMismatch && now - mShownTime < SIZE_MISMATCH_MINIMUM_TIME_MS) { mHandler.postAtTime(this::remove, mShownTime + SIZE_MISMATCH_MINIMUM_TIME_MS); @@ -288,7 +288,7 @@ class TaskSnapshotSurface implements StartingSurface { } else { drawSizeMatchSnapshot(buffer); } - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mShownTime = SystemClock.uptimeMillis(); mHasDrawn = true; } @@ -422,7 +422,7 @@ class TaskSnapshotSurface implements StartingSurface { case MSG_REPORT_DRAW: final boolean hasDrawn; final TaskSnapshotSurface surface = (TaskSnapshotSurface) msg.obj; - synchronized (surface.mService.mWindowMap) { + synchronized (surface.mService.mGlobalLock) { hasDrawn = surface.mHasDrawn; } if (hasDrawn) { diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index f39ba6d0db74..0d98b2068d6f 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1622,7 +1622,7 @@ public class TaskStack extends WindowContainer<Task> implements public boolean setPinnedStackSize(Rect stackBounds, Rect tempTaskBounds) { // Hold the lock since this is called from the BoundsAnimator running on the UiThread - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mCancelCurrentBoundsAnimation) { return false; } @@ -1647,7 +1647,7 @@ public class TaskStack extends WindowContainer<Task> implements @Override // AnimatesBounds public boolean onAnimationStart(boolean schedulePipModeChangedCallback, boolean forceUpdate) { // Hold the lock since this is called from the BoundsAnimator running on the UiThread - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (!isAttached()) { // Don't run the animation if the stack is already detached return false; @@ -1726,7 +1726,7 @@ public class TaskStack extends WindowContainer<Task> implements @Override public boolean isAttached() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { return mDisplayContent != null; } } @@ -1735,7 +1735,7 @@ public class TaskStack extends WindowContainer<Task> implements * Called immediately prior to resizing the tasks at the end of the pinned stack animation. */ public void onPipAnimationEndResize() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mBoundsAnimating = false; for (int i = 0; i < mChildren.size(); i++) { final Task t = mChildren.get(i); @@ -1747,7 +1747,7 @@ public class TaskStack extends WindowContainer<Task> implements @Override public boolean shouldDeferStartOnMoveToFullscreen() { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { // Workaround for the recents animation -- normally we need to wait for the new activity // to show before starting the PiP animation, but because we start and show the home // activity early for the recents animation prior to the PiP animation starting, there diff --git a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java index 52f8510d6a99..53d2cb094c44 100644 --- a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java +++ b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java @@ -47,7 +47,7 @@ public class TaskTapPointerEventListener implements PointerEventListener { mDisplayContent = displayContent; mHandler = new Handler(mService.mH.getLooper()); mMoveDisplayToTop = () -> { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mDisplayContent.getParent().positionChildAt(WindowContainer.POSITION_TOP, mDisplayContent, true /* includingParents */); } diff --git a/services/core/java/com/android/server/wm/TaskWindowContainerController.java b/services/core/java/com/android/server/wm/TaskWindowContainerController.java index 8b634b1bb938..59b2055193ae 100644 --- a/services/core/java/com/android/server/wm/TaskWindowContainerController.java +++ b/services/core/java/com/android/server/wm/TaskWindowContainerController.java @@ -65,7 +65,7 @@ public class TaskWindowContainerController mTaskId = taskId; mHandler = new H(new WeakReference<>(this), service.mH.getLooper()); - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_STACK) Slog.i(TAG_WM, "TaskWindowContainerController: taskId=" + taskId + " stack=" + stackController + " bounds=" + bounds); @@ -93,7 +93,7 @@ public class TaskWindowContainerController @Override public void removeContainer() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { if (DEBUG_STACK) Slog.i(TAG_WM, "removeTask: could not find taskId=" + mTaskId); return; @@ -108,7 +108,7 @@ public class TaskWindowContainerController } public void positionChildAt(AppWindowContainerController childController, int position) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final AppWindowToken aToken = childController.mContainer; if (aToken == null) { Slog.w(TAG_WM, @@ -125,7 +125,7 @@ public class TaskWindowContainerController } public void reparent(StackWindowController stackController, int position, boolean moveParents) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_STACK) Slog.i(TAG_WM, "reparent: moving taskId=" + mTaskId + " to stack=" + stackController + " at " + position); if (mContainer == null) { @@ -144,7 +144,7 @@ public class TaskWindowContainerController } public void setResizeable(int resizeMode) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.setResizeable(resizeMode); } @@ -152,7 +152,7 @@ public class TaskWindowContainerController } public void resize(boolean relayout, boolean forced) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { throw new IllegalArgumentException("resizeTask: taskId " + mTaskId + " not found."); } @@ -165,7 +165,7 @@ public class TaskWindowContainerController } public void getBounds(Rect bounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer != null) { mContainer.getBounds(bounds); return; @@ -180,7 +180,7 @@ public class TaskWindowContainerController * @param resizing Whether to put the task into drag resize mode. */ public void setTaskDockedResizing(boolean resizing) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "setTaskDockedResizing: taskId " + mTaskId + " not found."); return; @@ -190,7 +190,7 @@ public class TaskWindowContainerController } public void cancelWindowTransition() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "cancelWindowTransition: taskId " + mTaskId + " not found."); return; @@ -200,7 +200,7 @@ public class TaskWindowContainerController } public void setTaskDescription(TaskDescription taskDescription) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { Slog.w(TAG_WM, "setTaskDescription: taskId " + mTaskId + " not found."); return; @@ -210,7 +210,7 @@ public class TaskWindowContainerController } public boolean isDragResizing() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mContainer.isDragResizing(); } } diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java index 942cdb9c1559..29e1b2013ff1 100644 --- a/services/core/java/com/android/server/wm/WallpaperController.java +++ b/services/core/java/com/android/server/wm/WallpaperController.java @@ -340,7 +340,7 @@ class WallpaperController { try { if (DEBUG_WALLPAPER) Slog.v(TAG, "Waiting for offset complete..."); - mService.mWindowMap.wait(WALLPAPER_TIMEOUT); + mService.mGlobalLock.wait(WALLPAPER_TIMEOUT); } catch (InterruptedException e) { } if (DEBUG_WALLPAPER) Slog.v(TAG, "Offset complete!"); @@ -452,7 +452,7 @@ class WallpaperController { if (mWaitingOnWallpaper != null && mWaitingOnWallpaper.mClient.asBinder() == window) { mWaitingOnWallpaper = null; - mService.mWindowMap.notifyAll(); + mService.mGlobalLock.notifyAll(); } } @@ -460,7 +460,7 @@ class WallpaperController { if (mWaitingOnWallpaper != null && mWaitingOnWallpaper.mClient.asBinder() == window) { mWaitingOnWallpaper = null; - mService.mWindowMap.notifyAll(); + mService.mGlobalLock.notifyAll(); } } diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index bc0f19aa1b3a..46bb9810f460 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -94,7 +94,7 @@ public class WindowAnimator { () -> mChoreographer = Choreographer.getSfInstance(), 0 /* timeout */); mAnimationFrameCallback = frameTimeNs -> { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mAnimationFrameCallbackScheduled = false; } animate(frameTimeNs); @@ -130,7 +130,7 @@ public class WindowAnimator { */ private void animate(long frameTimeNs) { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (!mInitialized) { return; } @@ -139,7 +139,7 @@ public class WindowAnimator { scheduleAnimation(); } - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { mCurrentTime = frameTimeNs / TimeUtils.NANOS_PER_MS; mBulkUpdateParams = SET_ORIENTATION_CHANGE_COMPLETE; mAnimating = false; diff --git a/services/core/java/com/android/server/wm/WindowContainerController.java b/services/core/java/com/android/server/wm/WindowContainerController.java index eb23fafb47f0..7cb89c5ae1fe 100644 --- a/services/core/java/com/android/server/wm/WindowContainerController.java +++ b/services/core/java/com/android/server/wm/WindowContainerController.java @@ -32,7 +32,7 @@ class WindowContainerController<E extends WindowContainer, I extends WindowConta final WindowManagerService mService; final RootWindowContainer mRoot; - final WindowHashMap mWindowMap; + final WindowManagerGlobalLock mGlobalLock; // The window container this controller owns. E mContainer; @@ -43,7 +43,7 @@ class WindowContainerController<E extends WindowContainer, I extends WindowConta mListener = listener; mService = service; mRoot = mService != null ? mService.mRoot : null; - mWindowMap = mService != null ? mService.mWindowMap : null; + mGlobalLock = mService != null ? mService.mGlobalLock : null; } void setContainer(E container) { @@ -73,7 +73,7 @@ class WindowContainerController<E extends WindowContainer, I extends WindowConta @Override public void onOverrideConfigurationChanged(Configuration overrideConfiguration) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mContainer == null) { return; } diff --git a/services/core/java/com/android/server/wm/WindowManagerGlobalLock.java b/services/core/java/com/android/server/wm/WindowManagerGlobalLock.java new file mode 100644 index 000000000000..7ce11eebe0dd --- /dev/null +++ b/services/core/java/com/android/server/wm/WindowManagerGlobalLock.java @@ -0,0 +1,9 @@ +package com.android.server.wm; + +/** + * Class that is used to generate an instance of the WM global lock. We are only doing this because + * we need a class for the pattern used in frameworks/base/services/core/Android.bp for CPU boost + * in the WM critical section. + */ +public class WindowManagerGlobalLock { +} diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 96fc2e241a48..e456d8d63c4e 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -437,18 +437,11 @@ public class WindowManagerService extends IWindowManager.Stub */ final ArraySet<Session> mSessions = new ArraySet<>(); - /** - * Mapping from an IWindow IBinder to the server's Window object. - * This is also used as the lock for all of our state. - * NOTE: Never call into methods that lock ActivityManagerService while holding this object. - */ + /** Mapping from an IWindow IBinder to the server's Window object. */ final WindowHashMap mWindowMap = new WindowHashMap(); - /** - * List of window tokens that have finished starting their application, - * and now need to have the policy remove their windows. - */ - final ArrayList<AppWindowToken> mFinishedStarting = new ArrayList<>(); + /** Global service lock used by the package the owns this service. */ + WindowManagerGlobalLock mGlobalLock = new WindowManagerGlobalLock(); /** * List of app window tokens that are waiting for replacing windows. If the @@ -780,7 +773,7 @@ public class WindowManagerService extends IWindowManager.Stub void openSurfaceTransaction() { try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "openSurfaceTransaction"); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { SurfaceControl.openTransaction(); } } finally { @@ -795,7 +788,7 @@ public class WindowManagerService extends IWindowManager.Stub void closeSurfaceTransaction(String where) { try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "closeSurfaceTransaction"); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { try { traceStateLocked(where); } finally { @@ -937,7 +930,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void onLowPowerModeChanged(PowerSaveState result) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final boolean enabled = result.batterySaverEnabled; if (mAnimationsDisabled != enabled && !mAllowAnimationsInLowPowerMode) { mAnimationsDisabled = enabled; @@ -1084,7 +1077,7 @@ public class WindowManagerService extends IWindowManager.Stub final int callingUid = Binder.getCallingUid(); final int type = attrs.type; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (!mDisplayReady) { throw new IllegalStateException("Display has not been initialialized"); } @@ -1594,7 +1587,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Only system can call refreshScreenCaptureDisabled."); } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { // Update secure surface for all windows belonging to this user. mRoot.setSecureSurfaceState(userId, DevicePolicyCache.getInstance().getScreenCaptureDisabled(userId)); @@ -1602,7 +1595,7 @@ public class WindowManagerService extends IWindowManager.Stub } void removeWindow(Session session, IWindow client) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { WindowState win = windowForClientLocked(session, client, false); if (win == null) { return; @@ -1683,13 +1676,13 @@ public class WindowManagerService extends IWindowManager.Stub } private void updateHiddenWhileSuspendedState(ArraySet<String> packages, boolean suspended) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.updateHiddenWhileSuspendedState(packages, suspended); } } private void updateAppOpsState() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mRoot.updateAppOpsState(); } } @@ -1720,7 +1713,7 @@ public class WindowManagerService extends IWindowManager.Stub void setTransparentRegionWindow(Session session, IWindow client, Region region) { long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState w = windowForClientLocked(session, client, false); if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(w, "transparentRegionHint=" + region, false); @@ -1738,7 +1731,7 @@ public class WindowManagerService extends IWindowManager.Stub Rect visibleInsets, Region touchableRegion) { long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState w = windowForClientLocked(session, client, false); if (DEBUG_LAYOUT) Slog.d(TAG, "setInsetsWindow " + w + ", contentInsets=" + w.mGivenContentInsets + " -> " + contentInsets @@ -1773,7 +1766,7 @@ public class WindowManagerService extends IWindowManager.Stub public void getWindowDisplayFrame(Session session, IWindow client, Rect outDisplayFrame) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { WindowState win = windowForClientLocked(session, client, false); if (win == null) { outDisplayFrame.setEmpty(); @@ -1784,7 +1777,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void onRectangleOnScreenRequested(IBinder token, Rect rectangle) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mAccessibilityController != null) { WindowState window = mWindowMap.get(token); //TODO (multidisplay): Magnification is supported only for the default display. @@ -1796,14 +1789,14 @@ public class WindowManagerService extends IWindowManager.Stub } public IWindowId getWindowId(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState window = mWindowMap.get(token); return window != null ? window.mWindowId : null; } } public void pokeDrawLock(Session session, IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState window = windowForClientLocked(session, token, false); if (window != null) { window.pokeDrawLockLw(mDrawLockTimeoutMillis); @@ -1828,7 +1821,7 @@ public class WindowManagerService extends IWindowManager.Stub long origId = Binder.clearCallingIdentity(); final int displayId; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { WindowState win = windowForClientLocked(session, client, false); if (win == null) { return 0; @@ -2222,7 +2215,7 @@ public class WindowManagerService extends IWindowManager.Stub final long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState win = windowForClientLocked(session, client, false); if (win == null) { return false; @@ -2237,7 +2230,7 @@ public class WindowManagerService extends IWindowManager.Stub void finishDrawingWindow(Session session, IWindow client) { final long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState win = windowForClientLocked(session, client, false); if (DEBUG_ADD_REMOVE) Slog.d(TAG_WM, "finishDrawingWindow: " + win + " mDrawState=" + (win != null ? win.mWinAnimator.drawStateToString() : "null")); @@ -2277,7 +2270,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc == null) { Slog.w(TAG_WM, "addWindowToken: Attempted to add token: " + binder @@ -2309,7 +2302,7 @@ public class WindowManagerService extends IWindowManager.Stub final long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc == null) { Slog.w(TAG_WM, "removeWindowToken: Attempted to remove token: " + binder @@ -2347,7 +2340,7 @@ public class WindowManagerService extends IWindowManager.Stub final Configuration config; final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { config = updateOrientationFromAppTokensLocked(currentConfig, freezeThisOneIfNeeded, displayId, forceUpdate); } @@ -2443,7 +2436,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mWaitingForConfig) { mWaitingForConfig = false; mLastFinishedFreezeSource = "new-config"; @@ -2468,7 +2461,7 @@ public class WindowManagerService extends IWindowManager.Stub public void overridePendingAppTransitionMultiThumbFuture( IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback callback, boolean scaleUp) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { // TODO(multi-display): sysui using this api only support default display. mRoot.getDisplayContent(DEFAULT_DISPLAY) .mAppTransition.overridePendingAppTransitionMultiThumbFuture(specsFuture, @@ -2483,7 +2476,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException( "Requires CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS permission"); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // TODO(multi-display): sysui using this api only support default display. mRoot.getDisplayContent(DEFAULT_DISPLAY) .mAppTransition.overridePendingAppTransitionRemote(remoteAnimationAdapter); @@ -2509,7 +2502,7 @@ public class WindowManagerService extends IWindowManager.Stub IRecentsAnimationRunner recentsAnimationRunner, RecentsAnimationController.RecentsAnimationCallbacks callbacks, int displayId, SparseBooleanArray recentTaskIds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRecentsAnimationController = new RecentsAnimationController(this, recentsAnimationRunner, callbacks, displayId); mRoot.getDisplayContent(displayId).mAppTransition.updateBooster(); @@ -2531,7 +2524,7 @@ public class WindowManagerService extends IWindowManager.Stub * {@link RecentsAnimation#startRecentsActivity}. */ public boolean canStartRecentsAnimation() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // TODO(multi-display): currently only default display support recent activity if (getDefaultDisplayContentLocked().mAppTransition.isTransitionSet()) { return false; @@ -2555,7 +2548,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void cleanupRecentsAnimation(@RecentsAnimationController.ReorderMode int reorderMode) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mRecentsAnimationController != null) { final RecentsAnimationController controller = mRecentsAnimationController; mRecentsAnimationController = null; @@ -2567,7 +2560,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void setAppFullscreen(IBinder token, boolean toOpaque) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken atoken = mRoot.getAppWindowToken(token); if (atoken != null) { atoken.setFillsParent(toOpaque); @@ -2578,7 +2571,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void setWindowOpaque(IBinder token, boolean isOpaque) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { setWindowOpaqueLocked(token, isOpaque); } } @@ -2594,7 +2587,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void setDockedStackCreateState(int mode, Rect bounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { setDockedStackCreateStateLocked(mode, bounds); } } @@ -2605,7 +2598,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void checkSplitScreenMinimizedChanged(boolean animate) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); displayContent.getDockedDividerController().checkMinimizeChanged(animate); } @@ -2619,7 +2612,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void getStackBounds(int windowingMode, int activityType, Rect bounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final TaskStack stack = mRoot.getStack(windowingMode, activityType); if (stack != null) { stack.getBounds(bounds); @@ -2666,7 +2659,7 @@ public class WindowManagerService extends IWindowManager.Stub * layouting will be resumed once the last caller has called {@link #continueSurfaceLayout} */ public void deferSurfaceLayout() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mWindowPlacerLocked.deferLayout(); } } @@ -2675,7 +2668,7 @@ public class WindowManagerService extends IWindowManager.Stub * Resumes layout passes after deferring them. See {@link #deferSurfaceLayout()} */ public void continueSurfaceLayout() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mWindowPlacerLocked.continueLayout(); } } @@ -2685,7 +2678,7 @@ public class WindowManagerService extends IWindowManager.Stub * {@link LayoutParams#FLAG_SHOW_WHEN_LOCKED} set */ public boolean containsShowWhenLockedWindow(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken wtoken = mRoot.getAppWindowToken(token); return wtoken != null && wtoken.containsShowWhenLockedWindow(); } @@ -2696,7 +2689,7 @@ public class WindowManagerService extends IWindowManager.Stub * {@link LayoutParams#FLAG_DISMISS_KEYGUARD} set */ public boolean containsDismissKeyguardWindow(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken wtoken = mRoot.getAppWindowToken(token); return wtoken != null && wtoken.containsDismissKeyguardWindow(); } @@ -2709,26 +2702,26 @@ public class WindowManagerService extends IWindowManager.Stub */ void notifyKeyguardFlagsChanged(@Nullable Runnable callback, int displayId) { final Runnable wrappedCallback = callback != null - ? () -> { synchronized (mWindowMap) { callback.run(); } } + ? () -> { synchronized (mGlobalLock) { callback.run(); } } : null; mH.obtainMessage(H.NOTIFY_KEYGUARD_FLAGS_CHANGED, displayId, 0, wrappedCallback).sendToTarget(); } public boolean isKeyguardTrusted() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mPolicy.isKeyguardTrustedLw(); } } public void setKeyguardGoingAway(boolean keyguardGoingAway) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mKeyguardGoingAway = keyguardGoingAway; } } public void setKeyguardOrAodShowingOnDefaultDisplay(boolean showing) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mKeyguardOrAodShowingOnDefaultDisplay = showing; } } @@ -2744,7 +2737,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires FREEZE_SCREEN permission"); } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (!mClientFreezingScreen) { mClientFreezingScreen = true; final long origId = Binder.clearCallingIdentity(); @@ -2766,7 +2759,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires FREEZE_SCREEN permission"); } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mClientFreezingScreen) { mClientFreezingScreen = false; mLastFinishedFreezeSource = "client"; @@ -2869,7 +2862,7 @@ public class WindowManagerService extends IWindowManager.Stub } public boolean isShowingDream() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mPolicy.isShowingDreamLw(); } } @@ -2879,13 +2872,13 @@ public class WindowManagerService extends IWindowManager.Stub if (!checkCallingPermission(permission.CONTROL_KEYGUARD, "dismissKeyguard")) { throw new SecurityException("Requires CONTROL_KEYGUARD permission"); } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mPolicy.dismissKeyguardLw(callback, message); } } public void onKeyguardOccludedChanged(boolean occluded) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mPolicy.onKeyguardOccludedChangedLw(occluded); } } @@ -2897,7 +2890,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires INTERACT_ACROSS_USERS_FULL permission"); } mPolicy.setSwitchingUser(switching); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mSwitchingUser = switching; } } @@ -2908,7 +2901,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void closeSystemDialogs(String reason) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mRoot.closeSystemDialogs(reason); } } @@ -2992,7 +2985,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public float getCurrentAnimatorScale() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { return mAnimationsDisabled ? 0 : mAnimatorDurationScaleSetting; } } @@ -3003,7 +2996,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void registerPointerEventListener(PointerEventListener listener, int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.registerPointerEventListener(listener); @@ -3013,7 +3006,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void unregisterPointerEventListener(PointerEventListener listener, int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.unregisterPointerEventListener(listener); @@ -3092,13 +3085,13 @@ public class WindowManagerService extends IWindowManager.Stub } public void setCurrentProfileIds(final int[] currentProfileIds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mCurrentProfileIds = currentProfileIds; } } public void setCurrentUser(final int newUserId, final int[] currentProfileIds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mCurrentUserId = newUserId; mCurrentProfileIds = currentProfileIds; mPolicy.setCurrentUserLw(newUserId); @@ -3142,7 +3135,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void enableScreenAfterBoot() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_BOOT) { RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); @@ -3168,7 +3161,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void enableScreenIfNeeded() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { enableScreenIfNeededLocked(); } } @@ -3192,7 +3185,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void performBootTimeout() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (mDisplayEnabled) { return; } @@ -3210,7 +3203,7 @@ public class WindowManagerService extends IWindowManager.Stub } private void performEnableScreen() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_BOOT) Slog.i(TAG_WM, "performEnableScreen: mDisplayEnabled=" + mDisplayEnabled + " mForceDisplayEnabled=" + mForceDisplayEnabled + " mShowingBootMessages=" + mShowingBootMessages @@ -3297,7 +3290,7 @@ public class WindowManagerService extends IWindowManager.Stub public void showBootMessage(final CharSequence msg, final boolean always) { boolean first = false; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_BOOT) { RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); @@ -3343,7 +3336,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setInTouchMode(boolean mode) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mInTouchMode = mode; } } @@ -3353,7 +3346,7 @@ public class WindowManagerService extends IWindowManager.Stub && mContext.getResources().getBoolean( com.android.internal.R.bool.config_windowShowCircularMask)) { final int currentUserId; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { currentUserId = mCurrentUserId; } // Device configuration calls for a circular display mask, but we only enable the mask @@ -3378,7 +3371,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void showCircularMask(boolean visible) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, ">>> OPEN TRANSACTION showCircularMask(visible=" + visible + ")"); @@ -3412,7 +3405,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void showEmulatorDisplayOverlay() { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM, ">>> OPEN TRANSACTION showEmulatorDisplayOverlay"); @@ -3453,7 +3446,7 @@ public class WindowManagerService extends IWindowManager.Stub private void showStrictModeViolation(int arg, int pid) { final boolean on = arg != 0; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { // Ignoring requests to enable the red border from clients which aren't on screen. // (e.g. Broadcast Receivers in the background..) if (on && !mRoot.canShowStrictModeViolation(pid)) { @@ -3492,7 +3485,7 @@ public class WindowManagerService extends IWindowManager.Stub } try { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper"); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mRoot.mWallpaperController.screenshotWallpaperLocked(); } } finally { @@ -3512,7 +3505,7 @@ public class WindowManagerService extends IWindowManager.Stub } final Bitmap bm; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(DEFAULT_DISPLAY); if (displayContent == null) { if (DEBUG_SCREENSHOT) { @@ -3549,7 +3542,7 @@ public class WindowManagerService extends IWindowManager.Stub * model. */ public void removeObsoleteTaskFiles(ArraySet<Integer> persistentTaskIds, int[] runningUserIds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mTaskSnapshotController.removeObsoleteTaskFiles(persistentTaskIds, runningUserIds); } } @@ -3579,7 +3572,7 @@ public class WindowManagerService extends IWindowManager.Stub long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent display = mRoot.getDisplayContent(displayId); if (display == null) { Slog.w(TAG, "Trying to freeze rotation for a missing display."); @@ -3615,7 +3608,7 @@ public class WindowManagerService extends IWindowManager.Stub long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent display = mRoot.getDisplayContent(displayId); if (display == null) { Slog.w(TAG, "Trying to thaw rotation for a missing display."); @@ -3637,7 +3630,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean isDisplayRotationFrozen(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent display = mRoot.getDisplayContent(displayId); if (display == null) { Slog.w(TAG, "Trying to thaw rotation for a missing display."); @@ -3669,7 +3662,7 @@ public class WindowManagerService extends IWindowManager.Stub long origId = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { boolean layoutNeeded = false; final int displayCount = mRoot.mChildren.size(); for (int i = 0; i < displayCount; ++i) { @@ -3703,14 +3696,14 @@ public class WindowManagerService extends IWindowManager.Stub @Override public WindowManagerPolicy.DisplayContentInfo getDefaultDisplayContentInfo() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return getDefaultDisplayContentLocked(); } } @Override public int getDefaultDisplayRotation() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return getDefaultDisplayContentLocked().getRotation(); } } @@ -3718,7 +3711,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int watchRotation(IRotationWatcher watcher, int displayId) { final DisplayContent displayContent; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { displayContent = mRoot.getDisplayContent(displayId); } if (displayContent == null) { @@ -3730,7 +3723,7 @@ public class WindowManagerService extends IWindowManager.Stub IBinder.DeathRecipient dr = new IBinder.DeathRecipient() { @Override public void binderDied() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { for (int i=0; i<mRotationWatchers.size(); i++) { if (watcherBinder == mRotationWatchers.get(i).mWatcher.asBinder()) { RotationWatcher removed = mRotationWatchers.remove(i); @@ -3745,7 +3738,7 @@ public class WindowManagerService extends IWindowManager.Stub } }; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { try { watcher.asBinder().linkToDeath(dr, 0); mRotationWatchers.add(new RotationWatcher(watcher, dr, displayId)); @@ -3760,7 +3753,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void removeRotationWatcher(IRotationWatcher watcher) { final IBinder watcherBinder = watcher.asBinder(); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { for (int i=0; i<mRotationWatchers.size(); i++) { RotationWatcher rotationWatcher = mRotationWatchers.get(i); if (watcherBinder == rotationWatcher.mWatcher.asBinder()) { @@ -3778,7 +3771,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean registerWallpaperVisibilityListener(IWallpaperVisibilityListener listener, int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent == null) { throw new IllegalArgumentException("Trying to register visibility event " @@ -3792,7 +3785,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void unregisterWallpaperVisibilityListener(IWallpaperVisibilityListener listener, int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mWallpaperVisibilityListeners .unregisterWallpaperVisibilityListener(listener, displayId); } @@ -3800,7 +3793,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int getPreferredOptionsPanelGravity(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent == null) { return Gravity.CENTER | Gravity.BOTTOM; @@ -3918,7 +3911,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean result = true; final ArrayList<WindowState> windows = new ArrayList(); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.forAllWindows(w -> { windows.add(w); }, false /* traverseTopToBottom */); @@ -4100,20 +4093,20 @@ public class WindowManagerService extends IWindowManager.Stub } public void addWindowChangeListener(WindowChangeListener listener) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mWindowChangeListeners.add(listener); } } public void removeWindowChangeListener(WindowChangeListener listener) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mWindowChangeListeners.remove(listener); } } private void notifyWindowsChanged() { WindowChangeListener[] windowChangeListeners; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if(mWindowChangeListeners.isEmpty()) { return; } @@ -4128,7 +4121,7 @@ public class WindowManagerService extends IWindowManager.Stub private void notifyFocusChanged() { WindowChangeListener[] windowChangeListeners; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if(mWindowChangeListeners.isEmpty()) { return; } @@ -4147,7 +4140,7 @@ public class WindowManagerService extends IWindowManager.Stub return getFocusedWindow(); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mRoot.getWindow((w) -> System.identityHashCode(w) == hashCode); } } @@ -4166,7 +4159,7 @@ public class WindowManagerService extends IWindowManager.Stub // E.g. changing device rotation by 180 degrees. Go ahead and perform surface // placement to unfreeze the display since we froze it when the rotation was updated // in DisplayContent#updateRotationUnchecked. - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mWaitingForConfig) { mWaitingForConfig = false; mLastFinishedFreezeSource = "config-unchanged"; @@ -4183,7 +4176,7 @@ public class WindowManagerService extends IWindowManager.Stub } public Configuration computeNewConfiguration(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return computeNewConfigurationLocked(displayId); } } @@ -4201,7 +4194,7 @@ public class WindowManagerService extends IWindowManager.Stub void notifyHardKeyboardStatusChange() { final boolean available; final WindowManagerInternal.OnHardKeyboardStatusChangeListener listener; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { listener = mHardKeyboardStatusChangeListener; available = mHardKeyboardAvailable; } @@ -4223,7 +4216,7 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mEventDispatchingEnabled = enabled; if (mDisplayEnabled) { mInputManagerCallback.setEventDispatchingLw(enabled); @@ -4232,7 +4225,7 @@ public class WindowManagerService extends IWindowManager.Stub } private WindowState getFocusedWindow() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return getFocusedWindowLocked(); } } @@ -4301,7 +4294,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void displayReady() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mMaxUiWidth > 0) { mRoot.forAllDisplays(displayContent -> displayContent.setMaxUiWidth(mMaxUiWidth)); } @@ -4425,7 +4418,7 @@ public class WindowManagerService extends IWindowManager.Stub AccessibilityController accessibilityController = null; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { // TODO(multidisplay): Accessibility supported only of default desiplay. if (mAccessibilityController != null && displayContent.isDefaultDisplay) { accessibilityController = mAccessibilityController; @@ -4469,7 +4462,7 @@ public class WindowManagerService extends IWindowManager.Stub final DisplayContent displayContent = (DisplayContent) msg.obj; ArrayList<WindowState> losers; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { losers = displayContent.mLosingFocus; displayContent.mLosingFocus = new ArrayList<>(); } @@ -4484,7 +4477,7 @@ public class WindowManagerService extends IWindowManager.Stub case WINDOW_FREEZE_TIMEOUT: { final DisplayContent displayContent = (DisplayContent) msg.obj; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { displayContent.onWindowFreezeTimeout(); } break; @@ -4532,7 +4525,7 @@ public class WindowManagerService extends IWindowManager.Stub } case FORCE_GC: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // Since we're holding both mWindowMap and mAnimator we don't need to // hold mAnimator.mLayoutToAnim. if (mAnimator.isAnimating() || mAnimator.isAnimationScheduled()) { @@ -4557,7 +4550,7 @@ public class WindowManagerService extends IWindowManager.Stub } case APP_FREEZE_TIMEOUT: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { Slog.w(TAG_WM, "App freeze timeout expired."); mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_TIMEOUT; for (int i = mAppFreezeListeners.size() - 1; i >=0 ; --i) { @@ -4568,7 +4561,7 @@ public class WindowManagerService extends IWindowManager.Stub } case CLIENT_FREEZE_TIMEOUT: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mClientFreezingScreen) { mClientFreezingScreen = false; mLastFinishedFreezeSource = "client-timeout"; @@ -4595,7 +4588,7 @@ public class WindowManagerService extends IWindowManager.Stub case REPORT_WINDOWS_CHANGE: { if (mWindowsChanged) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mWindowsChanged = false; } notifyWindowsChanged(); @@ -4615,7 +4608,7 @@ public class WindowManagerService extends IWindowManager.Stub case WAITING_FOR_DRAWN_TIMEOUT: { Runnable callback = null; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { Slog.w(TAG_WM, "Timeout waiting for drawn: undrawn=" + mWaitingForDrawn); mWaitingForDrawn.clear(); callback = mWaitingForDrawnCallback; @@ -4650,7 +4643,7 @@ public class WindowManagerService extends IWindowManager.Stub break; case ALL_WINDOWS_DRAWN: { Runnable callback; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { callback = mWaitingForDrawnCallback; mWaitingForDrawnCallback = null; } @@ -4671,7 +4664,7 @@ public class WindowManagerService extends IWindowManager.Stub } else { ArrayList<IWindowSessionCallback> callbacks = new ArrayList<IWindowSessionCallback>(); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { for (int i=0; i<mSessions.size(); i++) { callbacks.add(mSessions.valueAt(i).mCallback); } @@ -4688,7 +4681,7 @@ public class WindowManagerService extends IWindowManager.Stub break; case CHECK_IF_BOOT_ANIMATION_FINISHED: { final boolean bootAnimationComplete; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (DEBUG_BOOT) Slog.i(TAG_WM, "CHECK_IF_BOOT_ANIMATION_FINISHED:"); bootAnimationComplete = checkBootAnimationCompleteLocked(); } @@ -4698,14 +4691,14 @@ public class WindowManagerService extends IWindowManager.Stub } break; case RESET_ANR_MESSAGE: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mLastANRState = null; } mAtmInternal.clearSavedANRState(); } break; case WALLPAPER_DRAW_PENDING_TIMEOUT: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mRoot.mWallpaperController.processWallpaperDrawPendingTimeout()) { mWindowPlacerLocked.performSurfacePlacement(); } @@ -4713,7 +4706,7 @@ public class WindowManagerService extends IWindowManager.Stub } break; case UPDATE_DOCKED_STACK_DIVIDER: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); displayContent.getDockedDividerController().reevaluateVisibility(false); displayContent.adjustForImeIfNeeded(); @@ -4721,7 +4714,7 @@ public class WindowManagerService extends IWindowManager.Stub } break; case WINDOW_REPLACEMENT_TIMEOUT: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { for (int i = mWindowReplacementTimeouts.size() - 1; i >= 0; i--) { final AppWindowToken token = mWindowReplacementTimeouts.get(i); token.onWindowReplacementTimeout(); @@ -4745,7 +4738,7 @@ public class WindowManagerService extends IWindowManager.Stub break; case WINDOW_HIDE_TIMEOUT: { final WindowState window = (WindowState) msg.obj; - synchronized(mWindowMap) { + synchronized (mGlobalLock) { // TODO: This is all about fixing b/21693547 // where partially initialized Toasts get stuck // around and keep the screen on. We'd like @@ -4769,14 +4762,14 @@ public class WindowManagerService extends IWindowManager.Stub } break; case RESTORE_POINTER_ICON: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { restorePointerIconLocked((DisplayContent)msg.obj, msg.arg1, msg.arg2); } } break; case SEAMLESS_ROTATION_TIMEOUT: { final DisplayContent displayContent = (DisplayContent) msg.obj; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { displayContent.onSeamlessRotationTimeout(); } } @@ -4798,7 +4791,7 @@ public class WindowManagerService extends IWindowManager.Stub } break; case ANIMATION_FAILSAFE: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mRecentsAnimationController != null) { mRecentsAnimationController.scheduleFailsafe(); } @@ -4806,7 +4799,7 @@ public class WindowManagerService extends IWindowManager.Stub } break; case RECOMPUTE_FOCUS: { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /* updateInputWindows */); } @@ -4844,7 +4837,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void getInitialDisplaySize(int displayId, Point size) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { size.x = displayContent.mInitialDisplayWidth; @@ -4855,7 +4848,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void getBaseDisplaySize(int displayId, Point size) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { size.x = displayContent.mBaseDisplayWidth; @@ -4875,7 +4868,7 @@ public class WindowManagerService extends IWindowManager.Stub final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.setForcedSize(width, height); @@ -4897,7 +4890,7 @@ public class WindowManagerService extends IWindowManager.Stub final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.setForcedScalingMode(mode); @@ -4969,7 +4962,7 @@ public class WindowManagerService extends IWindowManager.Stub final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.setForcedSize(displayContent.mInitialDisplayWidth, @@ -4983,7 +4976,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int getInitialDisplayDensity(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { return displayContent.mInitialDisplayDensity; @@ -4994,7 +4987,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int getBaseDisplayDensity(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) { return displayContent.mBaseDisplayDensity; @@ -5017,7 +5010,7 @@ public class WindowManagerService extends IWindowManager.Stub null); final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.setForcedDensity(density, targetUserId); @@ -5042,7 +5035,7 @@ public class WindowManagerService extends IWindowManager.Stub null); final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.setForcedDensity(displayContent.mInitialDisplayDensity, @@ -5108,7 +5101,7 @@ public class WindowManagerService extends IWindowManager.Stub } final long ident = Binder.clearCallingIdentity(); try { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { setOverscanLocked(displayContent, left, top, right, bottom); @@ -5261,7 +5254,7 @@ public class WindowManagerService extends IWindowManager.Stub } void requestTraversal() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mWindowPlacerLocked.requestTraversal(); } } @@ -5510,7 +5503,7 @@ public class WindowManagerService extends IWindowManager.Stub public void setRecentsVisibility(boolean visible) { mAtmInternal.enforceCallerIsRecentsOrHasPermission(android.Manifest.permission.STATUS_BAR, "setRecentsVisibility()"); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mPolicy.setRecentsVisibilityLw(visible); } } @@ -5523,7 +5516,7 @@ public class WindowManagerService extends IWindowManager.Stub + android.Manifest.permission.STATUS_BAR); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mPolicy.setPipVisibilityLw(visible); } } @@ -5532,7 +5525,7 @@ public class WindowManagerService extends IWindowManager.Stub public void setShelfHeight(boolean visible, int shelfHeight) { mAtmInternal.enforceCallerIsRecentsOrHasPermission(android.Manifest.permission.STATUS_BAR, "setShelfHeight()"); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { getDefaultDisplayContentLocked().getPinnedStackController().setAdjustedForShelf(visible, shelfHeight); } @@ -5546,7 +5539,7 @@ public class WindowManagerService extends IWindowManager.Stub + android.Manifest.permission.STATUS_BAR); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mLastStatusBarVisibility = visibility; visibility = mPolicy.adjustSystemUiVisibilityLw(visibility); updateStatusBarVisibilityLocked(visibility); @@ -5560,7 +5553,7 @@ public class WindowManagerService extends IWindowManager.Stub + android.Manifest.permission.STATUS_BAR); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mPolicy.setNavBarVirtualKeyHapticFeedbackEnabledLw(enabled); } } @@ -5585,7 +5578,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void reevaluateStatusBarVisibility() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { int visibility = mPolicy.adjustSystemUiVisibilityLw(mLastStatusBarVisibility); if (updateStatusBarVisibilityLocked(visibility)) { mWindowPlacerLocked.requestTraversal(); @@ -5601,7 +5594,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override @WindowManagerPolicy.NavigationBarPosition public int getNavBarPosition() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // Perform layout if it was scheduled before to make sure that we get correct nav bar // position when doing rotations. final DisplayContent defaultDisplayContent = getDefaultDisplayContentLocked(); @@ -5614,7 +5607,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public WindowManagerPolicy.InputConsumer createInputConsumer(Looper looper, String name, InputEventReceiver.Factory inputEventReceiverFactory, int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { return displayContent.getInputMonitor().createInputConsumer(looper, name, @@ -5628,7 +5621,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void createInputConsumer(IBinder token, String name, int displayId, InputChannel inputChannel) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { DisplayContent display = mRoot.getDisplayContent(displayId); if (display != null) { display.getInputMonitor().createInputConsumer(token, name, inputChannel, @@ -5639,7 +5632,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean destroyInputConsumer(String name, int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { DisplayContent display = mRoot.getDisplayContent(displayId); if (display != null) { return display.getInputMonitor().destroyInputConsumer(name); @@ -5653,7 +5646,7 @@ public class WindowManagerService extends IWindowManager.Stub if (mContext.checkCallingOrSelfPermission(RESTRICTED_VR_ACCESS) != PERMISSION_GRANTED) { throw new SecurityException("getCurrentImeTouchRegion is restricted to VR services"); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final Region r = new Region(); // TODO(b/111080190): this method is only return the recent focused IME touch region, // For Multi-Session IME, will need to add API for given display Id to @@ -5694,7 +5687,7 @@ public class WindowManagerService extends IWindowManager.Stub "clearWindowContentFrameStats()")) { throw new SecurityException("Requires FRAME_STATS permission"); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState windowState = mWindowMap.get(token); if (windowState == null) { return false; @@ -5713,7 +5706,7 @@ public class WindowManagerService extends IWindowManager.Stub "getWindowContentFrameStats()")) { throw new SecurityException("Requires FRAME_STATS permission"); } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState windowState = mWindowMap.get(token); if (windowState == null) { return null; @@ -5734,7 +5727,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void notifyAppRelaunching(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindow = mRoot.getAppWindowToken(token); if (appWindow != null) { appWindow.startRelaunching(); @@ -5743,7 +5736,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void notifyAppRelaunchingFinished(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindow = mRoot.getAppWindowToken(token); if (appWindow != null) { appWindow.finishRelaunching(); @@ -5752,7 +5745,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void notifyAppRelaunchesCleared(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindow = mRoot.getAppWindowToken(token); if (appWindow != null) { appWindow.clearRelaunching(); @@ -5761,7 +5754,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void notifyAppResumedFinished(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindow = mRoot.getAppWindowToken(token); if (appWindow != null) { appWindow.getDisplayContent().mUnknownAppVisibilityController @@ -5774,7 +5767,7 @@ public class WindowManagerService extends IWindowManager.Stub * Returns true if the callingUid has any window currently visible to the user. */ public boolean isAnyWindowVisibleForUid(int callingUid) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mRoot.forAllWindows(w -> { return w.getOwningUid() == callingUid && w.isVisible(); }, true /* traverseTopToBottom */); @@ -5788,7 +5781,7 @@ public class WindowManagerService extends IWindowManager.Stub * container may not exist when this happens. */ public void notifyTaskRemovedFromRecents(int taskId, int userId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mTaskSnapshotController.notifyTaskRemovedFromRecents(taskId, userId); } } @@ -6030,7 +6023,7 @@ public class WindowManagerService extends IWindowManager.Stub if ("apps".equals(name) || "visible".equals(name) || "visible-apps".equals(name)) { final boolean appsOnly = name.contains("apps"); final boolean visibleOnly = name.contains("visible"); - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (appsOnly) { mRoot.dumpDisplayContents(pw); } @@ -6043,7 +6036,7 @@ public class WindowManagerService extends IWindowManager.Stub }, true /* traverseTopToBottom */); } } else { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mRoot.getWindowsByName(windows, name); } } @@ -6052,7 +6045,7 @@ public class WindowManagerService extends IWindowManager.Stub return false; } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpWindowsLocked(pw, dumpAll, windows); } return true; @@ -6159,7 +6152,7 @@ public class WindowManagerService extends IWindowManager.Stub if (useProto) { final ProtoOutputStream proto = new ProtoOutputStream(fd); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { writeToProtoLocked(proto, false /* trim */); } proto.flush(); @@ -6170,47 +6163,47 @@ public class WindowManagerService extends IWindowManager.Stub String cmd = args[opti]; opti++; if ("lastanr".equals(cmd) || "l".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpLastANRLocked(pw); } return; } else if ("policy".equals(cmd) || "p".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpPolicyLocked(pw, args, true); } return; } else if ("animator".equals(cmd) || "a".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpAnimatorLocked(pw, args, true); } return; } else if ("sessions".equals(cmd) || "s".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpSessionsLocked(pw, true); } return; } else if ("displays".equals(cmd) || "d".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mRoot.dumpDisplayContents(pw); } return; } else if ("tokens".equals(cmd) || "t".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpTokensLocked(pw, true); } return; } else if ("windows".equals(cmd) || "w".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpWindowsLocked(pw, true, null); } return; } else if ("all".equals(cmd) || "a".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { dumpWindowsLocked(pw, true, null); } return; } else if ("containers".equals(cmd)) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { mRoot.dumpChildrenNames(pw, " "); pw.println(" "); mRoot.forAllWindows(w -> {pw.println(w);}, true /* traverseTopToBottom */); @@ -6226,7 +6219,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - synchronized(mWindowMap) { + synchronized (mGlobalLock) { pw.println(); if (dumpAll) { pw.println("-------------------------------------------------------------------------------"); @@ -6271,7 +6264,7 @@ public class WindowManagerService extends IWindowManager.Stub // Called by the heartbeat to ensure locks are not held indefnitely (for deadlock detection). @Override public void monitor() { - synchronized (mWindowMap) { } + synchronized (mGlobalLock) { } } // There is an inherent assumption that this will never return null. @@ -6282,7 +6275,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void onOverlayChanged() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mRoot.forAllDisplays(displayContent -> { mPolicy.onOverlayChangedLw(displayContent); displayContent.updateDisplayInfo(); @@ -6292,7 +6285,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void onDisplayChanged(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.updateDisplayInfo(); @@ -6303,7 +6296,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public Object getWindowManagerLock() { - return mWindowMap; + return mGlobalLock; } /** @@ -6312,7 +6305,7 @@ public class WindowManagerService extends IWindowManager.Stub * @param token Application token for which the activity will be relaunched. */ public void setWillReplaceWindow(IBinder token, boolean animate) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindowToken = mRoot.getAppWindowToken(token); if (appWindowToken == null) { Slog.w(TAG_WM, "Attempted to set replacing window on non-existing app token " @@ -6341,7 +6334,7 @@ public class WindowManagerService extends IWindowManager.Stub // TODO: The s at the end of the method name is the only difference with the name of the method // above. We should combine them or find better names. void setWillReplaceWindows(IBinder token, boolean childrenOnly) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindowToken = mRoot.getAppWindowToken(token); if (appWindowToken == null) { Slog.w(TAG_WM, "Attempted to set replacing window on non-existing app token " @@ -6374,7 +6367,7 @@ public class WindowManagerService extends IWindowManager.Stub * @param replacing Whether the window is being replaced or not. */ public void scheduleClearWillReplaceWindows(IBinder token, boolean replacing) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final AppWindowToken appWindowToken = mRoot.getAppWindowToken(token); if (appWindowToken == null) { Slog.w(TAG_WM, "Attempted to reset replacing window on non-existing app token " @@ -6400,7 +6393,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int getDockedStackSide() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final TaskStack dockedStack = getDefaultDisplayContentLocked() .getSplitScreenPrimaryStackIgnoringVisibility(); return dockedStack == null ? DOCKED_INVALID : dockedStack.getDockSide(); @@ -6408,7 +6401,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void setDockedStackResizing(boolean resizing) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { getDefaultDisplayContentLocked().getDockedDividerController().setResizing(resizing); requestTraversal(); } @@ -6416,7 +6409,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setDockedStackDividerTouchRegion(Rect touchRegion) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = getDefaultDisplayContentLocked(); dc.getDockedDividerController().setTouchRegion(touchRegion); dc.updateTouchExcludeRegion(); @@ -6425,32 +6418,32 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setResizeDimLayer(boolean visible, int targetWindowingMode, float alpha) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { getDefaultDisplayContentLocked().getDockedDividerController().setResizeDimLayer( visible, targetWindowingMode, alpha); } } public void setForceResizableTasks(boolean forceResizableTasks) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mForceResizableTasks = forceResizableTasks; } } public void setSupportsPictureInPicture(boolean supportsPictureInPicture) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mSupportsPictureInPicture = supportsPictureInPicture; } } public void setSupportsFreeformWindowManagement(boolean supportsFreeformWindowManagement) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mSupportsFreeformWindowManagement = supportsFreeformWindowManagement; } } public void setIsPc(boolean isPc) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mIsPc = isPc; } } @@ -6463,7 +6456,7 @@ public class WindowManagerService extends IWindowManager.Stub public void registerDockedStackListener(IDockedStackListener listener) { mAtmInternal.enforceCallerIsRecentsOrHasPermission(REGISTER_WINDOW_MANAGER_LISTENERS, "registerDockedStackListener()"); - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // TODO(multi-display): The listener is registered on the default display only. getDefaultDisplayContentLocked().mDividerControllerLocked.registerDockedStackListener( listener); @@ -6479,7 +6472,7 @@ public class WindowManagerService extends IWindowManager.Stub if (!mSupportsPictureInPicture) { return; } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); displayContent.getPinnedStackController().registerPinnedStackListener(listener); } @@ -6498,7 +6491,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void getStableInsets(int displayId, Rect outInsets) throws RemoteException { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { getStableInsetsLocked(displayId, outInsets); } } @@ -6557,7 +6550,7 @@ public class WindowManagerService extends IWindowManager.Stub mouseY = mMousePositionTracker.mLatestMouseY; } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mDragDropController.dragDropActiveLocked()) { // Drag cursor overrides the app cursor. return; @@ -6612,7 +6605,7 @@ public class WindowManagerService extends IWindowManager.Stub */ void updateTapExcludeRegion(IWindow client, int regionId, int left, int top, int width, int height) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final WindowState callingWin = windowForClientLocked(null, client, false); if (callingWin == null) { Slog.w(TAG_WM, "Bad requesting window " + client); @@ -6626,7 +6619,7 @@ public class WindowManagerService extends IWindowManager.Stub public void dontOverrideDisplayInfo(int displayId) { final long token = Binder.clearCallingIdentity(); try { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = getDisplayContentOrCreate(displayId, null); if (dc == null) { throw new IllegalArgumentException( @@ -6692,7 +6685,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setMagnificationSpec(MagnificationSpec spec) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mAccessibilityController != null) { mAccessibilityController.setMagnificationSpecLocked(spec); } else { @@ -6706,7 +6699,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setForceShowMagnifiableBounds(boolean show) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mAccessibilityController != null) { mAccessibilityController.setForceShowMagnifiableBoundsLocked(show); } else { @@ -6717,7 +6710,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void getMagnificationRegion(@NonNull Region magnificationRegion) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mAccessibilityController != null) { mAccessibilityController.getMagnificationRegionLocked(magnificationRegion); } else { @@ -6728,7 +6721,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState windowState = mWindowMap.get(windowToken); if (windowState == null) { return null; @@ -6748,7 +6741,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setMagnificationCallbacks(@Nullable MagnificationCallbacks callbacks) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mAccessibilityController == null) { mAccessibilityController = new AccessibilityController( WindowManagerService.this); @@ -6762,7 +6755,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setWindowsForAccessibilityCallback(WindowsForAccessibilityCallback callback) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mAccessibilityController == null) { mAccessibilityController = new AccessibilityController( WindowManagerService.this); @@ -6781,7 +6774,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public IBinder getFocusedWindowToken() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState windowState = getFocusedWindowLocked(); if (windowState != null) { return windowState.mClient.asBinder(); @@ -6807,7 +6800,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void getWindowFrame(IBinder token, Rect outBounds) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState windowState = mWindowMap.get(token); if (windowState != null) { outBounds.set(windowState.getFrameLw()); @@ -6820,7 +6813,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void waitForAllWindowsDrawn(Runnable callback, long timeout) { boolean allWindowsDrawn = false; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mWaitingForDrawnCallback = callback; getDefaultDisplayContentLocked().waitForAllWindowsDrawn(); mWindowPlacerLocked.requestTraversal(); @@ -6844,7 +6837,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void removeWindowToken(IBinder binder, boolean removeWindows, int displayId) { - synchronized(mWindowMap) { + synchronized (mGlobalLock) { if (removeWindows) { final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc == null) { @@ -6870,14 +6863,14 @@ public class WindowManagerService extends IWindowManager.Stub // forwarding it to SystemUI for synchronizing status and navigation bar animations. @Override public void registerAppTransitionListener(AppTransitionListener listener) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { getDefaultDisplayContentLocked().mAppTransition.registerListenerLocked(listener); } } @Override public int getInputMethodWindowVisibleHeight(int displayId) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(displayId); return dc.mDisplayFrames.getInputMethodWindowVisibleHeight(); } @@ -6901,7 +6894,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean isHardKeyboardAvailable() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return mHardKeyboardAvailable; } } @@ -6909,14 +6902,14 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void setOnHardKeyboardStatusChangeListener( OnHardKeyboardStatusChangeListener listener) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mHardKeyboardStatusChangeListener = listener; } } @Override public boolean isStackVisible(int windowingMode) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent dc = getDefaultDisplayContentLocked(); return dc.isStackVisible(windowingMode); } @@ -6924,7 +6917,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean isDockedDividerResizing() { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { return getDefaultDisplayContentLocked().getDockedDividerController().isResizing(); } } @@ -6932,7 +6925,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void computeWindowsForAccessibility() { final AccessibilityController accessibilityController; - synchronized (mWindowMap) { + synchronized (mGlobalLock) { accessibilityController = mAccessibilityController; } if (accessibilityController != null) { @@ -6962,7 +6955,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int getWindowOwnerUserId(IBinder token) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { WindowState window = mWindowMap.get(token); if (window != null) { return UserHandle.getUserId(window.mOwnerUid); @@ -6973,7 +6966,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean isUidFocused(int uid) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { for (int i = mRoot.getChildCount() - 1; i >= 0; i--) { final DisplayContent displayContent = mRoot.getChildAt(i); if (displayContent.mCurrentFocus != null @@ -6990,7 +6983,7 @@ public class WindowManagerService extends IWindowManager.Stub if (displayId == Display.INVALID_DISPLAY) { return false; } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getTopFocusedDisplayContent(); if (displayContent == null || displayContent.getDisplayId() != displayId @@ -7025,7 +7018,7 @@ public class WindowManagerService extends IWindowManager.Stub if (displayId == Display.INVALID_DISPLAY) { return false; } - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final DisplayContent displayContent = mRoot.getDisplayContent(displayId); return displayContent != null && displayContent.hasAccess(uid); } @@ -7033,7 +7026,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public int getDisplayIdForWindow(IBinder windowToken) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { final WindowState window = mWindowMap.get(windowToken); if (window != null) { return window.getDisplayContent().getDisplayId(); @@ -7044,7 +7037,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void onProcessConfigurationChanged(int pid, Configuration newConfig) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { Configuration currentConfig = mProcessConfigurations.get(pid); if (currentConfig == null) { currentConfig = new Configuration(newConfig); @@ -7100,7 +7093,7 @@ public class WindowManagerService extends IWindowManager.Stub // The client depends on us to have resized the surface // by that point (b/36462635) - synchronized (mWindowMap) { + synchronized (mGlobalLock) { SurfaceControl.openTransaction(); try { exec.run(); @@ -7112,7 +7105,7 @@ public class WindowManagerService extends IWindowManager.Stub /** Called to inform window manager if non-Vr UI shoul be disabled or not. */ public void disableNonVrUi(boolean disable) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { // Allow alert window notifications to be shown if non-vr UI is enabled. final boolean showAlertWindowNotifications = !disable; if (showAlertWindowNotifications == mShowAlertWindowNotifications) { @@ -7196,7 +7189,7 @@ public class WindowManagerService extends IWindowManager.Stub * {@link ActivityManager#LOCK_TASK_MODE_PINNED}. */ public void onLockTaskStateChanged(int lockTaskState) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { mPolicy.onLockTaskStateChangedLw(lockTaskState); } } @@ -7207,7 +7200,7 @@ public class WindowManagerService extends IWindowManager.Stub * ensure the new value takes effect. */ public void setAodShowing(boolean aodShowing) { - synchronized (mWindowMap) { + synchronized (mGlobalLock) { if (mPolicy.setAodShowing(aodShowing)) { mWindowPlacerLocked.performSurfacePlacement(); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 9dc77219e8db..d4c812b2fc10 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2314,7 +2314,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP public void binderDied() { try { boolean resetSplitScreenResizing = false; - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { final WindowState win = mService.windowForClientLocked(mSession, mClient, false); Slog.i(TAG, "WIN DEATH: " + win); if (win != null) { @@ -2984,7 +2984,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } public void registerFocusObserver(IWindowFocusObserver observer) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mFocusCallbacks == null) { mFocusCallbacks = new RemoteCallbackList<IWindowFocusObserver>(); } @@ -2993,7 +2993,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } public void unregisterFocusObserver(IWindowFocusObserver observer) { - synchronized(mService.mWindowMap) { + synchronized (mService.mGlobalLock) { if (mFocusCallbacks != null) { mFocusCallbacks.unregister(observer); } @@ -4440,7 +4440,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP public boolean isFocused() { final WindowState outer = mOuter.get(); if (outer != null) { - synchronized (outer.mService.mWindowMap) { + synchronized (outer.mService.mGlobalLock) { return outer.isFocused(); } } diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index e82ffe8b271e..7d25b8c84960 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -61,7 +61,7 @@ class WindowSurfacePlacer { mService = service; mWallpaperControllerLocked = mService.mRoot.mWallpaperController; mPerformSurfacePlacement = () -> { - synchronized (mService.mWindowMap) { + synchronized (mService.mGlobalLock) { performSurfacePlacement(); } }; diff --git a/services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java index aa495f7d4515..fc3ca93df801 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppTransitionControllerTest.java @@ -48,7 +48,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { @Test public void testTranslucentOpen() throws Exception { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final AppWindowToken behind = createAppWindowToken(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD); final AppWindowToken translucentOpening = createAppWindowToken(mDisplayContent, @@ -65,7 +65,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { @Test public void testTranslucentClose() throws Exception { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final AppWindowToken behind = createAppWindowToken(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD); final AppWindowToken translucentClosing = createAppWindowToken(mDisplayContent, diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java index cb8ca7e4bfc6..8b75570a8b29 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java @@ -583,7 +583,7 @@ public class DisplayContentTests extends WindowTestsBase { } private void updateFocusedWindow() { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { sWm.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, false); } } diff --git a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java index 3c8b2a036c9b..31b2fefed420 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java @@ -121,7 +121,7 @@ public class DragDropControllerTests extends WindowTestsBase { doReturn(mWindow).when(mDisplayContent).getTouchableWinAtPointLocked(0, 0); when(sWm.mInputManager.transferTouchFocus(any(), any())).thenReturn(true); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { sWm.mWindowMap.put(mWindow.mClient.asBinder(), mWindow); } } @@ -131,7 +131,7 @@ public class DragDropControllerTests extends WindowTestsBase { public void tearDown() throws Exception { LocalServices.removeServiceForTest(UserManagerInternal.class); final CountDownLatch latch; - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { if (!mTarget.dragDropActiveLocked()) { return; } diff --git a/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java index c1db6a6a4def..001bed969d8f 100644 --- a/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java @@ -24,7 +24,7 @@ import org.junit.runner.RunWith; public class RootWindowContainerTests extends WindowTestsBase { @Test public void testSetDisplayOverrideConfigurationIfNeeded() throws Exception { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { // Add first stack we expect to be updated with configuration change. final TaskStack stack = createTaskStackOnDisplay(mDisplayContent); stack.getOverrideConfiguration().windowConfiguration.setBounds(new Rect(0, 0, 5, 5)); diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java index f8e740390291..d1480c5865cf 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java @@ -65,21 +65,21 @@ public class TaskPositioningControllerTests extends WindowTestsBase { mWindow = createWindow(null, TYPE_BASE_APPLICATION, "window"); mWindow.mInputChannel = new InputChannel(); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { sWm.mWindowMap.put(mWindow.mClient.asBinder(), mWindow); } } @Test public void testStartAndFinishPositioning() throws Exception { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { assertFalse(mTarget.isPositioningLocked()); assertNull(mTarget.getDragWindowHandleLocked()); } assertTrue(mTarget.startMovingTask(mWindow.mClient, 0, 0)); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { assertTrue(mTarget.isPositioningLocked()); assertNotNull(mTarget.getDragWindowHandleLocked()); } @@ -94,7 +94,7 @@ public class TaskPositioningControllerTests extends WindowTestsBase { @Test public void testHandleTapOutsideTask() throws Exception { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { assertFalse(mTarget.isPositioningLocked()); assertNull(mTarget.getDragWindowHandleLocked()); @@ -108,7 +108,7 @@ public class TaskPositioningControllerTests extends WindowTestsBase { // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { assertTrue(mTarget.isPositioningLocked()); assertNotNull(mTarget.getDragWindowHandleLocked()); } diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java index 51595514624c..19abd9e8dac9 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -150,7 +150,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { final com.android.server.wm.WindowState window; final AppWindowToken atoken; final WindowManagerService wm = mWmSupplier.get(); - synchronized (wm.mWindowMap) { + synchronized (wm.mGlobalLock) { atoken = wm.mRoot.getAppWindowToken(appToken); IWindow iWindow = mock(IWindow.class); doReturn(mock(IBinder.class)).when(iWindow).asBinder(); @@ -164,7 +164,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { mRunnableWhenAddingSplashScreen = null; } return () -> { - synchronized (wm.mWindowMap) { + synchronized (wm.mGlobalLock) { atoken.removeChild(window); atoken.startingWindow = null; } diff --git a/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java index 882e78924629..e3280ca3c9f0 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java @@ -32,7 +32,7 @@ public class WallpaperControllerTests extends WindowTestsBase { public void testWallpaperScreenshot() { WindowSurfaceController windowSurfaceController = mock(WindowSurfaceController.class); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { // No wallpaper final DisplayContent dc = createNewDisplay(); Bitmap wallpaperBitmap = sWm.mRoot.mWallpaperController.screenshotWallpaperLocked(); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java index a1b164065696..b84822f701ac 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java @@ -57,8 +57,8 @@ public class WindowTestUtils { */ public static WindowManagerService getMockWindowManagerService() { final WindowManagerService service = mock(WindowManagerService.class); - final WindowHashMap windowMap = new WindowHashMap(); - when(service.getWindowManagerLock()).thenReturn(windowMap); + final WindowManagerGlobalLock lock = new WindowManagerGlobalLock(); + when(service.getWindowManagerLock()).thenReturn(lock); return service; } @@ -116,7 +116,7 @@ public class WindowTestUtils { /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ public static Task createTaskInStack(WindowManagerService service, TaskStack stack, int userId) { - synchronized (service.mWindowMap) { + synchronized (service.mGlobalLock) { final Task newTask = new Task(sNextTaskId++, stack, userId, service, 0, false, new ActivityManager.TaskDescription(), null); stack.addTask(newTask, POSITION_TOP); @@ -140,7 +140,7 @@ public class WindowTestUtils { } static TestAppWindowToken createTestAppWindowToken(DisplayContent dc) { - synchronized (dc.mService.mWindowMap) { + synchronized (dc.mService.mGlobalLock) { return new TestAppWindowToken(dc); } } @@ -213,7 +213,7 @@ public class WindowTestUtils { static TestWindowToken createTestWindowToken(int type, DisplayContent dc, boolean persistOnEmpty) { - synchronized (dc.mService.mWindowMap) { + synchronized (dc.mService.mGlobalLock) { return new TestWindowToken(type, dc, persistOnEmpty); } } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java index dcfe55602e81..73bb1c9aa74b 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java @@ -122,7 +122,7 @@ class WindowTestsBase { // Set-up some common windows. mCommonWindows = new HashSet(); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow"); mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow"); mDisplayContent.mInputMethodWindow = mImeWindow; @@ -164,7 +164,7 @@ class WindowTestsBase { final LinkedList<WindowState> nonCommonWindows = new LinkedList<>(); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { sWm.mRoot.forAllWindows(w -> { if (!mCommonWindows.contains(w)) { nonCommonWindows.addLast(w); @@ -198,7 +198,7 @@ class WindowTestsBase { } private WindowState createCommonWindow(WindowState parent, int type, String name) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final WindowState win = createWindow(parent, type, name); mCommonWindows.add(win); // Prevent common windows from been IMe targets @@ -216,7 +216,7 @@ class WindowTestsBase { private WindowToken createWindowToken( DisplayContent dc, int windowingMode, int activityType, int type) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) { return WindowTestUtils.createTestWindowToken(type, dc); } @@ -241,7 +241,7 @@ class WindowTestsBase { } WindowState createWindow(WindowState parent, int type, String name) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { return (parent == null) ? createWindow(parent, type, mDisplayContent, name) : createWindow(parent, type, parent.mToken, name); @@ -250,14 +250,14 @@ class WindowTestsBase { WindowState createWindowOnStack(WindowState parent, int windowingMode, int activityType, int type, DisplayContent dc, String name) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final WindowToken token = createWindowToken(dc, windowingMode, activityType, type); return createWindow(parent, type, token, name); } } WindowState createAppWindow(Task task, int type, String name) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent); task.addChild(token, 0); return createWindow(null, type, token, name); @@ -265,7 +265,7 @@ class WindowTestsBase { } WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final WindowToken token = createWindowToken( dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type); return createWindow(parent, type, token, name); @@ -274,7 +274,7 @@ class WindowTestsBase { WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name, boolean ownerCanAddInternalSystemWindow) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final WindowToken token = createWindowToken( dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type); return createWindow(parent, type, token, name, 0 /* ownerId */, @@ -283,7 +283,7 @@ class WindowTestsBase { } WindowState createWindow(WindowState parent, int type, WindowToken token, String name) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { return createWindow(parent, type, token, name, 0 /* ownerId */, false /* ownerCanAddInternalSystemWindow */); } @@ -298,7 +298,7 @@ class WindowTestsBase { static WindowState createWindow(WindowState parent, int type, WindowToken token, String name, int ownerId, boolean ownerCanAddInternalSystemWindow, WindowManagerService service, Session session, IWindow iWindow) { - synchronized (service.mWindowMap) { + synchronized (service.mGlobalLock) { final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type); attrs.setTitle(name); @@ -315,13 +315,13 @@ class WindowTestsBase { /** Creates a {@link TaskStack} and adds it to the specified {@link DisplayContent}. */ TaskStack createTaskStackOnDisplay(DisplayContent dc) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { return createStackControllerOnDisplay(dc).mContainer; } } StackWindowController createStackControllerOnDisplay(DisplayContent dc) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { return createStackControllerOnStackOnDisplay( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, dc); } @@ -329,7 +329,7 @@ class WindowTestsBase { StackWindowController createStackControllerOnStackOnDisplay( int windowingMode, int activityType, DisplayContent dc) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { final Configuration overrideConfig = new Configuration(); overrideConfig.windowConfiguration.setWindowingMode(windowingMode); overrideConfig.windowConfiguration.setActivityType(activityType); @@ -351,7 +351,7 @@ class WindowTestsBase { final int displayId = sNextDisplayId++; final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, mDisplayInfo, DEFAULT_DISPLAY_ADJUSTMENTS); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { return new DisplayContent(display, sWm, mWallpaperController, mock(DisplayWindowController.class)); } @@ -376,7 +376,7 @@ class WindowTestsBase { final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, displayInfo, DEFAULT_DISPLAY_ADJUSTMENTS); final DisplayWindowController dcw = new DisplayWindowController(display, sWm); - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { // Display creation is driven by DisplayWindowController via ActivityStackSupervisor. // We skip those steps here. return sWm.mRoot.createDisplayContent(display, dcw); @@ -386,7 +386,7 @@ class WindowTestsBase { /** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */ WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs, WindowToken token) { - synchronized (sWm.mWindowMap) { + synchronized (sWm.mGlobalLock) { return new WindowTestUtils.TestWindowState(sWm, mMockSession, mIWindow, attrs, token); } } |