From d34ec220208e5ba81a8f7048ffbb38fac8a80208 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Mon, 17 Oct 2022 21:53:04 +0800 Subject: [PATCH] Remove all usages of PooledConsumer Improve readability and avoid overhead of pooled lambda. Pool is not always efficiency with modern VM. Bug: 163976519 Test: WmTests Change-Id: I869c8578ce5940c31a73b77310a266aed9d60e0b --- .../server/wm/RootWindowContainer.java | 92 +++++++------------ 1 file changed, 31 insertions(+), 61 deletions(-) diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 3c553960ccb44..d8b5d781c0a2c 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -141,7 +141,6 @@ import android.window.WindowContainerToken; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.ResolverActivity; 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.internal.util.function.pooled.PooledPredicate; import com.android.server.LocalServices; @@ -269,12 +268,16 @@ class RootWindowContainer extends WindowContainer synchronized (mService.mGlobalLock) { try { mTaskSupervisor.beginDeferResume(); - - final PooledConsumer c = PooledLambda.obtainConsumer( - RootWindowContainer::destroyActivity, RootWindowContainer.this, - PooledLambda.__(ActivityRecord.class)); - forAllActivities(c); - c.recycle(); + forAllActivities(r -> { + if (r.finishing || !r.isDestroyable()) return; + if (DEBUG_SWITCH) { + Slog.v(TAG_SWITCH, "Destroying " + r + " in state " + r.getState() + + " resumed=" + r.getTask().getTopResumedActivity() + + " pausing=" + r.getTask().getTopPausingActivity() + + " for reason " + mDestroyAllActivitiesReason); + } + r.destroyImmediately(mDestroyAllActivitiesReason); + }); } finally { mTaskSupervisor.endDeferResume(); resumeFocusedTasksTopActivities(); @@ -2422,30 +2425,23 @@ class RootWindowContainer extends WindowContainer info.childTaskUserIds = new int[numTasks]; final int[] currentIndex = {0}; - final PooledConsumer c = PooledLambda.obtainConsumer( - RootWindowContainer::processTaskForTaskInfo, PooledLambda.__(Task.class), info, - currentIndex); - task.forAllLeafTasks(c, false /* traverseTopToBottom */); - c.recycle(); + task.forAllLeafTasks(t -> { + int i = currentIndex[0]; + info.childTaskIds[i] = t.mTaskId; + info.childTaskNames[i] = t.origActivity != null ? t.origActivity.flattenToString() + : t.realActivity != null ? t.realActivity.flattenToString() + : t.getTopNonFinishingActivity() != null + ? t.getTopNonFinishingActivity().packageName : "unknown"; + info.childTaskBounds[i] = t.mAtmService.getTaskBounds(t.mTaskId); + info.childTaskUserIds[i] = t.mUserId; + currentIndex[0] = ++i; + }, false /* traverseTopToBottom */); final ActivityRecord top = task.topRunningActivity(); info.topActivity = top != null ? top.intent.getComponent() : null; return info; } - private static void processTaskForTaskInfo( - Task task, RootTaskInfo info, int[] currentIndex) { - int i = currentIndex[0]; - info.childTaskIds[i] = task.mTaskId; - info.childTaskNames[i] = task.origActivity != null ? task.origActivity.flattenToString() - : task.realActivity != null ? task.realActivity.flattenToString() - : task.getTopNonFinishingActivity() != null - ? task.getTopNonFinishingActivity().packageName : "unknown"; - info.childTaskBounds[i] = task.mAtmService.getTaskBounds(task.mTaskId); - info.childTaskUserIds[i] = task.mUserId; - currentIndex[0] = ++i; - } - RootTaskInfo getRootTaskInfo(int taskId) { Task task = getRootTask(taskId); if (task != null) { @@ -2670,17 +2666,11 @@ class RootWindowContainer extends WindowContainer } void clearOtherAppTimeTrackers(AppTimeTracker except) { - final PooledConsumer c = PooledLambda.obtainConsumer( - RootWindowContainer::clearOtherAppTimeTrackers, - PooledLambda.__(ActivityRecord.class), except); - forAllActivities(c); - c.recycle(); - } - - private static void clearOtherAppTimeTrackers(ActivityRecord r, AppTimeTracker except) { - if (r.appTimeTracker != except) { - r.appTimeTracker = null; - } + forAllActivities(r -> { + if (r.appTimeTracker != except) { + r.appTimeTracker = null; + } + }); } void scheduleDestroyAllActivities(String reason) { @@ -2688,19 +2678,6 @@ class RootWindowContainer extends WindowContainer mService.mH.post(mDestroyAllActivitiesRunnable); } - private void destroyActivity(ActivityRecord r) { - if (r.finishing || !r.isDestroyable()) return; - - if (DEBUG_SWITCH) { - Slog.v(TAG_SWITCH, "Destroying " + r + " in state " + r.getState() - + " resumed=" + r.getTask().getTopResumedActivity() + " pausing=" - + r.getTask().getTopPausingActivity() + " for reason " - + mDestroyAllActivitiesReason); - } - - r.destroyImmediately(mDestroyAllActivitiesReason); - } - // Tries to put all activity tasks to sleep. Returns true if all tasks were // successfully put to sleep. boolean putTasksToSleep(boolean allowDelay, boolean shuttingDown) { @@ -3097,18 +3074,11 @@ class RootWindowContainer extends WindowContainer void updateActivityApplicationInfo(ApplicationInfo aInfo) { final String packageName = aInfo.packageName; final int userId = UserHandle.getUserId(aInfo.uid); - final PooledConsumer c = PooledLambda.obtainConsumer( - RootWindowContainer::updateActivityApplicationInfo, - PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName); - forAllActivities(c); - c.recycle(); - } - - private static void updateActivityApplicationInfo( - ActivityRecord r, ApplicationInfo aInfo, int userId, String packageName) { - if (r.mUserId == userId && packageName.equals(r.packageName)) { - r.updateApplicationInfo(aInfo); - } + forAllActivities(r -> { + if (r.mUserId == userId && packageName.equals(r.packageName)) { + r.updateApplicationInfo(aInfo); + } + }); } void finishVoiceTask(IVoiceInteractionSession session) {