Merge "Reduce load on CPU when animating rotation."
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index 0d64b68..1198a77 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -471,9 +471,7 @@
Surface.closeTransaction();
}
- if (mBulkUpdateParams != 0) {
- mService.bulkSetParameters(mBulkUpdateParams);
- }
+ mService.bulkSetParameters(mBulkUpdateParams);
}
WindowState mCurrentFocus;
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 00972fa..86f4ca3 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -6882,22 +6882,33 @@
case BULK_UPDATE_PARAMETERS: {
// Used to send multiple changes from the animation side to the layout side.
synchronized (mWindowMap) {
+ boolean doRequest = false;
// TODO(cmautner): As the number of bits grows, use masks of bit groups to
// eliminate unnecessary tests.
if ((msg.arg1 & LayoutFields.SET_UPDATE_ROTATION) != 0) {
mInnerFields.mUpdateRotation = true;
+ doRequest = true;
}
if ((msg.arg1 & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) {
mInnerFields.mWallpaperMayChange = true;
+ doRequest = true;
}
if ((msg.arg1 & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) {
mInnerFields.mWallpaperForceHidingChanged = true;
+ doRequest = true;
}
if ((msg.arg1 & LayoutFields.CLEAR_ORIENTATION_CHANGE_COMPLETE) != 0) {
mInnerFields.mOrientationChangeComplete = false;
+ } else {
+ mInnerFields.mOrientationChangeComplete = true;
+ if (mWindowsFreezingScreen) {
+ doRequest = true;
+ }
}
- requestTraversalLocked();
+ if (doRequest) {
+ requestTraversalLocked();
+ }
}
break;
}
@@ -8472,11 +8483,13 @@
!mInnerFields.mUpdateRotation) {
checkDrawnWindowsLocked();
}
- mInnerFields.mOrientationChangeComplete = true;
// Check to see if we are now in a state where the screen should
// be enabled, because the window obscured flags have changed.
enableScreenIfNeededLocked();
+// Slog.e(TAG, "performLayoutAndPlaceSurfacesLockedInner exit: mPendingLayoutChanges="
+// + Integer.toHexString(mPendingLayoutChanges) + " mLayoutNeeded=" + mLayoutNeeded
+// + " animating=" + mAnimator.mAnimating);
}
void checkDrawnWindowsLocked() {
@@ -9512,11 +9525,6 @@
public void onHardKeyboardStatusChange(boolean available, boolean enabled);
}
- void notifyAnimationChangedLayout(final int pendingLayoutChanges) {
- mPendingLayoutChanges |= pendingLayoutChanges;
- requestTraversalLocked();
- }
-
void debugLayoutRepeats(final String msg, int pendingLayoutChanges) {
if (mLayoutRepeatCount >= LAYOUT_REPEAT_THRESHOLD) {
Slog.v(TAG, "Layouts looping: " + msg + ", mPendingLayoutChanges = 0x" +