diff options
author | Craig Mautner <cmautner@google.com> | 2015-02-18 13:08:42 -0800 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2015-02-19 16:51:12 -0800 |
commit | b605f4af143bd129ec84bdafe89400cdc022ddc2 (patch) | |
tree | 3cb7f35b5682039ba1ac1e0aa82afef9328bc159 /services/core | |
parent | 2ada234d827fe4a384374b5f9b14a557c8145892 (diff) | |
download | frameworks_base-b605f4af143bd129ec84bdafe89400cdc022ddc2.zip frameworks_base-b605f4af143bd129ec84bdafe89400cdc022ddc2.tar.gz frameworks_base-b605f4af143bd129ec84bdafe89400cdc022ddc2.tar.bz2 |
Refactor computeScreenConfigurationLocked and more.
- Recognizing that computeScreenConfigurationLocked() only returned
false if mDisplayReady was false allows multiple code
simplifications.
- Make computeNewConfigurationLocked() always return a non-null
value.
- Remove unused Session parameter from removeWindowInnerLocked().
- Just allocate mForceRemoves one time.
- Since ADJUST_WALLPAPER_VISIBILITY_CHANGED was unused have
adjustWallpaperWindowsLocked() return a boolean.
- Remove unused long parameter from handleNotObscuredLocked().
Change-Id: Ifd15736b163ab6e989f8ca32cf8f94b316386216
Diffstat (limited to 'services/core')
-rw-r--r-- | services/core/java/com/android/server/wm/TaskStack.java | 3 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 147 |
2 files changed, 61 insertions, 89 deletions
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 94fecc9..3e1c5ff 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -26,7 +26,6 @@ import android.util.DisplayMetrics; import android.util.EventLog; import android.util.Slog; import android.util.TypedValue; -import android.view.Display; import android.view.Surface; import com.android.server.EventLogTags; @@ -371,7 +370,7 @@ public class TaskStack { for (int appNdx = appWindowTokens.size() - 1; appNdx >= 0; --appNdx) { final WindowList appWindows = appWindowTokens.get(appNdx).allAppWindows; for (int winNdx = appWindows.size() - 1; winNdx >= 0; --winNdx) { - mService.removeWindowInnerLocked(null, appWindows.get(winNdx)); + mService.removeWindowInnerLocked(appWindows.get(winNdx)); doAnotherLayoutPass = true; } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index dd4bbb7..885465b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -64,11 +64,9 @@ import android.database.ContentObserver; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; -import android.graphics.Matrix; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; -import android.graphics.RectF; import android.graphics.Region; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManagerInternal; @@ -127,7 +125,6 @@ import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceSession; import android.view.View; -import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.WindowManagerPolicy; @@ -136,7 +133,6 @@ import android.view.WindowManagerPolicy.FakeWindow; import android.view.WindowManagerPolicy.PointerEventListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; -import android.view.animation.Transformation; import java.io.BufferedWriter; import java.io.DataInputStream; @@ -413,7 +409,7 @@ public class WindowManagerService extends IWindowManager.Stub * This is set when we have run out of memory, and will either be an empty * list or contain windows that need to be force removed. */ - ArrayList<WindowState> mForceRemoves; + final ArrayList<WindowState> mForceRemoves = new ArrayList<>(); /** * Windows that clients are waiting to have drawn. @@ -1736,10 +1732,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - static final int ADJUST_WALLPAPER_LAYERS_CHANGED = 1<<1; - static final int ADJUST_WALLPAPER_VISIBILITY_CHANGED = 1<<2; - - int adjustWallpaperWindowsLocked() { + boolean adjustWallpaperWindowsLocked() { mInnerFields.mWallpaperMayChange = false; boolean targetChanged = false; @@ -1966,13 +1959,12 @@ public class WindowManagerService extends IWindowManager.Stub // Start stepping backwards from here, ensuring that our wallpaper windows // are correctly placed. - int changed = 0; + boolean changed = false; for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { WindowToken token = mWallpaperTokens.get(curTokenNdx); if (token.hidden == visible) { if (DEBUG_WALLPAPER_LIGHT) Slog.d(TAG, "Wallpaper token " + token + " hidden=" + !visible); - changed |= ADJUST_WALLPAPER_VISIBILITY_CHANGED; token.hidden = !visible; // Need to do a layout to ensure the wallpaper now has the correct size. getDefaultDisplayContentLocked().layoutNeeded = true; @@ -2033,7 +2025,7 @@ public class WindowManagerService extends IWindowManager.Stub windows.add(insertionIndex, wallpaper); mWindowsChanged = true; - changed |= ADJUST_WALLPAPER_LAYERS_CHANGED; + changed = true; } } @@ -2654,7 +2646,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - removeWindowInnerLocked(session, win); + removeWindowInnerLocked(win); // Removing a visible window will effect the computed orientation // So just update orientation if needed. if (wasVisible && updateOrientationFromAppTokensLocked(false)) { @@ -2664,7 +2656,7 @@ public class WindowManagerService extends IWindowManager.Stub Binder.restoreCallingIdentity(origId); } - void removeWindowInnerLocked(Session session, WindowState win) { + void removeWindowInnerLocked(WindowState win) { if (win.mRemoved) { // Nothing to do. return; @@ -2674,7 +2666,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState cwin = win.mChildWindows.get(i); Slog.w(TAG, "Force-removing child win " + cwin + " from container " + win); - removeWindowInnerLocked(cwin.mSession, cwin); + removeWindowInnerLocked(cwin); } win.mRemoved = true; @@ -3781,6 +3773,9 @@ public class WindowManagerService extends IWindowManager.Stub private Configuration updateOrientationFromAppTokensLocked( Configuration currentConfig, IBinder freezeThisOneIfNeeded) { + if (!mDisplayReady) { + return null; + } Configuration config = null; if (updateOrientationFromAppTokensLocked(false)) { @@ -3799,20 +3794,19 @@ public class WindowManagerService extends IWindowManager.Stub // the value of the previous configuration. mTempConfiguration.setToDefaults(); mTempConfiguration.fontScale = currentConfig.fontScale; - if (computeScreenConfigurationLocked(mTempConfiguration)) { - if (currentConfig.diff(mTempConfiguration) != 0) { - mWaitingForConfig = true; - final DisplayContent displayContent = getDefaultDisplayContentLocked(); - displayContent.layoutNeeded = true; - int anim[] = new int[2]; - if (displayContent.isDimming()) { - anim[0] = anim[1] = 0; - } else { - mPolicy.selectRotationAnimationLw(anim); - } - startFreezingDisplayLocked(false, anim[0], anim[1]); - config = new Configuration(mTempConfiguration); + computeScreenConfigurationLocked(mTempConfiguration); + if (currentConfig.diff(mTempConfiguration) != 0) { + mWaitingForConfig = true; + final DisplayContent displayContent = getDefaultDisplayContentLocked(); + displayContent.layoutNeeded = true; + int anim[] = new int[2]; + if (displayContent.isDimming()) { + anim[0] = anim[1] = 0; + } else { + mPolicy.selectRotationAnimationLw(anim); } + startFreezingDisplayLocked(false, anim[0], anim[1]); + config = new Configuration(mTempConfiguration); } } @@ -6917,9 +6911,11 @@ public class WindowManagerService extends IWindowManager.Stub public Configuration computeNewConfiguration() { synchronized (mWindowMap) { + if (!mDisplayReady) { + return null; + } Configuration config = computeNewConfigurationLocked(); - if (config == null && mWaitingForConfig) { - // Nothing changed but we are waiting for something... stop that! + if (mWaitingForConfig) { mWaitingForConfig = false; mLastFinishedFreezeSource = "new-config"; performLayoutAndPlaceSurfacesLocked(); @@ -6931,9 +6927,7 @@ public class WindowManagerService extends IWindowManager.Stub Configuration computeNewConfigurationLocked() { Configuration config = new Configuration(); config.fontScale = 0; - if (!computeScreenConfigurationLocked(config)) { - return null; - } + computeScreenConfigurationLocked(config); return config; } @@ -7040,11 +7034,8 @@ public class WindowManagerService extends IWindowManager.Stub return sw; } + /** Do not call if mDisplayReady == false */ DisplayInfo updateDisplayAndOrientationLocked() { - if (!mDisplayReady) { - return null; - } - // TODO(multidisplay): For now, apply Configuration to main screen only. final DisplayContent displayContent = getDefaultDisplayContentLocked(); @@ -7101,11 +7092,9 @@ public class WindowManagerService extends IWindowManager.Stub return displayInfo; } - boolean computeScreenConfigurationLocked(Configuration config) { + /** Do not call if mDisplayReady == false */ + void computeScreenConfigurationLocked(Configuration config) { final DisplayInfo displayInfo = updateDisplayAndOrientationLocked(); - if (displayInfo == null) { - return false; - } final int dw = displayInfo.logicalWidth; final int dh = displayInfo.logicalHeight; @@ -7190,8 +7179,6 @@ public class WindowManagerService extends IWindowManager.Stub config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_NO; config.navigationHidden = Configuration.NAVIGATIONHIDDEN_NO; mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence); - - return true; } public boolean isHardKeyboardAvailable() { @@ -8320,17 +8307,17 @@ public class WindowManagerService extends IWindowManager.Stub // displayContent must not be null private void reconfigureDisplayLocked(DisplayContent displayContent) { // TODO: Multidisplay: for now only use with default display. + if (!mDisplayReady) { + return; + } configureDisplayPolicyLocked(displayContent); displayContent.layoutNeeded = true; boolean configChanged = updateOrientationFromAppTokensLocked(false); mTempConfiguration.setToDefaults(); mTempConfiguration.fontScale = mCurConfiguration.fontScale; - if (computeScreenConfigurationLocked(mTempConfiguration)) { - if (mCurConfiguration.diff(mTempConfiguration) != 0) { - configChanged = true; - } - } + computeScreenConfigurationLocked(mTempConfiguration); + configChanged |= mCurConfiguration.diff(mTempConfiguration) != 0; if (configChanged) { mWaitingForConfig = true; @@ -8631,29 +8618,24 @@ public class WindowManagerService extends IWindowManager.Stub Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "wmLayout"); mInLayout = true; - boolean recoveringMemory = false; - try { - if (mForceRemoves != null) { - recoveringMemory = true; - // Wait a little bit for things to settle down, and off we go. - for (int i=0; i<mForceRemoves.size(); i++) { - WindowState ws = mForceRemoves.get(i); - Slog.i(TAG, "Force removing: " + ws); - removeWindowInnerLocked(ws.mSession, ws); - } - mForceRemoves = null; - Slog.w(TAG, "Due to memory failure, waiting a bit for next layout"); - Object tmp = new Object(); - synchronized (tmp) { - try { - tmp.wait(250); - } catch (InterruptedException e) { - } + boolean recoveringMemory = false; + if (!mForceRemoves.isEmpty()) { + recoveringMemory = true; + // Wait a little bit for things to settle down, and off we go. + while (!mForceRemoves.isEmpty()) { + WindowState ws = mForceRemoves.remove(0); + Slog.i(TAG, "Force removing: " + ws); + removeWindowInnerLocked(ws); + } + Slog.w(TAG, "Due to memory failure, waiting a bit for next layout"); + Object tmp = new Object(); + synchronized (tmp) { + try { + tmp.wait(250); + } catch (InterruptedException e) { } } - } catch (RuntimeException e) { - Slog.wtf(TAG, "Unhandled exception while force removing for memory", e); } try { @@ -9329,14 +9311,12 @@ public class WindowManagerService extends IWindowManager.Stub /** * Extracted from {@link #performLayoutAndPlaceSurfacesLockedInner} to reduce size of method. - * - * @param w WindowState this method is applied to. - * @param currentTime The time which animations use for calculating transitions. + * @param w WindowState this method is applied to. * @param innerDw Width of app window. * @param innerDh Height of app window. */ - private void handleNotObscuredLocked(final WindowState w, final long currentTime, - final int innerDw, final int innerDh) { + private void handleNotObscuredLocked(final WindowState w, + final int innerDw, final int innerDh) { final WindowManager.LayoutParams attrs = w.mAttrs; final int attrFlags = attrs.flags; final boolean canBeSeen = w.isDisplayedLw(); @@ -9455,8 +9435,6 @@ public class WindowManagerService extends IWindowManager.Stub + Debug.getCallers(3)); } - final long currentTime = SystemClock.uptimeMillis(); - int i; boolean updateInputWindowsNeeded = false; @@ -9547,8 +9525,7 @@ public class WindowManagerService extends IWindowManager.Stub if ((displayContent.pendingLayoutChanges & WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER) != 0 && - (adjustWallpaperWindowsLocked() & - ADJUST_WALLPAPER_LAYERS_CHANGED) != 0) { + adjustWallpaperWindowsLocked()) { assignLayersLocked(windows); displayContent.layoutNeeded = true; } @@ -9613,7 +9590,7 @@ public class WindowManagerService extends IWindowManager.Stub // Update effect. w.mObscured = mInnerFields.mObscured; if (!mInnerFields.mObscured) { - handleNotObscuredLocked(w, currentTime, innerDw, innerDh); + handleNotObscuredLocked(w, innerDw, innerDh); } if (stack != null && !stack.testDimmingTag()) { @@ -9992,7 +9969,7 @@ public class WindowManagerService extends IWindowManager.Stub DisplayContentList displayList = new DisplayContentList(); for (i = 0; i < N; i++) { WindowState w = mPendingRemoveTmp[i]; - removeWindowInnerLocked(w.mSession, w); + removeWindowInnerLocked(w); final DisplayContent displayContent = w.getDisplayContent(); if (displayContent != null && !displayList.contains(displayContent)) { displayList.add(displayContent); @@ -10168,10 +10145,6 @@ public class WindowManagerService extends IWindowManager.Stub EventLog.writeEvent(EventLogTags.WM_NO_SURFACE_MEMORY, winAnimator.mWin.toString(), winAnimator.mSession.mPid, operation); - if (mForceRemoves == null) { - mForceRemoves = new ArrayList<WindowState>(); - } - long callingIdentity = Binder.clearCallingIdentity(); try { // There was some problem... first, do a sanity check of the @@ -10353,6 +10326,10 @@ public class WindowManagerService extends IWindowManager.Stub + ", flags=" + win.mAttrs.flags + ", canReceive=" + win.canReceiveKeys()); + if (!win.canReceiveKeys()) { + continue; + } + AppWindowToken wtoken = win.mAppToken; // If this window's application has been removed, just skip it. @@ -10362,10 +10339,6 @@ public class WindowManagerService extends IWindowManager.Stub continue; } - if (!win.canReceiveKeys()) { - continue; - } - // Descend through all of the app tokens and find the first that either matches // win.mAppToken (return win) or mFocusedApp (return null). if (wtoken != null && win.mAttrs.type != TYPE_APPLICATION_STARTING && |