Merge "Remove AppWindowToken lists."

This commit is contained in:
Craig Mautner
2013-02-14 19:40:23 +00:00
committed by Android (Google) Code Review
3 changed files with 31 additions and 105 deletions

View File

@@ -16,8 +16,6 @@
package com.android.server.wm;
import android.os.Debug;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
@@ -38,7 +36,7 @@ class DisplayContentList extends ArrayList<DisplayContent> {
* WindowManagerService.mWindowMap.
*/
class DisplayContent {
private final static String TAG = "DisplayContent";
// private final static String TAG = "DisplayContent";
/** Unique identifier of this stack. */
private final int mDisplayId;
@@ -72,20 +70,6 @@ class DisplayContent {
int pendingLayoutChanges;
final boolean isDefaultDisplay;
/**
* List controlling the ordering of windows in different applications which must
* be kept in sync with ActivityManager.
*/
final AppTokenList mAppTokens = new AppTokenList();
/**
* AppWindowTokens in the Z order they were in at the start of an animation. Between
* animations this list is maintained in the exact order of mAppTokens. If tokens
* are added to mAppTokens during an animation an attempt is made to insert them at the same
* logical location in this list. Note that this list is always in sync with mWindows.
*/
AppTokenList mAnimatingAppTokens = new AppTokenList();
/**
* Window tokens that are in the process of exiting, but still
* on screen for animations.
@@ -140,18 +124,6 @@ class DisplayContent {
* @param wtoken The token to insert.
*/
void addAppToken(final int addPos, final AppWindowToken wtoken) {
mAppTokens.add(addPos, wtoken);
if (addPos == 0 || addPos == mAnimatingAppTokens.size()) {
// It was inserted into the beginning or end of mAppTokens. Honor that.
mAnimatingAppTokens.add(addPos, wtoken);
} else {
// Find the item immediately above the mAppTokens insertion point and put the token
// immediately below that one in mAnimatingAppTokens.
final AppWindowToken aboveAnchor = mAppTokens.get(addPos + 1);
mAnimatingAppTokens.add(mAnimatingAppTokens.indexOf(aboveAnchor), wtoken);
}
TaskList task = mTaskIdToTaskList.get(wtoken.groupId);
if (task == null) {
task = new TaskList(wtoken, this);
@@ -163,8 +135,6 @@ class DisplayContent {
}
void removeAppToken(final AppWindowToken wtoken) {
mAppTokens.remove(wtoken);
mAnimatingAppTokens.remove(wtoken);
final int taskId = wtoken.groupId;
final TaskList task = mTaskIdToTaskList.get(taskId);
if (task != null) {
@@ -177,14 +147,6 @@ class DisplayContent {
}
}
void refillAnimatingAppTokens() {
mAnimatingAppTokens.clear();
AppTokenIterator iterator = new AppTokenIterator();
while (iterator.hasNext()) {
mAnimatingAppTokens.add(iterator.next());
}
}
void setAppTaskId(AppWindowToken wtoken, int newTaskId) {
final int taskId = wtoken.groupId;
TaskList task = mTaskIdToTaskList.get(taskId);

View File

@@ -25,6 +25,7 @@ import android.view.Surface;
import android.view.WindowManagerPolicy;
import android.view.animation.Animation;
import com.android.server.wm.DisplayContent.AppTokenIterator;
import com.android.server.wm.WindowManagerService.DisplayContentsIterator;
import com.android.server.wm.WindowManagerService.LayoutFields;
@@ -174,10 +175,9 @@ public class WindowAnimator {
private void updateAppWindowsLocked(int displayId) {
int i;
final DisplayContent displayContent = mService.getDisplayContentLocked(displayId);
final AppTokenList appTokens = displayContent.mAnimatingAppTokens;
final int NAT = appTokens.size();
for (i=0; i<NAT; i++) {
final AppWindowAnimator appAnimator = appTokens.get(i).mAppAnimator;
AppTokenIterator iterator = displayContent.new AppTokenIterator();
while (iterator.hasNext()) {
final AppWindowAnimator appAnimator = iterator.next().mAppAnimator;
final boolean wasAnimating = appAnimator.animation != null
&& appAnimator.animation != AppWindowAnimator.sDummyAnimation;
if (appAnimator.stepAnimationLocked(mCurrentTime)) {
@@ -458,11 +458,10 @@ public class WindowAnimator {
private void testTokenMayBeDrawnLocked(int displayId) {
// See if any windows have been drawn, so they (and others
// associated with them) can now be shown.
final AppTokenList appTokens =
mService.getDisplayContentLocked(displayId).mAnimatingAppTokens;
final int NT = appTokens.size();
for (int i=0; i<NT; i++) {
AppWindowToken wtoken = appTokens.get(i);
AppTokenIterator iterator = mService.getDisplayContentLocked(displayId).new
AppTokenIterator();
while (iterator.hasNext()) {
AppWindowToken wtoken = iterator.next();
AppWindowAnimator appAnimator = wtoken.mAppAnimator;
final boolean allDrawn = wtoken.allDrawn;
if (allDrawn != appAnimator.allDrawn) {

View File

@@ -888,7 +888,6 @@ public class WindowManagerService extends IWindowManager.Stub
final WindowList windows = win.getWindowList();
final int N = windows.size();
final WindowState attached = win.mAttachedWindow;
int i;
WindowList tokenWindowList = getTokenWindowsOnDisplay(token, displayContent);
if (attached == null) {
int tokenWindowsPos = 0;
@@ -938,13 +937,12 @@ public class WindowManagerService extends IWindowManager.Stub
+ client.asBinder() + " (token=" + token + ")");
// Figure out where the window should go, based on the
// order of applications.
AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
final int NA = animatingAppTokens.size();
WindowState pos = null;
for (i=NA-1; i>=0; i--) {
AppWindowToken t = animatingAppTokens.get(i);
AppTokenIterator iterator =
displayContent.new AppTokenIterator(true /*reverse*/);
while (iterator.hasNext()) {
AppWindowToken t = iterator.next();
if (t == token) {
i--;
break;
}
@@ -977,15 +975,14 @@ public class WindowManagerService extends IWindowManager.Stub
} else {
// Continue looking down until we find the first
// token that has windows on this display.
while (i >= 0) {
AppWindowToken t = animatingAppTokens.get(i);
while (iterator.hasNext()) {
AppWindowToken t = iterator.next();
tokenWindowList = getTokenWindowsOnDisplay(t, displayContent);
final int NW = tokenWindowList.size();
if (NW > 0) {
pos = tokenWindowList.get(NW-1);
break;
}
i--;
}
if (pos != null) {
// Move in front of any windows attached to this
@@ -1004,7 +1001,8 @@ public class WindowManagerService extends IWindowManager.Stub
} else {
// Just search for the start of this layer.
final int myLayer = win.mBaseLayer;
for (i=0; i<N; i++) {
int i;
for (i = 0; i < N; i++) {
WindowState w = windows.get(i);
if (w.mBaseLayer > myLayer) {
break;
@@ -1022,7 +1020,8 @@ public class WindowManagerService extends IWindowManager.Stub
} else {
// Figure out where window should go, based on layer.
final int myLayer = win.mBaseLayer;
for (i=N-1; i>=0; i--) {
int i;
for (i = N - 1; i >= 0; i--) {
if (windows.get(i).mBaseLayer <= myLayer) {
break;
}
@@ -1047,7 +1046,8 @@ public class WindowManagerService extends IWindowManager.Stub
final int sublayer = win.mSubLayer;
int largestSublayer = Integer.MIN_VALUE;
WindowState windowWithLargestSublayer = null;
for (i=0; i<NA; i++) {
int i;
for (i = 0; i < NA; i++) {
WindowState w = tokenWindowList.get(i);
final int wSublayer = w.mSubLayer;
if (wSublayer >= largestSublayer) {
@@ -4369,18 +4369,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
void dumpAnimatingAppTokensLocked() {
DisplayContentsIterator iterator = new DisplayContentsIterator();
while (iterator.hasNext()) {
DisplayContent displayContent = iterator.next();
Slog.v(TAG, " Display " + displayContent.getDisplayId());
AppTokenList appTokens = displayContent.mAnimatingAppTokens;
for (int i=appTokens.size()-1; i>=0; i--) {
Slog.v(TAG, " #" + i + ": " + appTokens.get(i).token);
}
}
}
void dumpWindowsLocked() {
int i = 0;
final AllWindowsIterator iterator = new AllWindowsIterator(REVERSE_ITERATOR);
@@ -4550,7 +4538,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
displayContent.mTaskLists.add(taskList);
displayContent.refillAnimatingAppTokens();
moveTaskWindowsLocked(taskId);
}
} finally {
@@ -4579,7 +4566,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
displayContent.mTaskLists.add(0, taskList);
displayContent.refillAnimatingAppTokens();
moveTaskWindowsLocked(taskId);
}
} finally {
@@ -6829,7 +6815,6 @@ public class WindowManagerService extends IWindowManager.Stub
if (mAppTransition.isTransitionSet()) {
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** APP TRANSITION TIMEOUT");
mAppTransition.setTimeout();
getDefaultDisplayContentLocked().refillAnimatingAppTokens();
performLayoutAndPlaceSurfacesLocked();
}
}
@@ -7338,10 +7323,9 @@ public class WindowManagerService extends IWindowManager.Stub
}
// And add in the still active app tokens in Z order.
AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
NT = animatingAppTokens.size();
for (int j=0; j<NT; j++) {
i = reAddAppWindowsLocked(displayContent, i, animatingAppTokens.get(j));
AppTokenIterator iterator = displayContent.new AppTokenIterator();
while (iterator.hasNext()) {
i = reAddAppWindowsLocked(displayContent, i, iterator.next());
}
i -= lastBelow;
@@ -7361,7 +7345,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
Slog.w(TAG, "Current app token list:");
dumpAnimatingAppTokensLocked();
dumpAppTokensLocked();
Slog.w(TAG, "Final window list:");
dumpWindowsLocked();
}
@@ -8008,11 +7992,10 @@ public class WindowManagerService extends IWindowManager.Stub
mAppTransition.setIdle();
// Restore window app tokens to the ActivityManager views
final DisplayContent displayContent = getDefaultDisplayContentLocked();
final AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
for (int i = animatingAppTokens.size() - 1; i >= 0; i--) {
animatingAppTokens.get(i).sendingToBottom = false;
AppTokenIterator iterator = displayContent.new AppTokenIterator();
while (iterator.hasNext()) {
iterator.next().sendingToBottom = false;
}
displayContent.refillAnimatingAppTokens();
rebuildAppWindowListLocked();
changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_LAYOUT;
@@ -8169,10 +8152,9 @@ public class WindowManagerService extends IWindowManager.Stub
private void updateAllDrawnLocked(DisplayContent displayContent) {
// See if any windows have been drawn, so they (and others
// associated with them) can now be shown.
final AppTokenList appTokens = displayContent.mAnimatingAppTokens;
final int NT = appTokens.size();
for (int i=0; i<NT; i++) {
AppWindowToken wtoken = appTokens.get(i);
AppTokenIterator iterator = displayContent.new AppTokenIterator();
while (iterator.hasNext()) {
AppWindowToken wtoken = iterator.next();
if (!wtoken.allDrawn) {
int numInteresting = wtoken.numInterestingWindows;
if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
@@ -9533,23 +9515,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
}
final AppTokenList animatingAppTokens =
getDefaultDisplayContentLocked().mAnimatingAppTokens;
if (mAppTransition.isRunning() && animatingAppTokens.size() > 0) {
pw.println();
pw.println(" Application tokens during animation:");
for (int i=animatingAppTokens.size()-1; i>=0; i--) {
WindowToken token = animatingAppTokens.get(i);
pw.print(" App moving to bottom #"); pw.print(i);
pw.print(' '); pw.print(token);
if (dumpAll) {
pw.println(':');
token.dump(pw, " ");
} else {
pw.println();
}
}
}
if (mOpeningApps.size() > 0 || mClosingApps.size() > 0) {
pw.println();
if (mOpeningApps.size() > 0) {