Loading core/java/android/app/ActivityManager.java +6 −2 Original line number Diff line number Diff line Loading @@ -519,11 +519,15 @@ public class ActivityManager { * process that contains activities. */ public static final int PROCESS_STATE_CACHED_ACTIVITY_CLIENT = 16; /** @hide Process is being cached for later use and has an activity that corresponds * to an existing recent task. */ public static final int PROCESS_STATE_CACHED_RECENT = 17; /** @hide Process is being cached for later use and is empty. */ public static final int PROCESS_STATE_CACHED_EMPTY = 17; public static final int PROCESS_STATE_CACHED_EMPTY = 18; /** @hide Process does not exist. */ public static final int PROCESS_STATE_NONEXISTENT = 18; public static final int PROCESS_STATE_NONEXISTENT = 19; // NOTE: If PROCESS_STATEs are added or changed, then new fields must be added // to frameworks/base/core/proto/android/app/activitymanager.proto and the following method must Loading core/java/com/android/internal/app/procstats/ProcessState.java +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ public final class ProcessState { STATE_LAST_ACTIVITY, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY STATE_CACHED_ACTIVITY, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY STATE_CACHED_ACTIVITY_CLIENT, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT STATE_CACHED_ACTIVITY, // ActivityManager.PROCESS_STATE_CACHED_RECENT STATE_CACHED_EMPTY, // ActivityManager.PROCESS_STATE_CACHED_EMPTY }; Loading services/core/java/com/android/server/am/ActivityManagerService.java +14 −5 Original line number Diff line number Diff line Loading @@ -3325,7 +3325,7 @@ public class ActivityManagerService extends IActivityManager.Stub String what, Object obj, ProcessRecord srcApp) { app.lastActivityTime = now; if (app.activities.size() > 0) { if (app.activities.size() > 0 || app.recentTasks.size() > 0) { // Don't want to touch dependent processes that are hosting activities. return index; } Loading Loading @@ -3389,7 +3389,7 @@ public class ActivityManagerService extends IActivityManager.Stub final void updateLruProcessLocked(ProcessRecord app, boolean activityChange, ProcessRecord client) { final boolean hasActivity = app.activities.size() > 0 || app.hasClientActivities || app.treatLikeActivity; || app.treatLikeActivity || app.recentTasks.size() > 0; final boolean hasService = false; // not impl yet. app.services.size() > 0; if (!activityChange && hasActivity) { // The process has activities, so we are only allowing activity-based adjustments Loading Loading @@ -3493,7 +3493,8 @@ public class ActivityManagerService extends IActivityManager.Stub int nextIndex; if (hasActivity) { final int N = mLruProcesses.size(); if (app.activities.size() == 0 && mLruProcessActivityStart < (N - 1)) { if ((app.activities.size() == 0 || app.recentTasks.size() > 0) && mLruProcessActivityStart < (N - 1)) { // Process doesn't have activities, but has clients with // activities... move it up, but one below the top (the top // should always have a real activity). Loading Loading @@ -5330,6 +5331,8 @@ public class ActivityManagerService extends IActivityManager.Stub // Remove this application's activities from active lists. boolean hasVisibleActivities = mStackSupervisor.handleAppDiedLocked(app); app.clearRecentTasks(); app.activities.clear(); if (app.instr != null) { Loading Loading @@ -21022,7 +21025,7 @@ public class ActivityManagerService extends IActivityManager.Stub + " instead of expected " + app); if (r.app == null || (r.app.uid == app.uid)) { // Only fix things up when they look sane r.app = app; r.setProcess(app); } else { continue; } Loading Loading @@ -21101,6 +21104,11 @@ public class ActivityManagerService extends IActivityManager.Stub adj += minLayer; } } if (procState > ActivityManager.PROCESS_STATE_CACHED_RECENT && app.recentTasks.size() > 0) { procState = ActivityManager.PROCESS_STATE_CACHED_RECENT; app.adjType = "cch-rec"; if (DEBUG_OOM_ADJ_REASON) Slog.d(TAG, "Raise to cached recent: " + app); } if (adj > ProcessList.PERCEPTIBLE_APP_ADJ || procState > ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) { Loading Loading @@ -22661,6 +22669,7 @@ public class ActivityManagerService extends IActivityManager.Stub switch (app.curProcState) { case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: case ActivityManager.PROCESS_STATE_CACHED_RECENT: // This process is a cached process holding activities... // assign it the next cached value for that type, and then // step that cached level. Loading Loading @@ -23385,7 +23394,7 @@ public class ActivityManagerService extends IActivityManager.Stub // has been removed. for (i=mRemovedProcesses.size()-1; i>=0; i--) { final ProcessRecord app = mRemovedProcesses.get(i); if (app.activities.size() == 0 if (app.activities.size() == 0 && app.recentTasks.size() == 0 && app.curReceivers.isEmpty() && app.services.size() == 0) { Slog.i( TAG, "Exiting empty application process " services/core/java/com/android/server/am/ActivityRecord.java +8 −0 Original line number Diff line number Diff line Loading @@ -934,6 +934,14 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } } void setProcess(ProcessRecord proc) { app = proc; final ActivityRecord root = task != null ? task.getRootActivity() : null; if (root == this) { task.setRootProcess(proc); } } AppWindowContainerController getWindowContainerController() { return mWindowContainerController; } Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +1 −1 Original line number Diff line number Diff line Loading @@ -1270,7 +1270,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // schedule launch ticks to collect information about slow apps. r.startLaunchTickingLocked(); r.app = app; r.setProcess(app); if (mKeyguardController.isKeyguardLocked()) { r.notifyUnknownVisibilityLaunched(); Loading Loading
core/java/android/app/ActivityManager.java +6 −2 Original line number Diff line number Diff line Loading @@ -519,11 +519,15 @@ public class ActivityManager { * process that contains activities. */ public static final int PROCESS_STATE_CACHED_ACTIVITY_CLIENT = 16; /** @hide Process is being cached for later use and has an activity that corresponds * to an existing recent task. */ public static final int PROCESS_STATE_CACHED_RECENT = 17; /** @hide Process is being cached for later use and is empty. */ public static final int PROCESS_STATE_CACHED_EMPTY = 17; public static final int PROCESS_STATE_CACHED_EMPTY = 18; /** @hide Process does not exist. */ public static final int PROCESS_STATE_NONEXISTENT = 18; public static final int PROCESS_STATE_NONEXISTENT = 19; // NOTE: If PROCESS_STATEs are added or changed, then new fields must be added // to frameworks/base/core/proto/android/app/activitymanager.proto and the following method must Loading
core/java/com/android/internal/app/procstats/ProcessState.java +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ public final class ProcessState { STATE_LAST_ACTIVITY, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY STATE_CACHED_ACTIVITY, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY STATE_CACHED_ACTIVITY_CLIENT, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT STATE_CACHED_ACTIVITY, // ActivityManager.PROCESS_STATE_CACHED_RECENT STATE_CACHED_EMPTY, // ActivityManager.PROCESS_STATE_CACHED_EMPTY }; Loading
services/core/java/com/android/server/am/ActivityManagerService.java +14 −5 Original line number Diff line number Diff line Loading @@ -3325,7 +3325,7 @@ public class ActivityManagerService extends IActivityManager.Stub String what, Object obj, ProcessRecord srcApp) { app.lastActivityTime = now; if (app.activities.size() > 0) { if (app.activities.size() > 0 || app.recentTasks.size() > 0) { // Don't want to touch dependent processes that are hosting activities. return index; } Loading Loading @@ -3389,7 +3389,7 @@ public class ActivityManagerService extends IActivityManager.Stub final void updateLruProcessLocked(ProcessRecord app, boolean activityChange, ProcessRecord client) { final boolean hasActivity = app.activities.size() > 0 || app.hasClientActivities || app.treatLikeActivity; || app.treatLikeActivity || app.recentTasks.size() > 0; final boolean hasService = false; // not impl yet. app.services.size() > 0; if (!activityChange && hasActivity) { // The process has activities, so we are only allowing activity-based adjustments Loading Loading @@ -3493,7 +3493,8 @@ public class ActivityManagerService extends IActivityManager.Stub int nextIndex; if (hasActivity) { final int N = mLruProcesses.size(); if (app.activities.size() == 0 && mLruProcessActivityStart < (N - 1)) { if ((app.activities.size() == 0 || app.recentTasks.size() > 0) && mLruProcessActivityStart < (N - 1)) { // Process doesn't have activities, but has clients with // activities... move it up, but one below the top (the top // should always have a real activity). Loading Loading @@ -5330,6 +5331,8 @@ public class ActivityManagerService extends IActivityManager.Stub // Remove this application's activities from active lists. boolean hasVisibleActivities = mStackSupervisor.handleAppDiedLocked(app); app.clearRecentTasks(); app.activities.clear(); if (app.instr != null) { Loading Loading @@ -21022,7 +21025,7 @@ public class ActivityManagerService extends IActivityManager.Stub + " instead of expected " + app); if (r.app == null || (r.app.uid == app.uid)) { // Only fix things up when they look sane r.app = app; r.setProcess(app); } else { continue; } Loading Loading @@ -21101,6 +21104,11 @@ public class ActivityManagerService extends IActivityManager.Stub adj += minLayer; } } if (procState > ActivityManager.PROCESS_STATE_CACHED_RECENT && app.recentTasks.size() > 0) { procState = ActivityManager.PROCESS_STATE_CACHED_RECENT; app.adjType = "cch-rec"; if (DEBUG_OOM_ADJ_REASON) Slog.d(TAG, "Raise to cached recent: " + app); } if (adj > ProcessList.PERCEPTIBLE_APP_ADJ || procState > ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) { Loading Loading @@ -22661,6 +22669,7 @@ public class ActivityManagerService extends IActivityManager.Stub switch (app.curProcState) { case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: case ActivityManager.PROCESS_STATE_CACHED_RECENT: // This process is a cached process holding activities... // assign it the next cached value for that type, and then // step that cached level. Loading Loading @@ -23385,7 +23394,7 @@ public class ActivityManagerService extends IActivityManager.Stub // has been removed. for (i=mRemovedProcesses.size()-1; i>=0; i--) { final ProcessRecord app = mRemovedProcesses.get(i); if (app.activities.size() == 0 if (app.activities.size() == 0 && app.recentTasks.size() == 0 && app.curReceivers.isEmpty() && app.services.size() == 0) { Slog.i( TAG, "Exiting empty application process "
services/core/java/com/android/server/am/ActivityRecord.java +8 −0 Original line number Diff line number Diff line Loading @@ -934,6 +934,14 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } } void setProcess(ProcessRecord proc) { app = proc; final ActivityRecord root = task != null ? task.getRootActivity() : null; if (root == this) { task.setRootProcess(proc); } } AppWindowContainerController getWindowContainerController() { return mWindowContainerController; } Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +1 −1 Original line number Diff line number Diff line Loading @@ -1270,7 +1270,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // schedule launch ticks to collect information about slow apps. r.startLaunchTickingLocked(); r.app = app; r.setProcess(app); if (mKeyguardController.isKeyguardLocked()) { r.notifyUnknownVisibilityLaunched(); Loading