diff options
author | 2016-02-01 23:12:14 +0000 | |
---|---|---|
committer | 2016-02-01 23:12:14 +0000 | |
commit | d7e4acba06057a40d9716c54ce49708608aa6f8c (patch) | |
tree | 418d5f431ce7873f0648f8c6a36e27e59ae476d9 | |
parent | d1a668fd9a1a7ea81a50a9bfc5a1ac188bb47dc7 (diff) | |
parent | e1034cc39a574c3e8dc481810fb8f24571c41d70 (diff) |
Merge "Ensure Surface matrix set even when size unchanged."
-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 |