diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index ab2f424261533..9234390940f76 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -421,6 +421,7 @@ class WindowState extends WindowContainer implements WindowManagerP // Current transformation being applied. float mGlobalScale=1; + float mLastGlobalScale=1; float mInvGlobalScale=1; float mHScale=1, mVScale=1; float mLastHScale=1, mLastVScale=1; @@ -5301,6 +5302,14 @@ class WindowState extends WindowContainer implements WindowManagerP } } + private void updateGlobalScaleIfNeeded() { + if (mLastGlobalScale != mGlobalScale) { + getPendingTransaction().setMatrix(getSurfaceControl(), + mGlobalScale, 0, 0, mGlobalScale); + mLastGlobalScale = mGlobalScale; + } + } + @Override void prepareSurfaces() { mIsDimming = false; @@ -5308,6 +5317,7 @@ class WindowState extends WindowContainer implements WindowManagerP updateSurfacePositionNonOrganized(); // Send information to SufaceFlinger about the priority of the current window. updateFrameRateSelectionPriorityIfNeeded(); + updateGlobalScaleIfNeeded(); mWinAnimator.prepareSurfaceLocked(SurfaceControl.getGlobalTransaction(), true); super.prepareSurfaces(); diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 1e959e54555f9..d845b123a5607 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -624,10 +624,10 @@ class WindowStateAnimator { mShownAlpha = mAlpha; mHaveMatrix = false; - mDsDx = mWin.mGlobalScale; + mDsDx = 1; mDtDx = 0; mDtDy = 0; - mDsDy = mWin.mGlobalScale; + mDsDy = 1; } private boolean shouldConsumeMainWindowSizeTransaction() {