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
diff --git a/services/java/com/android/server/wm/BlackFrame.java b/services/java/com/android/server/wm/BlackFrame.java
index b98ab00..64d2602 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.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 @@
         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 @@
             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 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 @@
         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 7e8b0ec..81daac6 100644
--- a/services/java/com/android/server/wm/DimAnimator.java
+++ b/services/java/com/android/server/wm/DimAnimator.java
@@ -39,18 +39,18 @@
     
     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 0e5d5563..4ab8ce1 100644
--- a/services/java/com/android/server/wm/DimSurface.java
+++ b/services/java/com/android/server/wm/DimSurface.java
@@ -30,18 +30,18 @@
     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 a8854cf..6e5bbcb 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 @@
     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 @@
         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 7d85d89..7679413 100644
--- a/services/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -477,6 +477,7 @@
             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 @@
                 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 @@
                 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 @@
                 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 1defa49..580f00d 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -103,6 +103,8 @@
     /** 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 @@
                 }
             }
         };
+    }
 
+    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 @@
     // 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 fd90082..60c1969a 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.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 @@
     final ArrayList<AppWindowToken> mOpeningApps = new ArrayList<AppWindowToken>();
     final ArrayList<AppWindowToken> mClosingApps = new ArrayList<AppWindowToken>();
 
-    Display mDisplay;
+    Display mDefaultDisplay;
 
     boolean mIsTouchDevice;
 
@@ -605,7 +606,8 @@
     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 @@
         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 @@
         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 @@
         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 @@
     /**
      * 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 @@
         long origId;
 
         synchronized(mWindowMap) {
-            if (mDisplay == null) {
+            if (mDefaultDisplay == null) {
                 throw new IllegalStateException("Display has not been initialialized");
             }
 
@@ -3075,6 +3074,7 @@
         Binder.restoreCallingIdentity(origId);
     }
 
+    @Override
     public float getWindowCompatibilityScale(IBinder windowToken) {
         if (!checkCallingPermission(android.Manifest.permission.RETRIEVE_WINDOW_INFO,
                 "getWindowCompatibilityScale()")) {
@@ -3806,7 +3806,7 @@
 
         Configuration config = null;
         long ident = Binder.clearCallingIdentity();
-        
+
         synchronized(mWindowMap) {
             config = updateOrientationFromAppTokensLocked(currentConfig,
                     freezeThisOneIfNeeded);
@@ -3847,7 +3847,7 @@
                 }
             }
         }
-        
+
         return config;
     }
 
@@ -3858,7 +3858,7 @@
      * 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 @@
 
     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 @@
             Surface.openTransaction();
             try {
                 if (mStrictModeFlash == null) {
-                    mStrictModeFlash = new StrictModeFlash(mDisplay, mFxSession);
+                    mStrictModeFlash = new StrictModeFlash(mDefaultDisplay, mFxSession);
                 }
                 mStrictModeFlash.setVisibility(on);
             } finally {
@@ -5658,7 +5658,7 @@
             }
 
             // 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 @@
     }
 
     boolean computeScreenConfigurationLocked(Configuration config) {
-        if (mDisplay == null) {
+        if (mDefaultDisplay == null) {
             return false;
         }
 
@@ -6629,7 +6629,7 @@
             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 @@
                 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 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 @@
             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 @@
             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 @@
     }
 
     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 @@
             return;
         }
         
-        if (mDisplay == null) {
+        if (mDefaultDisplay == null) {
             // Not yet initialized, nothing to do.
             return;
         }
@@ -8436,7 +8440,7 @@
                         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 @@
             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 @@
             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 @@
 
             // 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 @@
             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 @@
             }
         }
         pw.println();
-        if (mDisplay != null) {
+        if (mDefaultDisplay != null) {
             DisplayContentsIterator dCIterator = new DisplayContentsIterator();
             while (dCIterator.hasNext()) {
                 dCIterator.next().dump(pw);
@@ -10457,7 +10462,7 @@
     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 @@
                     }
                 } 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 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 69bad81..982f60d 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -148,6 +148,8 @@
     int mAttrFlags;
     int mAttrType;
 
+    final int mLayerStack;
+
     public WindowStateAnimator(final WindowState win) {
         final WindowManagerService service = win.mService;
 
@@ -167,6 +169,7 @@
         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 @@
                     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,