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

Commit 3beb8757 authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "Remove AppWindowToken lists."

parents b3d71a10 496bdbba
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) {