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

Commit f03c9001 authored by Louis Chang's avatar Louis Chang
Browse files

Removes the hidden tasks that exceeds the cache limit

Allows the system to cache a small number of hidden tasks and
remove the oldest hidden task when exceeds the cache limit.

Bug: 288627637
Bug: 166143360
Test: atest RecentTasksTest
Change-Id: Ibb0a61fb1fa3543e8d6b6982d1b6f8325982abcb
parent 27fbbeb2
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -183,6 +183,8 @@ class RecentTasks {

    /** The non-empty tasks that are removed from recent tasks (see {@link #removeForAddTask}). */
    private final ArrayList<Task> mHiddenTasks = new ArrayList<>();
    /** The maximum size that the hidden tasks are cached. */
    private static final int MAX_HIDDEN_TASK_SIZE = 10;

    /** Whether to trim inactive tasks when activities are idle. */
    private boolean mCheckTrimmableTasksOnIdle;
@@ -1477,9 +1479,13 @@ class RecentTasks {
        return task.compareTo(rootHomeTask) < 0;
    }

    /** Remove the tasks that user may not be able to return. */
    /** Remove the tasks that user may not be able to return when exceeds the cache limit. */
    private void removeUnreachableHiddenTasks(int windowingMode) {
        for (int i = mHiddenTasks.size() - 1; i >= 0; i--) {
        final int size = mHiddenTasks.size();
        if (size <= MAX_HIDDEN_TASK_SIZE) {
            return;
        }
        for (int i = size - 1; i >= MAX_HIDDEN_TASK_SIZE; i--) {
            final Task hiddenTask = mHiddenTasks.get(i);
            if (!hiddenTask.hasChild() || hiddenTask.inRecents) {
                // The task was removed by other path or it became reachable (added to recents).
@@ -1523,7 +1529,7 @@ class RecentTasks {
                // A non-empty task is replaced by a new task. Because the removed task is no longer
                // managed by the recent tasks list, add it to the hidden list to prevent the task
                // from becoming dangling.
                mHiddenTasks.add(removedTask);
                mHiddenTasks.add(0, removedTask);
            }
            notifyTaskRemoved(removedTask, false /* wasTrimmed */, false /* killProcess */);
            if (DEBUG_RECENTS_TRIM_TASKS) {