Fix bug with phantom input windows.

Add dumpsys integration for the native input dispatcher.
Add some InputDevice API stubs.
Add an appendFormat helper method to String8 for printf style
string formatting mainly for debugging purposes.
Use generic ArrayList<WindowState> everywhere in WindowManagerService
to eliminate unnecessary casts all over.

Change-Id: I9d1e3bd90eb7222d10620200477f11b7bfd25e44
This commit is contained in:
Jeff Brown
2010-07-15 23:54:05 -07:00
parent bd623daff1
commit e33348ba54
9 changed files with 539 additions and 147 deletions

View File

@ -332,7 +332,7 @@ public class WindowManagerService extends IWindowManager.Stub
/**
* Z-ordered (bottom-most first) list of all Window objects.
*/
final ArrayList mWindows = new ArrayList();
final ArrayList<WindowState> mWindows = new ArrayList<WindowState>();
/**
* Windows that are being resized. Used so we can tell the client about
@ -630,7 +630,7 @@ public class WindowManagerService extends IWindowManager.Stub
"KEEP_SCREEN_ON_FLAG");
mHoldingScreenWakeLock.setReferenceCounted(false);
mInputManager = new InputManager(context, this, pmc, mPowerManager);
mInputManager = new InputManager(context, this);
PolicyThread thr = new PolicyThread(mPolicy, this, context, pm);
thr.start();
@ -665,7 +665,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
private void placeWindowAfter(Object pos, WindowState window) {
private void placeWindowAfter(WindowState pos, WindowState window) {
final int i = mWindows.indexOf(pos);
if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT) Slog.v(
TAG, "Adding window " + window + " at "
@ -674,7 +674,7 @@ public class WindowManagerService extends IWindowManager.Stub
mWindowsChanged = true;
}
private void placeWindowBefore(Object pos, WindowState window) {
private void placeWindowBefore(WindowState pos, WindowState window) {
final int i = mWindows.indexOf(pos);
if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT) Slog.v(
TAG, "Adding window " + window + " at "
@ -687,13 +687,13 @@ public class WindowManagerService extends IWindowManager.Stub
//win. used for z ordering the windows in mWindows
private int findIdxBasedOnAppTokens(WindowState win) {
//use a local variable to cache mWindows
ArrayList localmWindows = mWindows;
ArrayList<WindowState> localmWindows = mWindows;
int jmax = localmWindows.size();
if(jmax == 0) {
return -1;
}
for(int j = (jmax-1); j >= 0; j--) {
WindowState wentry = (WindowState)localmWindows.get(j);
WindowState wentry = localmWindows.get(j);
if(wentry.mAppToken == win.mAppToken) {
return j;
}
@ -704,7 +704,7 @@ public class WindowManagerService extends IWindowManager.Stub
private void addWindowToListInOrderLocked(WindowState win, boolean addToToken) {
final IWindow client = win.mClient;
final WindowToken token = win.mToken;
final ArrayList localmWindows = mWindows;
final ArrayList<WindowState> localmWindows = mWindows;
final int N = localmWindows.size();
final WindowState attached = win.mAttachedWindow;
@ -749,7 +749,7 @@ public class WindowManagerService extends IWindowManager.Stub
// Figure out where the window should go, based on the
// order of applications.
final int NA = mAppTokens.size();
Object pos = null;
WindowState pos = null;
for (i=NA-1; i>=0; i--) {
AppWindowToken t = mAppTokens.get(i);
if (t == token) {
@ -769,8 +769,7 @@ public class WindowManagerService extends IWindowManager.Stub
// we need to look some more.
if (pos != null) {
// Move behind any windows attached to this one.
WindowToken atoken =
mTokenMap.get(((WindowState)pos).mClient.asBinder());
WindowToken atoken = mTokenMap.get(pos.mClient.asBinder());
if (atoken != null) {
final int NC = atoken.windows.size();
if (NC > 0) {
@ -796,8 +795,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (pos != null) {
// Move in front of any windows attached to this
// one.
WindowToken atoken =
mTokenMap.get(((WindowState)pos).mClient.asBinder());
WindowToken atoken = mTokenMap.get(pos.mClient.asBinder());
if (atoken != null) {
final int NC = atoken.windows.size();
if (NC > 0) {
@ -812,7 +810,7 @@ public class WindowManagerService extends IWindowManager.Stub
// Just search for the start of this layer.
final int myLayer = win.mBaseLayer;
for (i=0; i<N; i++) {
WindowState w = (WindowState)localmWindows.get(i);
WindowState w = localmWindows.get(i);
if (w.mBaseLayer > myLayer) {
break;
}
@ -829,7 +827,7 @@ public class WindowManagerService extends IWindowManager.Stub
// Figure out where window should go, based on layer.
final int myLayer = win.mBaseLayer;
for (i=N-1; i>=0; i--) {
if (((WindowState)localmWindows.get(i)).mBaseLayer <= myLayer) {
if (localmWindows.get(i).mBaseLayer <= myLayer) {
i++;
break;
}
@ -912,13 +910,13 @@ public class WindowManagerService extends IWindowManager.Stub
}
int findDesiredInputMethodWindowIndexLocked(boolean willMove) {
final ArrayList localmWindows = mWindows;
final ArrayList<WindowState> localmWindows = mWindows;
final int N = localmWindows.size();
WindowState w = null;
int i = N;
while (i > 0) {
i--;
w = (WindowState)localmWindows.get(i);
w = localmWindows.get(i);
//Slog.i(TAG, "Checking window @" + i + " " + w + " fl=0x"
// + Integer.toHexString(w.mAttrs.flags));
@ -933,7 +931,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (!willMove
&& w.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING
&& i > 0) {
WindowState wb = (WindowState)localmWindows.get(i-1);
WindowState wb = localmWindows.get(i-1);
if (wb.mAppToken == w.mAppToken && canBeImeTarget(wb)) {
i--;
w = wb;
@ -963,7 +961,7 @@ public class WindowManagerService extends IWindowManager.Stub
int pos = 0;
pos = localmWindows.indexOf(curTarget);
while (pos >= 0) {
WindowState win = (WindowState)localmWindows.get(pos);
WindowState win = localmWindows.get(pos);
if (win.mAppToken != token) {
break;
}
@ -1068,7 +1066,7 @@ public class WindowManagerService extends IWindowManager.Stub
int wi = imw.mChildWindows.size();
while (wi > 0) {
wi--;
WindowState cw = (WindowState)imw.mChildWindows.get(wi);
WindowState cw = imw.mChildWindows.get(wi);
cw.mAnimLayer = cw.mLayer + adj;
if (DEBUG_LAYERS) Slog.v(TAG, "IM win " + cw
+ " anim layer: " + cw.mAnimLayer);
@ -1094,7 +1092,7 @@ public class WindowManagerService extends IWindowManager.Stub
int NC = win.mChildWindows.size();
while (NC > 0) {
NC--;
WindowState cw = (WindowState)win.mChildWindows.get(NC);
WindowState cw = win.mChildWindows.get(NC);
int cpos = mWindows.indexOf(cw);
if (cpos >= 0) {
if (cpos < interestingPos) interestingPos--;
@ -1146,7 +1144,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (pos >= 0) {
final AppWindowToken targetAppToken = mInputMethodTarget.mAppToken;
if (pos < mWindows.size()) {
WindowState wp = (WindowState)mWindows.get(pos);
WindowState wp = mWindows.get(pos);
if (wp == mInputMethodWindow) {
pos++;
}
@ -1190,14 +1188,14 @@ public class WindowManagerService extends IWindowManager.Stub
// located here, and contiguous.
final int N = mWindows.size();
WindowState firstImWin = imPos < N
? (WindowState)mWindows.get(imPos) : null;
? mWindows.get(imPos) : null;
// Figure out the actual input method window that should be
// at the bottom of their stack.
WindowState baseImWin = imWin != null
? imWin : mInputMethodDialogs.get(0);
if (baseImWin.mChildWindows.size() > 0) {
WindowState cw = (WindowState)baseImWin.mChildWindows.get(0);
WindowState cw = baseImWin.mChildWindows.get(0);
if (cw.mSubLayer < 0) baseImWin = cw;
}
@ -1206,7 +1204,7 @@ public class WindowManagerService extends IWindowManager.Stub
// First find the top IM window.
int pos = imPos+1;
while (pos < N) {
if (!((WindowState)mWindows.get(pos)).mIsImWindow) {
if (!(mWindows.get(pos)).mIsImWindow) {
break;
}
pos++;
@ -1214,7 +1212,7 @@ public class WindowManagerService extends IWindowManager.Stub
pos++;
// Now there should be no more input method windows above.
while (pos < N) {
if (((WindowState)mWindows.get(pos)).mIsImWindow) {
if ((mWindows.get(pos)).mIsImWindow) {
break;
}
pos++;
@ -1302,7 +1300,7 @@ public class WindowManagerService extends IWindowManager.Stub
// First find top-most window that has asked to be on top of the
// wallpaper; all wallpapers go behind it.
final ArrayList localmWindows = mWindows;
final ArrayList<WindowState> localmWindows = mWindows;
int N = localmWindows.size();
WindowState w = null;
WindowState foundW = null;
@ -1312,7 +1310,7 @@ public class WindowManagerService extends IWindowManager.Stub
int i = N;
while (i > 0) {
i--;
w = (WindowState)localmWindows.get(i);
w = localmWindows.get(i);
if ((w.mAttrs.type == WindowManager.LayoutParams.TYPE_WALLPAPER)) {
if (topCurW == null) {
topCurW = w;
@ -1483,7 +1481,7 @@ public class WindowManagerService extends IWindowManager.Stub
// AND any starting window associated with it, AND below the
// maximum layer the policy allows for wallpapers.
while (foundI > 0) {
WindowState wb = (WindowState)localmWindows.get(foundI-1);
WindowState wb = localmWindows.get(foundI-1);
if (wb.mBaseLayer < maxLayer &&
wb.mAttachedWindow != foundW &&
(wb.mAttrs.type != TYPE_APPLICATION_STARTING ||
@ -1507,7 +1505,7 @@ public class WindowManagerService extends IWindowManager.Stub
} else {
// Okay i is the position immediately above the wallpaper. Look at
// what is below it for later.
foundW = foundI > 0 ? (WindowState)localmWindows.get(foundI-1) : null;
foundW = foundI > 0 ? localmWindows.get(foundI-1) : null;
}
if (visible) {
@ -1566,7 +1564,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (wallpaper == foundW) {
foundI--;
foundW = foundI > 0
? (WindowState)localmWindows.get(foundI-1) : null;
? localmWindows.get(foundI-1) : null;
continue;
}
@ -2403,6 +2401,8 @@ public class WindowManagerService extends IWindowManager.Stub
outSurface.release();
}
} catch (Exception e) {
mInputMonitor.updateInputWindowsLw();
Slog.w(TAG, "Exception thrown when creating surface for client "
+ client + " (" + win.mAttrs.getTitle() + ")",
e);
@ -2449,7 +2449,6 @@ public class WindowManagerService extends IWindowManager.Stub
applyAnimationLocked(win, transit, false)) {
focusMayChange = true;
win.mExiting = true;
mInputMonitor.windowIsBecomingInvisibleLw(win);
} else if (win.isAnimating()) {
// Currently in a hide animation... turn this into
// an exit.
@ -2544,6 +2543,8 @@ public class WindowManagerService extends IWindowManager.Stub
TAG, "Relayout of " + win + ": focusMayChange=" + focusMayChange);
inTouchMode = mInTouchMode;
mInputMonitor.updateInputWindowsLw();
}
if (configChanged) {
@ -2999,7 +3000,7 @@ public class WindowManagerService extends IWindowManager.Stub
public int getOrientationFromWindowsLocked() {
int pos = mWindows.size() - 1;
while (pos >= 0) {
WindowState wtoken = (WindowState) mWindows.get(pos);
WindowState wtoken = mWindows.get(pos);
pos--;
if (wtoken.mAppToken != null) {
// We hit an application window. so the orientation will be determined by the
@ -3553,7 +3554,6 @@ public class WindowManagerService extends IWindowManager.Stub
applyAnimationLocked(win,
WindowManagerPolicy.TRANSIT_EXIT, false);
}
mInputMonitor.windowIsBecomingInvisibleLw(win);
changed = true;
}
}
@ -3581,6 +3581,8 @@ public class WindowManagerService extends IWindowManager.Stub
if (performLayout) {
updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
performLayoutAndPlaceSurfacesLocked();
} else {
mInputMonitor.updateInputWindowsLw();
}
}
}
@ -3868,7 +3870,7 @@ public class WindowManagerService extends IWindowManager.Stub
int j = win.mChildWindows.size();
while (j > 0) {
j--;
WindowState cwin = (WindowState)win.mChildWindows.get(j);
WindowState cwin = win.mChildWindows.get(j);
if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG,
"Tmp removing child window " + cwin);
mWindows.remove(cwin);
@ -3896,7 +3898,7 @@ public class WindowManagerService extends IWindowManager.Stub
int i = NW;
while (i > 0) {
i--;
WindowState win = (WindowState)mWindows.get(i);
WindowState win = mWindows.get(i);
if (win.getAppToken() != null) {
return i+1;
}
@ -3922,7 +3924,7 @@ public class WindowManagerService extends IWindowManager.Stub
int j = win.mChildWindows.size();
while (j > 0) {
j--;
WindowState cwin = (WindowState)win.mChildWindows.get(j);
WindowState cwin = win.mChildWindows.get(j);
if (cwin.mSubLayer >= 0) {
for (int pos=NW-1; pos>=0; pos--) {
if (mWindows.get(pos) == cwin) {
@ -3950,7 +3952,7 @@ public class WindowManagerService extends IWindowManager.Stub
final int NCW = win.mChildWindows.size();
boolean added = false;
for (int j=0; j<NCW; j++) {
WindowState cwin = (WindowState)win.mChildWindows.get(j);
WindowState cwin = win.mChildWindows.get(j);
if (!added && cwin.mSubLayer >= 0) {
if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Re-adding child window at "
+ index + ": " + cwin);
@ -4234,7 +4236,7 @@ public class WindowManagerService extends IWindowManager.Stub
public void closeSystemDialogs(String reason) {
synchronized(mWindowMap) {
for (int i=mWindows.size()-1; i>=0; i--) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.mSurface != null) {
try {
w.mClient.closeSystemDialogs(reason);
@ -4418,7 +4420,7 @@ public class WindowManagerService extends IWindowManager.Stub
// have been drawn.
final int N = mWindows.size();
for (int i=0; i<N; i++) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.isVisibleLw() && !w.mObscured
&& (w.mOrientationChanging || !w.isDrawnLw())) {
return;
@ -4531,7 +4533,7 @@ public class WindowManagerService extends IWindowManager.Stub
Surface.setOrientation(0, rotation, animFlags);
}
for (int i=mWindows.size()-1; i>=0; i--) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.mSurface != null) {
w.mOrientationChanging = true;
}
@ -4687,11 +4689,10 @@ public class WindowManagerService extends IWindowManager.Stub
boolean result = true;
Object[] windows;
WindowState[] windows;
synchronized (mWindowMap) {
windows = new Object[mWindows.size()];
//noinspection unchecked
windows = mWindows.toArray(windows);
windows = mWindows.toArray(new WindowState[mWindows.size()]);
}
BufferedWriter out = null;
@ -4703,7 +4704,7 @@ public class WindowManagerService extends IWindowManager.Stub
final int count = windows.length;
for (int i = 0; i < count; i++) {
final WindowState w = (WindowState) windows[i];
final WindowState w = windows[i];
out.write(Integer.toHexString(System.identityHashCode(w)));
out.write(' ');
out.append(w.mAttrs.getTitle());
@ -4856,11 +4857,11 @@ public class WindowManagerService extends IWindowManager.Stub
}
synchronized (mWindowMap) {
final ArrayList windows = mWindows;
final ArrayList<WindowState> windows = mWindows;
final int count = windows.size();
for (int i = 0; i < count; i++) {
WindowState w = (WindowState) windows.get(i);
WindowState w = windows.get(i);
if (System.identityHashCode(w) == hashCode) {
return w;
}
@ -5094,7 +5095,7 @@ public class WindowManagerService extends IWindowManager.Stub
private WindowState getWindowStateForInputChannelLocked(InputChannel inputChannel) {
int windowCount = mWindows.size();
for (int i = 0; i < windowCount; i++) {
WindowState windowState = (WindowState) mWindows.get(i);
WindowState windowState = mWindows.get(i);
if (windowState.mInputChannel == inputChannel) {
return windowState;
}
@ -5110,10 +5111,10 @@ public class WindowManagerService extends IWindowManager.Stub
// As an optimization, we could try to prune the list of windows but this turns
// out to be difficult because only the native code knows for sure which window
// currently has touch focus.
final ArrayList windows = mWindows;
final ArrayList<WindowState> windows = mWindows;
final int N = windows.size();
for (int i = N - 1; i >= 0; i--) {
final WindowState child = (WindowState) windows.get(i);
final WindowState child = windows.get(i);
if (child.mInputChannel == null || child.mRemoved) {
// Skip this window because it cannot possibly receive input.
continue;
@ -5258,17 +5259,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
public void windowIsBecomingInvisibleLw(WindowState window) {
// The window is becoming invisible. Preempt input dispatch in progress
// so that the next window below can receive focus.
if (window == mInputFocus) {
mInputFocus = null;
preemptInputDispatchLw();
}
updateInputWindowsLw();
}
/* Tells the dispatcher to stop waiting for its current synchronous event targets.
* Essentially, just makes those dispatches asynchronous so a new dispatch cycle
* can begin.
@ -5779,7 +5769,7 @@ public class WindowManagerService extends IWindowManager.Stub
final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams();
final DeathRecipient mDeathRecipient;
final WindowState mAttachedWindow;
final ArrayList mChildWindows = new ArrayList();
final ArrayList<WindowState> mChildWindows = new ArrayList<WindowState>();
final int mBaseLayer;
final int mSubLayer;
final boolean mLayoutAttached;
@ -6335,10 +6325,8 @@ public class WindowManagerService extends IWindowManager.Stub
int i = mChildWindows.size();
while (i > 0) {
i--;
WindowState c = (WindowState)mChildWindows.get(i);
WindowState c = mChildWindows.get(i);
c.mAttachedHidden = true;
mInputMonitor.windowIsBecomingInvisibleLw(c);
}
if (mReportDestroySurface) {
@ -6448,7 +6436,7 @@ public class WindowManagerService extends IWindowManager.Stub
int i = mChildWindows.size();
while (i > 0) {
i--;
WindowState c = (WindowState)mChildWindows.get(i);
WindowState c = mChildWindows.get(i);
if (c.mAttachedHidden) {
c.mAttachedHidden = false;
if (c.mSurface != null) {
@ -6621,7 +6609,7 @@ public class WindowManagerService extends IWindowManager.Stub
final int N = mChildWindows.size();
for (int i=0; i<N; i++) {
((WindowState)mChildWindows.get(i)).finishExit();
mChildWindows.get(i).finishExit();
}
if (!mExiting) {
@ -6646,10 +6634,6 @@ public class WindowManagerService extends IWindowManager.Stub
Slog.w(TAG, "Error hiding surface in " + this, e);
}
mLastHidden = true;
for (int i=0; i<N; i++) {
mInputMonitor.windowIsBecomingInvisibleLw((WindowState)mChildWindows.get(i));
}
}
mExiting = false;
if (mRemoveOnExit) {
@ -7554,7 +7538,7 @@ public class WindowManagerService extends IWindowManager.Stub
final int N = windows.size();
for (int i=0; i<N; i++) {
((WindowState)windows.get(i)).finishExit();
windows.get(i).finishExit();
}
updateReportedVisibilityLocked();
@ -7980,7 +7964,7 @@ public class WindowManagerService extends IWindowManager.Stub
int i = mWindows.size();
while (i > 0) {
i--;
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.mOrientationChanging) {
w.mOrientationChanging = false;
Slog.w(TAG, "Force clearing orientation change: " + w);
@ -8119,7 +8103,7 @@ public class WindowManagerService extends IWindowManager.Stub
int idx = findDesiredInputMethodWindowIndexLocked(false);
WindowState imFocus;
if (idx > 0) {
imFocus = (WindowState)mWindows.get(idx-1);
imFocus = mWindows.get(idx-1);
if (imFocus != null) {
if (imFocus.mSession.mClient != null &&
imFocus.mSession.mClient.asBinder() == client.asBinder()) {
@ -8177,9 +8161,9 @@ public class WindowManagerService extends IWindowManager.Stub
// First remove all existing app windows.
i=0;
while (i < NW) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.mAppToken != null) {
WindowState win = (WindowState)mWindows.remove(i);
WindowState win = mWindows.remove(i);
mWindowsChanged = true;
if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG,
"Rebuild removing window: " + win);
@ -8227,7 +8211,7 @@ public class WindowManagerService extends IWindowManager.Stub
int i;
for (i=0; i<N; i++) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.mBaseLayer == curBaseLayer || w.mIsImWindow
|| (i > 0 && w.mIsWallpaper)) {
curLayer += WINDOW_LAYER_MULTIPLIER;
@ -8352,7 +8336,7 @@ public class WindowManagerService extends IWindowManager.Stub
// to another window).
int topAttached = -1;
for (i = N-1; i >= 0; i--) {
WindowState win = (WindowState) mWindows.get(i);
WindowState win = mWindows.get(i);
// Don't do layout of a window if it is not visible, or
// soon won't be visible, to avoid wasting time and funky
@ -8401,7 +8385,7 @@ public class WindowManagerService extends IWindowManager.Stub
// XXX does not deal with windows that are attached to windows
// that are themselves attached.
for (i = topAttached; i >= 0; i--) {
WindowState win = (WindowState) mWindows.get(i);
WindowState win = mWindows.get(i);
// If this view is GONE, then skip it -- keep the current
// frame, and let the caller know so they can ignore it
@ -8548,7 +8532,7 @@ public class WindowManagerService extends IWindowManager.Stub
final int N = mWindows.size();
for (i=N-1; i>=0; i--) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
final WindowManager.LayoutParams attrs = w.mAttrs;
@ -8981,7 +8965,7 @@ public class WindowManagerService extends IWindowManager.Stub
// Clear them out.
forceHiding = false;
for (i=N-1; i>=0; i--) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
if (w.mSurface != null) {
final WindowManager.LayoutParams attrs = w.mAttrs;
if (mPolicy.doesForceHide(w, attrs) && w.isVisibleLw()) {
@ -9031,6 +9015,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** ANIM STEP: changes=0x"
+ Integer.toHexString(changes));
mInputMonitor.updateInputWindowsLw();
} while (changes != 0);
// THIRD LOOP: Update the surfaces of all windows.
@ -9047,7 +9032,7 @@ public class WindowManagerService extends IWindowManager.Stub
final int N = mWindows.size();
for (i=N-1; i>=0; i--) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
boolean displayed = false;
final WindowManager.LayoutParams attrs = w.mAttrs;
@ -9227,7 +9212,6 @@ public class WindowManagerService extends IWindowManager.Stub
Slog.w(TAG, "Exception hiding surface in " + w);
}
}
mInputMonitor.windowIsBecomingInvisibleLw(w);
}
// If we are waiting for this window to handle an
// orientation change, well, it is hidden, so
@ -9487,6 +9471,8 @@ public class WindowManagerService extends IWindowManager.Stub
Slog.e(TAG, "Unhandled exception in Window Manager", e);
}
mInputMonitor.updateInputWindowsLw();
Surface.closeTransaction();
if (DEBUG_ORIENTATION && mDisplayFrozen) Slog.v(TAG,
@ -9612,6 +9598,8 @@ public class WindowManagerService extends IWindowManager.Stub
requestAnimationLocked(currentTime+(1000/60)-SystemClock.uptimeMillis());
}
mInputMonitor.updateInputWindowsLw();
if (DEBUG_FREEZE) Slog.v(TAG, "Layout: mDisplayFrozen=" + mDisplayFrozen
+ " holdScreen=" + holdScreen);
if (!mDisplayFrozen) {
@ -9718,7 +9706,7 @@ public class WindowManagerService extends IWindowManager.Stub
boolean leakedSurface = false;
Slog.i(TAG, "Out of memory for surface! Looking for leaks...");
for (int i=0; i<N; i++) {
WindowState ws = (WindowState)mWindows.get(i);
WindowState ws = mWindows.get(i);
if (ws.mSurface != null) {
if (!mSessions.contains(ws.mSession)) {
Slog.w(TAG, "LEAKED SURFACE (session doesn't exist): "
@ -9750,7 +9738,7 @@ public class WindowManagerService extends IWindowManager.Stub
Slog.w(TAG, "No leaked surfaces; killing applicatons!");
SparseIntArray pidCandidates = new SparseIntArray();
for (int i=0; i<N; i++) {
WindowState ws = (WindowState)mWindows.get(i);
WindowState ws = mWindows.get(i);
if (ws.mSurface != null) {
pidCandidates.append(ws.mSession.mPid, ws.mSession.mPid);
}
@ -9842,7 +9830,7 @@ public class WindowManagerService extends IWindowManager.Stub
? mAppTokens.get(nextAppIndex) : null;
while (i >= 0) {
win = (WindowState)mWindows.get(i);
win = mWindows.get(i);
if (localLOGV || DEBUG_FOCUS) Slog.v(
TAG, "Looking for focus: " + i
@ -9990,14 +9978,13 @@ public class WindowManagerService extends IWindowManager.Stub
return;
}
pw.println("Input Dispatcher State:");
mInputManager.dump(pw);
pw.println(" ");
synchronized(mWindowMap) {
pw.println("Current Window Manager state:");
for (int i=mWindows.size()-1; i>=0; i--) {
WindowState w = (WindowState)mWindows.get(i);
WindowState w = mWindows.get(i);
pw.print(" Window #"); pw.print(i); pw.print(' ');
pw.print(w); pw.println(":");
w.dump(pw, " ");