Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 031202bb authored by Jing Ji's avatar Jing Ji Committed by Automerger Merge Worker
Browse files

Merge "Adapt the cgroup v2 in PhantomProcessList" into sc-dev am: 4e405670

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13426025

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ib1450804a211893a63a5d2d02017078fc6c64bc9
parents 9155cfec 4e405670
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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();