Loading services/java/com/android/server/wm/AppWindowAnimator.java +11 −10 Original line number Diff line number Diff line Loading @@ -10,10 +10,8 @@ import android.view.animation.Animation; import android.view.animation.Transformation; import java.io.PrintWriter; import java.util.ArrayList; /** * */ public class AppWindowAnimator { static final String TAG = "AppWindowAnimator"; Loading Loading @@ -48,12 +46,15 @@ public class AppWindowAnimator { Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); /** WindowStateAnimator from mAppAnimator.allAppWindows as of last performLayout */ ArrayList<WindowStateAnimator> mAllAppWinAnimators; static final Animation sDummyAnimation = new DummyAnimation(); public AppWindowAnimator(final WindowManagerService service, final AppWindowToken atoken) { mService = service; public AppWindowAnimator(final AppWindowToken atoken) { mAppToken = atoken; mAnimator = service.mAnimator; mService = atoken.service; mAnimator = atoken.mAnimator; } public void setAnimation(Animation anim, boolean initialized) { Loading Loading @@ -255,9 +256,9 @@ public class AppWindowAnimator { transformation.clear(); final int N = mAppToken.windows.size(); final int N = mAllAppWinAnimators.size(); for (int i=0; i<N; i++) { mAppToken.windows.get(i).mWinAnimator.finishExit(); mAllAppWinAnimators.get(i).finishExit(); } mAppToken.updateReportedVisibilityLocked(); Loading @@ -266,9 +267,9 @@ public class AppWindowAnimator { boolean showAllWindowsLocked() { boolean isAnimating = false; final int NW = mAppToken.allAppWindows.size(); final int NW = mAllAppWinAnimators.size(); for (int i=0; i<NW; i++) { WindowStateAnimator winAnimator = mAppToken.allAppWindows.get(i).mWinAnimator; WindowStateAnimator winAnimator = mAllAppWinAnimators.get(i); if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, "performing show on: " + winAnimator); winAnimator.performShowLocked(); Loading services/java/com/android/server/wm/AppWindowToken.java +1 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ class AppWindowToken extends WindowToken { appToken = _token; mInputApplicationHandle = new InputApplicationHandle(this); mAnimator = service.mAnimator; mAppAnimator = new AppWindowAnimator(_service, this); mAppAnimator = new AppWindowAnimator(this); } void sendAppVisibilityToClients() { Loading services/java/com/android/server/wm/WindowAnimator.java +30 −15 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.view.WindowManagerPolicy; import android.view.animation.Animation; import com.android.internal.policy.impl.PhoneWindowManager; import com.android.server.wm.WindowManagerService.AppWindowAnimParams; import com.android.server.wm.WindowManagerService.LayoutToAnimatorParams; import java.io.PrintWriter; Loading Loading @@ -87,6 +88,8 @@ public class WindowAnimator { WindowState mLowerWallpaperTarget = null; WindowState mUpperWallpaperTarget = null; ArrayList<AppWindowAnimator> mAppAnimators = new ArrayList<AppWindowAnimator>(); ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); /** Parameters being passed from this into mService. */ Loading Loading @@ -143,6 +146,11 @@ public class WindowAnimator { synchronized(layoutToAnim) { layoutToAnim.mAnimationScheduled = false; if (!layoutToAnim.mParamsModified) { return; } layoutToAnim.mParamsModified = false; if ((layoutToAnim.mChanges & LayoutToAnimatorParams.WALLPAPER_TOKENS_CHANGED) != 0) { layoutToAnim.mChanges &= ~LayoutToAnimatorParams.WALLPAPER_TOKENS_CHANGED; mWallpaperTokens = new ArrayList<WindowToken>(layoutToAnim.mWallpaperTokens); Loading Loading @@ -173,6 +181,16 @@ public class WindowAnimator { mDimParams = dimParams; } } mAppAnimators.clear(); final int N = layoutToAnim.mAppWindowAnimParams.size(); for (int i = 0; i < N; i++) { final AppWindowAnimParams params = layoutToAnim.mAppWindowAnimParams.get(i); AppWindowAnimator appAnimator = params.mAppAnimator; appAnimator.mAllAppWinAnimators = new ArrayList<WindowStateAnimator>(params.mWinAnimators); mAppAnimators.add(appAnimator); } } } Loading @@ -197,11 +215,10 @@ public class WindowAnimator { } private void updateWindowsAppsAndRotationAnimationsLocked() { final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens; int i; final int NAT = appTokens.size(); final int NAT = mAppAnimators.size(); for (i=0; i<NAT; i++) { final AppWindowAnimator appAnimator = appTokens.get(i).mAppAnimator; final AppWindowAnimator appAnimator = mAppAnimators.get(i); final boolean wasAnimating = appAnimator.animation != null && appAnimator.animation != AppWindowAnimator.sDummyAnimation; if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) { Loading Loading @@ -373,8 +390,7 @@ public class WindowAnimator { } } } final AppWindowAnimator appAnimator = atoken == null ? null : atoken.mAppAnimator; final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; if (appAnimator != null && appAnimator.thumbnail != null) { if (appAnimator.thumbnailTransactionSeq != mAnimTransactionSequence) { appAnimator.thumbnailTransactionSeq = mAnimTransactionSequence; Loading Loading @@ -438,8 +454,7 @@ public class WindowAnimator { // If this window's app token is running a detached wallpaper // animation, make a note so we can ensure the wallpaper is // displayed behind it. final AppWindowAnimator appAnimator = win.mAppToken == null ? null : win.mAppToken.mAppAnimator; final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; if (appAnimator != null && appAnimator.animation != null && appAnimator.animating) { if ((flags & FLAG_SHOW_WALLPAPER) != 0 Loading Loading @@ -495,18 +510,18 @@ public class WindowAnimator { private void testTokenMayBeDrawnLocked() { // See if any windows have been drawn, so they (and others // associated with them) can now be shown. final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens; final int NT = appTokens.size(); final int NT = mAppAnimators.size(); for (int i=0; i<NT; i++) { AppWindowToken wtoken = appTokens.get(i); AppWindowAnimator appAnimator = mAppAnimators.get(i); AppWindowToken wtoken = appAnimator.mAppToken; final boolean allDrawn = wtoken.allDrawn; if (allDrawn != wtoken.mAppAnimator.allDrawn) { wtoken.mAppAnimator.allDrawn = allDrawn; if (allDrawn != appAnimator.allDrawn) { appAnimator.allDrawn = allDrawn; if (allDrawn) { // The token has now changed state to having all // windows shown... what to do, what to do? if (wtoken.mAppAnimator.freezingScreen) { wtoken.mAppAnimator.showAllWindowsLocked(); if (appAnimator.freezingScreen) { appAnimator.showAllWindowsLocked(); mService.unsetAppFreezingScreenLocked(wtoken, false, true); if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG, "Setting mOrientationChangeComplete=true because wtoken " Loading @@ -523,7 +538,7 @@ public class WindowAnimator { // We can now show all of the drawn windows! if (!mService.mOpeningApps.contains(wtoken)) { mAnimating |= wtoken.mAppAnimator.showAllWindowsLocked(); mAnimating |= appAnimator.showAllWindowsLocked(); } } } Loading services/java/com/android/server/wm/WindowManagerService.java +75 −45 Original line number Diff line number Diff line Loading @@ -648,7 +648,25 @@ public class WindowManagerService extends IWindowManager.Stub } final LayoutFields mInnerFields = new LayoutFields(); static class AppWindowAnimParams { AppWindowAnimator mAppAnimator; ArrayList<WindowStateAnimator> mWinAnimators; public AppWindowAnimParams(final AppWindowAnimator appAnimator) { mAppAnimator = appAnimator; final AppWindowToken wtoken = appAnimator.mAppToken; mWinAnimators = new ArrayList<WindowStateAnimator>(); final int N = wtoken.allAppWindows.size(); for (int i = 0; i < N; i++) { mWinAnimators.add(wtoken.allAppWindows.get(i).mWinAnimator); } } } static class LayoutToAnimatorParams { boolean mParamsModified; static final long WALLPAPER_TOKENS_CHANGED = 1 << 0; long mChanges; Loading @@ -659,6 +677,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState mUpperWallpaperTarget; DimAnimator.Parameters mDimParams; ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); ArrayList<AppWindowAnimParams> mAppWindowAnimParams = new ArrayList<AppWindowAnimParams>(); } /** Params from WindowManagerService to WindowAnimator. Do not modify or read without first * locking on either mWindowMap or mAnimator and then on mLayoutToAnim */ Loading Loading @@ -7324,52 +7343,11 @@ public class WindowManagerService extends IWindowManager.Stub case UPDATE_ANIM_PARAMETERS: { // Used to send multiple changes from the animation side to the layout side. synchronized (mWindowMap) { final WindowAnimator.AnimatorToLayoutParams animToLayout = mAnimator.mAnimToLayout; synchronized (animToLayout) { animToLayout.mUpdateQueued = false; boolean doRequest = false; final int bulkUpdateParams = animToLayout.mBulkUpdateParams; // TODO(cmautner): As the number of bits grows, use masks of bit groups to // eliminate unnecessary tests. if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { mInnerFields.mUpdateRotation = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { mInnerFields.mWallpaperMayChange = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { mInnerFields.mWallpaperForceHidingChanged = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) == 0) { mInnerFields.mOrientationChangeComplete = false; } else { mInnerFields.mOrientationChangeComplete = true; if (mWindowsFreezingScreen) { doRequest = true; } } if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { mTurnOnScreen = true; } mPendingLayoutChanges |= animToLayout.mPendingLayoutChanges; if (mPendingLayoutChanges != 0) { doRequest = true; } mWindowDetachedWallpaper = animToLayout.mWindowDetachedWallpaper; if (doRequest) { if (copyAnimToLayoutParamsLocked()) { mH.sendEmptyMessage(CLEAR_PENDING_ACTIONS); performLayoutAndPlaceSurfacesLocked(); } } } break; } Loading Loading @@ -9109,16 +9087,26 @@ public class WindowManagerService extends IWindowManager.Stub // Copy local params to transfer params. ArrayList<WindowStateAnimator> winAnimators = layoutToAnim.mWinAnimators; winAnimators.clear(); final int N = mWindows.size(); int N = mWindows.size(); for (int i = 0; i < N; i++) { final WindowStateAnimator winAnimator = mWindows.get(i).mWinAnimator; if (winAnimator.mSurface != null) { winAnimators.add(winAnimator); } } layoutToAnim.mWallpaperTarget = mWallpaperTarget; layoutToAnim.mLowerWallpaperTarget = mLowerWallpaperTarget; layoutToAnim.mUpperWallpaperTarget = mUpperWallpaperTarget; final ArrayList<AppWindowAnimParams> paramList = layoutToAnim.mAppWindowAnimParams; paramList.clear(); N = mAnimatingAppTokens.size(); for (int i = 0; i < N; i++) { paramList.add(new AppWindowAnimParams(mAnimatingAppTokens.get(i).mAppAnimator)); } layoutToAnim.mParamsModified = true; scheduleAnimationLocked(); } } Loading Loading @@ -9146,6 +9134,48 @@ public class WindowManagerService extends IWindowManager.Stub setAnimDimParams(null); } private boolean copyAnimToLayoutParamsLocked() { boolean doRequest = false; final WindowAnimator.AnimatorToLayoutParams animToLayout = mAnimator.mAnimToLayout; synchronized (animToLayout) { animToLayout.mUpdateQueued = false; final int bulkUpdateParams = animToLayout.mBulkUpdateParams; // TODO(cmautner): As the number of bits grows, use masks of bit groups to // eliminate unnecessary tests. if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { mInnerFields.mUpdateRotation = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { mInnerFields.mWallpaperMayChange = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { mInnerFields.mWallpaperForceHidingChanged = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) == 0) { mInnerFields.mOrientationChangeComplete = false; } else { mInnerFields.mOrientationChangeComplete = true; if (mWindowsFreezingScreen) { doRequest = true; } } if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { mTurnOnScreen = true; } mPendingLayoutChanges |= animToLayout.mPendingLayoutChanges; if (mPendingLayoutChanges != 0) { doRequest = true; } mWindowDetachedWallpaper = animToLayout.mWindowDetachedWallpaper; } return doRequest; } boolean reclaimSomeSurfaceMemoryLocked(WindowStateAnimator winAnimator, String operation, boolean secure) { final Surface surface = winAnimator.mSurface; Loading services/java/com/android/server/wm/WindowState.java +3 −3 Original line number Diff line number Diff line Loading @@ -317,9 +317,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { mIsFloatingLayer = mIsImWindow || mIsWallpaper; } mWinAnimator = new WindowStateAnimator(this); mWinAnimator.mAlpha = a.alpha; WindowState appWin = this; while (appWin.mAttachedWindow != null) { appWin = appWin.mAttachedWindow; Loading @@ -335,6 +332,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { mRootToken = appToken; mAppToken = appToken.appWindowToken; mWinAnimator = new WindowStateAnimator(this); mWinAnimator.mAlpha = a.alpha; mRequestedWidth = 0; mRequestedHeight = 0; mLastRequestedWidth = 0; Loading Loading
services/java/com/android/server/wm/AppWindowAnimator.java +11 −10 Original line number Diff line number Diff line Loading @@ -10,10 +10,8 @@ import android.view.animation.Animation; import android.view.animation.Transformation; import java.io.PrintWriter; import java.util.ArrayList; /** * */ public class AppWindowAnimator { static final String TAG = "AppWindowAnimator"; Loading Loading @@ -48,12 +46,15 @@ public class AppWindowAnimator { Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); /** WindowStateAnimator from mAppAnimator.allAppWindows as of last performLayout */ ArrayList<WindowStateAnimator> mAllAppWinAnimators; static final Animation sDummyAnimation = new DummyAnimation(); public AppWindowAnimator(final WindowManagerService service, final AppWindowToken atoken) { mService = service; public AppWindowAnimator(final AppWindowToken atoken) { mAppToken = atoken; mAnimator = service.mAnimator; mService = atoken.service; mAnimator = atoken.mAnimator; } public void setAnimation(Animation anim, boolean initialized) { Loading Loading @@ -255,9 +256,9 @@ public class AppWindowAnimator { transformation.clear(); final int N = mAppToken.windows.size(); final int N = mAllAppWinAnimators.size(); for (int i=0; i<N; i++) { mAppToken.windows.get(i).mWinAnimator.finishExit(); mAllAppWinAnimators.get(i).finishExit(); } mAppToken.updateReportedVisibilityLocked(); Loading @@ -266,9 +267,9 @@ public class AppWindowAnimator { boolean showAllWindowsLocked() { boolean isAnimating = false; final int NW = mAppToken.allAppWindows.size(); final int NW = mAllAppWinAnimators.size(); for (int i=0; i<NW; i++) { WindowStateAnimator winAnimator = mAppToken.allAppWindows.get(i).mWinAnimator; WindowStateAnimator winAnimator = mAllAppWinAnimators.get(i); if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, "performing show on: " + winAnimator); winAnimator.performShowLocked(); Loading
services/java/com/android/server/wm/AppWindowToken.java +1 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ class AppWindowToken extends WindowToken { appToken = _token; mInputApplicationHandle = new InputApplicationHandle(this); mAnimator = service.mAnimator; mAppAnimator = new AppWindowAnimator(_service, this); mAppAnimator = new AppWindowAnimator(this); } void sendAppVisibilityToClients() { Loading
services/java/com/android/server/wm/WindowAnimator.java +30 −15 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.view.WindowManagerPolicy; import android.view.animation.Animation; import com.android.internal.policy.impl.PhoneWindowManager; import com.android.server.wm.WindowManagerService.AppWindowAnimParams; import com.android.server.wm.WindowManagerService.LayoutToAnimatorParams; import java.io.PrintWriter; Loading Loading @@ -87,6 +88,8 @@ public class WindowAnimator { WindowState mLowerWallpaperTarget = null; WindowState mUpperWallpaperTarget = null; ArrayList<AppWindowAnimator> mAppAnimators = new ArrayList<AppWindowAnimator>(); ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); /** Parameters being passed from this into mService. */ Loading Loading @@ -143,6 +146,11 @@ public class WindowAnimator { synchronized(layoutToAnim) { layoutToAnim.mAnimationScheduled = false; if (!layoutToAnim.mParamsModified) { return; } layoutToAnim.mParamsModified = false; if ((layoutToAnim.mChanges & LayoutToAnimatorParams.WALLPAPER_TOKENS_CHANGED) != 0) { layoutToAnim.mChanges &= ~LayoutToAnimatorParams.WALLPAPER_TOKENS_CHANGED; mWallpaperTokens = new ArrayList<WindowToken>(layoutToAnim.mWallpaperTokens); Loading Loading @@ -173,6 +181,16 @@ public class WindowAnimator { mDimParams = dimParams; } } mAppAnimators.clear(); final int N = layoutToAnim.mAppWindowAnimParams.size(); for (int i = 0; i < N; i++) { final AppWindowAnimParams params = layoutToAnim.mAppWindowAnimParams.get(i); AppWindowAnimator appAnimator = params.mAppAnimator; appAnimator.mAllAppWinAnimators = new ArrayList<WindowStateAnimator>(params.mWinAnimators); mAppAnimators.add(appAnimator); } } } Loading @@ -197,11 +215,10 @@ public class WindowAnimator { } private void updateWindowsAppsAndRotationAnimationsLocked() { final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens; int i; final int NAT = appTokens.size(); final int NAT = mAppAnimators.size(); for (i=0; i<NAT; i++) { final AppWindowAnimator appAnimator = appTokens.get(i).mAppAnimator; final AppWindowAnimator appAnimator = mAppAnimators.get(i); final boolean wasAnimating = appAnimator.animation != null && appAnimator.animation != AppWindowAnimator.sDummyAnimation; if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) { Loading Loading @@ -373,8 +390,7 @@ public class WindowAnimator { } } } final AppWindowAnimator appAnimator = atoken == null ? null : atoken.mAppAnimator; final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; if (appAnimator != null && appAnimator.thumbnail != null) { if (appAnimator.thumbnailTransactionSeq != mAnimTransactionSequence) { appAnimator.thumbnailTransactionSeq = mAnimTransactionSequence; Loading Loading @@ -438,8 +454,7 @@ public class WindowAnimator { // If this window's app token is running a detached wallpaper // animation, make a note so we can ensure the wallpaper is // displayed behind it. final AppWindowAnimator appAnimator = win.mAppToken == null ? null : win.mAppToken.mAppAnimator; final AppWindowAnimator appAnimator = winAnimator.mAppAnimator; if (appAnimator != null && appAnimator.animation != null && appAnimator.animating) { if ((flags & FLAG_SHOW_WALLPAPER) != 0 Loading Loading @@ -495,18 +510,18 @@ public class WindowAnimator { private void testTokenMayBeDrawnLocked() { // See if any windows have been drawn, so they (and others // associated with them) can now be shown. final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens; final int NT = appTokens.size(); final int NT = mAppAnimators.size(); for (int i=0; i<NT; i++) { AppWindowToken wtoken = appTokens.get(i); AppWindowAnimator appAnimator = mAppAnimators.get(i); AppWindowToken wtoken = appAnimator.mAppToken; final boolean allDrawn = wtoken.allDrawn; if (allDrawn != wtoken.mAppAnimator.allDrawn) { wtoken.mAppAnimator.allDrawn = allDrawn; if (allDrawn != appAnimator.allDrawn) { appAnimator.allDrawn = allDrawn; if (allDrawn) { // The token has now changed state to having all // windows shown... what to do, what to do? if (wtoken.mAppAnimator.freezingScreen) { wtoken.mAppAnimator.showAllWindowsLocked(); if (appAnimator.freezingScreen) { appAnimator.showAllWindowsLocked(); mService.unsetAppFreezingScreenLocked(wtoken, false, true); if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG, "Setting mOrientationChangeComplete=true because wtoken " Loading @@ -523,7 +538,7 @@ public class WindowAnimator { // We can now show all of the drawn windows! if (!mService.mOpeningApps.contains(wtoken)) { mAnimating |= wtoken.mAppAnimator.showAllWindowsLocked(); mAnimating |= appAnimator.showAllWindowsLocked(); } } } Loading
services/java/com/android/server/wm/WindowManagerService.java +75 −45 Original line number Diff line number Diff line Loading @@ -648,7 +648,25 @@ public class WindowManagerService extends IWindowManager.Stub } final LayoutFields mInnerFields = new LayoutFields(); static class AppWindowAnimParams { AppWindowAnimator mAppAnimator; ArrayList<WindowStateAnimator> mWinAnimators; public AppWindowAnimParams(final AppWindowAnimator appAnimator) { mAppAnimator = appAnimator; final AppWindowToken wtoken = appAnimator.mAppToken; mWinAnimators = new ArrayList<WindowStateAnimator>(); final int N = wtoken.allAppWindows.size(); for (int i = 0; i < N; i++) { mWinAnimators.add(wtoken.allAppWindows.get(i).mWinAnimator); } } } static class LayoutToAnimatorParams { boolean mParamsModified; static final long WALLPAPER_TOKENS_CHANGED = 1 << 0; long mChanges; Loading @@ -659,6 +677,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState mUpperWallpaperTarget; DimAnimator.Parameters mDimParams; ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>(); ArrayList<AppWindowAnimParams> mAppWindowAnimParams = new ArrayList<AppWindowAnimParams>(); } /** Params from WindowManagerService to WindowAnimator. Do not modify or read without first * locking on either mWindowMap or mAnimator and then on mLayoutToAnim */ Loading Loading @@ -7324,52 +7343,11 @@ public class WindowManagerService extends IWindowManager.Stub case UPDATE_ANIM_PARAMETERS: { // Used to send multiple changes from the animation side to the layout side. synchronized (mWindowMap) { final WindowAnimator.AnimatorToLayoutParams animToLayout = mAnimator.mAnimToLayout; synchronized (animToLayout) { animToLayout.mUpdateQueued = false; boolean doRequest = false; final int bulkUpdateParams = animToLayout.mBulkUpdateParams; // TODO(cmautner): As the number of bits grows, use masks of bit groups to // eliminate unnecessary tests. if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { mInnerFields.mUpdateRotation = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { mInnerFields.mWallpaperMayChange = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { mInnerFields.mWallpaperForceHidingChanged = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) == 0) { mInnerFields.mOrientationChangeComplete = false; } else { mInnerFields.mOrientationChangeComplete = true; if (mWindowsFreezingScreen) { doRequest = true; } } if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { mTurnOnScreen = true; } mPendingLayoutChanges |= animToLayout.mPendingLayoutChanges; if (mPendingLayoutChanges != 0) { doRequest = true; } mWindowDetachedWallpaper = animToLayout.mWindowDetachedWallpaper; if (doRequest) { if (copyAnimToLayoutParamsLocked()) { mH.sendEmptyMessage(CLEAR_PENDING_ACTIONS); performLayoutAndPlaceSurfacesLocked(); } } } break; } Loading Loading @@ -9109,16 +9087,26 @@ public class WindowManagerService extends IWindowManager.Stub // Copy local params to transfer params. ArrayList<WindowStateAnimator> winAnimators = layoutToAnim.mWinAnimators; winAnimators.clear(); final int N = mWindows.size(); int N = mWindows.size(); for (int i = 0; i < N; i++) { final WindowStateAnimator winAnimator = mWindows.get(i).mWinAnimator; if (winAnimator.mSurface != null) { winAnimators.add(winAnimator); } } layoutToAnim.mWallpaperTarget = mWallpaperTarget; layoutToAnim.mLowerWallpaperTarget = mLowerWallpaperTarget; layoutToAnim.mUpperWallpaperTarget = mUpperWallpaperTarget; final ArrayList<AppWindowAnimParams> paramList = layoutToAnim.mAppWindowAnimParams; paramList.clear(); N = mAnimatingAppTokens.size(); for (int i = 0; i < N; i++) { paramList.add(new AppWindowAnimParams(mAnimatingAppTokens.get(i).mAppAnimator)); } layoutToAnim.mParamsModified = true; scheduleAnimationLocked(); } } Loading Loading @@ -9146,6 +9134,48 @@ public class WindowManagerService extends IWindowManager.Stub setAnimDimParams(null); } private boolean copyAnimToLayoutParamsLocked() { boolean doRequest = false; final WindowAnimator.AnimatorToLayoutParams animToLayout = mAnimator.mAnimToLayout; synchronized (animToLayout) { animToLayout.mUpdateQueued = false; final int bulkUpdateParams = animToLayout.mBulkUpdateParams; // TODO(cmautner): As the number of bits grows, use masks of bit groups to // eliminate unnecessary tests. if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { mInnerFields.mUpdateRotation = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { mInnerFields.mWallpaperMayChange = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { mInnerFields.mWallpaperForceHidingChanged = true; doRequest = true; } if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) == 0) { mInnerFields.mOrientationChangeComplete = false; } else { mInnerFields.mOrientationChangeComplete = true; if (mWindowsFreezingScreen) { doRequest = true; } } if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { mTurnOnScreen = true; } mPendingLayoutChanges |= animToLayout.mPendingLayoutChanges; if (mPendingLayoutChanges != 0) { doRequest = true; } mWindowDetachedWallpaper = animToLayout.mWindowDetachedWallpaper; } return doRequest; } boolean reclaimSomeSurfaceMemoryLocked(WindowStateAnimator winAnimator, String operation, boolean secure) { final Surface surface = winAnimator.mSurface; Loading
services/java/com/android/server/wm/WindowState.java +3 −3 Original line number Diff line number Diff line Loading @@ -317,9 +317,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { mIsFloatingLayer = mIsImWindow || mIsWallpaper; } mWinAnimator = new WindowStateAnimator(this); mWinAnimator.mAlpha = a.alpha; WindowState appWin = this; while (appWin.mAttachedWindow != null) { appWin = appWin.mAttachedWindow; Loading @@ -335,6 +332,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { mRootToken = appToken; mAppToken = appToken.appWindowToken; mWinAnimator = new WindowStateAnimator(this); mWinAnimator.mAlpha = a.alpha; mRequestedWidth = 0; mRequestedHeight = 0; mLastRequestedWidth = 0; Loading