diff options
-rw-r--r-- | services/core/java/com/android/server/wm/WindowStateAnimator.java | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/WindowSurfaceController.java | 23 |
2 files changed, 23 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index e904ad58f957..1dbca968322c 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1225,10 +1225,11 @@ class WindowStateAnimator { calculateSurfaceBounds(w, w.getAttrs()); mSurfaceController.setPositionInTransaction(mTmpSize.left, mTmpSize.top, recoveringMemory); + + mSurfaceController.setMatrixInTransaction(mDsDx * w.mHScale, mDtDx * w.mVScale, + mDsDy * w.mHScale, mDtDy * w.mVScale, recoveringMemory); mSurfaceResized = mSurfaceController.setSizeInTransaction( mTmpSize.width(), mTmpSize.height(), - mDsDx * w.mHScale, mDtDx * w.mVScale, - mDsDy * w.mHScale, mDtDy * w.mVScale, recoveringMemory); if (mSurfaceResized) { diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java index 5674ca2a7109..e14cfdf9aac0 100644 --- a/services/core/java/com/android/server/wm/WindowSurfaceController.java +++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java @@ -190,8 +190,27 @@ class WindowSurfaceController { } } - boolean setSizeInTransaction(int width, int height, float dsdx, float dtdx, float dsdy, float dtdy, + void setMatrixInTransaction(float dsdx, float dtdx, float dsdy, float dtdy, boolean recoveringMemory) { + try { + if (SHOW_TRANSACTIONS) logSurface( + "MATRIX [" + dsdx + "," + dtdx + "," + dsdy + "," + dtdy + "]", null); + mSurfaceControl.setMatrix( + dsdx, dtdx, dsdy, dtdy); + } catch (RuntimeException e) { + // If something goes wrong with the surface (such + // as running out of memory), don't take down the + // entire system. + Slog.e(TAG, "Error setting matrix on surface surface" + title + + " MATRIX [" + dsdx + "," + dtdx + "," + dsdy + "," + dtdy + "]", null); + if (!recoveringMemory) { + mAnimator.reclaimSomeSurfaceMemory("matrix", true); + } + } + return; + } + + boolean setSizeInTransaction(int width, int height, boolean recoveringMemory) { final boolean surfaceResized = mSurfaceW != width || mSurfaceH != height; if (surfaceResized) { mSurfaceW = width; @@ -201,8 +220,6 @@ class WindowSurfaceController { if (SHOW_TRANSACTIONS) logSurface( "SIZE " + width + "x" + height, null); mSurfaceControl.setSize(width, height); - mSurfaceControl.setMatrix( - dsdx, dtdx, dsdy, dtdy); } catch (RuntimeException e) { // If something goes wrong with the surface (such // as running out of memory), don't take down the |