Adapt the cgroup v2 in PhantomProcessList

Bug: 178675122
Test: atest AppChildProcessTest
Test: atest CtsAppTestCases:ActivityManagerTest
Change-Id: Ifad53ae06bc77da97ffae580d0078a006b4159b7
This commit is contained in:
Jing Ji
2021-01-28 00:42:19 -08:00
parent 9b9486ebf2
commit bc7b6df7dc
2 changed files with 26 additions and 3 deletions

View File

@@ -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) {

View File

@@ -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();