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

Commit 396cea1a authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Reduce auto-boxing of Boolean when iterating task and activity

Function<T, Boolean> can be replaced with Predicate<T>.

This also eliminates 9 places that use lambda by calling the
implementation of Consumer and Predicate directly.

Bug: 163976519
Test: CtsActivityManagerDeviceTestCases

Change-Id: I39923aeeed511722ce7270e8ee57fdfbce5c0742
parent 3866f66f
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -359,7 +359,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
@@ -4222,9 +4221,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    }

    @Override
    boolean forAllActivities(
            Function<ActivityRecord, Boolean> callback, boolean traverseTopToBottom) {
        return callback.apply(this);
    boolean forAllActivities(Predicate<ActivityRecord> callback, boolean traverseTopToBottom) {
        return callback.test(this);
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -332,7 +332,7 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> {
    }

    @Override
    boolean forAllTaskDisplayAreas(Function<TaskDisplayArea, Boolean> callback,
    boolean forAllTaskDisplayAreas(Predicate<TaskDisplayArea> callback,
            boolean traverseTopToBottom) {
        // Only DisplayArea of Type.ANY may contain TaskDisplayArea as children.
        if (mType != DisplayArea.Type.ANY) {
+4 −8
Original line number Diff line number Diff line
@@ -223,7 +223,6 @@ 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.PooledFunction;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.internal.util.function.pooled.PooledPredicate;
import com.android.server.inputmethod.InputMethodManagerInternal;
@@ -4659,7 +4658,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                || mWmService.mPolicy.okToAnimate(ignoreScreenOn));
    }

    static final class TaskForResizePointSearchResult {
    static final class TaskForResizePointSearchResult implements Predicate<Task> {
        private Task taskForResize;
        private int x;
        private int y;
@@ -4672,16 +4671,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            this.y = y;
            this.delta = delta;
            mTmpRect.setEmpty();

            final PooledFunction f = PooledLambda.obtainFunction(
                    TaskForResizePointSearchResult::processTask, this, PooledLambda.__(Task.class));
            root.forAllTasks(f);
            f.recycle();
            root.forAllTasks(this);

            return taskForResize;
        }

        private boolean processTask(Task task) {
        @Override
        public boolean test(Task task) {
            if (!task.getRootTask().getWindowConfiguration().canResizeTask()) {
                return true;
            }
+1 −8
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ import com.android.internal.os.BackgroundThread;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.LatencyTracker;
import com.android.internal.util.function.pooled.PooledConsumer;
import com.android.internal.util.function.pooled.PooledFunction;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.LocalServices;
import com.android.server.inputmethod.InputMethodManagerInternal;
@@ -1152,13 +1151,7 @@ public class RecentsAnimationController implements DeathRecipient {

    private boolean isAnimatingApp(ActivityRecord activity) {
        for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
            final Task task = mPendingAnimations.get(i).mTask;
            final PooledFunction f = PooledLambda.obtainFunction(
                    (a, b) -> a == b, activity,
                    PooledLambda.__(ActivityRecord.class));
            boolean isAnimatingApp = task.forAllActivities(f);
            f.recycle();
            if (isAnimatingApp) {
            if (activity.isDescendantOf(mPendingAnimations.get(i).mTask)) {
                return true;
            }
        }
+13 −18
Original line number Diff line number Diff line
@@ -25,14 +25,13 @@ import android.content.pm.ActivityInfo;
import android.os.Debug;

import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.function.pooled.PooledConsumer;
import com.android.internal.util.function.pooled.PooledFunction;
import com.android.internal.util.function.pooled.PooledLambda;

import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Predicate;

/** Helper class for processing the reset of a task. */
class ResetTargetTaskHelper {
class ResetTargetTaskHelper implements Consumer<Task>, Predicate<ActivityRecord> {
    private Task mTask;
    private Task mTargetTask;
    private Task mTargetRootTask;
@@ -40,6 +39,7 @@ class ResetTargetTaskHelper {
    private boolean mForceReset;
    private boolean mCanMoveOptions;
    private boolean mTargetTaskFound;
    private boolean mIsTargetTask;
    private int mActivityReparentPosition;
    private ActivityOptions mTopOptions;
    private ArrayList<ActivityRecord> mResultActivities = new ArrayList<>();
@@ -62,32 +62,27 @@ class ResetTargetTaskHelper {
        mTargetRootTask = targetTask.getRootTask();
        mActivityReparentPosition = -1;

        final PooledConsumer c = PooledLambda.obtainConsumer(
                ResetTargetTaskHelper::processTask, this, PooledLambda.__(Task.class));
        targetTask.mWmService.mRoot.forAllLeafTasks(c, true /*traverseTopToBottom*/);
        c.recycle();
        targetTask.mWmService.mRoot.forAllLeafTasks(this, true /* traverseTopToBottom */);

        processPendingReparentActivities();
        reset(null);
        return mTopOptions;
    }

    private void processTask(Task task) {
    @Override
    public void accept(Task task) {
        reset(task);
        mRoot = task.getRootActivity(true);
        if (mRoot == null) return;

        final boolean isTargetTask = task == mTargetTask;
        if (isTargetTask) mTargetTaskFound = true;
        mIsTargetTask = task == mTargetTask;
        if (mIsTargetTask) mTargetTaskFound = true;

        final PooledFunction f = PooledLambda.obtainFunction(
                ResetTargetTaskHelper::processActivity, this,
                PooledLambda.__(ActivityRecord.class), isTargetTask);
        task.forAllActivities(f);
        f.recycle();
        task.forAllActivities(this);
    }

    private boolean processActivity(ActivityRecord r, boolean isTargetTask) {
    @Override
    public boolean test(ActivityRecord r) {
        // End processing if we have reached the root.
        if (r == mRoot) return true;

@@ -100,7 +95,7 @@ class ResetTargetTaskHelper {
        final boolean clearWhenTaskReset =
                (r.intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0;

        if (isTargetTask) {
        if (mIsTargetTask) {
            if (!finishOnTaskLaunch && !clearWhenTaskReset) {
                if (r.resultTo != null) {
                    // If this activity is sending a reply to a previous activity, we can't do
Loading