Loading services/core/java/com/android/server/am/OomAdjuster.java +8 −4 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ import static android.os.Process.THREAD_GROUP_RESTRICTED; import static android.os.Process.THREAD_GROUP_TOP_APP; import static android.os.Process.THREAD_PRIORITY_DISPLAY; import static android.os.Process.THREAD_PRIORITY_TOP_APP_BOOST; import static android.os.Process.setProcessGroup; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP; Loading Loading @@ -526,7 +525,7 @@ public class OomAdjuster { + msg.obj + " to " + group); } try { setProcessGroup(pid, group); android.os.Process.setProcessGroup(pid, group); } catch (Exception e) { if (DEBUG_ALL) { Slog.w(TAG, "Failed setting process group of " + pid + " to " + group, e); Loading @@ -544,6 +543,11 @@ public class OomAdjuster { / CACHED_APP_IMPORTANCE_LEVELS; } void setProcessGroup(int pid, int group, String processName) { mProcessGroupHandler.sendMessage(mProcessGroupHandler.obtainMessage( 0 /* unused */, pid, group, processName)); } void initSettings() { mCachedAppOptimizer.init(); mCacheOomRanker.init(ActivityThread.currentApplication().getMainExecutor()); Loading Loading @@ -3491,8 +3495,8 @@ public class OomAdjuster { processGroup = THREAD_GROUP_DEFAULT; break; } mProcessGroupHandler.sendMessage(mProcessGroupHandler.obtainMessage( 0 /* unused */, app.getPid(), processGroup, app.processName)); setProcessGroup(app.getPid(), processGroup, app.processName); mService.mPhantomProcessList.setProcessGroupForPhantomProcessOfApp(app, processGroup); try { final int renderThreadTid = app.getRenderThreadTid(); if (curSchedGroup == SCHED_GROUP_TOP_APP) { Loading services/core/java/com/android/server/am/PhantomProcessList.java +33 −9 Original line number Diff line number Diff line Loading @@ -514,6 +514,15 @@ public final class PhantomProcessList { app.killLocked("Caused by child process: " + msg, reasonCode, subReason, true); } @GuardedBy("mLock") private SparseArray<PhantomProcessRecord> getPhantomProcessOfAppLocked(ProcessRecord app) { int index = mAppPhantomProcessMap.indexOfKey(app.getPid()); if (index >= 0) { return mAppPhantomProcessMap.valueAt(index); } return null; } /** * Iterate all phantom process belonging to the given app, and invokve callback * for each of them. Loading @@ -521,10 +530,10 @@ public final class PhantomProcessList { void forEachPhantomProcessOfApp(final ProcessRecord app, final Function<PhantomProcessRecord, Boolean> callback) { synchronized (mLock) { int index = mAppPhantomProcessMap.indexOfKey(app.getPid()); if (index >= 0) { final SparseArray<PhantomProcessRecord> array = mAppPhantomProcessMap.valueAt(index); final SparseArray<PhantomProcessRecord> array = getPhantomProcessOfAppLocked(app); if (array == null) { return; } for (int i = array.size() - 1; i >= 0; i--) { final PhantomProcessRecord r = array.valueAt(i); if (!callback.apply(r)) { Loading @@ -533,6 +542,21 @@ public final class PhantomProcessList { } } } /** * Set process group of phantom process belonging to the given app. */ void setProcessGroupForPhantomProcessOfApp(final ProcessRecord app, final int group) { synchronized (mLock) { final SparseArray<PhantomProcessRecord> array = getPhantomProcessOfAppLocked(app); if (array == null) { return; } for (int i = array.size() - 1; i >= 0; i--) { final PhantomProcessRecord r = array.valueAt(i); mService.mOomAdjuster.setProcessGroup(r.mPid, group, r.mProcessName); } } } @GuardedBy("tracker") Loading services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +2 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,8 @@ public class MockingOomAdjusterTests { mock(BatteryStatsService.class)); setFieldValue(ActivityManagerService.class, mService, "mInjector", new ActivityManagerService.Injector(mContext)); setFieldValue(ActivityManagerService.class, mService, "mPhantomProcessList", new PhantomProcessList(mService)); doReturn(mock(AppOpsManager.class)).when(mService).getAppOpsManager(); doCallRealMethod().when(mService).enqueueOomAdjTargetLocked(any(ProcessRecord.class)); doCallRealMethod().when(mService).updateOomAdjPendingTargetsLocked(OOM_ADJ_REASON_ACTIVITY); Loading Loading
services/core/java/com/android/server/am/OomAdjuster.java +8 −4 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ import static android.os.Process.THREAD_GROUP_RESTRICTED; import static android.os.Process.THREAD_GROUP_TOP_APP; import static android.os.Process.THREAD_PRIORITY_DISPLAY; import static android.os.Process.THREAD_PRIORITY_TOP_APP_BOOST; import static android.os.Process.setProcessGroup; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP; Loading Loading @@ -526,7 +525,7 @@ public class OomAdjuster { + msg.obj + " to " + group); } try { setProcessGroup(pid, group); android.os.Process.setProcessGroup(pid, group); } catch (Exception e) { if (DEBUG_ALL) { Slog.w(TAG, "Failed setting process group of " + pid + " to " + group, e); Loading @@ -544,6 +543,11 @@ public class OomAdjuster { / CACHED_APP_IMPORTANCE_LEVELS; } void setProcessGroup(int pid, int group, String processName) { mProcessGroupHandler.sendMessage(mProcessGroupHandler.obtainMessage( 0 /* unused */, pid, group, processName)); } void initSettings() { mCachedAppOptimizer.init(); mCacheOomRanker.init(ActivityThread.currentApplication().getMainExecutor()); Loading Loading @@ -3491,8 +3495,8 @@ public class OomAdjuster { processGroup = THREAD_GROUP_DEFAULT; break; } mProcessGroupHandler.sendMessage(mProcessGroupHandler.obtainMessage( 0 /* unused */, app.getPid(), processGroup, app.processName)); setProcessGroup(app.getPid(), processGroup, app.processName); mService.mPhantomProcessList.setProcessGroupForPhantomProcessOfApp(app, processGroup); try { final int renderThreadTid = app.getRenderThreadTid(); if (curSchedGroup == SCHED_GROUP_TOP_APP) { Loading
services/core/java/com/android/server/am/PhantomProcessList.java +33 −9 Original line number Diff line number Diff line Loading @@ -514,6 +514,15 @@ public final class PhantomProcessList { app.killLocked("Caused by child process: " + msg, reasonCode, subReason, true); } @GuardedBy("mLock") private SparseArray<PhantomProcessRecord> getPhantomProcessOfAppLocked(ProcessRecord app) { int index = mAppPhantomProcessMap.indexOfKey(app.getPid()); if (index >= 0) { return mAppPhantomProcessMap.valueAt(index); } return null; } /** * Iterate all phantom process belonging to the given app, and invokve callback * for each of them. Loading @@ -521,10 +530,10 @@ public final class PhantomProcessList { void forEachPhantomProcessOfApp(final ProcessRecord app, final Function<PhantomProcessRecord, Boolean> callback) { synchronized (mLock) { int index = mAppPhantomProcessMap.indexOfKey(app.getPid()); if (index >= 0) { final SparseArray<PhantomProcessRecord> array = mAppPhantomProcessMap.valueAt(index); final SparseArray<PhantomProcessRecord> array = getPhantomProcessOfAppLocked(app); if (array == null) { return; } for (int i = array.size() - 1; i >= 0; i--) { final PhantomProcessRecord r = array.valueAt(i); if (!callback.apply(r)) { Loading @@ -533,6 +542,21 @@ public final class PhantomProcessList { } } } /** * Set process group of phantom process belonging to the given app. */ void setProcessGroupForPhantomProcessOfApp(final ProcessRecord app, final int group) { synchronized (mLock) { final SparseArray<PhantomProcessRecord> array = getPhantomProcessOfAppLocked(app); if (array == null) { return; } for (int i = array.size() - 1; i >= 0; i--) { final PhantomProcessRecord r = array.valueAt(i); mService.mOomAdjuster.setProcessGroup(r.mPid, group, r.mProcessName); } } } @GuardedBy("tracker") Loading
services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +2 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,8 @@ public class MockingOomAdjusterTests { mock(BatteryStatsService.class)); setFieldValue(ActivityManagerService.class, mService, "mInjector", new ActivityManagerService.Injector(mContext)); setFieldValue(ActivityManagerService.class, mService, "mPhantomProcessList", new PhantomProcessList(mService)); doReturn(mock(AppOpsManager.class)).when(mService).getAppOpsManager(); doCallRealMethod().when(mService).enqueueOomAdjTargetLocked(any(ProcessRecord.class)); doCallRealMethod().when(mService).updateOomAdjPendingTargetsLocked(OOM_ADJ_REASON_ACTIVITY); Loading