Don't use WMS.mWindowMap to synchronize WM critical section (36/n)
Use new field WMS.mGlobalLock instead. This will make it easier to
switch the lock to the same object used by ActivityTaskManagerService
in an upcoming CL.
Test: Existing tests pass
Bug: 80414790
Change-Id: I4202e9028395d79cc60b01ed795528b469a16bf1
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 2fa2941..888ad1d 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -55,7 +55,7 @@
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 9edb3d0..e4d1cfe 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 @@
}
public void setShown(boolean shown, boolean animate) {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
if (mShown == shown) {
return;
}
@@ -750,13 +750,13 @@
@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 @@
}
public void setBounds(Region bounds) {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
if (mBounds.equals(bounds)) {
return;
}
@@ -782,7 +782,7 @@
}
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 @@
/** 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 @@
} 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 @@
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 10a1be5..089640b 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 @@
} 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 @@
}
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 7435ea5..584c1e4 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 @@
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 @@
}
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 @@
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 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 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 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 int getOrientation() {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer == null) {
return SCREEN_ORIENTATION_UNSPECIFIED;
}
@@ -320,7 +320,7 @@
}
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 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 @@
* 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 @@
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 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 void pauseKeyDispatching() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer != null) {
mContainer.getDisplayContent().getInputMonitor().pauseDispatchingLw(mContainer);
}
@@ -672,7 +672,7 @@
}
public void resumeKeyDispatching() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer != null) {
mContainer.getDisplayContent().getInputMonitor().resumeDispatchingLw(mContainer);
}
@@ -680,7 +680,7 @@
}
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 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 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 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 void stopFreezingScreen(boolean force) {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer == null) {
return;
}
@@ -740,7 +740,7 @@
}
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 @@
* 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 @@
* 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 01d556a..f772216 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 @@
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 @@
@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 @@
* {@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 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 @@
* 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 @@
* 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 @@
* @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 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 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 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 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 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 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 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 @@
* @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 84c3aa3..985ce06 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 @@
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 f42e979..ce8c979 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 @@
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 @@
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 @@
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 @@
* @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 @@
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 @@
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 10d77e5..f823caa 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 @@
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 @@
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 ed3e6c6..0e4ab53 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 @@
@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 52b0241..405aaab 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 @@
@Override
public int getDisplayRotation() {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
return mDisplayInfo.rotation;
}
}
@@ -288,7 +288,7 @@
* 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 @@
* 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 @@
*/
private void notifyMovementBoundsChanged(boolean fromImeAdjustment,
boolean fromShelfAdjustment) {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
if (mPinnedStackListener == null) {
return;
}
@@ -513,7 +513,7 @@
* @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 @@
* controller.
*/
private Rect getMovementBounds(Rect stackBounds) {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
return getMovementBounds(stackBounds, true /* adjustForIme */,
true /* adjustForShelf */);
}
@@ -538,7 +538,7 @@
* 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 @@
* 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 1807eeb..bbdcc62 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 @@
* 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 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 @@
* 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 @@
* 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 @@
* from fullscreen to non-fullscreen bounds.
*/
public boolean deferScheduleMultiWindowModeChanged() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return mContainer.deferScheduleMultiWindowModeChanged();
}
}
@@ -183,7 +183,7 @@
* @return whether the bounds are currently animating to fullscreen.
*/
public boolean isAnimatingBoundsToFullscreen() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return mContainer.isAnimatingBoundsToFullscreen();
}
}
@@ -192,7 +192,7 @@
* @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 0ec4baf..f5acdcc 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 @@
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 93be6e9..1176220 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 RootWindowContainerController(RootWindowContainerListener listener) {
super(listener, WindowManagerService.getInstance());
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mRoot.setController(this);
}
}
@@ -39,7 +39,7 @@
/** 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 acc9c03..b411fad 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 @@
@Override
public void binderDied() {
- synchronized(mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
mCallback.asBinder().unlinkToDeath(this, 0);
mClientDead = true;
killSessionLocked();
@@ -229,14 +229,14 @@
@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 @@
@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 @@
@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 @@
@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 @@
@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 @@
@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 40a002b..c920b9e 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 @@
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 @@
@Override
public void removeContainer() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer != null) {
mContainer.removeIfPossible();
super.removeContainer();
@@ -90,7 +90,7 @@
}
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 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 @@
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 @@
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 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 void onPipAnimationEndResize() {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
mContainer.onPipAnimationEndResize();
}
}
@@ -204,7 +204,7 @@
*/
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 void prepareFreezingTaskBounds() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer == null) {
throw new IllegalArgumentException("prepareFreezingTaskBounds: stack " + this
+ " not found.");
@@ -226,7 +226,7 @@
}
public void getRawBounds(Rect outBounds) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer.matchParentBounds()) {
outBounds.setEmpty();
} else {
@@ -236,7 +236,7 @@
}
public void getBounds(Rect outBounds) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer != null) {
mContainer.getBounds(outBounds);
return;
@@ -246,7 +246,7 @@
}
public void getBoundsForNewConfiguration(Rect outBounds) {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
mContainer.getBoundsForNewConfiguration(outBounds);
}
}
@@ -261,7 +261,7 @@
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 ba3d091..3ea615a 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 @@
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 d2696c0..66ebc9b 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 @@
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 @@
if (mDragEnded) {
final boolean wasResizing = mResizing;
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
endDragLocked();
mTask.getDimBounds(mTmpRect);
}
@@ -397,7 +397,7 @@
// 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 25148d1..f2d3dca 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 @@
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 @@
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 @@
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 7bf4edb..8175c4a 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 @@
@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 0d5469b..b84d20d 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 @@
// 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 67d2be8..a7b0272 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 @@
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 @@
@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 @@
} else {
drawSizeMatchSnapshot(buffer);
}
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
mShownTime = SystemClock.uptimeMillis();
mHasDrawn = true;
}
@@ -422,7 +422,7 @@
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 f39ba6d..0d98b20 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 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 @@
@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 @@
@Override
public boolean isAttached() {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
return mDisplayContent != null;
}
}
@@ -1735,7 +1735,7 @@
* 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 @@
@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 52f8510..53d2cb0 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 @@
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 8b634b1..59b2055 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 @@
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 @@
@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 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 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 void setResizeable(int resizeMode) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer != null) {
mContainer.setResizeable(resizeMode);
}
@@ -152,7 +152,7 @@
}
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 void getBounds(Rect bounds) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer != null) {
mContainer.getBounds(bounds);
return;
@@ -180,7 +180,7 @@
* @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 void cancelWindowTransition() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mContainer == null) {
Slog.w(TAG_WM, "cancelWindowTransition: taskId " + mTaskId + " not found.");
return;
@@ -200,7 +200,7 @@
}
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 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 942cdb9..29e1b20 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 @@
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 @@
if (mWaitingOnWallpaper != null &&
mWaitingOnWallpaper.mClient.asBinder() == window) {
mWaitingOnWallpaper = null;
- mService.mWindowMap.notifyAll();
+ mService.mGlobalLock.notifyAll();
}
}
@@ -460,7 +460,7 @@
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 bc0f19a..46bb981 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 @@
() -> mChoreographer = Choreographer.getSfInstance(), 0 /* timeout */);
mAnimationFrameCallback = frameTimeNs -> {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
mAnimationFrameCallbackScheduled = false;
}
animate(frameTimeNs);
@@ -130,7 +130,7 @@
*/
private void animate(long frameTimeNs) {
- synchronized (mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
if (!mInitialized) {
return;
}
@@ -139,7 +139,7 @@
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 eb23faf..7cb89c5 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 @@
final WindowManagerService mService;
final RootWindowContainer mRoot;
- final WindowHashMap mWindowMap;
+ final WindowManagerGlobalLock mGlobalLock;
// The window container this controller owns.
E mContainer;
@@ -43,7 +43,7 @@
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 @@
@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 0000000..7ce11ee
--- /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 96fc2e2..e456d8d 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 @@
*/
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 @@
void openSurfaceTransaction() {
try {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "openSurfaceTransaction");
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
SurfaceControl.openTransaction();
}
} finally {
@@ -795,7 +788,7 @@
void closeSurfaceTransaction(String where) {
try {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "closeSurfaceTransaction");
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
try {
traceStateLocked(where);
} finally {
@@ -937,7 +930,7 @@
@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 @@
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 @@
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 @@
}
void removeWindow(Session session, IWindow client) {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
WindowState win = windowForClientLocked(session, client, false);
if (win == null) {
return;
@@ -1683,13 +1676,13 @@
}
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 @@
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 @@
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 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 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 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
final Configuration config;
final long ident = Binder.clearCallingIdentity();
try {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
config = updateOrientationFromAppTokensLocked(currentConfig, freezeThisOneIfNeeded,
displayId, forceUpdate);
}
@@ -2443,7 +2436,7 @@
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
}
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (mWaitingForConfig) {
mWaitingForConfig = false;
mLastFinishedFreezeSource = "new-config";
@@ -2468,7 +2461,7 @@
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 @@
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 @@
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 @@
* {@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 void cleanupRecentsAnimation(@RecentsAnimationController.ReorderMode int reorderMode) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mRecentsAnimationController != null) {
final RecentsAnimationController controller = mRecentsAnimationController;
mRecentsAnimationController = null;
@@ -2567,7 +2560,7 @@
}
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 void setWindowOpaque(IBinder token, boolean isOpaque) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
setWindowOpaqueLocked(token, isOpaque);
}
}
@@ -2594,7 +2587,7 @@
}
public void setDockedStackCreateState(int mode, Rect bounds) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
setDockedStackCreateStateLocked(mode, bounds);
}
}
@@ -2605,7 +2598,7 @@
}
public void checkSplitScreenMinimizedChanged(boolean animate) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final DisplayContent displayContent = getDefaultDisplayContentLocked();
displayContent.getDockedDividerController().checkMinimizeChanged(animate);
}
@@ -2619,7 +2612,7 @@
@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 @@
* 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 @@
* Resumes layout passes after deferring them. See {@link #deferSurfaceLayout()}
*/
public void continueSurfaceLayout() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mWindowPlacerLocked.continueLayout();
}
}
@@ -2685,7 +2678,7 @@
* {@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 @@
* {@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 @@
*/
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 @@
throw new SecurityException("Requires FREEZE_SCREEN permission");
}
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (!mClientFreezingScreen) {
mClientFreezingScreen = true;
final long origId = Binder.clearCallingIdentity();
@@ -2766,7 +2759,7 @@
throw new SecurityException("Requires FREEZE_SCREEN permission");
}
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (mClientFreezingScreen) {
mClientFreezingScreen = false;
mLastFinishedFreezeSource = "client";
@@ -2869,7 +2862,7 @@
}
public boolean isShowingDream() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return mPolicy.isShowingDreamLw();
}
}
@@ -2879,13 +2872,13 @@
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 @@
throw new SecurityException("Requires INTERACT_ACROSS_USERS_FULL permission");
}
mPolicy.setSwitchingUser(switching);
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mSwitchingUser = switching;
}
}
@@ -2908,7 +2901,7 @@
@Override
public void closeSystemDialogs(String reason) {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
mRoot.closeSystemDialogs(reason);
}
}
@@ -2992,7 +2985,7 @@
@Override
public float getCurrentAnimatorScale() {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
return mAnimationsDisabled ? 0 : mAnimatorDurationScaleSetting;
}
}
@@ -3003,7 +2996,7 @@
@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 @@
@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 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 void enableScreenAfterBoot() {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (DEBUG_BOOT) {
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
@@ -3168,7 +3161,7 @@
@Override
public void enableScreenIfNeeded() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
enableScreenIfNeededLocked();
}
}
@@ -3192,7 +3185,7 @@
}
public void performBootTimeout() {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (mDisplayEnabled) {
return;
}
@@ -3210,7 +3203,7 @@
}
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 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 @@
@Override
public void setInTouchMode(boolean mode) {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
mInTouchMode = mode;
}
}
@@ -3353,7 +3346,7 @@
&& 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 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 void showEmulatorDisplayOverlay() {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
">>> OPEN TRANSACTION showEmulatorDisplayOverlay");
@@ -3453,7 +3446,7 @@
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 @@
}
try {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper");
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return mRoot.mWallpaperController.screenshotWallpaperLocked();
}
} finally {
@@ -3512,7 +3505,7 @@
}
final Bitmap bm;
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final DisplayContent displayContent = mRoot.getDisplayContent(DEFAULT_DISPLAY);
if (displayContent == null) {
if (DEBUG_SCREENSHOT) {
@@ -3549,7 +3542,7 @@
* model.
*/
public void removeObsoleteTaskFiles(ArraySet<Integer> persistentTaskIds, int[] runningUserIds) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mTaskSnapshotController.removeObsoleteTaskFiles(persistentTaskIds, runningUserIds);
}
}
@@ -3579,7 +3572,7 @@
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 @@
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 @@
@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 @@
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 @@
@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 @@
@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 @@
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 @@
}
};
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
try {
watcher.asBinder().linkToDeath(dr, 0);
mRotationWatchers.add(new RotationWatcher(watcher, dr, displayId));
@@ -3760,7 +3753,7 @@
@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 @@
@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 @@
@Override
public void unregisterWallpaperVisibilityListener(IWallpaperVisibilityListener listener,
int displayId) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mWallpaperVisibilityListeners
.unregisterWallpaperVisibilityListener(listener, displayId);
}
@@ -3800,7 +3793,7 @@
@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 @@
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 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 @@
private void notifyFocusChanged() {
WindowChangeListener[] windowChangeListeners;
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
if(mWindowChangeListeners.isEmpty()) {
return;
}
@@ -4147,7 +4140,7 @@
return getFocusedWindow();
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return mRoot.getWindow((w) -> System.identityHashCode(w) == hashCode);
}
}
@@ -4166,7 +4159,7 @@
// 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 Configuration computeNewConfiguration(int displayId) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return computeNewConfigurationLocked(displayId);
}
}
@@ -4201,7 +4194,7 @@
void notifyHardKeyboardStatusChange() {
final boolean available;
final WindowManagerInternal.OnHardKeyboardStatusChangeListener listener;
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
listener = mHardKeyboardStatusChangeListener;
available = mHardKeyboardAvailable;
}
@@ -4223,7 +4216,7 @@
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mEventDispatchingEnabled = enabled;
if (mDisplayEnabled) {
mInputManagerCallback.setEventDispatchingLw(enabled);
@@ -4232,7 +4225,7 @@
}
private WindowState getFocusedWindow() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return getFocusedWindowLocked();
}
}
@@ -4301,7 +4294,7 @@
}
public void displayReady() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mMaxUiWidth > 0) {
mRoot.forAllDisplays(displayContent -> displayContent.setMaxUiWidth(mMaxUiWidth));
}
@@ -4425,7 +4418,7 @@
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 @@
final DisplayContent displayContent = (DisplayContent) msg.obj;
ArrayList<WindowState> losers;
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
losers = displayContent.mLosingFocus;
displayContent.mLosingFocus = new ArrayList<>();
}
@@ -4484,7 +4477,7 @@
case WINDOW_FREEZE_TIMEOUT: {
final DisplayContent displayContent = (DisplayContent) msg.obj;
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
displayContent.onWindowFreezeTimeout();
}
break;
@@ -4532,7 +4525,7 @@
}
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 @@
}
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 @@
}
case CLIENT_FREEZE_TIMEOUT: {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mClientFreezingScreen) {
mClientFreezingScreen = false;
mLastFinishedFreezeSource = "client-timeout";
@@ -4595,7 +4588,7 @@
case REPORT_WINDOWS_CHANGE: {
if (mWindowsChanged) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mWindowsChanged = false;
}
notifyWindowsChanged();
@@ -4615,7 +4608,7 @@
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 @@
break;
case ALL_WINDOWS_DRAWN: {
Runnable callback;
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
callback = mWaitingForDrawnCallback;
mWaitingForDrawnCallback = null;
}
@@ -4671,7 +4664,7 @@
} 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 @@
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 @@
}
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 @@
}
break;
case UPDATE_DOCKED_STACK_DIVIDER: {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final DisplayContent displayContent = getDefaultDisplayContentLocked();
displayContent.getDockedDividerController().reevaluateVisibility(false);
displayContent.adjustForImeIfNeeded();
@@ -4721,7 +4714,7 @@
}
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 @@
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 @@
}
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 @@
}
break;
case ANIMATION_FAILSAFE: {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mRecentsAnimationController != null) {
mRecentsAnimationController.scheduleFailsafe();
}
@@ -4806,7 +4799,7 @@
}
break;
case RECOMPUTE_FOCUS: {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
true /* updateInputWindows */);
}
@@ -4844,7 +4837,7 @@
@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 @@
@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 @@
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 @@
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 @@
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 @@
@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 @@
@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 @@
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 @@
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 @@
}
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 @@
}
void requestTraversal() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mWindowPlacerLocked.requestTraversal();
}
}
@@ -5510,7 +5503,7 @@
public void setRecentsVisibility(boolean visible) {
mAtmInternal.enforceCallerIsRecentsOrHasPermission(android.Manifest.permission.STATUS_BAR,
"setRecentsVisibility()");
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mPolicy.setRecentsVisibilityLw(visible);
}
}
@@ -5523,7 +5516,7 @@
+ android.Manifest.permission.STATUS_BAR);
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mPolicy.setPipVisibilityLw(visible);
}
}
@@ -5532,7 +5525,7 @@
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 @@
+ android.Manifest.permission.STATUS_BAR);
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mLastStatusBarVisibility = visibility;
visibility = mPolicy.adjustSystemUiVisibilityLw(visibility);
updateStatusBarVisibilityLocked(visibility);
@@ -5560,7 +5553,7 @@
+ android.Manifest.permission.STATUS_BAR);
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mPolicy.setNavBarVirtualKeyHapticFeedbackEnabledLw(enabled);
}
}
@@ -5585,7 +5578,7 @@
@Override
public void reevaluateStatusBarVisibility() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
int visibility = mPolicy.adjustSystemUiVisibilityLw(mLastStatusBarVisibility);
if (updateStatusBarVisibilityLocked(visibility)) {
mWindowPlacerLocked.requestTraversal();
@@ -5601,7 +5594,7 @@
@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 @@
@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 @@
@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 @@
@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 @@
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 @@
"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 @@
"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 void notifyAppRelaunching(IBinder token) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final AppWindowToken appWindow = mRoot.getAppWindowToken(token);
if (appWindow != null) {
appWindow.startRelaunching();
@@ -5743,7 +5736,7 @@
}
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 void notifyAppRelaunchesCleared(IBinder token) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final AppWindowToken appWindow = mRoot.getAppWindowToken(token);
if (appWindow != null) {
appWindow.clearRelaunching();
@@ -5761,7 +5754,7 @@
}
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 @@
* 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 @@
* 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 @@
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 @@
}, true /* traverseTopToBottom */);
}
} else {
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
mRoot.getWindowsByName(windows, name);
}
}
@@ -6052,7 +6045,7 @@
return false;
}
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
dumpWindowsLocked(pw, dumpAll, windows);
}
return true;
@@ -6159,7 +6152,7 @@
if (useProto) {
final ProtoOutputStream proto = new ProtoOutputStream(fd);
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
writeToProtoLocked(proto, false /* trim */);
}
proto.flush();
@@ -6170,47 +6163,47 @@
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 @@
}
}
- synchronized(mWindowMap) {
+ synchronized (mGlobalLock) {
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
@@ -6271,7 +6264,7 @@
// 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 void onOverlayChanged() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mRoot.forAllDisplays(displayContent -> {
mPolicy.onOverlayChangedLw(displayContent);
displayContent.updateDisplayInfo();
@@ -6292,7 +6285,7 @@
}
public void onDisplayChanged(int displayId) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
if (displayContent != null) {
displayContent.updateDisplayInfo();
@@ -6303,7 +6296,7 @@
@Override
public Object getWindowManagerLock() {
- return mWindowMap;
+ return mGlobalLock;
}
/**
@@ -6312,7 +6305,7 @@
* @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 @@
// 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 @@
* @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 @@
@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 void setDockedStackResizing(boolean resizing) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
getDefaultDisplayContentLocked().getDockedDividerController().setResizing(resizing);
requestTraversal();
}
@@ -6416,7 +6409,7 @@
@Override
public void setDockedStackDividerTouchRegion(Rect touchRegion) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final DisplayContent dc = getDefaultDisplayContentLocked();
dc.getDockedDividerController().setTouchRegion(touchRegion);
dc.updateTouchExcludeRegion();
@@ -6425,32 +6418,32 @@
@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 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 @@
if (!mSupportsPictureInPicture) {
return;
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
displayContent.getPinnedStackController().registerPinnedStackListener(listener);
}
@@ -6498,7 +6491,7 @@
@Override
public void getStableInsets(int displayId, Rect outInsets) throws RemoteException {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
getStableInsetsLocked(displayId, outInsets);
}
}
@@ -6557,7 +6550,7 @@
mouseY = mMousePositionTracker.mLatestMouseY;
}
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mDragDropController.dragDropActiveLocked()) {
// Drag cursor overrides the app cursor.
return;
@@ -6612,7 +6605,7 @@
*/
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 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 @@
@Override
public void setMagnificationSpec(MagnificationSpec spec) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mAccessibilityController != null) {
mAccessibilityController.setMagnificationSpecLocked(spec);
} else {
@@ -6706,7 +6699,7 @@
@Override
public void setForceShowMagnifiableBounds(boolean show) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mAccessibilityController != null) {
mAccessibilityController.setForceShowMagnifiableBoundsLocked(show);
} else {
@@ -6717,7 +6710,7 @@
@Override
public void getMagnificationRegion(@NonNull Region magnificationRegion) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mAccessibilityController != null) {
mAccessibilityController.getMagnificationRegionLocked(magnificationRegion);
} else {
@@ -6728,7 +6721,7 @@
@Override
public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
WindowState windowState = mWindowMap.get(windowToken);
if (windowState == null) {
return null;
@@ -6748,7 +6741,7 @@
@Override
public void setMagnificationCallbacks(@Nullable MagnificationCallbacks callbacks) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mAccessibilityController == null) {
mAccessibilityController = new AccessibilityController(
WindowManagerService.this);
@@ -6762,7 +6755,7 @@
@Override
public void setWindowsForAccessibilityCallback(WindowsForAccessibilityCallback callback) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
if (mAccessibilityController == null) {
mAccessibilityController = new AccessibilityController(
WindowManagerService.this);
@@ -6781,7 +6774,7 @@
@Override
public IBinder getFocusedWindowToken() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
WindowState windowState = getFocusedWindowLocked();
if (windowState != null) {
return windowState.mClient.asBinder();
@@ -6807,7 +6800,7 @@
@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 @@
@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 @@
@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 @@
// 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 @@
@Override
public boolean isHardKeyboardAvailable() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return mHardKeyboardAvailable;
}
}
@@ -6909,14 +6902,14 @@
@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 @@
@Override
public boolean isDockedDividerResizing() {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
return getDefaultDisplayContentLocked().getDockedDividerController().isResizing();
}
}
@@ -6932,7 +6925,7 @@
@Override
public void computeWindowsForAccessibility() {
final AccessibilityController accessibilityController;
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
accessibilityController = mAccessibilityController;
}
if (accessibilityController != null) {
@@ -6962,7 +6955,7 @@
@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 @@
@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 @@
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 @@
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 @@
@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 @@
@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 @@
// 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 @@
/** 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 @@
* {@link ActivityManager#LOCK_TASK_MODE_PINNED}.
*/
public void onLockTaskStateChanged(int lockTaskState) {
- synchronized (mWindowMap) {
+ synchronized (mGlobalLock) {
mPolicy.onLockTaskStateChangedLw(lockTaskState);
}
}
@@ -7207,7 +7200,7 @@
* 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 9dc7721..d4c812b 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 @@
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 @@
}
public void registerFocusObserver(IWindowFocusObserver observer) {
- synchronized(mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
if (mFocusCallbacks == null) {
mFocusCallbacks = new RemoteCallbackList<IWindowFocusObserver>();
}
@@ -2993,7 +2993,7 @@
}
public void unregisterFocusObserver(IWindowFocusObserver observer) {
- synchronized(mService.mWindowMap) {
+ synchronized (mService.mGlobalLock) {
if (mFocusCallbacks != null) {
mFocusCallbacks.unregister(observer);
}
@@ -4440,7 +4440,7 @@
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 e82ffe8..7d25b8c 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 @@
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 aa495f7..fc3ca93 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 @@
@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 @@
@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 cb8ca7e..8b75570 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 @@
}
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 3c8b2a0..31b2fef 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 @@
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 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 c1db6a6..001bed9 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 @@
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 f8e7403..d1480c5 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 @@
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 @@
@Test
public void testHandleTapOutsideTask() throws Exception {
- synchronized (sWm.mWindowMap) {
+ synchronized (sWm.mGlobalLock) {
assertFalse(mTarget.isPositioningLocked());
assertNull(mTarget.getDragWindowHandleLocked());
@@ -108,7 +108,7 @@
// 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 5159551..19abd9e 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 @@
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 @@
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 882e789..e3280ca 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 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 a1b1640..b84822f 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 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 @@
/** 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 @@
}
static TestAppWindowToken createTestAppWindowToken(DisplayContent dc) {
- synchronized (dc.mService.mWindowMap) {
+ synchronized (dc.mService.mGlobalLock) {
return new TestAppWindowToken(dc);
}
}
@@ -213,7 +213,7 @@
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 dcfe556..73bb1c9 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 @@
// 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 @@
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 @@
}
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 @@
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 @@
}
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 @@
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 @@
}
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 @@
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 @@
}
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 @@
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 @@
/** 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 @@
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 @@
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 @@
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 @@
/** 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);
}
}