Loading services/core/java/com/android/server/wm/RootWindowContainer.java +31 −61 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -269,12 +268,16 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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(); Loading Loading @@ -2422,30 +2425,23 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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) { Loading Loading @@ -2670,17 +2666,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent> } 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) { forAllActivities(r -> { if (r.appTimeTracker != except) { r.appTimeTracker = null; } }); } void scheduleDestroyAllActivities(String reason) { Loading @@ -2688,19 +2678,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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) { Loading Loading @@ -3097,18 +3074,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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) { forAllActivities(r -> { if (r.mUserId == userId && packageName.equals(r.packageName)) { r.updateApplicationInfo(aInfo); } }); } void finishVoiceTask(IVoiceInteractionSession session) { Loading Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +31 −61 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -269,12 +268,16 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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(); Loading Loading @@ -2422,30 +2425,23 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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) { Loading Loading @@ -2670,17 +2666,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent> } 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) { forAllActivities(r -> { if (r.appTimeTracker != except) { r.appTimeTracker = null; } }); } void scheduleDestroyAllActivities(String reason) { Loading @@ -2688,19 +2678,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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) { Loading Loading @@ -3097,18 +3074,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent> 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) { forAllActivities(r -> { if (r.mUserId == userId && packageName.equals(r.packageName)) { r.updateApplicationInfo(aInfo); } }); } void finishVoiceTask(IVoiceInteractionSession session) { Loading