Loading services/core/java/com/android/server/am/ActivityManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -18780,7 +18780,7 @@ public class ActivityManagerService extends IActivityManager.Stub final IApplicationThread thread = app.getOnewayThread(); if (thread != null) { mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(app, OomAdjuster.OOM_ADJ_REASON_NONE); CachedAppOptimizer.UNFREEZE_REASON_PING); pingCount.incrementAndGet(); try { thread.schedulePing(pongCallback); services/core/java/com/android/server/am/AppProfiler.java +1 −2 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import static com.android.server.am.ActivityManagerService.appendMemInfo; import static com.android.server.am.ActivityManagerService.getKsmInfo; import static com.android.server.am.ActivityManagerService.stringifyKBSize; import static com.android.server.am.LowMemDetector.ADJ_MEM_FACTOR_NOTHING; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_NONE; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_SWITCH; import static com.android.server.wm.ActivityTaskManagerService.DUMP_ACTIVITIES_CMD; Loading Loading @@ -1119,7 +1118,7 @@ public class AppProfiler { Slog.v(TAG_OOM_ADJ, msg + app.processName + " to " + level); } mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(app, OOM_ADJ_REASON_NONE); CachedAppOptimizer.UNFREEZE_REASON_TRIM_MEMORY); thread.scheduleTrimMemory(level); } catch (RemoteException e) { } Loading services/core/java/com/android/server/am/BroadcastQueueImpl.java +3 −3 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_L import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BROADCAST; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_MU; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_START_RECEIVER; import android.annotation.NonNull; Loading Loading @@ -837,7 +836,7 @@ public class BroadcastQueueImpl extends BroadcastQueue { } } else if (filter.receiverList.app != null) { mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(filter.receiverList.app, OOM_ADJ_REASON_START_RECEIVER); CachedAppOptimizer.UNFREEZE_REASON_START_RECEIVER); } try { Loading Loading @@ -1131,7 +1130,8 @@ public class BroadcastQueueImpl extends BroadcastQueue { if (sendResult) { if (r.callerApp != null) { mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily( r.callerApp, OOM_ADJ_REASON_FINISH_RECEIVER); r.callerApp, CachedAppOptimizer.UNFREEZE_REASON_FINISH_RECEIVER); } try { if (DEBUG_BROADCAST) { Loading services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +2 −3 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import static com.android.server.am.BroadcastRecord.getReceiverPackageName; import static com.android.server.am.BroadcastRecord.getReceiverProcessName; import static com.android.server.am.BroadcastRecord.getReceiverUid; import static com.android.server.am.BroadcastRecord.isDeliveryStateTerminal; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_START_RECEIVER; import android.annotation.NonNull; Loading Loading @@ -929,7 +928,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { final IApplicationThread thread = (app != null) ? app.getOnewayThread() : null; if (thread != null) { mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily( app, OOM_ADJ_REASON_FINISH_RECEIVER); app, CachedAppOptimizer.UNFREEZE_REASON_FINISH_RECEIVER); if (r.shareIdentity && app.uid != r.callingUid) { mService.mPackageManagerInt.grantImplicitAccess(r.userId, r.intent, UserHandle.getAppId(app.uid), r.callingUid, true); Loading Loading @@ -1515,7 +1514,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { } mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(queue.app, OOM_ADJ_REASON_START_RECEIVER); CachedAppOptimizer.UNFREEZE_REASON_START_RECEIVER); if (queue.runningOomAdjusted) { queue.app.mState.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_RECEIVER); Loading services/core/java/com/android/server/am/CachedAppOptimizer.java +114 −44 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import android.annotation.IntDef; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.ApplicationExitInfo; Loading Loading @@ -54,6 +55,8 @@ import com.android.server.ServiceThread; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumMap; Loading Loading @@ -94,6 +97,70 @@ public final class CachedAppOptimizer { @VisibleForTesting static final String KEY_FREEZER_EXEMPT_INST_PKG = "freeze_exempt_inst_pkg"; static final int UNFREEZE_REASON_NONE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_NONE; static final int UNFREEZE_REASON_ACTIVITY = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_ACTIVITY; static final int UNFREEZE_REASON_FINISH_RECEIVER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FINISH_RECEIVER; static final int UNFREEZE_REASON_START_RECEIVER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_START_RECEIVER; static final int UNFREEZE_REASON_BIND_SERVICE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_BIND_SERVICE; static final int UNFREEZE_REASON_UNBIND_SERVICE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_UNBIND_SERVICE; static final int UNFREEZE_REASON_START_SERVICE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_START_SERVICE; static final int UNFREEZE_REASON_GET_PROVIDER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_GET_PROVIDER; static final int UNFREEZE_REASON_REMOVE_PROVIDER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_REMOVE_PROVIDER; static final int UNFREEZE_REASON_UI_VISIBILITY = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_UI_VISIBILITY; static final int UNFREEZE_REASON_ALLOWLIST = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_ALLOWLIST; static final int UNFREEZE_REASON_PROCESS_BEGIN = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_PROCESS_BEGIN; static final int UNFREEZE_REASON_PROCESS_END = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_PROCESS_END; static final int UNFREEZE_REASON_TRIM_MEMORY = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_TRIM_MEMORY; static final int UNFREEZE_REASON_PING = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_PING; static final int UNFREEZE_REASON_FILE_LOCKS = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FILE_LOCKS; static final int UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FILE_LOCK_CHECK_FAILURE; static final int UNFREEZE_REASON_BINDER_TXNS = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_BINDER_TXNS; static final int UNFREEZE_REASON_FEATURE_FLAGS = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FEATURE_FLAGS; @IntDef(prefix = {"UNFREEZE_REASON_"}, value = { UNFREEZE_REASON_NONE, UNFREEZE_REASON_ACTIVITY, UNFREEZE_REASON_FINISH_RECEIVER, UNFREEZE_REASON_START_RECEIVER, UNFREEZE_REASON_BIND_SERVICE, UNFREEZE_REASON_UNBIND_SERVICE, UNFREEZE_REASON_START_SERVICE, UNFREEZE_REASON_GET_PROVIDER, UNFREEZE_REASON_REMOVE_PROVIDER, UNFREEZE_REASON_UI_VISIBILITY, UNFREEZE_REASON_ALLOWLIST, UNFREEZE_REASON_PROCESS_BEGIN, UNFREEZE_REASON_PROCESS_END, UNFREEZE_REASON_TRIM_MEMORY, UNFREEZE_REASON_PING, UNFREEZE_REASON_FILE_LOCKS, UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE, UNFREEZE_REASON_BINDER_TXNS, UNFREEZE_REASON_FEATURE_FLAGS, }) @Retention(RetentionPolicy.SOURCE) public @interface UnfreezeReason {} // RSS Indices private static final int RSS_TOTAL_INDEX = 0; private static final int RSS_FILE_INDEX = 1; Loading Loading @@ -888,7 +955,7 @@ public final class CachedAppOptimizer { } if (!enable && opt.isFrozen()) { unfreezeAppLSP(process, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(process, UNFREEZE_REASON_FEATURE_FLAGS); // Set freezerOverride *after* calling unfreezeAppLSP (it resets the flag) opt.setFreezerOverride(true); Loading Loading @@ -1194,7 +1261,7 @@ public final class CachedAppOptimizer { // This will ensure app will be out of the freezer for at least mFreezerDebounceTimeout. @GuardedBy("mAm") void unfreezeTemporarily(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) { void unfreezeTemporarily(ProcessRecord app, @UnfreezeReason int reason) { if (mUseFreezer) { synchronized (mProcLock) { if (app.mOptRecord.isFrozen() || app.mOptRecord.isPendingFreeze()) { Loading Loading @@ -1224,7 +1291,7 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock", "mFreezerLock"}) void unfreezeAppInternalLSP(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) { void unfreezeAppInternalLSP(ProcessRecord app, @UnfreezeReason int reason) { final int pid = app.getPid(); final ProcessCachedOptimizerRecord opt = app.mOptRecord; if (opt.isPendingFreeze()) { Loading Loading @@ -1318,7 +1385,7 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock"}) void unfreezeAppLSP(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) { void unfreezeAppLSP(ProcessRecord app, @UnfreezeReason int reason) { synchronized (mFreezerLock) { unfreezeAppInternalLSP(app, reason); } Loading Loading @@ -1950,7 +2017,7 @@ public final class CachedAppOptimizer { + name + "(" + pid + "): " + e); synchronized (mAm) { synchronized (mProcLock) { unfreezeAppLSP(proc, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(proc, UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE); } } } Loading @@ -1975,10 +2042,11 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock"}) private void rescheduleFreeze(final ProcessRecord proc, final String reason) { private void rescheduleFreeze(final ProcessRecord proc, final String reason, @UnfreezeReason int reasonCode) { Slog.d(TAG_AM, "Reschedule freeze for process " + proc.getPid() + " " + proc.processName + " (" + reason + ")"); unfreezeAppLSP(proc, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(proc, reasonCode); freezeAppAsyncLSP(proc); } Loading Loading @@ -2024,7 +2092,7 @@ public final class CachedAppOptimizer { // transactions that might be pending. try { if (freezeBinder(pid, true, FREEZE_BINDER_TIMEOUT_MS) != 0) { rescheduleFreeze(proc, "outstanding txns"); rescheduleFreeze(proc, "outstanding txns", UNFREEZE_REASON_BINDER_TXNS); return; } } catch (RuntimeException e) { Loading Loading @@ -2076,7 +2144,8 @@ public final class CachedAppOptimizer { pid, name, unfrozenDuration, FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE); FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE, UNFREEZE_REASON_NONE); } try { Loading @@ -2085,7 +2154,7 @@ public final class CachedAppOptimizer { if ((freezeInfo & TXNS_PENDING_WHILE_FROZEN) != 0) { synchronized (mProcLock) { rescheduleFreeze(proc, "new pending txns"); rescheduleFreeze(proc, "new pending txns", UNFREEZE_REASON_BINDER_TXNS); } return; } Loading @@ -2102,7 +2171,7 @@ public final class CachedAppOptimizer { } private void reportUnfreeze(int pid, int frozenDuration, String processName, @OomAdjuster.OomAdjReason int reason) { @UnfreezeReason int reason) { EventLog.writeEvent(EventLogTags.AM_UNFREEZE, pid, processName); Loading @@ -2114,38 +2183,8 @@ public final class CachedAppOptimizer { pid, processName, frozenDuration, getUnfreezeReasonCode(reason)); } } private int getUnfreezeReasonCode(@OomAdjuster.OomAdjReason int oomAdjReason) { switch (oomAdjReason) { case OomAdjuster.OOM_ADJ_REASON_ACTIVITY: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__ACTIVITY; case OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__FINISH_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_START_RECEIVER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__START_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_BIND_SERVICE: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__BIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__UNBIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_START_SERVICE: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__START_SERVICE; case OomAdjuster.OOM_ADJ_REASON_GET_PROVIDER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__GET_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_REMOVE_PROVIDER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__REMOVE_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__UI_VISIBILITY; case OomAdjuster.OOM_ADJ_REASON_ALLOWLIST: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__ALLOWLIST; case OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__PROCESS_BEGIN; case OomAdjuster.OOM_ADJ_REASON_PROCESS_END: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__PROCESS_END; default: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE; FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE, // deprecated reason); } } Loading @@ -2171,7 +2210,7 @@ public final class CachedAppOptimizer { Slog.d(TAG_AM, app.processName + " (" + pid + ") blocks " + pr.processName + " (" + blocked + ")"); // Found at least one blocked non-cached process unfreezeAppLSP(app, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(app, UNFREEZE_REASON_FILE_LOCKS); break; } } Loading Loading @@ -2207,4 +2246,35 @@ public final class CachedAppOptimizer { mPidCompacting = -1; } } static int getUnfreezeReasonCodeFromOomAdjReason(@OomAdjuster.OomAdjReason int oomAdjReason) { switch (oomAdjReason) { case OomAdjuster.OOM_ADJ_REASON_ACTIVITY: return UNFREEZE_REASON_ACTIVITY; case OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER: return UNFREEZE_REASON_FINISH_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_START_RECEIVER: return UNFREEZE_REASON_START_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_BIND_SERVICE: return UNFREEZE_REASON_BIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE: return UNFREEZE_REASON_UNBIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_START_SERVICE: return UNFREEZE_REASON_START_SERVICE; case OomAdjuster.OOM_ADJ_REASON_GET_PROVIDER: return UNFREEZE_REASON_GET_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_REMOVE_PROVIDER: return UNFREEZE_REASON_REMOVE_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY: return UNFREEZE_REASON_UI_VISIBILITY; case OomAdjuster.OOM_ADJ_REASON_ALLOWLIST: return UNFREEZE_REASON_ALLOWLIST; case OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN: return UNFREEZE_REASON_PROCESS_BEGIN; case OomAdjuster.OOM_ADJ_REASON_PROCESS_END: return UNFREEZE_REASON_PROCESS_END; default: return UNFREEZE_REASON_NONE; } } } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -18780,7 +18780,7 @@ public class ActivityManagerService extends IActivityManager.Stub final IApplicationThread thread = app.getOnewayThread(); if (thread != null) { mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(app, OomAdjuster.OOM_ADJ_REASON_NONE); CachedAppOptimizer.UNFREEZE_REASON_PING); pingCount.incrementAndGet(); try { thread.schedulePing(pongCallback);
services/core/java/com/android/server/am/AppProfiler.java +1 −2 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import static com.android.server.am.ActivityManagerService.appendMemInfo; import static com.android.server.am.ActivityManagerService.getKsmInfo; import static com.android.server.am.ActivityManagerService.stringifyKBSize; import static com.android.server.am.LowMemDetector.ADJ_MEM_FACTOR_NOTHING; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_NONE; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_SWITCH; import static com.android.server.wm.ActivityTaskManagerService.DUMP_ACTIVITIES_CMD; Loading Loading @@ -1119,7 +1118,7 @@ public class AppProfiler { Slog.v(TAG_OOM_ADJ, msg + app.processName + " to " + level); } mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(app, OOM_ADJ_REASON_NONE); CachedAppOptimizer.UNFREEZE_REASON_TRIM_MEMORY); thread.scheduleTrimMemory(level); } catch (RemoteException e) { } Loading
services/core/java/com/android/server/am/BroadcastQueueImpl.java +3 −3 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_L import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BROADCAST; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_MU; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_START_RECEIVER; import android.annotation.NonNull; Loading Loading @@ -837,7 +836,7 @@ public class BroadcastQueueImpl extends BroadcastQueue { } } else if (filter.receiverList.app != null) { mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(filter.receiverList.app, OOM_ADJ_REASON_START_RECEIVER); CachedAppOptimizer.UNFREEZE_REASON_START_RECEIVER); } try { Loading Loading @@ -1131,7 +1130,8 @@ public class BroadcastQueueImpl extends BroadcastQueue { if (sendResult) { if (r.callerApp != null) { mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily( r.callerApp, OOM_ADJ_REASON_FINISH_RECEIVER); r.callerApp, CachedAppOptimizer.UNFREEZE_REASON_FINISH_RECEIVER); } try { if (DEBUG_BROADCAST) { Loading
services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +2 −3 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import static com.android.server.am.BroadcastRecord.getReceiverPackageName; import static com.android.server.am.BroadcastRecord.getReceiverProcessName; import static com.android.server.am.BroadcastRecord.getReceiverUid; import static com.android.server.am.BroadcastRecord.isDeliveryStateTerminal; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER; import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_START_RECEIVER; import android.annotation.NonNull; Loading Loading @@ -929,7 +928,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { final IApplicationThread thread = (app != null) ? app.getOnewayThread() : null; if (thread != null) { mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily( app, OOM_ADJ_REASON_FINISH_RECEIVER); app, CachedAppOptimizer.UNFREEZE_REASON_FINISH_RECEIVER); if (r.shareIdentity && app.uid != r.callingUid) { mService.mPackageManagerInt.grantImplicitAccess(r.userId, r.intent, UserHandle.getAppId(app.uid), r.callingUid, true); Loading Loading @@ -1515,7 +1514,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { } mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(queue.app, OOM_ADJ_REASON_START_RECEIVER); CachedAppOptimizer.UNFREEZE_REASON_START_RECEIVER); if (queue.runningOomAdjusted) { queue.app.mState.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_RECEIVER); Loading
services/core/java/com/android/server/am/CachedAppOptimizer.java +114 −44 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import android.annotation.IntDef; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.ApplicationExitInfo; Loading Loading @@ -54,6 +55,8 @@ import com.android.server.ServiceThread; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumMap; Loading Loading @@ -94,6 +97,70 @@ public final class CachedAppOptimizer { @VisibleForTesting static final String KEY_FREEZER_EXEMPT_INST_PKG = "freeze_exempt_inst_pkg"; static final int UNFREEZE_REASON_NONE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_NONE; static final int UNFREEZE_REASON_ACTIVITY = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_ACTIVITY; static final int UNFREEZE_REASON_FINISH_RECEIVER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FINISH_RECEIVER; static final int UNFREEZE_REASON_START_RECEIVER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_START_RECEIVER; static final int UNFREEZE_REASON_BIND_SERVICE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_BIND_SERVICE; static final int UNFREEZE_REASON_UNBIND_SERVICE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_UNBIND_SERVICE; static final int UNFREEZE_REASON_START_SERVICE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_START_SERVICE; static final int UNFREEZE_REASON_GET_PROVIDER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_GET_PROVIDER; static final int UNFREEZE_REASON_REMOVE_PROVIDER = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_REMOVE_PROVIDER; static final int UNFREEZE_REASON_UI_VISIBILITY = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_UI_VISIBILITY; static final int UNFREEZE_REASON_ALLOWLIST = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_ALLOWLIST; static final int UNFREEZE_REASON_PROCESS_BEGIN = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_PROCESS_BEGIN; static final int UNFREEZE_REASON_PROCESS_END = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_PROCESS_END; static final int UNFREEZE_REASON_TRIM_MEMORY = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_TRIM_MEMORY; static final int UNFREEZE_REASON_PING = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_PING; static final int UNFREEZE_REASON_FILE_LOCKS = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FILE_LOCKS; static final int UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FILE_LOCK_CHECK_FAILURE; static final int UNFREEZE_REASON_BINDER_TXNS = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_BINDER_TXNS; static final int UNFREEZE_REASON_FEATURE_FLAGS = FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON_V2__UFR_FEATURE_FLAGS; @IntDef(prefix = {"UNFREEZE_REASON_"}, value = { UNFREEZE_REASON_NONE, UNFREEZE_REASON_ACTIVITY, UNFREEZE_REASON_FINISH_RECEIVER, UNFREEZE_REASON_START_RECEIVER, UNFREEZE_REASON_BIND_SERVICE, UNFREEZE_REASON_UNBIND_SERVICE, UNFREEZE_REASON_START_SERVICE, UNFREEZE_REASON_GET_PROVIDER, UNFREEZE_REASON_REMOVE_PROVIDER, UNFREEZE_REASON_UI_VISIBILITY, UNFREEZE_REASON_ALLOWLIST, UNFREEZE_REASON_PROCESS_BEGIN, UNFREEZE_REASON_PROCESS_END, UNFREEZE_REASON_TRIM_MEMORY, UNFREEZE_REASON_PING, UNFREEZE_REASON_FILE_LOCKS, UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE, UNFREEZE_REASON_BINDER_TXNS, UNFREEZE_REASON_FEATURE_FLAGS, }) @Retention(RetentionPolicy.SOURCE) public @interface UnfreezeReason {} // RSS Indices private static final int RSS_TOTAL_INDEX = 0; private static final int RSS_FILE_INDEX = 1; Loading Loading @@ -888,7 +955,7 @@ public final class CachedAppOptimizer { } if (!enable && opt.isFrozen()) { unfreezeAppLSP(process, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(process, UNFREEZE_REASON_FEATURE_FLAGS); // Set freezerOverride *after* calling unfreezeAppLSP (it resets the flag) opt.setFreezerOverride(true); Loading Loading @@ -1194,7 +1261,7 @@ public final class CachedAppOptimizer { // This will ensure app will be out of the freezer for at least mFreezerDebounceTimeout. @GuardedBy("mAm") void unfreezeTemporarily(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) { void unfreezeTemporarily(ProcessRecord app, @UnfreezeReason int reason) { if (mUseFreezer) { synchronized (mProcLock) { if (app.mOptRecord.isFrozen() || app.mOptRecord.isPendingFreeze()) { Loading Loading @@ -1224,7 +1291,7 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock", "mFreezerLock"}) void unfreezeAppInternalLSP(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) { void unfreezeAppInternalLSP(ProcessRecord app, @UnfreezeReason int reason) { final int pid = app.getPid(); final ProcessCachedOptimizerRecord opt = app.mOptRecord; if (opt.isPendingFreeze()) { Loading Loading @@ -1318,7 +1385,7 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock"}) void unfreezeAppLSP(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) { void unfreezeAppLSP(ProcessRecord app, @UnfreezeReason int reason) { synchronized (mFreezerLock) { unfreezeAppInternalLSP(app, reason); } Loading Loading @@ -1950,7 +2017,7 @@ public final class CachedAppOptimizer { + name + "(" + pid + "): " + e); synchronized (mAm) { synchronized (mProcLock) { unfreezeAppLSP(proc, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(proc, UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE); } } } Loading @@ -1975,10 +2042,11 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock"}) private void rescheduleFreeze(final ProcessRecord proc, final String reason) { private void rescheduleFreeze(final ProcessRecord proc, final String reason, @UnfreezeReason int reasonCode) { Slog.d(TAG_AM, "Reschedule freeze for process " + proc.getPid() + " " + proc.processName + " (" + reason + ")"); unfreezeAppLSP(proc, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(proc, reasonCode); freezeAppAsyncLSP(proc); } Loading Loading @@ -2024,7 +2092,7 @@ public final class CachedAppOptimizer { // transactions that might be pending. try { if (freezeBinder(pid, true, FREEZE_BINDER_TIMEOUT_MS) != 0) { rescheduleFreeze(proc, "outstanding txns"); rescheduleFreeze(proc, "outstanding txns", UNFREEZE_REASON_BINDER_TXNS); return; } } catch (RuntimeException e) { Loading Loading @@ -2076,7 +2144,8 @@ public final class CachedAppOptimizer { pid, name, unfrozenDuration, FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE); FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE, UNFREEZE_REASON_NONE); } try { Loading @@ -2085,7 +2154,7 @@ public final class CachedAppOptimizer { if ((freezeInfo & TXNS_PENDING_WHILE_FROZEN) != 0) { synchronized (mProcLock) { rescheduleFreeze(proc, "new pending txns"); rescheduleFreeze(proc, "new pending txns", UNFREEZE_REASON_BINDER_TXNS); } return; } Loading @@ -2102,7 +2171,7 @@ public final class CachedAppOptimizer { } private void reportUnfreeze(int pid, int frozenDuration, String processName, @OomAdjuster.OomAdjReason int reason) { @UnfreezeReason int reason) { EventLog.writeEvent(EventLogTags.AM_UNFREEZE, pid, processName); Loading @@ -2114,38 +2183,8 @@ public final class CachedAppOptimizer { pid, processName, frozenDuration, getUnfreezeReasonCode(reason)); } } private int getUnfreezeReasonCode(@OomAdjuster.OomAdjReason int oomAdjReason) { switch (oomAdjReason) { case OomAdjuster.OOM_ADJ_REASON_ACTIVITY: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__ACTIVITY; case OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__FINISH_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_START_RECEIVER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__START_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_BIND_SERVICE: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__BIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__UNBIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_START_SERVICE: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__START_SERVICE; case OomAdjuster.OOM_ADJ_REASON_GET_PROVIDER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__GET_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_REMOVE_PROVIDER: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__REMOVE_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__UI_VISIBILITY; case OomAdjuster.OOM_ADJ_REASON_ALLOWLIST: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__ALLOWLIST; case OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__PROCESS_BEGIN; case OomAdjuster.OOM_ADJ_REASON_PROCESS_END: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__PROCESS_END; default: return FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE; FrameworkStatsLog.APP_FREEZE_CHANGED__UNFREEZE_REASON__NONE, // deprecated reason); } } Loading @@ -2171,7 +2210,7 @@ public final class CachedAppOptimizer { Slog.d(TAG_AM, app.processName + " (" + pid + ") blocks " + pr.processName + " (" + blocked + ")"); // Found at least one blocked non-cached process unfreezeAppLSP(app, OomAdjuster.OOM_ADJ_REASON_NONE); unfreezeAppLSP(app, UNFREEZE_REASON_FILE_LOCKS); break; } } Loading Loading @@ -2207,4 +2246,35 @@ public final class CachedAppOptimizer { mPidCompacting = -1; } } static int getUnfreezeReasonCodeFromOomAdjReason(@OomAdjuster.OomAdjReason int oomAdjReason) { switch (oomAdjReason) { case OomAdjuster.OOM_ADJ_REASON_ACTIVITY: return UNFREEZE_REASON_ACTIVITY; case OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER: return UNFREEZE_REASON_FINISH_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_START_RECEIVER: return UNFREEZE_REASON_START_RECEIVER; case OomAdjuster.OOM_ADJ_REASON_BIND_SERVICE: return UNFREEZE_REASON_BIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE: return UNFREEZE_REASON_UNBIND_SERVICE; case OomAdjuster.OOM_ADJ_REASON_START_SERVICE: return UNFREEZE_REASON_START_SERVICE; case OomAdjuster.OOM_ADJ_REASON_GET_PROVIDER: return UNFREEZE_REASON_GET_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_REMOVE_PROVIDER: return UNFREEZE_REASON_REMOVE_PROVIDER; case OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY: return UNFREEZE_REASON_UI_VISIBILITY; case OomAdjuster.OOM_ADJ_REASON_ALLOWLIST: return UNFREEZE_REASON_ALLOWLIST; case OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN: return UNFREEZE_REASON_PROCESS_BEGIN; case OomAdjuster.OOM_ADJ_REASON_PROCESS_END: return UNFREEZE_REASON_PROCESS_END; default: return UNFREEZE_REASON_NONE; } } }