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

Commit 5e854305 authored by Louis Chang's avatar Louis Chang
Browse files

Add log to identify why the task is removed

Also provide an internal method for the caller to provide
the reason of removing the task.

Bug: 429501479
Test: verified locally
Test: wm presubmit
Flag: EXEMPT log only

Change-Id: I2b4f9276ddfaa3adce17fc40ad5f4b4faca1e855
parent 2a285706
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -821,4 +821,7 @@ public abstract class ActivityTaskManagerInternal {
    public abstract void requestHandoffTaskData(
    public abstract void requestHandoffTaskData(
        int taskId,
        int taskId,
        @NonNull IHandoffTaskDataReceiver receiver);
        @NonNull IHandoffTaskDataReceiver receiver);

    /** Requests to remove a Task by the given Task ID, along with the corresponding reason. */
    public abstract boolean removeTask(int taskId, @NonNull String reason);
}
}
+22 −10
Original line number Original line Diff line number Diff line
@@ -2203,25 +2203,30 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    public boolean removeTask(int taskId) {
    public boolean removeTask(int taskId) {
        mAmInternal.enforceCallingPermission(REMOVE_TASKS, "removeTask()");
        mAmInternal.enforceCallingPermission(REMOVE_TASKS, "removeTask()");
        synchronized (mGlobalLock) {
        synchronized (mGlobalLock) {
            final int pid = Binder.getCallingPid();
            final long ident = Binder.clearCallingIdentity();
            final long ident = Binder.clearCallingIdentity();
            try {
            try {
                return removeTask(taskId, "remove-by-pid#" + pid);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }

    boolean removeTask(int taskId, @NonNull String reason) {
        final Task task = mRootWindowContainer.anyTaskForId(taskId,
        final Task task = mRootWindowContainer.anyTaskForId(taskId,
                MATCH_ATTACHED_TASK_OR_RECENT_TASKS);
                MATCH_ATTACHED_TASK_OR_RECENT_TASKS);
        if (task == null) {
        if (task == null) {
            Slog.w(TAG, "removeTask: No task remove with id=" + taskId);
            Slog.w(TAG, "removeTask: No task remove with id=" + taskId);
            return false;
            return false;
        }
        }
                removeTask(task);
        removeTask(task, reason);
        return true;
        return true;
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }
    }


    void removeTask(@NonNull Task task) {
    void removeTask(@NonNull Task task, @NonNull String reason) {
        if (task.isLeafTask()) {
        if (task.isLeafTask()) {
            mTaskSupervisor.removeTask(task, true, REMOVE_FROM_RECENTS, "remove-task");
            mTaskSupervisor.removeTask(task, true, REMOVE_FROM_RECENTS, reason);
        } else {
        } else {
            mTaskSupervisor.removeRootTask(task);
            mTaskSupervisor.removeRootTask(task);
        }
        }
@@ -7915,6 +7920,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
            @NonNull IHandoffTaskDataReceiver receiver) {
            @NonNull IHandoffTaskDataReceiver receiver) {
            ActivityTaskManagerService.this.requestHandoffTaskData(taskId, receiver);
            ActivityTaskManagerService.this.requestHandoffTaskData(taskId, receiver);
        }
        }

        @Override
        public boolean removeTask(int taskId, @NonNull String reason) {
            synchronized (ActivityTaskManagerService.this.mGlobalLock) {
                return ActivityTaskManagerService.this.removeTask(taskId, reason);
            }
        }
    }
    }


    /** Cache the return value for {@link #isPip2ExperimentEnabled()} */
    /** Cache the return value for {@link #isPip2ExperimentEnabled()} */
+1 −1
Original line number Original line Diff line number Diff line
@@ -392,7 +392,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
                t.mTaskAppearedSent = false;
                t.mTaskAppearedSent = false;
            }
            }
            if (removeFromSystem) {
            if (removeFromSystem) {
                mService.removeTask(t);
                mService.removeTask(t, "remove-by-organizer");
            }
            }
            return taskAppearedSent;
            return taskAppearedSent;
        }
        }
+2 −2
Original line number Original line Diff line number Diff line
@@ -280,7 +280,7 @@ public class WindowOrganizerTests extends WindowTestsBase {
        rootTask.setTaskOrganizer(null);
        rootTask.setTaskOrganizer(null);
        mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
        mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();


        verify(mWm.mAtmService).removeTask(eq(rootTask));
        verify(mWm.mAtmService).removeTask(eq(rootTask), any());
    }
    }


    @Test
    @Test
@@ -298,7 +298,7 @@ public class WindowOrganizerTests extends WindowTestsBase {
        rootTask.setTaskOrganizer(null);
        rootTask.setTaskOrganizer(null);
        mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
        mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();


        verify(mWm.mAtmService, never()).removeTask(eq(rootTask));
        verify(mWm.mAtmService, never()).removeTask(eq(rootTask), any());
    }
    }


    @Test
    @Test