am 6715d1ef: Merge "Clean up displayId and layerStack usage." into jb-mr1-dev

* commit '6715d1effaa70abf261112d2771d4d555cc109c2':
  Clean up displayId and layerStack usage.
This commit is contained in:
Craig Mautner
2012-08-23 08:47:11 -07:00
committed by Android Git Automerger
10 changed files with 100 additions and 76 deletions

View File

@@ -24,7 +24,6 @@ import android.os.Message;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.util.Log; import android.util.Log;
import android.util.SparseArray;
import android.view.CompatibilityInfoHolder; import android.view.CompatibilityInfoHolder;
import android.view.Display; import android.view.Display;
import android.view.DisplayInfo; import android.view.DisplayInfo;

View File

@@ -388,8 +388,8 @@ public class Surface implements Parcelable {
/** Free all server-side state associated with this surface and /** Free all server-side state associated with this surface and
* release this object's reference. @hide */ * release this object's reference. @hide */
public native void destroy(); public native void destroy();
private native Canvas lockCanvasNative(Rect dirty); private native Canvas lockCanvasNative(Rect dirty) throws OutOfResourcesException;
/** /**
* set the orientation of the given display. * set the orientation of the given display.
@@ -497,10 +497,10 @@ public class Surface implements Parcelable {
} }
private native void init(SurfaceSession s, private native void init(SurfaceSession s,
int pid, String name, int displayId, int w, int h, int format, int flags) int pid, String name, int layerStack, int w, int h, int format, int flags)
throws OutOfResourcesException; throws OutOfResourcesException;
private native void init(Parcel source); private native void init(Parcel source) throws OutOfResourcesException;
private native void initFromSurfaceTexture(SurfaceTexture surfaceTexture); private native void initFromSurfaceTexture(SurfaceTexture surfaceTexture);

View File

@@ -22,7 +22,6 @@ import android.graphics.Matrix;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Rect; import android.graphics.Rect;
import android.util.Slog; import android.util.Slog;
import android.view.Display;
import android.view.Surface; import android.view.Surface;
import android.view.SurfaceSession; import android.view.SurfaceSession;
@@ -36,7 +35,7 @@ public class BlackFrame {
final int layer; final int layer;
final Surface surface; 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 { throws Surface.OutOfResourcesException {
left = l; left = l;
top = t; top = t;
@@ -45,10 +44,10 @@ public class BlackFrame {
int h = b-t; int h = b-t;
if (WindowManagerService.DEBUG_SURFACE_TRACE) { if (WindowManagerService.DEBUG_SURFACE_TRACE) {
surface = new WindowStateAnimator.SurfaceTrace(session, 0, "BlackSurface(" surface = new WindowStateAnimator.SurfaceTrace(session, 0, "BlackSurface("
+ l + ", " + t + ")", Display.DEFAULT_DISPLAY, + l + ", " + t + ")", layerStack,
w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
} else { } 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); w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
} }
surface.setAlpha(1); surface.setAlpha(1);
@@ -104,7 +103,7 @@ public class BlackFrame {
} }
public BlackFrame(SurfaceSession session, Rect outer, Rect inner, public BlackFrame(SurfaceSession session, Rect outer, Rect inner,
int layer) throws Surface.OutOfResourcesException { int layer, final int layerStack) throws Surface.OutOfResourcesException {
boolean success = false; boolean success = false;
mOuterRect = new Rect(outer); mOuterRect = new Rect(outer);
@@ -112,19 +111,19 @@ public class BlackFrame {
try { try {
if (outer.top < inner.top) { if (outer.top < inner.top) {
mBlackSurfaces[0] = new BlackSurface(session, layer, 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) { if (outer.left < inner.left) {
mBlackSurfaces[1] = new BlackSurface(session, layer, 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) { if (outer.bottom > inner.bottom) {
mBlackSurfaces[2] = new BlackSurface(session, layer, 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) { if (outer.right > inner.right) {
mBlackSurfaces[3] = new BlackSurface(session, layer, 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; success = true;
} finally { } finally {

View File

@@ -39,18 +39,18 @@ class DimAnimator {
int mLastDimWidth, mLastDimHeight; int mLastDimWidth, mLastDimHeight;
DimAnimator (SurfaceSession session, final int displayId) { DimAnimator (SurfaceSession session, final int layerStack) {
if (mDimSurface == null) { if (mDimSurface == null) {
try { try {
if (WindowManagerService.DEBUG_SURFACE_TRACE) { if (WindowManagerService.DEBUG_SURFACE_TRACE) {
mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0, mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0,
"DimAnimator", "DimAnimator",
displayId, 16, 16, PixelFormat.OPAQUE, layerStack, 16, 16, PixelFormat.OPAQUE,
Surface.FX_SURFACE_DIM); Surface.FX_SURFACE_DIM);
} else { } else {
mDimSurface = new Surface(session, 0, mDimSurface = new Surface(session, 0,
"DimAnimator", "DimAnimator",
displayId, 16, 16, PixelFormat.OPAQUE, layerStack, 16, 16, PixelFormat.OPAQUE,
Surface.FX_SURFACE_DIM); Surface.FX_SURFACE_DIM);
} }
if (WindowManagerService.SHOW_TRANSACTIONS || if (WindowManagerService.SHOW_TRANSACTIONS ||

View File

@@ -30,18 +30,18 @@ class DimSurface {
int mLayer = -1; int mLayer = -1;
int mLastDimWidth, mLastDimHeight; int mLastDimWidth, mLastDimHeight;
DimSurface(SurfaceSession session, final int displayId) { DimSurface(SurfaceSession session, final int layerStack) {
if (mDimSurface == null) { if (mDimSurface == null) {
try { try {
if (WindowManagerService.DEBUG_SURFACE_TRACE) { if (WindowManagerService.DEBUG_SURFACE_TRACE) {
mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0, mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0,
"DimSurface", "DimSurface",
displayId, 16, 16, PixelFormat.OPAQUE, layerStack, 16, 16, PixelFormat.OPAQUE,
Surface.FX_SURFACE_DIM); Surface.FX_SURFACE_DIM);
} else { } else {
mDimSurface = new Surface(session, 0, mDimSurface = new Surface(session, 0,
"DimSurface", "DimSurface",
displayId, 16, 16, PixelFormat.OPAQUE, layerStack, 16, 16, PixelFormat.OPAQUE,
Surface.FX_SURFACE_DIM); Surface.FX_SURFACE_DIM);
} }
if (WindowManagerService.SHOW_TRANSACTIONS || if (WindowManagerService.SHOW_TRANSACTIONS ||

View File

@@ -16,10 +16,9 @@
package com.android.server.wm; package com.android.server.wm;
import android.view.Display;
import android.view.DisplayInfo; import android.view.DisplayInfo;
import com.android.server.display.DisplayManagerService;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -60,13 +59,13 @@ class DisplayContent {
int mBaseDisplayWidth = 0; int mBaseDisplayWidth = 0;
int mBaseDisplayHeight = 0; int mBaseDisplayHeight = 0;
int mBaseDisplayDensity = 0; int mBaseDisplayDensity = 0;
final DisplayManagerService mDisplayManager;
final DisplayInfo mDisplayInfo = new DisplayInfo(); final DisplayInfo mDisplayInfo = new DisplayInfo();
final Display mDisplay;
DisplayContent(DisplayManagerService displayManager, final int displayId) { DisplayContent(Display display) {
mDisplayManager = displayManager; mDisplay = display;
mDisplayId = displayId; mDisplayId = display.getDisplayId();
displayManager.getDisplayInfo(displayId, mDisplayInfo); display.getDisplayInfo(mDisplayInfo);
} }
int getDisplayId() { int getDisplayId() {
@@ -77,6 +76,10 @@ class DisplayContent {
return mWindows; return mWindows;
} }
Display getDisplay() {
return mDisplay;
}
DisplayInfo getDisplayInfo() { DisplayInfo getDisplayInfo() {
return mDisplayInfo; return mDisplayInfo;
} }

View File

@@ -477,6 +477,7 @@ class ScreenRotationAnimation {
mRotateFrameAnimation.scaleCurrentDuration(animationScale); mRotateFrameAnimation.scaleCurrentDuration(animationScale);
} }
final int layerStack = mDisplay.getLayerStack();
if (USE_CUSTOM_BLACK_FRAME && mCustomBlackFrame == null) { if (USE_CUSTOM_BLACK_FRAME && mCustomBlackFrame == null) {
if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i( if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
WindowManagerService.TAG, WindowManagerService.TAG,
@@ -495,7 +496,8 @@ class ScreenRotationAnimation {
Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1, Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1,
mOriginalWidth*2, mOriginalHeight*2); mOriginalWidth*2, mOriginalHeight*2);
Rect inner = new Rect(0, 0, mOriginalWidth, mOriginalHeight); 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); mCustomBlackFrame.setMatrix(mFrameInitialMatrix);
} catch (Surface.OutOfResourcesException e) { } catch (Surface.OutOfResourcesException e) {
Slog.w(TAG, "Unable to allocate black surface", e); Slog.w(TAG, "Unable to allocate black surface", e);
@@ -525,7 +527,8 @@ class ScreenRotationAnimation {
Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1, Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1,
mOriginalWidth*2, mOriginalHeight*2); mOriginalWidth*2, mOriginalHeight*2);
Rect inner = new Rect(0, 0, mOriginalWidth, mOriginalHeight); 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); mExitingBlackFrame.setMatrix(mFrameInitialMatrix);
} catch (Surface.OutOfResourcesException e) { } catch (Surface.OutOfResourcesException e) {
Slog.w(TAG, "Unable to allocate black surface", e); Slog.w(TAG, "Unable to allocate black surface", e);
@@ -547,7 +550,8 @@ class ScreenRotationAnimation {
Rect outer = new Rect(-finalWidth*1, -finalHeight*1, Rect outer = new Rect(-finalWidth*1, -finalHeight*1,
finalWidth*2, finalHeight*2); finalWidth*2, finalHeight*2);
Rect inner = new Rect(0, 0, finalWidth, finalHeight); 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) { } catch (Surface.OutOfResourcesException e) {
Slog.w(TAG, "Unable to allocate black surface", e); Slog.w(TAG, "Unable to allocate black surface", e);
} finally { } finally {

View File

@@ -103,6 +103,8 @@ public class WindowAnimator {
/** Do not modify unless holding mService.mWindowMap or this and mAnimToLayout in that order */ /** Do not modify unless holding mService.mWindowMap or this and mAnimToLayout in that order */
final AnimatorToLayoutParams mAnimToLayout = new AnimatorToLayoutParams(); final AnimatorToLayoutParams mAnimToLayout = new AnimatorToLayoutParams();
boolean mInitialized = false;
WindowAnimator(final WindowManagerService service) { WindowAnimator(final WindowManagerService service) {
mService = service; mService = service;
mContext = service.mContext; mContext = service.mContext;
@@ -121,10 +123,13 @@ public class WindowAnimator {
} }
} }
}; };
}
void initializeLocked(final int layerStack) {
mWindowAnimationBackgroundSurface = mWindowAnimationBackgroundSurface =
new DimSurface(mService.mFxSession, Display.DEFAULT_DISPLAY); new DimSurface(mService.mFxSession, layerStack);
mDimAnimator = new DimAnimator(mService.mFxSession, Display.DEFAULT_DISPLAY); mDimAnimator = new DimAnimator(mService.mFxSession, layerStack);
mInitialized = true;
} }
/** Locked on mAnimToLayout */ /** Locked on mAnimToLayout */
@@ -563,6 +568,9 @@ public class WindowAnimator {
// TODO(cmautner): Change the following comment when no longer locked on mWindowMap */ // TODO(cmautner): Change the following comment when no longer locked on mWindowMap */
/** Locked on mService.mWindowMap and this. */ /** Locked on mService.mWindowMap and this. */
private void animateLocked() { private void animateLocked() {
if (!mInitialized) {
return;
}
for (int i = mWinAnimatorLists.size() - 1; i >= 0; i--) { for (int i = mWinAnimatorLists.size() - 1; i >= 0; i--) {
animateLocked(mWinAnimatorLists.get(i)); animateLocked(mWinAnimatorLists.get(i));
} }

View File

@@ -74,6 +74,7 @@ import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.RectF; import android.graphics.RectF;
import android.graphics.Region; import android.graphics.Region;
import android.hardware.display.DisplayManager;
import android.os.BatteryStats; import android.os.BatteryStats;
import android.os.Binder; import android.os.Binder;
import android.os.Bundle; import android.os.Bundle;
@@ -540,7 +541,7 @@ public class WindowManagerService extends IWindowManager.Stub
final ArrayList<AppWindowToken> mOpeningApps = new ArrayList<AppWindowToken>(); final ArrayList<AppWindowToken> mOpeningApps = new ArrayList<AppWindowToken>();
final ArrayList<AppWindowToken> mClosingApps = new ArrayList<AppWindowToken>(); final ArrayList<AppWindowToken> mClosingApps = new ArrayList<AppWindowToken>();
Display mDisplay; Display mDefaultDisplay;
boolean mIsTouchDevice; boolean mIsTouchDevice;
@@ -606,7 +607,8 @@ public class WindowManagerService extends IWindowManager.Stub
float mAnimatorDurationScale = 1.0f; float mAnimatorDurationScale = 1.0f;
final InputManagerService mInputManager; final InputManagerService mInputManager;
final DisplayManagerService mDisplayManager; final DisplayManagerService mDisplayManagerService;
final DisplayManager mDisplayManager;
// Who is holding the screen on. // Who is holding the screen on.
Session mHoldingScreenOn; Session mHoldingScreenOn;
@@ -844,17 +846,14 @@ public class WindowManagerService extends IWindowManager.Stub
private final WindowManagerPolicy mPolicy; private final WindowManagerPolicy mPolicy;
private final WindowManagerService mService; private final WindowManagerService mService;
private final Context mContext; private final Context mContext;
private final PowerManagerService mPM;
boolean mRunning = false; boolean mRunning = false;
public PolicyThread(WindowManagerPolicy policy, public PolicyThread(WindowManagerPolicy policy,
WindowManagerService service, Context context, WindowManagerService service, Context context) {
PowerManagerService pm) {
super("WindowManagerPolicy"); super("WindowManagerPolicy");
mPolicy = policy; mPolicy = policy;
mService = service; mService = service;
mContext = context; mContext = context;
mPM = pm;
} }
@Override @Override
@@ -895,7 +894,8 @@ public class WindowManagerService extends IWindowManager.Stub
mOnlyCore = onlyCore; mOnlyCore = onlyCore;
mLimitedAlphaCompositing = context.getResources().getBoolean( mLimitedAlphaCompositing = context.getResources().getBoolean(
com.android.internal.R.bool.config_sf_limitedAlpha); com.android.internal.R.bool.config_sf_limitedAlpha);
mDisplayManager = displayManager; mDisplayManagerService = displayManager;
mDisplayManager = DisplayManager.getInstance();
mHeadless = displayManager.isHeadless(); mHeadless = displayManager.isHeadless();
mPowerManager = pm; mPowerManager = pm;
@@ -931,7 +931,7 @@ public class WindowManagerService extends IWindowManager.Stub
mFxSession = new SurfaceSession(); mFxSession = new SurfaceSession();
mAnimator = new WindowAnimator(this); mAnimator = new WindowAnimator(this);
PolicyThread thr = new PolicyThread(mPolicy, this, context, pm); PolicyThread thr = new PolicyThread(mPolicy, this, context);
thr.start(); thr.start();
synchronized (thr) { synchronized (thr) {
@@ -1238,7 +1238,6 @@ public class WindowManagerService extends IWindowManager.Stub
/** /**
* Dig through the WindowStates and find the one that the Input Method will target. * Dig through the WindowStates and find the one that the Input Method will target.
* @param willMove * @param willMove
* @param windows TODO(cmautner):
* @return The index+1 in mWindows of the discovered target. * @return The index+1 in mWindows of the discovered target.
*/ */
int findDesiredInputMethodWindowIndexLocked(boolean willMove) { int findDesiredInputMethodWindowIndexLocked(boolean willMove) {
@@ -2164,7 +2163,7 @@ public class WindowManagerService extends IWindowManager.Stub
long origId; long origId;
synchronized(mWindowMap) { synchronized(mWindowMap) {
if (mDisplay == null) { if (mDefaultDisplay == null) {
throw new IllegalStateException("Display has not been initialialized"); throw new IllegalStateException("Display has not been initialialized");
} }
@@ -3076,6 +3075,7 @@ public class WindowManagerService extends IWindowManager.Stub
Binder.restoreCallingIdentity(origId); Binder.restoreCallingIdentity(origId);
} }
@Override
public float getWindowCompatibilityScale(IBinder windowToken) { public float getWindowCompatibilityScale(IBinder windowToken) {
if (!checkCallingPermission(android.Manifest.permission.RETRIEVE_WINDOW_INFO, if (!checkCallingPermission(android.Manifest.permission.RETRIEVE_WINDOW_INFO,
"getWindowCompatibilityScale()")) { "getWindowCompatibilityScale()")) {
@@ -3807,7 +3807,7 @@ public class WindowManagerService extends IWindowManager.Stub
Configuration config = null; Configuration config = null;
long ident = Binder.clearCallingIdentity(); long ident = Binder.clearCallingIdentity();
synchronized(mWindowMap) { synchronized(mWindowMap) {
config = updateOrientationFromAppTokensLocked(currentConfig, config = updateOrientationFromAppTokensLocked(currentConfig,
freezeThisOneIfNeeded); freezeThisOneIfNeeded);
@@ -3848,7 +3848,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
} }
} }
return config; return config;
} }
@@ -3859,7 +3859,7 @@ public class WindowManagerService extends IWindowManager.Stub
* setNewConfiguration() TO TELL THE WINDOW MANAGER IT CAN UNFREEZE THE * setNewConfiguration() TO TELL THE WINDOW MANAGER IT CAN UNFREEZE THE
* SCREEN. This will typically be done for you if you call * SCREEN. This will typically be done for you if you call
* sendNewConfiguration(). * sendNewConfiguration().
* *
* The orientation is computed from non-application windows first. If none of * The orientation is computed from non-application windows first. If none of
* the non-application windows specify orientation, the orientation is computed from * the non-application windows specify orientation, the orientation is computed from
* application tokens. * application tokens.
@@ -5064,7 +5064,7 @@ public class WindowManagerService extends IWindowManager.Stub
private boolean shouldAllowDisableKeyguard() 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. // called before DevicePolicyManagerService has started.
if (mAllowDisableKeyguard == ALLOW_DISABLE_UNKNOWN) { if (mAllowDisableKeyguard == ALLOW_DISABLE_UNKNOWN) {
DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService( DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
@@ -5546,7 +5546,7 @@ public class WindowManagerService extends IWindowManager.Stub
Surface.openTransaction(); Surface.openTransaction();
try { try {
if (mStrictModeFlash == null) { if (mStrictModeFlash == null) {
mStrictModeFlash = new StrictModeFlash(mDisplay, mFxSession); mStrictModeFlash = new StrictModeFlash(mDefaultDisplay, mFxSession);
} }
mStrictModeFlash.setVisibility(on); mStrictModeFlash.setVisibility(on);
} finally { } finally {
@@ -5659,7 +5659,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
// The screenshot API does not apply the current screen rotation. // The screenshot API does not apply the current screen rotation.
rot = mDisplay.getRotation(); rot = mDefaultDisplay.getRotation();
int fw = frame.width(); int fw = frame.width();
int fh = frame.height(); int fh = frame.height();
@@ -6574,7 +6574,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
boolean computeScreenConfigurationLocked(Configuration config) { boolean computeScreenConfigurationLocked(Configuration config) {
if (mDisplay == null) { if (mDefaultDisplay == null) {
return false; return false;
} }
@@ -6630,7 +6630,7 @@ public class WindowManagerService extends IWindowManager.Stub
displayInfo.appHeight = appHeight; displayInfo.appHeight = appHeight;
displayInfo.getLogicalMetrics(mRealDisplayMetrics, null); displayInfo.getLogicalMetrics(mRealDisplayMetrics, null);
displayInfo.getAppMetrics(mDisplayMetrics, null); displayInfo.getAppMetrics(mDisplayMetrics, null);
mDisplayManager.setDisplayInfo(displayContent.getDisplayId(), displayInfo); mDisplayManagerService.setDisplayInfo(displayContent.getDisplayId(), displayInfo);
mAnimator.setDisplayDimensions(dw, dh, appWidth, appHeight); mAnimator.setDisplayDimensions(dw, dh, appWidth, appHeight);
} }
@@ -6781,7 +6781,7 @@ public class WindowManagerService extends IWindowManager.Stub
try { try {
if (mDragState == null) { if (mDragState == null) {
Surface surface = new Surface(session, callerPid, "drag surface", Surface surface = new Surface(session, callerPid, "drag surface",
Display.DEFAULT_DISPLAY, mDefaultDisplay.getLayerStack(),
width, height, PixelFormat.TRANSLUCENT, Surface.HIDDEN); width, height, PixelFormat.TRANSLUCENT, Surface.HIDDEN);
if (SHOW_TRANSACTIONS) Slog.i(TAG, " DRAG " if (SHOW_TRANSACTIONS) Slog.i(TAG, " DRAG "
+ surface + ": CREATE"); + surface + ": CREATE");
@@ -6939,30 +6939,33 @@ public class WindowManagerService extends IWindowManager.Stub
} }
public void displayReady() { 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) { synchronized(mWindowMap) {
readForcedDisplaySizeAndDensityLocked(getDefaultDisplayContent()); readForcedDisplaySizeAndDensityLocked(getDefaultDisplayContent());
WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); mDefaultDisplay = display;
mDisplay = wm.getDefaultDisplay();
mIsTouchDevice = mContext.getPackageManager().hasSystemFeature( mIsTouchDevice = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_TOUCHSCREEN); PackageManager.FEATURE_TOUCHSCREEN);
mAnimator.initializeLocked(display.getLayerStack());
final DisplayInfo displayInfo = getDefaultDisplayInfo(); final DisplayInfo displayInfo = getDefaultDisplayInfo();
mAnimator.setDisplayDimensions(displayInfo.logicalWidth, displayInfo.logicalHeight, mAnimator.setDisplayDimensions(displayInfo.logicalWidth, displayInfo.logicalHeight,
displayInfo.appWidth, displayInfo.appHeight); displayInfo.appWidth, displayInfo.appHeight);
DisplayDeviceInfo info = new DisplayDeviceInfo(); DisplayDeviceInfo info = new DisplayDeviceInfo();
mDisplayManager.getDefaultExternalDisplayDeviceInfo(info); mDisplayManagerService.getDefaultExternalDisplayDeviceInfo(info);
final DisplayContent displayContent = getDefaultDisplayContent(); final DisplayContent displayContent = getDefaultDisplayContent();
mInputManager.setDisplaySize(Display.DEFAULT_DISPLAY, mInputManager.setDisplaySize(displayContent.getDisplayId(),
displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight,
info.width, info.height); info.width, info.height);
mInputManager.setDisplayOrientation(Display.DEFAULT_DISPLAY, mInputManager.setDisplayOrientation(displayContent.getDisplayId(),
mDisplay.getRotation(), Surface.ROTATION_0); mDefaultDisplay.getRotation(), Surface.ROTATION_0);
mPolicy.setInitialDisplaySize(mDisplay, displayContent.mInitialDisplayWidth, mPolicy.setInitialDisplaySize(mDefaultDisplay, displayContent.mInitialDisplayWidth,
displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayDensity); displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayDensity);
} }
@@ -6979,7 +6982,7 @@ public class WindowManagerService extends IWindowManager.Stub
synchronized(displayContent.mDisplaySizeLock) { synchronized(displayContent.mDisplaySizeLock) {
// Bootstrap the default logical display from the display manager. // Bootstrap the default logical display from the display manager.
displayInfo = displayContent.getDisplayInfo(); displayInfo = displayContent.getDisplayInfo();
mDisplayManager.getDisplayInfo(displayId, displayInfo); mDisplayManagerService.getDisplayInfo(displayId, displayInfo);
displayContent.mInitialDisplayWidth = displayInfo.logicalWidth; displayContent.mInitialDisplayWidth = displayInfo.logicalWidth;
displayContent.mInitialDisplayHeight = displayInfo.logicalHeight; displayContent.mInitialDisplayHeight = displayInfo.logicalHeight;
displayContent.mInitialDisplayDensity = displayInfo.logicalDensityDpi; displayContent.mInitialDisplayDensity = displayInfo.logicalDensityDpi;
@@ -7620,7 +7623,8 @@ public class WindowManagerService extends IWindowManager.Stub
Rect outer = new Rect(0, 0, initW, initH); Rect outer = new Rect(0, 0, initW, initH);
Rect inner = new Rect(0, 0, baseW, baseH); Rect inner = new Rect(0, 0, baseW, baseH);
try { try {
mBlackFrame = new BlackFrame(mFxSession, outer, inner, MASK_LAYER); mBlackFrame = new BlackFrame(mFxSession, outer, inner, MASK_LAYER,
mDefaultDisplay.getLayerStack());
} catch (Surface.OutOfResourcesException e) { } catch (Surface.OutOfResourcesException e) {
} }
} }
@@ -7719,7 +7723,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
private void reconfigureDisplayLocked(DisplayContent displayContent) { private void reconfigureDisplayLocked(DisplayContent displayContent) {
mPolicy.setInitialDisplaySize(mDisplay, displayContent.mBaseDisplayWidth, mPolicy.setInitialDisplaySize(mDefaultDisplay, displayContent.mBaseDisplayWidth,
displayContent.mBaseDisplayHeight, displayContent.mBaseDisplayDensity); displayContent.mBaseDisplayHeight, displayContent.mBaseDisplayDensity);
mLayoutNeeded = true; mLayoutNeeded = true;
@@ -7944,7 +7948,7 @@ public class WindowManagerService extends IWindowManager.Stub
return; return;
} }
if (mDisplay == null) { if (mDefaultDisplay == null) {
// Not yet initialized, nothing to do. // Not yet initialized, nothing to do.
return; return;
} }
@@ -8408,7 +8412,7 @@ public class WindowManagerService extends IWindowManager.Stub
mNextAppTransitionThumbnail.getHeight()); mNextAppTransitionThumbnail.getHeight());
try { try {
Surface surface = new Surface(mFxSession, Process.myPid(), Surface surface = new Surface(mFxSession, Process.myPid(),
"thumbnail anim", Display.DEFAULT_DISPLAY, "thumbnail anim", mDefaultDisplay.getLayerStack(),
dirty.width(), dirty.height(), dirty.width(), dirty.height(),
PixelFormat.TRANSLUCENT, Surface.HIDDEN); PixelFormat.TRANSLUCENT, Surface.HIDDEN);
topOpeningApp.mAppAnimator.thumbnail = surface; topOpeningApp.mAppAnimator.thumbnail = surface;
@@ -8676,7 +8680,7 @@ public class WindowManagerService extends IWindowManager.Stub
Slog.v(TAG, "performLayoutAndPlaceSurfacesLockedInner: entry. Called by " Slog.v(TAG, "performLayoutAndPlaceSurfacesLockedInner: entry. Called by "
+ Debug.getCallers(3)); + Debug.getCallers(3));
} }
if (mDisplay == null) { if (mDefaultDisplay == null) {
Slog.i(TAG, "skipping performLayoutAndPlaceSurfacesLockedInner with no mDisplay"); Slog.i(TAG, "skipping performLayoutAndPlaceSurfacesLockedInner with no mDisplay");
return; return;
} }
@@ -9587,7 +9591,7 @@ public class WindowManagerService extends IWindowManager.Stub
return; return;
} }
if (mDisplay == null || !mPolicy.isScreenOnFully()) { if (mDefaultDisplay == null || !mPolicy.isScreenOnFully()) {
// No need to freeze the screen before the system is ready or if // No need to freeze the screen before the system is ready or if
// the screen is off. // the screen is off.
return; return;
@@ -9620,9 +9624,9 @@ public class WindowManagerService extends IWindowManager.Stub
// TODO(multidisplay): rotation on main screen only. // TODO(multidisplay): rotation on main screen only.
DisplayInfo displayInfo = getDefaultDisplayContent().getDisplayInfo(); DisplayInfo displayInfo = getDefaultDisplayContent().getDisplayInfo();
mAnimator.mScreenRotationAnimation = new ScreenRotationAnimation(mContext, mDisplay, mAnimator.mScreenRotationAnimation = new ScreenRotationAnimation(mContext,
mFxSession, inTransaction, displayInfo.logicalWidth, displayInfo.logicalHeight, mDefaultDisplay, mFxSession, inTransaction, displayInfo.logicalWidth,
mDisplay.getRotation()); displayInfo.logicalHeight, mDefaultDisplay.getRotation());
} }
} }
@@ -9733,7 +9737,8 @@ public class WindowManagerService extends IWindowManager.Stub
if (line != null) { if (line != null) {
String[] toks = line.split("%"); String[] toks = line.split("%");
if (toks != null && toks.length > 0) { if (toks != null && toks.length > 0) {
mWatermark = new Watermark(mDisplay, mRealDisplayMetrics, mFxSession, toks); mWatermark =
new Watermark(mDefaultDisplay, mRealDisplayMetrics, mFxSession, toks);
} }
} }
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
@@ -10101,7 +10106,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
} }
pw.println(); pw.println();
if (mDisplay != null) { if (mDefaultDisplay != null) {
DisplayContentsIterator dCIterator = new DisplayContentsIterator(); DisplayContentsIterator dCIterator = new DisplayContentsIterator();
while (dCIterator.hasNext()) { while (dCIterator.hasNext()) {
dCIterator.next().dump(pw); dCIterator.next().dump(pw);
@@ -10428,7 +10433,7 @@ public class WindowManagerService extends IWindowManager.Stub
public DisplayContent getDisplayContent(final int displayId) { public DisplayContent getDisplayContent(final int displayId) {
DisplayContent displayContent = mDisplayContents.get(displayId); DisplayContent displayContent = mDisplayContents.get(displayId);
if (displayContent == null) { if (displayContent == null) {
displayContent = new DisplayContent(mDisplayManager, displayId); displayContent = new DisplayContent(mDisplayManager.getRealDisplay(displayId));
mDisplayContents.put(displayId, displayContent); mDisplayContents.put(displayId, displayContent);
} }
return displayContent; return displayContent;
@@ -10497,7 +10502,8 @@ public class WindowManagerService extends IWindowManager.Stub
} }
} else { } else {
mWindowListIndex++; mWindowListIndex++;
if (mWindowListIndex >= mWindowList.size() && mDisplayContentsIterator.hasNext()) { if (mWindowListIndex >= mWindowList.size()
&& mDisplayContentsIterator.hasNext()) {
mDisplayContent = mDisplayContentsIterator.next(); mDisplayContent = mDisplayContentsIterator.next();
mWindowList = mDisplayContent.getWindowList(); mWindowList = mDisplayContent.getWindowList();
mWindowListIndex = 0; mWindowListIndex = 0;
@@ -10515,7 +10521,9 @@ public class WindowManagerService extends IWindowManager.Stub
} }
public DisplayContent getDefaultDisplayContent() { public DisplayContent getDefaultDisplayContent() {
return getDisplayContent(Display.DEFAULT_DISPLAY); final int displayId = mDefaultDisplay == null
? Display.DEFAULT_DISPLAY : mDefaultDisplay.getDisplayId();
return getDisplayContent(displayId);
} }
public WindowList getDefaultWindowList() { public WindowList getDefaultWindowList() {

View File

@@ -148,6 +148,8 @@ class WindowStateAnimator {
int mAttrFlags; int mAttrFlags;
int mAttrType; int mAttrType;
final int mLayerStack;
public WindowStateAnimator(final WindowState win) { public WindowStateAnimator(final WindowState win) {
final WindowManagerService service = win.mService; final WindowManagerService service = win.mService;
@@ -167,6 +169,7 @@ class WindowStateAnimator {
mAttrFlags = win.mAttrs.flags; mAttrFlags = win.mAttrs.flags;
mAttrType = win.mAttrs.type; mAttrType = win.mAttrs.type;
mIsWallpaper = win.mIsWallpaper; mIsWallpaper = win.mIsWallpaper;
mLayerStack = win.mDisplayContent.getDisplay().getLayerStack();
} }
public void setAnimation(Animation anim) { public void setAnimation(Animation anim) {
@@ -651,12 +654,12 @@ class WindowStateAnimator {
mSurface = new SurfaceTrace( mSurface = new SurfaceTrace(
mSession.mSurfaceSession, mSession.mPid, mSession.mSurfaceSession, mSession.mPid,
attrs.getTitle().toString(), attrs.getTitle().toString(),
mWin.mDisplayContent.getDisplayId(), w, h, format, flags); mLayerStack, w, h, format, flags);
} else { } else {
mSurface = new Surface( mSurface = new Surface(
mSession.mSurfaceSession, mSession.mPid, mSession.mSurfaceSession, mSession.mPid,
attrs.getTitle().toString(), attrs.getTitle().toString(),
mWin.mDisplayContent.getDisplayId(), w, h, format, flags); mLayerStack, w, h, format, flags);
} }
mWin.mHasSurface = true; mWin.mHasSurface = true;
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG, if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG,