From 268eccbd1e191f7c1780348837d03d71b43e65db Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 26 Mar 2020 13:43:44 -0700 Subject: [PATCH] Adding task org controller dump Bug: 148977538 Test: adb shell dumpsys activity activities Change-Id: I285034a6defbdb56d67b5b52db0d1426781afb57 --- .../server/wm/ActivityStackSupervisor.java | 8 ++--- .../server/wm/ActivityTaskManagerService.java | 1 + .../android/server/wm/KeyguardController.java | 1 + .../android/server/wm/LockTaskController.java | 3 +- .../server/wm/RootWindowContainer.java | 1 + .../server/wm/TaskOrganizerController.java | 33 +++++++++++++++++-- 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index 4652f49f116c4..c2f7e10f293ec 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -2008,6 +2008,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { pw.println(); pw.println("ActivityStackSupervisor state:"); mRootWindowContainer.dump(pw, prefix); + getKeyguardController().dump(pw, prefix); + mService.getLockTaskController().dump(pw, prefix); pw.print(prefix); pw.println("mCurTaskIdForUser=" + mCurTaskIdForUser); pw.println(prefix + "mUserStackInFront=" + mRootWindowContainer.mUserStackInFront); @@ -2018,10 +2020,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { } } pw.print(prefix); pw.print("isHomeRecentsComponent="); - pw.print(mRecentTasks.isRecentsComponentHomeActivity(mRootWindowContainer.mCurrentUser)); - - getKeyguardController().dump(pw, prefix); - mService.getLockTaskController().dump(pw, prefix); + pw.println(mRecentTasks.isRecentsComponentHomeActivity(mRootWindowContainer.mCurrentUser)); + pw.println(); } static boolean printThisActivity(PrintWriter pw, ActivityRecord activity, String dumpPackage, diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index ce885ab543bcf..d80f8e11d1886 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4977,6 +4977,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } printedAnything = true; mStackSupervisor.dump(pw, " "); + mTaskOrganizerController.dump(pw, " "); } if (!printedAnything) { diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index 6b39fd2a70e3b..cbf769add1877 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -565,6 +565,7 @@ class KeyguardController { dumpDisplayStates(pw, prefix); pw.println(prefix + " mDismissalRequested=" + mDismissalRequested); pw.println(prefix + " mVisibilityTransactionDepth=" + mVisibilityTransactionDepth); + pw.println(); } void dumpDebug(ProtoOutputStream proto, long fieldId) { diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java index 3b25b742e3272..337a68e620430 100644 --- a/services/core/java/com/android/server/wm/LockTaskController.java +++ b/services/core/java/com/android/server/wm/LockTaskController.java @@ -917,7 +917,7 @@ public class LockTaskController { } public void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "LockTaskController"); + pw.println(prefix + "LockTaskController:"); prefix = prefix + " "; pw.println(prefix + "mLockTaskModeState=" + lockTaskModeToString()); pw.println(prefix + "mLockTaskModeTasks="); @@ -929,6 +929,7 @@ public class LockTaskController { pw.println(prefix + " u" + mLockTaskPackages.keyAt(i) + ":" + Arrays.toString(mLockTaskPackages.valueAt(i))); } + pw.println(); } private String lockTaskModeToString() { diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 76c16d40bf2c3..2b5dcf4e68c9f 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -3487,6 +3487,7 @@ class RootWindowContainer extends WindowContainer final DisplayContent display = getChildAt(i); display.dump(pw, prefix, true /* dumpAll */); } + pw.println(); } /** diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 8a896f52eea7a..f4f826222576f 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -32,6 +32,7 @@ import android.content.pm.ActivityInfo; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; +import android.os.UserHandle; import android.util.Slog; import android.util.SparseArray; import android.window.ITaskOrganizer; @@ -40,10 +41,12 @@ import android.window.IWindowContainer; import com.android.internal.util.ArrayUtils; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Set; import java.util.WeakHashMap; /** @@ -84,8 +87,9 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { private final ITaskOrganizer mOrganizer; private final DeathRecipient mDeathRecipient; private final ArrayList mOrganizedTasks = new ArrayList<>(); + private final int mUid; - TaskOrganizerState(ITaskOrganizer organizer) { + TaskOrganizerState(ITaskOrganizer organizer, int uid) { mOrganizer = organizer; mDeathRecipient = new DeathRecipient(organizer); try { @@ -93,6 +97,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } catch (RemoteException e) { Slog.e(TAG, "TaskOrganizer failed to register death recipient"); } + mUid = uid; } void addTask(Task t) { @@ -179,6 +184,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { + " windowing modes are supported for registerTaskOrganizer"); } enforceStackPermission("registerTaskOrganizer()"); + final int uid = Binder.getCallingUid(); final long origId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { @@ -195,7 +201,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { orgs.add(organizer.asBinder()); if (!mTaskOrganizerStates.containsKey(organizer.asBinder())) { mTaskOrganizerStates.put(organizer.asBinder(), - new TaskOrganizerState(organizer)); + new TaskOrganizerState(organizer, uid)); } if (orgs.size() == 1) { @@ -466,4 +472,27 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { Binder.restoreCallingIdentity(ident); } } + + public void dump(PrintWriter pw, String prefix) { + final String innerPrefix = prefix + " "; + pw.print(prefix); pw.println("TaskOrganizerController:"); + pw.print(innerPrefix); pw.println("Per windowing mode:"); + for (int i = 0; i < mTaskOrganizersForWindowingMode.size(); i++) { + final int windowingMode = mTaskOrganizersForWindowingMode.keyAt(i); + final List taskOrgs = mTaskOrganizersForWindowingMode.valueAt(i); + pw.println(innerPrefix + " " + + WindowConfiguration.windowingModeToString(windowingMode) + ":"); + for (int j = 0; j < taskOrgs.size(); j++) { + final TaskOrganizerState state = mTaskOrganizerStates.get(taskOrgs.get(j)); + final ArrayList tasks = state.mOrganizedTasks; + pw.print(innerPrefix + " "); + pw.println(state.mOrganizer + " uid=" + state.mUid + ":"); + for (int k = 0; k < tasks.size(); k++) { + pw.println(innerPrefix + " " + tasks.get(k)); + } + } + + } + pw.println(); + } }