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

Commit 171eea7b authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Remove usages of PooledConsumer in window manager

Improve readability and avoid overhead of pooled lambda.
Pool is not always efficiency with modern VM.

Bug: 163976519
Test: WmTests
Change-Id: Ib42b7549cd525c4cb897f419040b3be7d33d2b98
parent 25c8adda
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -1354,10 +1354,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        return true;
    }

    void setAppTimeTracker(AppTimeTracker att) {
        appTimeTracker = att;
    }

    /** Update the saved state of an activity. */
    void setSavedState(@Nullable Bundle savedState) {
        mIcicle = savedState;
+16 −35
Original line number Diff line number Diff line
@@ -139,7 +139,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.ReferrerIntent;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.function.pooled.PooledConsumer;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.LocalServices;
import com.android.server.am.ActivityManagerService;
@@ -1578,15 +1577,10 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        if (rootTask.getWindowingMode() == WINDOWING_MODE_PINNED) {
            removePinnedRootTaskInSurfaceTransaction(rootTask);
        } else {
            final PooledConsumer c = PooledLambda.obtainConsumer(
                    ActivityTaskSupervisor::processRemoveTask, this, PooledLambda.__(Task.class));
            rootTask.forAllLeafTasks(c, true /* traverseTopToBottom */);
            c.recycle();
        }
    }

    private void processRemoveTask(Task task) {
            rootTask.forAllLeafTasks(task -> {
                removeTask(task, true /* killProcess */, REMOVE_FROM_RECENTS, "remove-root-task");
            }, true /* traverseTopToBottom */);
        }
    }

    /**
@@ -2268,23 +2262,17 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
    }

    void scheduleUpdateMultiWindowMode(Task task) {
        final PooledConsumer c = PooledLambda.obtainConsumer(
                ActivityTaskSupervisor::addToMultiWindowModeChangedList, this,
                PooledLambda.__(ActivityRecord.class));
        task.forAllActivities(c);
        c.recycle();
        task.forAllActivities(r -> {
            if (r.attachedToProcess()) {
                mMultiWindowModeChangedActivities.add(r);
            }
        });

        if (!mHandler.hasMessages(REPORT_MULTI_WINDOW_MODE_CHANGED_MSG)) {
            mHandler.sendEmptyMessage(REPORT_MULTI_WINDOW_MODE_CHANGED_MSG);
        }
    }

    private void addToMultiWindowModeChangedList(ActivityRecord r) {
        if (r.attachedToProcess()) {
            mMultiWindowModeChangedActivities.add(r);
        }
    }

    void scheduleUpdatePictureInPictureModeIfNeeded(Task task, Task prevRootTask) {
        final Task rootTask = task.getRootTask();
        if ((prevRootTask == null || (prevRootTask != rootTask
@@ -2296,27 +2284,20 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
    }

    void scheduleUpdatePictureInPictureModeIfNeeded(Task task, Rect targetRootTaskBounds) {
        final PooledConsumer c = PooledLambda.obtainConsumer(
                ActivityTaskSupervisor::addToPipModeChangedList, this,
                PooledLambda.__(ActivityRecord.class));
        task.forAllActivities(c);
        c.recycle();

        mPipModeChangedTargetRootTaskBounds = targetRootTaskBounds;

        if (!mHandler.hasMessages(REPORT_PIP_MODE_CHANGED_MSG)) {
            mHandler.sendEmptyMessage(REPORT_PIP_MODE_CHANGED_MSG);
        }
    }

    private void addToPipModeChangedList(ActivityRecord r) {
        task.forAllActivities(r -> {
            if (!r.attachedToProcess()) return;

            mPipModeChangedActivities.add(r);
            // If we are scheduling pip change, then remove this activity from multi-window
            // change list as the processing of pip change will make sure multi-window changed
            // message is processed in the right order relative to pip changed.
            mMultiWindowModeChangedActivities.remove(r);
        });

        mPipModeChangedTargetRootTaskBounds = targetRootTaskBounds;

        if (!mHandler.hasMessages(REPORT_PIP_MODE_CHANGED_MSG)) {
            mHandler.sendEmptyMessage(REPORT_PIP_MODE_CHANGED_MSG);
        }
    }

    void wakeUp(String reason) {
+6 −23
Original line number Diff line number Diff line
@@ -241,7 +241,6 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.ToBooleanFunction;
import com.android.internal.util.function.TriConsumer;
import com.android.internal.util.function.pooled.PooledConsumer;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.internal.util.function.pooled.PooledPredicate;
import com.android.server.inputmethod.InputMethodManagerInternal;
@@ -3075,18 +3074,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     */
    boolean pointWithinAppWindow(int x, int y) {
        final int[] targetWindowType = {-1};
        final PooledConsumer fn = PooledLambda.obtainConsumer((w, nonArg) -> {
            if (targetWindowType[0] != -1) {
                return;
            }

        forAllWindows(w -> {
            if (w.isOnScreen() && w.isVisible() && w.getFrame().contains(x, y)) {
                targetWindowType[0] = w.mAttrs.type;
                return;
                return true;
            }
        }, PooledLambda.__(WindowState.class), mTmpRect);
        forAllWindows(fn, true /* traverseTopToBottom */);
        fn.recycle();
            return false;
        }, true /* traverseTopToBottom */);
        return FIRST_APPLICATION_WINDOW <= targetWindowType[0]
                && targetWindowType[0] <= LAST_APPLICATION_WINDOW;
    }
@@ -3112,11 +3106,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            mTmpRect.setEmpty();
            mTmpRect2.setEmpty();

            final PooledConsumer c = PooledLambda.obtainConsumer(
                    DisplayContent::processTaskForTouchExcludeRegion, this,
                    PooledLambda.__(Task.class), focusedTask, delta);
            forAllTasks(c);
            c.recycle();
            forAllTasks(t -> { processTaskForTouchExcludeRegion(t, focusedTask, delta); });

            // If we removed the focused task above, add it back and only leave its
            // outside touch area in the exclusion. TapDetector is not interested in
@@ -6187,17 +6177,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    /** Update and get all UIDs that are present on the display and have access to it. */
    IntArray getPresentUIDs() {
        mDisplayAccessUIDs.clear();
        final PooledConsumer c = PooledLambda.obtainConsumer(DisplayContent::addActivityUid,
                PooledLambda.__(ActivityRecord.class), mDisplayAccessUIDs);
        mDisplayContent.forAllActivities(c);
        c.recycle();
        mDisplayContent.forAllActivities(r -> { mDisplayAccessUIDs.add(r.getUid()); });
        return mDisplayAccessUIDs;
    }

    private static void addActivityUid(ActivityRecord r, IntArray uids) {
        uids.add(r.getUid());
    }

    @VisibleForTesting
    boolean shouldDestroyContentOnRemove() {
        return mDisplay.getRemoveMode() == REMOVE_MODE_DESTROY_CONTENT;
+5 −7
Original line number Diff line number Diff line
@@ -62,8 +62,6 @@ import android.window.TaskSnapshot;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.function.pooled.PooledConsumer;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.LocalServices;
import com.android.server.inputmethod.InputMethodManagerInternal;
import com.android.server.statusbar.StatusBarManagerInternal;
@@ -403,11 +401,11 @@ public class RecentsAnimationController implements DeathRecipient {
        final Task targetRootTask = mDisplayContent.getDefaultTaskDisplayArea()
                .getRootTask(WINDOWING_MODE_UNDEFINED, targetActivityType);
        if (targetRootTask != null) {
            final PooledConsumer c = PooledLambda.obtainConsumer((t, outList) ->
	            { if (!outList.contains(t)) outList.add(t); }, PooledLambda.__(Task.class),
                    visibleTasks);
            targetRootTask.forAllLeafTasks(c, true /* traverseTopToBottom */);
            c.recycle();
            targetRootTask.forAllLeafTasks(t -> {
                if (!visibleTasks.contains(t)) {
                    visibleTasks.add(t);
                }
            }, true /* traverseTopToBottom */);
        }

        final int taskCount = visibleTasks.size();
+2 −3
Original line number Diff line number Diff line
@@ -3102,9 +3102,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
    }

    void finishVoiceTask(IVoiceInteractionSession session) {
        forAllRootTasks(rootTask -> {
            rootTask.finishVoiceTask(session);
        });
        final IBinder binder = session.asBinder();
        forAllLeafTasks(t -> t.finishIfVoiceTask(binder), true /* traverseTopToBottom */);
    }

    /**
Loading