diff options
| author | 2012-08-22 17:41:48 -0700 | |
|---|---|---|
| committer | 2012-08-23 08:43:54 -0700 | |
| commit | b47bbc3d80badb94229bc4ce7a2d5006faa9ef15 (patch) | |
| tree | f817ed4884677c168f2f7e0badceab7ad889fe73 /services/java | |
| parent | 2bd65b61ba6e98496dc574251e06709546d24500 (diff) | |
Clean up displayId and layerStack usage.
Make better use of Display object by saving it in DisplayContent.
Only use layerStack when referring to Surfaces. Get displayId from
default Display or default DisplayContent. Remove warnings.
Fixes bug 7038151.
Change-Id: Ie493f0f5e755dc9b91ee969ff561c2a098283ead
Diffstat (limited to 'services/java')
8 files changed, 96 insertions, 71 deletions
diff --git a/services/java/com/android/server/wm/BlackFrame.java b/services/java/com/android/server/wm/BlackFrame.java index b98ab004ff3b..64d2602f6895 100644 --- a/services/java/com/android/server/wm/BlackFrame.java +++ b/services/java/com/android/server/wm/BlackFrame.java @@ -22,7 +22,6 @@ import android.graphics.Matrix; import android.graphics.PixelFormat; import android.graphics.Rect; import android.util.Slog; -import android.view.Display; import android.view.Surface; import android.view.SurfaceSession; @@ -36,7 +35,7 @@ public class BlackFrame { final int layer; final Surface surface; - BlackSurface(SurfaceSession session, int layer, int l, int t, int r, int b) + BlackSurface(SurfaceSession session, int layer, int l, int t, int r, int b, int layerStack) throws Surface.OutOfResourcesException { left = l; top = t; @@ -45,10 +44,10 @@ public class BlackFrame { int h = b-t; if (WindowManagerService.DEBUG_SURFACE_TRACE) { surface = new WindowStateAnimator.SurfaceTrace(session, 0, "BlackSurface(" - + l + ", " + t + ")", Display.DEFAULT_DISPLAY, + + l + ", " + t + ")", layerStack, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } else { - surface = new Surface(session, 0, "BlackSurface", Display.DEFAULT_DISPLAY, + surface = new Surface(session, 0, "BlackSurface", layerStack, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } surface.setAlpha(1); @@ -104,7 +103,7 @@ public class BlackFrame { } public BlackFrame(SurfaceSession session, Rect outer, Rect inner, - int layer) throws Surface.OutOfResourcesException { + int layer, final int layerStack) throws Surface.OutOfResourcesException { boolean success = false; mOuterRect = new Rect(outer); @@ -112,19 +111,19 @@ public class BlackFrame { try { if (outer.top < inner.top) { mBlackSurfaces[0] = new BlackSurface(session, layer, - outer.left, outer.top, inner.right, inner.top); + outer.left, outer.top, inner.right, inner.top, layerStack); } if (outer.left < inner.left) { mBlackSurfaces[1] = new BlackSurface(session, layer, - outer.left, inner.top, inner.left, outer.bottom); + outer.left, inner.top, inner.left, outer.bottom, layerStack); } if (outer.bottom > inner.bottom) { mBlackSurfaces[2] = new BlackSurface(session, layer, - inner.left, inner.bottom, outer.right, outer.bottom); + inner.left, inner.bottom, outer.right, outer.bottom, layerStack); } if (outer.right > inner.right) { mBlackSurfaces[3] = new BlackSurface(session, layer, - inner.right, outer.top, outer.right, inner.bottom); + inner.right, outer.top, outer.right, inner.bottom, layerStack); } success = true; } finally { diff --git a/services/java/com/android/server/wm/DimAnimator.java b/services/java/com/android/server/wm/DimAnimator.java index 7e8b0ecfbb72..81daac69c5cf 100644 --- a/services/java/com/android/server/wm/DimAnimator.java +++ b/services/java/com/android/server/wm/DimAnimator.java @@ -39,18 +39,18 @@ class DimAnimator { int mLastDimWidth, mLastDimHeight; - DimAnimator (SurfaceSession session, final int displayId) { + DimAnimator (SurfaceSession session, final int layerStack) { if (mDimSurface == null) { try { if (WindowManagerService.DEBUG_SURFACE_TRACE) { mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0, "DimAnimator", - displayId, 16, 16, PixelFormat.OPAQUE, + layerStack, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } else { mDimSurface = new Surface(session, 0, "DimAnimator", - displayId, 16, 16, PixelFormat.OPAQUE, + layerStack, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } if (WindowManagerService.SHOW_TRANSACTIONS || diff --git a/services/java/com/android/server/wm/DimSurface.java b/services/java/com/android/server/wm/DimSurface.java index 0e5d5563c910..4ab8ce1788d1 100644 --- a/services/java/com/android/server/wm/DimSurface.java +++ b/services/java/com/android/server/wm/DimSurface.java @@ -30,18 +30,18 @@ class DimSurface { int mLayer = -1; int mLastDimWidth, mLastDimHeight; - DimSurface(SurfaceSession session, final int displayId) { + DimSurface(SurfaceSession session, final int layerStack) { if (mDimSurface == null) { try { if (WindowManagerService.DEBUG_SURFACE_TRACE) { mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0, "DimSurface", - displayId, 16, 16, PixelFormat.OPAQUE, + layerStack, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } else { mDimSurface = new Surface(session, 0, "DimSurface", - displayId, 16, 16, PixelFormat.OPAQUE, + layerStack, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } if (WindowManagerService.SHOW_TRANSACTIONS || diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java index a8854cfe7995..6e5bbcbbd570 100644 --- a/services/java/com/android/server/wm/DisplayContent.java +++ b/services/java/com/android/server/wm/DisplayContent.java @@ -16,10 +16,9 @@ package com.android.server.wm; +import android.view.Display; import android.view.DisplayInfo; -import com.android.server.display.DisplayManagerService; - import java.io.PrintWriter; import java.util.ArrayList; @@ -60,13 +59,13 @@ class DisplayContent { int mBaseDisplayWidth = 0; int mBaseDisplayHeight = 0; int mBaseDisplayDensity = 0; - final DisplayManagerService mDisplayManager; final DisplayInfo mDisplayInfo = new DisplayInfo(); + final Display mDisplay; - DisplayContent(DisplayManagerService displayManager, final int displayId) { - mDisplayManager = displayManager; - mDisplayId = displayId; - displayManager.getDisplayInfo(displayId, mDisplayInfo); + DisplayContent(Display display) { + mDisplay = display; + mDisplayId = display.getDisplayId(); + display.getDisplayInfo(mDisplayInfo); } int getDisplayId() { @@ -77,6 +76,10 @@ class DisplayContent { return mWindows; } + Display getDisplay() { + return mDisplay; + } + DisplayInfo getDisplayInfo() { return mDisplayInfo; } diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java index 7d85d895b219..767941399687 100644 --- a/services/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java @@ -477,6 +477,7 @@ class ScreenRotationAnimation { mRotateFrameAnimation.scaleCurrentDuration(animationScale); } + final int layerStack = mDisplay.getLayerStack(); if (USE_CUSTOM_BLACK_FRAME && mCustomBlackFrame == null) { if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( WindowManagerService.TAG, @@ -495,7 +496,8 @@ class ScreenRotationAnimation { Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1, mOriginalWidth*2, mOriginalHeight*2); Rect inner = new Rect(0, 0, mOriginalWidth, mOriginalHeight); - mCustomBlackFrame = new BlackFrame(session, outer, inner, FREEZE_LAYER + 3); + mCustomBlackFrame = new BlackFrame(session, outer, inner, FREEZE_LAYER + 3, + layerStack); mCustomBlackFrame.setMatrix(mFrameInitialMatrix); } catch (Surface.OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate black surface", e); @@ -525,7 +527,8 @@ class ScreenRotationAnimation { Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1, mOriginalWidth*2, mOriginalHeight*2); Rect inner = new Rect(0, 0, mOriginalWidth, mOriginalHeight); - mExitingBlackFrame = new BlackFrame(session, outer, inner, FREEZE_LAYER + 2); + mExitingBlackFrame = new BlackFrame(session, outer, inner, FREEZE_LAYER + 2, + layerStack); mExitingBlackFrame.setMatrix(mFrameInitialMatrix); } catch (Surface.OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate black surface", e); @@ -547,7 +550,8 @@ class ScreenRotationAnimation { Rect outer = new Rect(-finalWidth*1, -finalHeight*1, finalWidth*2, finalHeight*2); Rect inner = new Rect(0, 0, finalWidth, finalHeight); - mEnteringBlackFrame = new BlackFrame(session, outer, inner, FREEZE_LAYER); + mEnteringBlackFrame = new BlackFrame(session, outer, inner, FREEZE_LAYER, + layerStack); } catch (Surface.OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate black surface", e); } finally { diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 1defa49b64b1..580f00d4e4d7 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -103,6 +103,8 @@ public class WindowAnimator { /** Do not modify unless holding mService.mWindowMap or this and mAnimToLayout in that order */ final AnimatorToLayoutParams mAnimToLayout = new AnimatorToLayoutParams(); + boolean mInitialized = false; + WindowAnimator(final WindowManagerService service) { mService = service; mContext = service.mContext; @@ -121,10 +123,13 @@ public class WindowAnimator { } } }; + } + void initializeLocked(final int layerStack) { mWindowAnimationBackgroundSurface = - new DimSurface(mService.mFxSession, Display.DEFAULT_DISPLAY); - mDimAnimator = new DimAnimator(mService.mFxSession, Display.DEFAULT_DISPLAY); + new DimSurface(mService.mFxSession, layerStack); + mDimAnimator = new DimAnimator(mService.mFxSession, layerStack); + mInitialized = true; } /** Locked on mAnimToLayout */ @@ -563,6 +568,9 @@ public class WindowAnimator { // TODO(cmautner): Change the following comment when no longer locked on mWindowMap */ /** Locked on mService.mWindowMap and this. */ private void animateLocked() { + if (!mInitialized) { + return; + } for (int i = mWinAnimatorLists.size() - 1; i >= 0; i--) { animateLocked(mWinAnimatorLists.get(i)); } diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index fd90082b780e..60c1969a779a 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -74,6 +74,7 @@ import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; +import android.hardware.display.DisplayManager; import android.os.BatteryStats; import android.os.Binder; import android.os.Bundle; @@ -539,7 +540,7 @@ public class WindowManagerService extends IWindowManager.Stub final ArrayList<AppWindowToken> mOpeningApps = new ArrayList<AppWindowToken>(); final ArrayList<AppWindowToken> mClosingApps = new ArrayList<AppWindowToken>(); - Display mDisplay; + Display mDefaultDisplay; boolean mIsTouchDevice; @@ -605,7 +606,8 @@ public class WindowManagerService extends IWindowManager.Stub float mAnimatorDurationScale = 1.0f; final InputManagerService mInputManager; - final DisplayManagerService mDisplayManager; + final DisplayManagerService mDisplayManagerService; + final DisplayManager mDisplayManager; // Who is holding the screen on. Session mHoldingScreenOn; @@ -843,17 +845,14 @@ public class WindowManagerService extends IWindowManager.Stub private final WindowManagerPolicy mPolicy; private final WindowManagerService mService; private final Context mContext; - private final PowerManagerService mPM; boolean mRunning = false; public PolicyThread(WindowManagerPolicy policy, - WindowManagerService service, Context context, - PowerManagerService pm) { + WindowManagerService service, Context context) { super("WindowManagerPolicy"); mPolicy = policy; mService = service; mContext = context; - mPM = pm; } @Override @@ -894,7 +893,8 @@ public class WindowManagerService extends IWindowManager.Stub mOnlyCore = onlyCore; mLimitedAlphaCompositing = context.getResources().getBoolean( com.android.internal.R.bool.config_sf_limitedAlpha); - mDisplayManager = displayManager; + mDisplayManagerService = displayManager; + mDisplayManager = DisplayManager.getInstance(); mHeadless = displayManager.isHeadless(); mPowerManager = pm; @@ -930,7 +930,7 @@ public class WindowManagerService extends IWindowManager.Stub mFxSession = new SurfaceSession(); mAnimator = new WindowAnimator(this); - PolicyThread thr = new PolicyThread(mPolicy, this, context, pm); + PolicyThread thr = new PolicyThread(mPolicy, this, context); thr.start(); synchronized (thr) { @@ -1237,7 +1237,6 @@ public class WindowManagerService extends IWindowManager.Stub /** * Dig through the WindowStates and find the one that the Input Method will target. * @param willMove - * @param windows TODO(cmautner): * @return The index+1 in mWindows of the discovered target. */ int findDesiredInputMethodWindowIndexLocked(boolean willMove) { @@ -2163,7 +2162,7 @@ public class WindowManagerService extends IWindowManager.Stub long origId; synchronized(mWindowMap) { - if (mDisplay == null) { + if (mDefaultDisplay == null) { throw new IllegalStateException("Display has not been initialialized"); } @@ -3075,6 +3074,7 @@ public class WindowManagerService extends IWindowManager.Stub Binder.restoreCallingIdentity(origId); } + @Override public float getWindowCompatibilityScale(IBinder windowToken) { if (!checkCallingPermission(android.Manifest.permission.RETRIEVE_WINDOW_INFO, "getWindowCompatibilityScale()")) { @@ -3806,7 +3806,7 @@ public class WindowManagerService extends IWindowManager.Stub Configuration config = null; long ident = Binder.clearCallingIdentity(); - + synchronized(mWindowMap) { config = updateOrientationFromAppTokensLocked(currentConfig, freezeThisOneIfNeeded); @@ -3847,7 +3847,7 @@ public class WindowManagerService extends IWindowManager.Stub } } } - + return config; } @@ -3858,7 +3858,7 @@ public class WindowManagerService extends IWindowManager.Stub * setNewConfiguration() TO TELL THE WINDOW MANAGER IT CAN UNFREEZE THE * SCREEN. This will typically be done for you if you call * sendNewConfiguration(). - * + * * The orientation is computed from non-application windows first. If none of * the non-application windows specify orientation, the orientation is computed from * application tokens. @@ -5063,7 +5063,7 @@ public class WindowManagerService extends IWindowManager.Stub private boolean shouldAllowDisableKeyguard() { - // We fail safe and prevent disabling keyguard in the unlikely event this gets + // We fail safe and prevent disabling keyguard in the unlikely event this gets // called before DevicePolicyManagerService has started. if (mAllowDisableKeyguard == ALLOW_DISABLE_UNKNOWN) { DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService( @@ -5545,7 +5545,7 @@ public class WindowManagerService extends IWindowManager.Stub Surface.openTransaction(); try { if (mStrictModeFlash == null) { - mStrictModeFlash = new StrictModeFlash(mDisplay, mFxSession); + mStrictModeFlash = new StrictModeFlash(mDefaultDisplay, mFxSession); } mStrictModeFlash.setVisibility(on); } finally { @@ -5658,7 +5658,7 @@ public class WindowManagerService extends IWindowManager.Stub } // The screenshot API does not apply the current screen rotation. - rot = mDisplay.getRotation(); + rot = mDefaultDisplay.getRotation(); int fw = frame.width(); int fh = frame.height(); @@ -6573,7 +6573,7 @@ public class WindowManagerService extends IWindowManager.Stub } boolean computeScreenConfigurationLocked(Configuration config) { - if (mDisplay == null) { + if (mDefaultDisplay == null) { return false; } @@ -6629,7 +6629,7 @@ public class WindowManagerService extends IWindowManager.Stub displayInfo.appHeight = appHeight; displayInfo.getLogicalMetrics(mRealDisplayMetrics, null); displayInfo.getAppMetrics(mDisplayMetrics, null); - mDisplayManager.setDisplayInfo(displayContent.getDisplayId(), displayInfo); + mDisplayManagerService.setDisplayInfo(displayContent.getDisplayId(), displayInfo); mAnimator.setDisplayDimensions(dw, dh, appWidth, appHeight); } @@ -6780,7 +6780,7 @@ public class WindowManagerService extends IWindowManager.Stub try { if (mDragState == null) { Surface surface = new Surface(session, callerPid, "drag surface", - Display.DEFAULT_DISPLAY, + mDefaultDisplay.getLayerStack(), width, height, PixelFormat.TRANSLUCENT, Surface.HIDDEN); if (SHOW_TRANSACTIONS) Slog.i(TAG, " DRAG " + surface + ": CREATE"); @@ -6938,30 +6938,33 @@ public class WindowManagerService extends IWindowManager.Stub } public void displayReady() { - displayReady(Display.DEFAULT_DISPLAY); + WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); + final Display display = wm.getDefaultDisplay(); + displayReady(display.getDisplayId()); synchronized(mWindowMap) { readForcedDisplaySizeAndDensityLocked(getDefaultDisplayContent()); - WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); - mDisplay = wm.getDefaultDisplay(); + mDefaultDisplay = display; mIsTouchDevice = mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TOUCHSCREEN); + mAnimator.initializeLocked(display.getLayerStack()); + final DisplayInfo displayInfo = getDefaultDisplayInfo(); mAnimator.setDisplayDimensions(displayInfo.logicalWidth, displayInfo.logicalHeight, displayInfo.appWidth, displayInfo.appHeight); DisplayDeviceInfo info = new DisplayDeviceInfo(); - mDisplayManager.getDefaultExternalDisplayDeviceInfo(info); + mDisplayManagerService.getDefaultExternalDisplayDeviceInfo(info); final DisplayContent displayContent = getDefaultDisplayContent(); - mInputManager.setDisplaySize(Display.DEFAULT_DISPLAY, + mInputManager.setDisplaySize(displayContent.getDisplayId(), displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight, info.width, info.height); - mInputManager.setDisplayOrientation(Display.DEFAULT_DISPLAY, - mDisplay.getRotation(), Surface.ROTATION_0); - mPolicy.setInitialDisplaySize(mDisplay, displayContent.mInitialDisplayWidth, + mInputManager.setDisplayOrientation(displayContent.getDisplayId(), + mDefaultDisplay.getRotation(), Surface.ROTATION_0); + mPolicy.setInitialDisplaySize(mDefaultDisplay, displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayDensity); } @@ -6978,7 +6981,7 @@ public class WindowManagerService extends IWindowManager.Stub synchronized(displayContent.mDisplaySizeLock) { // Bootstrap the default logical display from the display manager. displayInfo = displayContent.getDisplayInfo(); - mDisplayManager.getDisplayInfo(displayId, displayInfo); + mDisplayManagerService.getDisplayInfo(displayId, displayInfo); displayContent.mInitialDisplayWidth = displayInfo.logicalWidth; displayContent.mInitialDisplayHeight = displayInfo.logicalHeight; displayContent.mInitialDisplayDensity = displayInfo.logicalDensityDpi; @@ -7648,7 +7651,8 @@ public class WindowManagerService extends IWindowManager.Stub Rect outer = new Rect(0, 0, initW, initH); Rect inner = new Rect(0, 0, baseW, baseH); try { - mBlackFrame = new BlackFrame(mFxSession, outer, inner, MASK_LAYER); + mBlackFrame = new BlackFrame(mFxSession, outer, inner, MASK_LAYER, + mDefaultDisplay.getLayerStack()); } catch (Surface.OutOfResourcesException e) { } } @@ -7747,7 +7751,7 @@ public class WindowManagerService extends IWindowManager.Stub } private void reconfigureDisplayLocked(DisplayContent displayContent) { - mPolicy.setInitialDisplaySize(mDisplay, displayContent.mBaseDisplayWidth, + mPolicy.setInitialDisplaySize(mDefaultDisplay, displayContent.mBaseDisplayWidth, displayContent.mBaseDisplayHeight, displayContent.mBaseDisplayDensity); mLayoutNeeded = true; @@ -7972,7 +7976,7 @@ public class WindowManagerService extends IWindowManager.Stub return; } - if (mDisplay == null) { + if (mDefaultDisplay == null) { // Not yet initialized, nothing to do. return; } @@ -8436,7 +8440,7 @@ public class WindowManagerService extends IWindowManager.Stub mNextAppTransitionThumbnail.getHeight()); try { Surface surface = new Surface(mFxSession, Process.myPid(), - "thumbnail anim", Display.DEFAULT_DISPLAY, + "thumbnail anim", mDefaultDisplay.getLayerStack(), dirty.width(), dirty.height(), PixelFormat.TRANSLUCENT, Surface.HIDDEN); topOpeningApp.mAppAnimator.thumbnail = surface; @@ -8704,7 +8708,7 @@ public class WindowManagerService extends IWindowManager.Stub Slog.v(TAG, "performLayoutAndPlaceSurfacesLockedInner: entry. Called by " + Debug.getCallers(3)); } - if (mDisplay == null) { + if (mDefaultDisplay == null) { Slog.i(TAG, "skipping performLayoutAndPlaceSurfacesLockedInner with no mDisplay"); return; } @@ -9616,7 +9620,7 @@ public class WindowManagerService extends IWindowManager.Stub return; } - if (mDisplay == null || !mPolicy.isScreenOnFully()) { + if (mDefaultDisplay == null || !mPolicy.isScreenOnFully()) { // No need to freeze the screen before the system is ready or if // the screen is off. return; @@ -9649,9 +9653,9 @@ public class WindowManagerService extends IWindowManager.Stub // TODO(multidisplay): rotation on main screen only. DisplayInfo displayInfo = getDefaultDisplayContent().getDisplayInfo(); - mAnimator.mScreenRotationAnimation = new ScreenRotationAnimation(mContext, mDisplay, - mFxSession, inTransaction, displayInfo.logicalWidth, displayInfo.logicalHeight, - mDisplay.getRotation()); + mAnimator.mScreenRotationAnimation = new ScreenRotationAnimation(mContext, + mDefaultDisplay, mFxSession, inTransaction, displayInfo.logicalWidth, + displayInfo.logicalHeight, mDefaultDisplay.getRotation()); } } @@ -9762,7 +9766,8 @@ public class WindowManagerService extends IWindowManager.Stub if (line != null) { String[] toks = line.split("%"); if (toks != null && toks.length > 0) { - mWatermark = new Watermark(mDisplay, mRealDisplayMetrics, mFxSession, toks); + mWatermark = + new Watermark(mDefaultDisplay, mRealDisplayMetrics, mFxSession, toks); } } } catch (FileNotFoundException e) { @@ -10130,7 +10135,7 @@ public class WindowManagerService extends IWindowManager.Stub } } pw.println(); - if (mDisplay != null) { + if (mDefaultDisplay != null) { DisplayContentsIterator dCIterator = new DisplayContentsIterator(); while (dCIterator.hasNext()) { dCIterator.next().dump(pw); @@ -10457,7 +10462,7 @@ public class WindowManagerService extends IWindowManager.Stub public DisplayContent getDisplayContent(final int displayId) { DisplayContent displayContent = mDisplayContents.get(displayId); if (displayContent == null) { - displayContent = new DisplayContent(mDisplayManager, displayId); + displayContent = new DisplayContent(mDisplayManager.getRealDisplay(displayId)); mDisplayContents.put(displayId, displayContent); } return displayContent; @@ -10526,7 +10531,8 @@ public class WindowManagerService extends IWindowManager.Stub } } else { mWindowListIndex++; - if (mWindowListIndex >= mWindowList.size() && mDisplayContentsIterator.hasNext()) { + if (mWindowListIndex >= mWindowList.size() + && mDisplayContentsIterator.hasNext()) { mDisplayContent = mDisplayContentsIterator.next(); mWindowList = mDisplayContent.getWindowList(); mWindowListIndex = 0; @@ -10544,7 +10550,9 @@ public class WindowManagerService extends IWindowManager.Stub } public DisplayContent getDefaultDisplayContent() { - return getDisplayContent(Display.DEFAULT_DISPLAY); + final int displayId = mDefaultDisplay == null + ? Display.DEFAULT_DISPLAY : mDefaultDisplay.getDisplayId(); + return getDisplayContent(displayId); } public WindowList getDefaultWindowList() { diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 69bad81cc645..982f60d30c79 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -148,6 +148,8 @@ class WindowStateAnimator { int mAttrFlags; int mAttrType; + final int mLayerStack; + public WindowStateAnimator(final WindowState win) { final WindowManagerService service = win.mService; @@ -167,6 +169,7 @@ class WindowStateAnimator { mAttrFlags = win.mAttrs.flags; mAttrType = win.mAttrs.type; mIsWallpaper = win.mIsWallpaper; + mLayerStack = win.mDisplayContent.getDisplay().getLayerStack(); } public void setAnimation(Animation anim) { @@ -651,12 +654,12 @@ class WindowStateAnimator { mSurface = new SurfaceTrace( mSession.mSurfaceSession, mSession.mPid, attrs.getTitle().toString(), - mWin.mDisplayContent.getDisplayId(), w, h, format, flags); + mLayerStack, w, h, format, flags); } else { mSurface = new Surface( mSession.mSurfaceSession, mSession.mPid, attrs.getTitle().toString(), - mWin.mDisplayContent.getDisplayId(), w, h, format, flags); + mLayerStack, w, h, format, flags); } mWin.mHasSurface = true; if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG, |