Loading services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +24 −3 Original line number Diff line number Diff line Loading @@ -41,14 +41,21 @@ class ActivityManagerDebugConfig { // Enable all debug log categories. static final boolean DEBUG_ALL = false; // Enable all debug log categories for activities. static final boolean DEBUG_ALL_ACTIVITIES = DEBUG_ALL || false; // Available log categories in the activity manager package. static final boolean DEBUG_ADD_REMOVE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_APP = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_BACKUP = DEBUG_ALL || false; static final boolean DEBUG_BROADCAST = DEBUG_ALL || false; static final boolean DEBUG_BROADCAST_BACKGROUND = DEBUG_BROADCAST || false; static final boolean DEBUG_BROADCAST_LIGHT = DEBUG_BROADCAST || false; static final boolean DEBUG_CLEANUP = DEBUG_ALL || false; static final boolean DEBUG_CONFIGURATION = DEBUG_ALL || false; static final boolean DEBUG_CONTAINERS = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_FOCUS = false; static final boolean DEBUG_IDLE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_IMMERSIVE = DEBUG_ALL || false; static final boolean DEBUG_LOCKSCREEN = DEBUG_ALL || false; static final boolean DEBUG_LOCKTASK = DEBUG_ALL || false; Loading @@ -63,10 +70,14 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_PROVIDER = DEBUG_ALL || false; static final boolean DEBUG_PSS = DEBUG_ALL || false; static final boolean DEBUG_RECENTS = DEBUG_ALL || false; static final boolean DEBUG_RELEASE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_RESULTS = DEBUG_ALL || false; static final boolean DEBUG_SAVED_STATE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SCREENSHOTS = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SERVICE = DEBUG_ALL || false; static final boolean DEBUG_SERVICE_EXECUTING = DEBUG_ALL || false; static final boolean DEBUG_STACK = DEBUG_ALL || false; static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SWITCH = DEBUG_ALL || false; static final boolean DEBUG_TASKS = DEBUG_ALL || false; static final boolean DEBUG_THUMBNAILS = DEBUG_ALL || false; Loading @@ -75,16 +86,21 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_URI_PERMISSION = DEBUG_ALL || false; static final boolean DEBUG_USER_LEAVING = DEBUG_ALL || false; static final boolean DEBUG_VISIBILITY = DEBUG_ALL || false; static final boolean DEBUG_VISIBLE_BEHIND = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_USAGE_STATS = DEBUG_ALL || false; static final String POSTFIX_ADD_REMOVE = (APPEND_CATEGORY_NAME) ? "_AddRemove" : ""; static final String POSTFIX_APP = (APPEND_CATEGORY_NAME) ? "_App" : ""; static final String POSTFIX_BACKUP = (APPEND_CATEGORY_NAME) ? "_Backup" : ""; static final String POSTFIX_BROADCAST = (APPEND_CATEGORY_NAME) ? "_Broadcast" : ""; static final String POSTFIX_CLEANUP = (APPEND_CATEGORY_NAME) ? "_Cleanup" : ""; static final String POSTFIX_CONFIGURATION = (APPEND_CATEGORY_NAME) ? "_Configuration" : ""; static final String POSTFIX_CONTAINERS = (APPEND_CATEGORY_NAME) ? "_Containers" : ""; static final String POSTFIX_FOCUS = (APPEND_CATEGORY_NAME) ? "_Focus" : ""; static final String POSTFIX_IDLE = (APPEND_CATEGORY_NAME) ? "_Idle" : ""; static final String POSTFIX_IMMERSIVE = (APPEND_CATEGORY_NAME) ? "_Immersive" : ""; static final String POSTFIX_LOCKSCREEN = (APPEND_CATEGORY_NAME) ? "_LOCKSCREEN" : ""; static final String POSTFIX_LOCKTASK = (APPEND_CATEGORY_NAME) ? "_LOCKTASK" : ""; static final String POSTFIX_LOCKSCREEN = (APPEND_CATEGORY_NAME) ? "_LockScreen" : ""; static final String POSTFIX_LOCKTASK = (APPEND_CATEGORY_NAME) ? "_LockTask" : ""; static final String POSTFIX_LRU = (APPEND_CATEGORY_NAME) ? "_LRU" : ""; static final String POSTFIX_MU = "_MU"; static final String POSTFIX_OOM_ADJ = (APPEND_CATEGORY_NAME) ? "_OomAdj" : ""; Loading @@ -95,12 +111,16 @@ class ActivityManagerDebugConfig { static final String POSTFIX_PROCESSES = (APPEND_CATEGORY_NAME) ? "_Processes" : ""; static final String POSTFIX_PROVIDER = (APPEND_CATEGORY_NAME) ? "_Provider" : ""; static final String POSTFIX_PSS = (APPEND_CATEGORY_NAME) ? "_Pss" : ""; static final String POSTFIX_RESULTS = (APPEND_CATEGORY_NAME) ? "_Results" : ""; static final String POSTFIX_RECENTS = (APPEND_CATEGORY_NAME) ? "_Recents" : ""; static final String POSTFIX_RELEASE = (APPEND_CATEGORY_NAME) ? "_Release" : ""; static final String POSTFIX_RESULTS = (APPEND_CATEGORY_NAME) ? "_Results" : ""; static final String POSTFIX_SAVED_STATE = (APPEND_CATEGORY_NAME) ? "_SavedState" : ""; static final String POSTFIX_SCREENSHOTS = (APPEND_CATEGORY_NAME) ? "_Screenshots" : ""; static final String POSTFIX_SERVICE = (APPEND_CATEGORY_NAME) ? "_Service" : ""; static final String POSTFIX_SERVICE_EXECUTING = (APPEND_CATEGORY_NAME) ? "_ServiceExecuting" : ""; static final String POSTFIX_STACK = (APPEND_CATEGORY_NAME) ? "_Stack" : ""; static final String POSTFIX_STATES = (APPEND_CATEGORY_NAME) ? "_States" : ""; static final String POSTFIX_SWITCH = (APPEND_CATEGORY_NAME) ? "_Switch" : ""; static final String POSTFIX_TASKS = (APPEND_CATEGORY_NAME) ? "_Tasks" : ""; static final String POSTFIX_THUMBNAILS = (APPEND_CATEGORY_NAME) ? "_Thumbnails" : ""; Loading @@ -110,5 +130,6 @@ class ActivityManagerDebugConfig { static final String POSTFIX_URI_PERMISSION = (APPEND_CATEGORY_NAME) ? "_UriPermission" : ""; static final String POSTFIX_USER_LEAVING = (APPEND_CATEGORY_NAME) ? "_UserLeaving" : ""; static final String POSTFIX_VISIBILITY = (APPEND_CATEGORY_NAME) ? "_Visibility" : ""; static final String POSTFIX_VISIBLE_BEHIND = (APPEND_CATEGORY_NAME) ? "_VisibleBehind" : ""; } services/core/java/com/android/server/am/ActivityManagerService.java +2 −1 Original line number Diff line number Diff line Loading @@ -281,6 +281,7 @@ public final class ActivityManagerService extends ActivityManagerNative private static final String TAG_UID_OBSERVERS = TAG + POSTFIX_UID_OBSERVERS; private static final String TAG_URI_PERMISSION = TAG + POSTFIX_URI_PERMISSION; private static final String TAG_VISIBILITY = TAG + POSTFIX_VISIBILITY; private static final String TAG_VISIBLE_BEHIND = TAG + POSTFIX_VISIBLE_BEHIND; /** Control over CPU and battery monitoring */ // write battery stats every 30 minutes. Loading Loading @@ -10837,7 +10838,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { final ActivityStack stack = ActivityRecord.getStackLocked(token); final boolean visible = stack == null ? false : stack.hasVisibleBehindActivity(); if (ActivityStackSupervisor.DEBUG_VISIBLE_BEHIND) Slog.d(TAG, if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "isBackgroundVisibleBehind: stack=" + stack + " visible=" + visible); return visible; } Loading services/core/java/com/android/server/am/ActivityRecord.java +2 −2 Original line number Diff line number Diff line Loading @@ -72,11 +72,11 @@ import java.util.Objects; */ final class ActivityRecord { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityRecord" : TAG_AM; private static final String TAG_STATES = TAG + POSTFIX_STATES; private static final String TAG_SWITCH = TAG + POSTFIX_SWITCH; private static final String TAG_THUMBNAILS = TAG + POSTFIX_THUMBNAILS; private static final boolean SHOW_ACTIVITY_START_TIME = true; static final boolean DEBUG_SAVED_STATE = ActivityStackSupervisor.DEBUG_SAVED_STATE; final public static String RECENTS_PACKAGE_NAME = "com.android.systemui.recents"; private static final String ATTR_ID = "id"; Loading Loading @@ -1093,7 +1093,7 @@ final class ActivityRecord { static void activityResumedLocked(IBinder token) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (DEBUG_SAVED_STATE) Slog.i(TAG, "Resumed activity; dropping state of: " + r); if (DEBUG_SAVED_STATE) Slog.i(TAG_STATES, "Resumed activity; dropping state of: " + r); r.icicle = null; r.haveState = false; } Loading services/core/java/com/android/server/am/ActivityStack.java +86 −85 File changed.Preview size limit exceeded, changes collapsed. Show changes services/core/java/com/android/server/am/ActivityStackSupervisor.java +49 −48 Original line number Diff line number Diff line Loading @@ -124,27 +124,21 @@ import java.util.Set; public final class ActivityStackSupervisor implements DisplayListener { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStackSupervisor" : TAG_AM; private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION; private static final String TAG_CONTAINERS = TAG + POSTFIX_CONTAINERS; private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS; private static final String TAG_IDLE = TAG + POSTFIX_IDLE; private static final String TAG_LOCKTASK = TAG + POSTFIX_LOCKTASK; private static final String TAG_PAUSE = TAG + POSTFIX_PAUSE; private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS; private static final String TAG_RECENTS = TAG + POSTFIX_RECENTS; private static final String TAG_RELEASE = TAG + POSTFIX_RELEASE; private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS; private static final String TAG_STACK = TAG + POSTFIX_STACK; private static final String TAG_STATES = TAG + POSTFIX_STATES; private static final String TAG_SWITCH = TAG + POSTFIX_SWITCH; private static final String TAG_TASKS = TAG + POSTFIX_TASKS; private static final String TAG_VISIBLE_BEHIND = TAG + POSTFIX_VISIBLE_BEHIND; private static final String TAG_USER_LEAVING = TAG + POSTFIX_USER_LEAVING; static final boolean DEBUG = DEBUG_ALL || false; static final boolean DEBUG_ADD_REMOVE = DEBUG || false; static final boolean DEBUG_APP = DEBUG || false; static final boolean DEBUG_CONTAINERS = DEBUG || false; static final boolean DEBUG_IDLE = DEBUG || false; static final boolean DEBUG_RELEASE = DEBUG || false; static final boolean DEBUG_SAVED_STATE = DEBUG || false; static final boolean DEBUG_SCREENSHOTS = DEBUG || false; static final boolean DEBUG_STATES = DEBUG || false; static final boolean DEBUG_VISIBLE_BEHIND = DEBUG || false; public static final int HOME_STACK_ID = 0; /** How long we wait until giving up on the last activity telling us it is idle. */ Loading Loading @@ -631,7 +625,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } final ActivityRecord resumedActivity = stack.mResumedActivity; if (resumedActivity == null || !resumedActivity.idle) { if (DEBUG_STATES) Slog.d(TAG, "allResumedActivitiesIdle: stack=" if (DEBUG_STATES) Slog.d(TAG_STATES, "allResumedActivitiesIdle: stack=" + stack.mStackId + " " + resumedActivity + " not idle"); return false; } Loading Loading @@ -691,7 +685,7 @@ public final class ActivityStackSupervisor implements DisplayListener { for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = stacks.get(stackNdx); if (!isFrontStack(stack) && stack.mResumedActivity != null) { if (DEBUG_STATES) Slog.d(TAG, "pauseBackStacks: stack=" + stack + if (DEBUG_STATES) Slog.d(TAG_STATES, "pauseBackStacks: stack=" + stack + " mResumedActivity=" + stack.mResumedActivity); someActivityPaused |= stack.startPausingLocked(userLeaving, false, resuming, dontWait); Loading @@ -710,7 +704,8 @@ public final class ActivityStackSupervisor implements DisplayListener { final ActivityRecord r = stack.mPausingActivity; if (r != null && r.state != PAUSED && r.state != STOPPED && r.state != STOPPING) { if (DEBUG_STATES) { Slog.d(TAG, "allPausedActivitiesComplete: r=" + r + " state=" + r.state); Slog.d(TAG_STATES, "allPausedActivitiesComplete: r=" + r + " state=" + r.state); pausing = false; } else { return false; Loading Loading @@ -1308,8 +1303,8 @@ public final class ActivityStackSupervisor implements DisplayListener { // should look like we asked it to pause+stop (but remain visible), // and it has done so and reported back the current icicle and // other state. if (DEBUG_STATES) Slog.v(TAG, "Moving to STOPPED: " + r + " (starting in stopped state)"); if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to STOPPED: " + r + " (starting in stopped state)"); r.state = STOPPED; r.stopped = true; } Loading Loading @@ -2382,8 +2377,8 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityRecord r = ActivityRecord.forTokenLocked(token); if (r != null) { if (DEBUG_IDLE) Slog.d(TAG, "activityIdleInternalLocked: Callers=" + Debug.getCallers(4)); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "activityIdleInternalLocked: Callers=" + Debug.getCallers(4)); mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); r.finishLaunchTickingLocked(); if (fromTimeout) { Loading Loading @@ -2693,7 +2688,8 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityContainer activityContainer = new VirtualActivityContainer(parentActivity, callback); mActivityContainers.put(activityContainer.mStackId, activityContainer); if (DEBUG_CONTAINERS) Slog.d(TAG, "createActivityContainer: " + activityContainer); if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "createActivityContainer: " + activityContainer); parentActivity.mChildContainers.add(activityContainer); return activityContainer; } Loading @@ -2702,8 +2698,8 @@ public final class ActivityStackSupervisor implements DisplayListener { final ArrayList<ActivityContainer> childStacks = parentActivity.mChildContainers; for (int containerNdx = childStacks.size() - 1; containerNdx >= 0; --containerNdx) { ActivityContainer container = childStacks.remove(containerNdx); if (DEBUG_CONTAINERS) Slog.d(TAG, "removeChildActivityContainers: removing " + container); if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "removeChildActivityContainers: removing " + container); container.release(); } } Loading @@ -2711,8 +2707,8 @@ public final class ActivityStackSupervisor implements DisplayListener { void deleteActivityContainer(IActivityContainer container) { ActivityContainer activityContainer = (ActivityContainer)container; if (activityContainer != null) { if (DEBUG_CONTAINERS) Slog.d(TAG, "deleteActivityContainer: ", new RuntimeException("here").fillInStackTrace()); if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "deleteActivityContainer: callers=" + Debug.getCallers(4)); final int stackId = activityContainer.mStackId; mActivityContainers.remove(stackId); mWindowManager.removeStack(stackId); Loading Loading @@ -3077,17 +3073,17 @@ public final class ActivityStackSupervisor implements DisplayListener { boolean requestVisibleBehindLocked(ActivityRecord r, boolean visible) { final ActivityStack stack = r.task.stack; if (stack == null) { if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: r=" + r + " visible=" + visible + " stack is null"); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: r=" + r + " visible=" + visible + " stack is null"); return false; } final boolean isVisible = stack.hasVisibleBehindActivity(); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind r=" + r + " visible=" + visible + " isVisible=" + isVisible); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind r=" + r + " visible=" + visible + " isVisible=" + isVisible); final ActivityRecord top = topRunningActivityLocked(); if (top == null || top == r || (visible == isVisible)) { if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: quick return"); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: quick return"); stack.setVisibleBehindActivity(visible ? r : null); return true; } Loading @@ -3095,16 +3091,18 @@ public final class ActivityStackSupervisor implements DisplayListener { // A non-top activity is reporting a visibility change. if (visible && top.fullscreen) { // Let the caller know that it can't be seen. if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: returning top.fullscreen=" + top.fullscreen + " top.state=" + top.state + " top.app=" + top.app + " top.app.thread=" + top.app.thread); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: returning top.fullscreen=" + top.fullscreen + " top.state=" + top.state + " top.app=" + top.app + " top.app.thread=" + top.app.thread); return false; } else if (!visible && stack.getVisibleBehindActivity() != r) { // Only the activity set as currently visible behind should actively reset its // visible behind state. if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: returning visible=" + visible + " stack.getVisibleBehindActivity()=" + stack.getVisibleBehindActivity() + " r=" + r); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: returning visible=" + visible + " stack.getVisibleBehindActivity()=" + stack.getVisibleBehindActivity() + " r=" + r); return false; } Loading Loading @@ -3179,25 +3177,25 @@ public final class ActivityStackSupervisor implements DisplayListener { TaskRecord firstTask = null; // Tasks is non-null only if two or more tasks are found. ArraySet<TaskRecord> tasks = null; if (DEBUG_RELEASE) Slog.d(TAG, "Trying to release some activities in " + app); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Trying to release some activities in " + app); for (int i = 0; i < app.activities.size(); i++) { ActivityRecord r = app.activities.get(i); // First, if we find an activity that is in the process of being destroyed, // then we just aren't going to do anything for now; we want things to settle // down before we try to prune more activities. if (r.finishing || r.state == DESTROYING || r.state == DESTROYED) { if (DEBUG_RELEASE) Slog.d(TAG, "Abort release; already destroying: " + r); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Abort release; already destroying: " + r); return; } // Don't consider any activies that are currently not in a state where they // can be destroyed. if (r.visible || !r.stopped || !r.haveState || r.state == RESUMED || r.state == PAUSING || r.state == PAUSED || r.state == STOPPING) { if (DEBUG_RELEASE) Slog.d(TAG, "Not releasing in-use activity: " + r); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Not releasing in-use activity: " + r); continue; } if (r.task != null) { if (DEBUG_RELEASE) Slog.d(TAG, "Collecting release task " + r.task if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Collecting release task " + r.task + " from " + r); if (firstTask == null) { firstTask = r.task; Loading @@ -3211,7 +3209,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } } if (tasks == null) { if (DEBUG_RELEASE) Slog.d(TAG, "Didn't find two or more tasks to release"); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Didn't find two or more tasks to release"); return; } // If we have activities in multiple tasks that are in a position to be destroyed, Loading Loading @@ -3546,7 +3544,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } void scheduleIdleTimeoutLocked(ActivityRecord next) { if (DEBUG_IDLE) Slog.d(TAG, "scheduleIdleTimeoutLocked: Callers=" + Debug.getCallers(4)); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "scheduleIdleTimeoutLocked: Callers=" + Debug.getCallers(4)); Message msg = mHandler.obtainMessage(IDLE_TIMEOUT_MSG, next); mHandler.sendMessageDelayed(msg, IDLE_TIMEOUT); } Loading @@ -3556,7 +3555,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } void removeTimeoutsForActivityLocked(ActivityRecord r) { if (DEBUG_IDLE) Slog.d(TAG, "removeTimeoutsForActivity: Callers=" + Debug.getCallers(4)); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "removeTimeoutsForActivity: Callers=" + Debug.getCallers(4)); mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); } Loading Loading @@ -3858,7 +3858,8 @@ public final class ActivityStackSupervisor implements DisplayListener { public void handleMessage(Message msg) { switch (msg.what) { case IDLE_TIMEOUT_MSG: { if (DEBUG_IDLE) Slog.d(TAG, "handleMessage: IDLE_TIMEOUT_MSG: r=" + msg.obj); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "handleMessage: IDLE_TIMEOUT_MSG: r=" + msg.obj); if (mService.mDidDexOpt) { mService.mDidDexOpt = false; Message nmsg = mHandler.obtainMessage(IDLE_TIMEOUT_MSG); Loading @@ -3871,7 +3872,7 @@ public final class ActivityStackSupervisor implements DisplayListener { activityIdleInternal((ActivityRecord)msg.obj); } break; case IDLE_NOW_MSG: { if (DEBUG_IDLE) Slog.d(TAG, "handleMessage: IDLE_NOW_MSG: r=" + msg.obj); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "handleMessage: IDLE_NOW_MSG: r=" + msg.obj); activityIdleInternal((ActivityRecord)msg.obj); } break; case RESUME_TOP_ACTIVITY_MSG: { Loading Loading
services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +24 −3 Original line number Diff line number Diff line Loading @@ -41,14 +41,21 @@ class ActivityManagerDebugConfig { // Enable all debug log categories. static final boolean DEBUG_ALL = false; // Enable all debug log categories for activities. static final boolean DEBUG_ALL_ACTIVITIES = DEBUG_ALL || false; // Available log categories in the activity manager package. static final boolean DEBUG_ADD_REMOVE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_APP = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_BACKUP = DEBUG_ALL || false; static final boolean DEBUG_BROADCAST = DEBUG_ALL || false; static final boolean DEBUG_BROADCAST_BACKGROUND = DEBUG_BROADCAST || false; static final boolean DEBUG_BROADCAST_LIGHT = DEBUG_BROADCAST || false; static final boolean DEBUG_CLEANUP = DEBUG_ALL || false; static final boolean DEBUG_CONFIGURATION = DEBUG_ALL || false; static final boolean DEBUG_CONTAINERS = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_FOCUS = false; static final boolean DEBUG_IDLE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_IMMERSIVE = DEBUG_ALL || false; static final boolean DEBUG_LOCKSCREEN = DEBUG_ALL || false; static final boolean DEBUG_LOCKTASK = DEBUG_ALL || false; Loading @@ -63,10 +70,14 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_PROVIDER = DEBUG_ALL || false; static final boolean DEBUG_PSS = DEBUG_ALL || false; static final boolean DEBUG_RECENTS = DEBUG_ALL || false; static final boolean DEBUG_RELEASE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_RESULTS = DEBUG_ALL || false; static final boolean DEBUG_SAVED_STATE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SCREENSHOTS = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SERVICE = DEBUG_ALL || false; static final boolean DEBUG_SERVICE_EXECUTING = DEBUG_ALL || false; static final boolean DEBUG_STACK = DEBUG_ALL || false; static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SWITCH = DEBUG_ALL || false; static final boolean DEBUG_TASKS = DEBUG_ALL || false; static final boolean DEBUG_THUMBNAILS = DEBUG_ALL || false; Loading @@ -75,16 +86,21 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_URI_PERMISSION = DEBUG_ALL || false; static final boolean DEBUG_USER_LEAVING = DEBUG_ALL || false; static final boolean DEBUG_VISIBILITY = DEBUG_ALL || false; static final boolean DEBUG_VISIBLE_BEHIND = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_USAGE_STATS = DEBUG_ALL || false; static final String POSTFIX_ADD_REMOVE = (APPEND_CATEGORY_NAME) ? "_AddRemove" : ""; static final String POSTFIX_APP = (APPEND_CATEGORY_NAME) ? "_App" : ""; static final String POSTFIX_BACKUP = (APPEND_CATEGORY_NAME) ? "_Backup" : ""; static final String POSTFIX_BROADCAST = (APPEND_CATEGORY_NAME) ? "_Broadcast" : ""; static final String POSTFIX_CLEANUP = (APPEND_CATEGORY_NAME) ? "_Cleanup" : ""; static final String POSTFIX_CONFIGURATION = (APPEND_CATEGORY_NAME) ? "_Configuration" : ""; static final String POSTFIX_CONTAINERS = (APPEND_CATEGORY_NAME) ? "_Containers" : ""; static final String POSTFIX_FOCUS = (APPEND_CATEGORY_NAME) ? "_Focus" : ""; static final String POSTFIX_IDLE = (APPEND_CATEGORY_NAME) ? "_Idle" : ""; static final String POSTFIX_IMMERSIVE = (APPEND_CATEGORY_NAME) ? "_Immersive" : ""; static final String POSTFIX_LOCKSCREEN = (APPEND_CATEGORY_NAME) ? "_LOCKSCREEN" : ""; static final String POSTFIX_LOCKTASK = (APPEND_CATEGORY_NAME) ? "_LOCKTASK" : ""; static final String POSTFIX_LOCKSCREEN = (APPEND_CATEGORY_NAME) ? "_LockScreen" : ""; static final String POSTFIX_LOCKTASK = (APPEND_CATEGORY_NAME) ? "_LockTask" : ""; static final String POSTFIX_LRU = (APPEND_CATEGORY_NAME) ? "_LRU" : ""; static final String POSTFIX_MU = "_MU"; static final String POSTFIX_OOM_ADJ = (APPEND_CATEGORY_NAME) ? "_OomAdj" : ""; Loading @@ -95,12 +111,16 @@ class ActivityManagerDebugConfig { static final String POSTFIX_PROCESSES = (APPEND_CATEGORY_NAME) ? "_Processes" : ""; static final String POSTFIX_PROVIDER = (APPEND_CATEGORY_NAME) ? "_Provider" : ""; static final String POSTFIX_PSS = (APPEND_CATEGORY_NAME) ? "_Pss" : ""; static final String POSTFIX_RESULTS = (APPEND_CATEGORY_NAME) ? "_Results" : ""; static final String POSTFIX_RECENTS = (APPEND_CATEGORY_NAME) ? "_Recents" : ""; static final String POSTFIX_RELEASE = (APPEND_CATEGORY_NAME) ? "_Release" : ""; static final String POSTFIX_RESULTS = (APPEND_CATEGORY_NAME) ? "_Results" : ""; static final String POSTFIX_SAVED_STATE = (APPEND_CATEGORY_NAME) ? "_SavedState" : ""; static final String POSTFIX_SCREENSHOTS = (APPEND_CATEGORY_NAME) ? "_Screenshots" : ""; static final String POSTFIX_SERVICE = (APPEND_CATEGORY_NAME) ? "_Service" : ""; static final String POSTFIX_SERVICE_EXECUTING = (APPEND_CATEGORY_NAME) ? "_ServiceExecuting" : ""; static final String POSTFIX_STACK = (APPEND_CATEGORY_NAME) ? "_Stack" : ""; static final String POSTFIX_STATES = (APPEND_CATEGORY_NAME) ? "_States" : ""; static final String POSTFIX_SWITCH = (APPEND_CATEGORY_NAME) ? "_Switch" : ""; static final String POSTFIX_TASKS = (APPEND_CATEGORY_NAME) ? "_Tasks" : ""; static final String POSTFIX_THUMBNAILS = (APPEND_CATEGORY_NAME) ? "_Thumbnails" : ""; Loading @@ -110,5 +130,6 @@ class ActivityManagerDebugConfig { static final String POSTFIX_URI_PERMISSION = (APPEND_CATEGORY_NAME) ? "_UriPermission" : ""; static final String POSTFIX_USER_LEAVING = (APPEND_CATEGORY_NAME) ? "_UserLeaving" : ""; static final String POSTFIX_VISIBILITY = (APPEND_CATEGORY_NAME) ? "_Visibility" : ""; static final String POSTFIX_VISIBLE_BEHIND = (APPEND_CATEGORY_NAME) ? "_VisibleBehind" : ""; }
services/core/java/com/android/server/am/ActivityManagerService.java +2 −1 Original line number Diff line number Diff line Loading @@ -281,6 +281,7 @@ public final class ActivityManagerService extends ActivityManagerNative private static final String TAG_UID_OBSERVERS = TAG + POSTFIX_UID_OBSERVERS; private static final String TAG_URI_PERMISSION = TAG + POSTFIX_URI_PERMISSION; private static final String TAG_VISIBILITY = TAG + POSTFIX_VISIBILITY; private static final String TAG_VISIBLE_BEHIND = TAG + POSTFIX_VISIBLE_BEHIND; /** Control over CPU and battery monitoring */ // write battery stats every 30 minutes. Loading Loading @@ -10837,7 +10838,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { final ActivityStack stack = ActivityRecord.getStackLocked(token); final boolean visible = stack == null ? false : stack.hasVisibleBehindActivity(); if (ActivityStackSupervisor.DEBUG_VISIBLE_BEHIND) Slog.d(TAG, if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "isBackgroundVisibleBehind: stack=" + stack + " visible=" + visible); return visible; } Loading
services/core/java/com/android/server/am/ActivityRecord.java +2 −2 Original line number Diff line number Diff line Loading @@ -72,11 +72,11 @@ import java.util.Objects; */ final class ActivityRecord { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityRecord" : TAG_AM; private static final String TAG_STATES = TAG + POSTFIX_STATES; private static final String TAG_SWITCH = TAG + POSTFIX_SWITCH; private static final String TAG_THUMBNAILS = TAG + POSTFIX_THUMBNAILS; private static final boolean SHOW_ACTIVITY_START_TIME = true; static final boolean DEBUG_SAVED_STATE = ActivityStackSupervisor.DEBUG_SAVED_STATE; final public static String RECENTS_PACKAGE_NAME = "com.android.systemui.recents"; private static final String ATTR_ID = "id"; Loading Loading @@ -1093,7 +1093,7 @@ final class ActivityRecord { static void activityResumedLocked(IBinder token) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (DEBUG_SAVED_STATE) Slog.i(TAG, "Resumed activity; dropping state of: " + r); if (DEBUG_SAVED_STATE) Slog.i(TAG_STATES, "Resumed activity; dropping state of: " + r); r.icicle = null; r.haveState = false; } Loading
services/core/java/com/android/server/am/ActivityStack.java +86 −85 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/core/java/com/android/server/am/ActivityStackSupervisor.java +49 −48 Original line number Diff line number Diff line Loading @@ -124,27 +124,21 @@ import java.util.Set; public final class ActivityStackSupervisor implements DisplayListener { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStackSupervisor" : TAG_AM; private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION; private static final String TAG_CONTAINERS = TAG + POSTFIX_CONTAINERS; private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS; private static final String TAG_IDLE = TAG + POSTFIX_IDLE; private static final String TAG_LOCKTASK = TAG + POSTFIX_LOCKTASK; private static final String TAG_PAUSE = TAG + POSTFIX_PAUSE; private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS; private static final String TAG_RECENTS = TAG + POSTFIX_RECENTS; private static final String TAG_RELEASE = TAG + POSTFIX_RELEASE; private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS; private static final String TAG_STACK = TAG + POSTFIX_STACK; private static final String TAG_STATES = TAG + POSTFIX_STATES; private static final String TAG_SWITCH = TAG + POSTFIX_SWITCH; private static final String TAG_TASKS = TAG + POSTFIX_TASKS; private static final String TAG_VISIBLE_BEHIND = TAG + POSTFIX_VISIBLE_BEHIND; private static final String TAG_USER_LEAVING = TAG + POSTFIX_USER_LEAVING; static final boolean DEBUG = DEBUG_ALL || false; static final boolean DEBUG_ADD_REMOVE = DEBUG || false; static final boolean DEBUG_APP = DEBUG || false; static final boolean DEBUG_CONTAINERS = DEBUG || false; static final boolean DEBUG_IDLE = DEBUG || false; static final boolean DEBUG_RELEASE = DEBUG || false; static final boolean DEBUG_SAVED_STATE = DEBUG || false; static final boolean DEBUG_SCREENSHOTS = DEBUG || false; static final boolean DEBUG_STATES = DEBUG || false; static final boolean DEBUG_VISIBLE_BEHIND = DEBUG || false; public static final int HOME_STACK_ID = 0; /** How long we wait until giving up on the last activity telling us it is idle. */ Loading Loading @@ -631,7 +625,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } final ActivityRecord resumedActivity = stack.mResumedActivity; if (resumedActivity == null || !resumedActivity.idle) { if (DEBUG_STATES) Slog.d(TAG, "allResumedActivitiesIdle: stack=" if (DEBUG_STATES) Slog.d(TAG_STATES, "allResumedActivitiesIdle: stack=" + stack.mStackId + " " + resumedActivity + " not idle"); return false; } Loading Loading @@ -691,7 +685,7 @@ public final class ActivityStackSupervisor implements DisplayListener { for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = stacks.get(stackNdx); if (!isFrontStack(stack) && stack.mResumedActivity != null) { if (DEBUG_STATES) Slog.d(TAG, "pauseBackStacks: stack=" + stack + if (DEBUG_STATES) Slog.d(TAG_STATES, "pauseBackStacks: stack=" + stack + " mResumedActivity=" + stack.mResumedActivity); someActivityPaused |= stack.startPausingLocked(userLeaving, false, resuming, dontWait); Loading @@ -710,7 +704,8 @@ public final class ActivityStackSupervisor implements DisplayListener { final ActivityRecord r = stack.mPausingActivity; if (r != null && r.state != PAUSED && r.state != STOPPED && r.state != STOPPING) { if (DEBUG_STATES) { Slog.d(TAG, "allPausedActivitiesComplete: r=" + r + " state=" + r.state); Slog.d(TAG_STATES, "allPausedActivitiesComplete: r=" + r + " state=" + r.state); pausing = false; } else { return false; Loading Loading @@ -1308,8 +1303,8 @@ public final class ActivityStackSupervisor implements DisplayListener { // should look like we asked it to pause+stop (but remain visible), // and it has done so and reported back the current icicle and // other state. if (DEBUG_STATES) Slog.v(TAG, "Moving to STOPPED: " + r + " (starting in stopped state)"); if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to STOPPED: " + r + " (starting in stopped state)"); r.state = STOPPED; r.stopped = true; } Loading Loading @@ -2382,8 +2377,8 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityRecord r = ActivityRecord.forTokenLocked(token); if (r != null) { if (DEBUG_IDLE) Slog.d(TAG, "activityIdleInternalLocked: Callers=" + Debug.getCallers(4)); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "activityIdleInternalLocked: Callers=" + Debug.getCallers(4)); mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); r.finishLaunchTickingLocked(); if (fromTimeout) { Loading Loading @@ -2693,7 +2688,8 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityContainer activityContainer = new VirtualActivityContainer(parentActivity, callback); mActivityContainers.put(activityContainer.mStackId, activityContainer); if (DEBUG_CONTAINERS) Slog.d(TAG, "createActivityContainer: " + activityContainer); if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "createActivityContainer: " + activityContainer); parentActivity.mChildContainers.add(activityContainer); return activityContainer; } Loading @@ -2702,8 +2698,8 @@ public final class ActivityStackSupervisor implements DisplayListener { final ArrayList<ActivityContainer> childStacks = parentActivity.mChildContainers; for (int containerNdx = childStacks.size() - 1; containerNdx >= 0; --containerNdx) { ActivityContainer container = childStacks.remove(containerNdx); if (DEBUG_CONTAINERS) Slog.d(TAG, "removeChildActivityContainers: removing " + container); if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "removeChildActivityContainers: removing " + container); container.release(); } } Loading @@ -2711,8 +2707,8 @@ public final class ActivityStackSupervisor implements DisplayListener { void deleteActivityContainer(IActivityContainer container) { ActivityContainer activityContainer = (ActivityContainer)container; if (activityContainer != null) { if (DEBUG_CONTAINERS) Slog.d(TAG, "deleteActivityContainer: ", new RuntimeException("here").fillInStackTrace()); if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "deleteActivityContainer: callers=" + Debug.getCallers(4)); final int stackId = activityContainer.mStackId; mActivityContainers.remove(stackId); mWindowManager.removeStack(stackId); Loading Loading @@ -3077,17 +3073,17 @@ public final class ActivityStackSupervisor implements DisplayListener { boolean requestVisibleBehindLocked(ActivityRecord r, boolean visible) { final ActivityStack stack = r.task.stack; if (stack == null) { if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: r=" + r + " visible=" + visible + " stack is null"); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: r=" + r + " visible=" + visible + " stack is null"); return false; } final boolean isVisible = stack.hasVisibleBehindActivity(); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind r=" + r + " visible=" + visible + " isVisible=" + isVisible); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind r=" + r + " visible=" + visible + " isVisible=" + isVisible); final ActivityRecord top = topRunningActivityLocked(); if (top == null || top == r || (visible == isVisible)) { if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: quick return"); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: quick return"); stack.setVisibleBehindActivity(visible ? r : null); return true; } Loading @@ -3095,16 +3091,18 @@ public final class ActivityStackSupervisor implements DisplayListener { // A non-top activity is reporting a visibility change. if (visible && top.fullscreen) { // Let the caller know that it can't be seen. if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: returning top.fullscreen=" + top.fullscreen + " top.state=" + top.state + " top.app=" + top.app + " top.app.thread=" + top.app.thread); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: returning top.fullscreen=" + top.fullscreen + " top.state=" + top.state + " top.app=" + top.app + " top.app.thread=" + top.app.thread); return false; } else if (!visible && stack.getVisibleBehindActivity() != r) { // Only the activity set as currently visible behind should actively reset its // visible behind state. if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG, "requestVisibleBehind: returning visible=" + visible + " stack.getVisibleBehindActivity()=" + stack.getVisibleBehindActivity() + " r=" + r); if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: returning visible=" + visible + " stack.getVisibleBehindActivity()=" + stack.getVisibleBehindActivity() + " r=" + r); return false; } Loading Loading @@ -3179,25 +3177,25 @@ public final class ActivityStackSupervisor implements DisplayListener { TaskRecord firstTask = null; // Tasks is non-null only if two or more tasks are found. ArraySet<TaskRecord> tasks = null; if (DEBUG_RELEASE) Slog.d(TAG, "Trying to release some activities in " + app); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Trying to release some activities in " + app); for (int i = 0; i < app.activities.size(); i++) { ActivityRecord r = app.activities.get(i); // First, if we find an activity that is in the process of being destroyed, // then we just aren't going to do anything for now; we want things to settle // down before we try to prune more activities. if (r.finishing || r.state == DESTROYING || r.state == DESTROYED) { if (DEBUG_RELEASE) Slog.d(TAG, "Abort release; already destroying: " + r); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Abort release; already destroying: " + r); return; } // Don't consider any activies that are currently not in a state where they // can be destroyed. if (r.visible || !r.stopped || !r.haveState || r.state == RESUMED || r.state == PAUSING || r.state == PAUSED || r.state == STOPPING) { if (DEBUG_RELEASE) Slog.d(TAG, "Not releasing in-use activity: " + r); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Not releasing in-use activity: " + r); continue; } if (r.task != null) { if (DEBUG_RELEASE) Slog.d(TAG, "Collecting release task " + r.task if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Collecting release task " + r.task + " from " + r); if (firstTask == null) { firstTask = r.task; Loading @@ -3211,7 +3209,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } } if (tasks == null) { if (DEBUG_RELEASE) Slog.d(TAG, "Didn't find two or more tasks to release"); if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Didn't find two or more tasks to release"); return; } // If we have activities in multiple tasks that are in a position to be destroyed, Loading Loading @@ -3546,7 +3544,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } void scheduleIdleTimeoutLocked(ActivityRecord next) { if (DEBUG_IDLE) Slog.d(TAG, "scheduleIdleTimeoutLocked: Callers=" + Debug.getCallers(4)); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "scheduleIdleTimeoutLocked: Callers=" + Debug.getCallers(4)); Message msg = mHandler.obtainMessage(IDLE_TIMEOUT_MSG, next); mHandler.sendMessageDelayed(msg, IDLE_TIMEOUT); } Loading @@ -3556,7 +3555,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } void removeTimeoutsForActivityLocked(ActivityRecord r) { if (DEBUG_IDLE) Slog.d(TAG, "removeTimeoutsForActivity: Callers=" + Debug.getCallers(4)); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "removeTimeoutsForActivity: Callers=" + Debug.getCallers(4)); mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); } Loading Loading @@ -3858,7 +3858,8 @@ public final class ActivityStackSupervisor implements DisplayListener { public void handleMessage(Message msg) { switch (msg.what) { case IDLE_TIMEOUT_MSG: { if (DEBUG_IDLE) Slog.d(TAG, "handleMessage: IDLE_TIMEOUT_MSG: r=" + msg.obj); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "handleMessage: IDLE_TIMEOUT_MSG: r=" + msg.obj); if (mService.mDidDexOpt) { mService.mDidDexOpt = false; Message nmsg = mHandler.obtainMessage(IDLE_TIMEOUT_MSG); Loading @@ -3871,7 +3872,7 @@ public final class ActivityStackSupervisor implements DisplayListener { activityIdleInternal((ActivityRecord)msg.obj); } break; case IDLE_NOW_MSG: { if (DEBUG_IDLE) Slog.d(TAG, "handleMessage: IDLE_NOW_MSG: r=" + msg.obj); if (DEBUG_IDLE) Slog.d(TAG_IDLE, "handleMessage: IDLE_NOW_MSG: r=" + msg.obj); activityIdleInternal((ActivityRecord)msg.obj); } break; case RESUME_TOP_ACTIVITY_MSG: { Loading