diff options
| author | 2021-01-28 21:30:15 +0000 | |
|---|---|---|
| committer | 2021-01-28 21:30:15 +0000 | |
| commit | 4e4056702c94e4f5285f7d5a08a45276e74d8e00 (patch) | |
| tree | 9adf4fa28dedf0a11b6ad5945dc65a06fbd863e5 | |
| parent | a8053430aee9df77516ffa09b6f9c21640c39461 (diff) | |
| parent | bc7b6df7dc363404df21b062a016aa19923b24de (diff) | |
Merge "Adapt the cgroup v2 in PhantomProcessList" into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/am/PhantomProcessList.java | 27 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/am/AppChildProcessTest.java | 2 |
2 files changed, 26 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/PhantomProcessList.java b/services/core/java/com/android/server/am/PhantomProcessList.java index 5167c5719955..37b17411dac5 100644 --- a/services/core/java/com/android/server/am/PhantomProcessList.java +++ b/services/core/java/com/android/server/am/PhantomProcessList.java @@ -38,6 +38,7 @@ import com.android.internal.os.ProcessCpuTracker; import libcore.io.IoUtils; +import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -109,10 +110,23 @@ public final class PhantomProcessList { private final ActivityManagerService mService; private final Handler mKillHandler; + private static final int CGROUP_V1 = 0; + private static final int CGROUP_V2 = 1; + private static final String[] CGROUP_PATH_PREFIXES = { + "/acct/uid_" /* cgroup v1 */, + "/sys/fs/cgroup/uid_" /* cgroup v2 */ + }; + private static final String CGROUP_PID_PREFIX = "/pid_"; + private static final String CGROUP_PROCS = "/cgroup.procs"; + + @VisibleForTesting + int mCgroupVersion = CGROUP_V1; + PhantomProcessList(final ActivityManagerService service) { mService = service; mKillHandler = service.mProcessList.sKillHandler; mInjector = new Injector(); + probeCgroupVersion(); } @VisibleForTesting @@ -190,9 +204,18 @@ public final class PhantomProcessList { } } + private void probeCgroupVersion() { + for (int i = CGROUP_PATH_PREFIXES.length - 1; i >= 0; i--) { + if ((new File(CGROUP_PATH_PREFIXES[i] + Process.SYSTEM_UID)).exists()) { + mCgroupVersion = i; + break; + } + } + } + @VisibleForTesting - static String getCgroupFilePath(int uid, int pid) { - return "/acct/uid_" + uid + "/pid_" + pid + "/cgroup.procs"; + String getCgroupFilePath(int uid, int pid) { + return CGROUP_PATH_PREFIXES[mCgroupVersion] + uid + CGROUP_PID_PREFIX + pid + CGROUP_PROCS; } static String getProcessName(int pid) { diff --git a/services/tests/mockingservicestests/src/com/android/server/am/AppChildProcessTest.java b/services/tests/mockingservicestests/src/com/android/server/am/AppChildProcessTest.java index b85da9460476..17f326fbdbce 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/AppChildProcessTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/AppChildProcessTest.java @@ -298,7 +298,7 @@ public class AppChildProcessTest { } void addToProcess(int uid, int pid, int newPid) { - final String path = PhantomProcessList.getCgroupFilePath(uid, pid); + final String path = mPhantomProcessList.getCgroupFilePath(uid, pid); StringBuffer sb = mPathToData.get(path); if (sb == null) { sb = new StringBuffer(); |