Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 496bdbba authored by Craig Mautner's avatar Craig Mautner
Browse files

Remove AppWindowToken lists.

No longer necessary.

Change-Id: I0d2b96f69152fb93b6ba56f02ce9693ff1370cbc
parent 10c0aa24
Loading
Loading
Loading
Loading
+1 −39
Original line number Diff line number Diff line
@@ -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);
+8 −9
Original line number Diff line number Diff line
@@ -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) {
+22 −57
Original line number Diff line number Diff line
@@ -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,6 +1001,7 @@ public class WindowManagerService extends IWindowManager.Stub
                        } else {
                            // Just search for the start of this layer.
                            final int myLayer = win.mBaseLayer;
                            int i;
                            for (i = 0; i < N; i++) {
                                WindowState w = windows.get(i);
                                if (w.mBaseLayer > myLayer) {
@@ -1022,6 +1020,7 @@ public class WindowManagerService extends IWindowManager.Stub
            } else {
                // Figure out where window should go, based on layer.
                final int myLayer = win.mBaseLayer;
                int i;
                for (i = N - 1; i >= 0; i--) {
                    if (windows.get(i).mBaseLayer <= myLayer) {
                        break;
@@ -1047,6 +1046,7 @@ public class WindowManagerService extends IWindowManager.Stub
            final int sublayer = win.mSubLayer;
            int largestSublayer = Integer.MIN_VALUE;
            WindowState windowWithLargestSublayer = null;
            int i;
            for (i = 0; i < NA; i++) {
                WindowState w = tokenWindowList.get(i);
                final int wSublayer = w.mSubLayer;
@@ -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) {