diff options
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, |