diff options
| author | 2017-10-25 15:12:59 +0000 | |
|---|---|---|
| committer | 2017-10-25 15:12:59 +0000 | |
| commit | d14711f3b96eaf3bae6cf3ce65161ea57e037529 (patch) | |
| tree | efb86979b9bbed0b6a448b75357e4336de985c60 | |
| parent | ff29069138dfdbd4464d45fd5fc602421ba39673 (diff) | |
| parent | f93ac2b45591cfd50294dd4c039567f547fe36ba (diff) | |
Merge "Avoid changing resize dim layer if not needed"
| -rw-r--r-- | services/core/java/com/android/server/wm/DockedStackDividerController.java | 28 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TaskStack.java | 5 |
2 files changed, 27 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 52526e2f7d24..5ce4d46c6b4a 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -137,6 +137,8 @@ public class DockedStackDividerController implements DimLayerUser { float mLastDividerProgress; private final DividerSnapAlgorithm[] mSnapAlgorithmForRotation = new DividerSnapAlgorithm[4]; private boolean mImeHideRequested; + private final Rect mLastDimLayerRect = new Rect(); + private float mLastDimLayerAlpha; DockedStackDividerController(WindowManagerService service, DisplayContent displayContent) { mService = service; @@ -525,7 +527,6 @@ public class DockedStackDividerController implements DimLayerUser { * display in that windowing mode. */ void setResizeDimLayer(boolean visible, int targetWindowingMode, float alpha) { - mService.openSurfaceTransaction(); // TODO: Maybe only allow split-screen windowing modes? final TaskStack stack = targetWindowingMode != WINDOWING_MODE_UNDEFINED ? mDisplayContent.getStack(targetWindowingMode) @@ -535,16 +536,33 @@ public class DockedStackDividerController implements DimLayerUser { if (visibleAndValid) { stack.getDimBounds(mTmpRect); if (mTmpRect.height() > 0 && mTmpRect.width() > 0) { - mDimLayer.setBounds(mTmpRect); - mDimLayer.show(getResizeDimLayer(), alpha, 0 /* duration */); + if (!mLastDimLayerRect.equals(mTmpRect) || mLastDimLayerAlpha != alpha) { + try { + // TODO: This should use the regular animation transaction - here and below + mService.openSurfaceTransaction(); + mDimLayer.setBounds(mTmpRect); + mDimLayer.show(getResizeDimLayer(), alpha, 0 /* duration */); + } finally { + mService.closeSurfaceTransaction(); + } + } + mLastDimLayerRect.set(mTmpRect); + mLastDimLayerAlpha = alpha; } else { visibleAndValid = false; } } if (!visibleAndValid) { - mDimLayer.hide(); + if (mLastDimLayerAlpha != 0f) { + try { + mService.openSurfaceTransaction(); + mDimLayer.hide(); + } finally { + mService.closeSurfaceTransaction(); + } + } + mLastDimLayerAlpha = 0f; } - mService.closeSurfaceTransaction(); } /** diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index d170b6f24067..33202749aca1 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1008,10 +1008,13 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye void resetAdjustedForIme(boolean adjustBoundsNow) { if (adjustBoundsNow) { mImeWin = null; - mAdjustedForIme = false; mImeGoingAway = false; mAdjustImeAmount = 0f; mAdjustDividerAmount = 0f; + if (!mAdjustedForIme) { + return; + } + mAdjustedForIme = false; updateAdjustedBounds(); mService.setResizeDimLayer(false, getWindowingMode(), 1.0f); } else { |