Loading services/core/java/com/android/server/am/OomAdjuster.java +30 −24 Original line number Diff line number Diff line Loading @@ -514,16 +514,29 @@ public class OomAdjuster { mLogger = new OomAdjusterDebugLogger(this, mService.mConstants); mProcessGroupHandler = new Handler(adjusterThread.getLooper(), msg -> { final int pid = msg.arg1; final int group = msg.arg2; final int group = msg.what; final ProcessRecord app = (ProcessRecord) msg.obj; setProcessGroup(app.getPid(), group, app.processName); if (Flags.phantomProcessesFix()) { mService.mPhantomProcessList.setProcessGroupForPhantomProcessOfApp(app, group); } return true; }); mTmpUidRecords = new ActiveUids(service, false); mTmpQueue = new ArrayDeque<ProcessRecord>(mConstants.CUR_MAX_CACHED_PROCESSES << 1); mNumSlots = ((CACHED_APP_MAX_ADJ - CACHED_APP_MIN_ADJ + 1) >> 1) / CACHED_APP_IMPORTANCE_LEVELS; } void setProcessGroup(int pid, int group, String processName) { if (pid == ActivityManagerService.MY_PID) { // Skip setting the process group for system_server, keep it as default. return true; return; } final boolean traceEnabled = Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER); if (traceEnabled) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "setProcessGroup " + msg.obj + " to " + group); + processName + " to " + group); } try { android.os.Process.setProcessGroup(pid, group); Loading @@ -536,17 +549,11 @@ public class OomAdjuster { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); } } return true; }); mTmpUidRecords = new ActiveUids(service, false); mTmpQueue = new ArrayDeque<ProcessRecord>(mConstants.CUR_MAX_CACHED_PROCESSES << 1); mNumSlots = ((CACHED_APP_MAX_ADJ - CACHED_APP_MIN_ADJ + 1) >> 1) / CACHED_APP_IMPORTANCE_LEVELS; } void setProcessGroup(int pid, int group, String processName) { void setAppAndChildProcessGroup(ProcessRecord app, int group) { mProcessGroupHandler.sendMessage(mProcessGroupHandler.obtainMessage( 0 /* unused */, pid, group, processName)); group, app)); } void initSettings() { Loading Loading @@ -3503,8 +3510,7 @@ public class OomAdjuster { processGroup = THREAD_GROUP_DEFAULT; break; } setProcessGroup(app.getPid(), processGroup, app.processName); mService.mPhantomProcessList.setProcessGroupForPhantomProcessOfApp(app, processGroup); setAppAndChildProcessGroup(app, processGroup); try { final int renderThreadTid = app.getRenderThreadTid(); if (curSchedGroup == SCHED_GROUP_TOP_APP) { Loading services/core/java/com/android/server/am/PhantomProcessList.java +1 −0 Original line number Diff line number Diff line Loading @@ -548,6 +548,7 @@ public final class PhantomProcessList { */ void setProcessGroupForPhantomProcessOfApp(final ProcessRecord app, final int group) { synchronized (mLock) { lookForPhantomProcessesLocked(app); final SparseArray<PhantomProcessRecord> array = getPhantomProcessOfAppLocked(app); if (array == null) { return; Loading services/core/java/com/android/server/am/flags.aconfig +11 −1 Original line number Diff line number Diff line Loading @@ -251,3 +251,13 @@ flag { description: "Add +X to the prev scores according to their positions in the process LRU list" bug: "359912586" } flag { name: "phantom_processes_fix" namespace: "backstage_power" description: "Make sure setProcessGroupForPhantomProcessOfApp deals with phantom processes properly" bug: "375058190" metadata { purpose: PURPOSE_BUGFIX } } Loading
services/core/java/com/android/server/am/OomAdjuster.java +30 −24 Original line number Diff line number Diff line Loading @@ -514,16 +514,29 @@ public class OomAdjuster { mLogger = new OomAdjusterDebugLogger(this, mService.mConstants); mProcessGroupHandler = new Handler(adjusterThread.getLooper(), msg -> { final int pid = msg.arg1; final int group = msg.arg2; final int group = msg.what; final ProcessRecord app = (ProcessRecord) msg.obj; setProcessGroup(app.getPid(), group, app.processName); if (Flags.phantomProcessesFix()) { mService.mPhantomProcessList.setProcessGroupForPhantomProcessOfApp(app, group); } return true; }); mTmpUidRecords = new ActiveUids(service, false); mTmpQueue = new ArrayDeque<ProcessRecord>(mConstants.CUR_MAX_CACHED_PROCESSES << 1); mNumSlots = ((CACHED_APP_MAX_ADJ - CACHED_APP_MIN_ADJ + 1) >> 1) / CACHED_APP_IMPORTANCE_LEVELS; } void setProcessGroup(int pid, int group, String processName) { if (pid == ActivityManagerService.MY_PID) { // Skip setting the process group for system_server, keep it as default. return true; return; } final boolean traceEnabled = Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER); if (traceEnabled) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "setProcessGroup " + msg.obj + " to " + group); + processName + " to " + group); } try { android.os.Process.setProcessGroup(pid, group); Loading @@ -536,17 +549,11 @@ public class OomAdjuster { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); } } return true; }); mTmpUidRecords = new ActiveUids(service, false); mTmpQueue = new ArrayDeque<ProcessRecord>(mConstants.CUR_MAX_CACHED_PROCESSES << 1); mNumSlots = ((CACHED_APP_MAX_ADJ - CACHED_APP_MIN_ADJ + 1) >> 1) / CACHED_APP_IMPORTANCE_LEVELS; } void setProcessGroup(int pid, int group, String processName) { void setAppAndChildProcessGroup(ProcessRecord app, int group) { mProcessGroupHandler.sendMessage(mProcessGroupHandler.obtainMessage( 0 /* unused */, pid, group, processName)); group, app)); } void initSettings() { Loading Loading @@ -3503,8 +3510,7 @@ public class OomAdjuster { processGroup = THREAD_GROUP_DEFAULT; break; } setProcessGroup(app.getPid(), processGroup, app.processName); mService.mPhantomProcessList.setProcessGroupForPhantomProcessOfApp(app, processGroup); setAppAndChildProcessGroup(app, processGroup); try { final int renderThreadTid = app.getRenderThreadTid(); if (curSchedGroup == SCHED_GROUP_TOP_APP) { Loading
services/core/java/com/android/server/am/PhantomProcessList.java +1 −0 Original line number Diff line number Diff line Loading @@ -548,6 +548,7 @@ public final class PhantomProcessList { */ void setProcessGroupForPhantomProcessOfApp(final ProcessRecord app, final int group) { synchronized (mLock) { lookForPhantomProcessesLocked(app); final SparseArray<PhantomProcessRecord> array = getPhantomProcessOfAppLocked(app); if (array == null) { return; Loading
services/core/java/com/android/server/am/flags.aconfig +11 −1 Original line number Diff line number Diff line Loading @@ -251,3 +251,13 @@ flag { description: "Add +X to the prev scores according to their positions in the process LRU list" bug: "359912586" } flag { name: "phantom_processes_fix" namespace: "backstage_power" description: "Make sure setProcessGroupForPhantomProcessOfApp deals with phantom processes properly" bug: "375058190" metadata { purpose: PURPOSE_BUGFIX } }