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

Commit a5247158 authored by Wei Wang's avatar Wei Wang Committed by Gerrit Code Review
Browse files

Merge "libprocessgroup: fall back to cpuset in get_sched_policy"

parents f3b02fc2 77ad7c79
Loading
Loading
Loading
Loading
+30 −21
Original line number Original line Diff line number Diff line
@@ -165,6 +165,26 @@ static int getCGroupSubsys(int tid, const char* subsys, std::string& subgroup) {
    return 0;
    return 0;
}
}


static int get_sched_policy_from_group(const std::string& group, SchedPolicy* policy) {
    if (group.empty()) {
        *policy = SP_FOREGROUND;
    } else if (group == "foreground") {
        *policy = SP_FOREGROUND;
    } else if (group == "system-background") {
        *policy = SP_SYSTEM;
    } else if (group == "background") {
        *policy = SP_BACKGROUND;
    } else if (group == "top-app") {
        *policy = SP_TOP_APP;
    } else if (group == "restricted") {
        *policy = SP_RESTRICTED;
    } else {
        errno = ERANGE;
        return -1;
    }
    return 0;
}

int get_sched_policy(int tid, SchedPolicy* policy) {
int get_sched_policy(int tid, SchedPolicy* policy) {
    if (tid == 0) {
    if (tid == 0) {
        tid = GetThreadId();
        tid = GetThreadId();
@@ -177,32 +197,21 @@ int get_sched_policy(int tid, SchedPolicy* policy) {
            LOG(ERROR) << "Failed to find cpu cgroup for tid " << tid;
            LOG(ERROR) << "Failed to find cpu cgroup for tid " << tid;
            return -1;
            return -1;
        }
        }
        // Wipe invalid group to fallback to cpuset
        if (!group.empty()) {
            if (get_sched_policy_from_group(group, policy) < 0) {
                group.clear();
            } else {
                return 0;
            }
            }
    if (group.empty() && cpusets_enabled()) {
        if (getCGroupSubsys(tid, "cpuset", group) < 0) {
            LOG(ERROR) << "Failed to find cpuset cgroup for tid " << tid;
            return -1;
        }
        }
    }
    }


    // TODO: replace hardcoded directories
    if (cpusets_enabled() && getCGroupSubsys(tid, "cpuset", group) < 0) {
    if (group.empty()) {
        LOG(ERROR) << "Failed to find cpuset cgroup for tid " << tid;
        *policy = SP_FOREGROUND;
    } else if (group == "foreground") {
        *policy = SP_FOREGROUND;
    } else if (group == "system-background") {
        *policy = SP_SYSTEM;
    } else if (group == "background") {
        *policy = SP_BACKGROUND;
    } else if (group == "top-app") {
        *policy = SP_TOP_APP;
    } else if (group == "restricted") {
        *policy = SP_RESTRICTED;
    } else {
        errno = ERANGE;
        return -1;
        return -1;
    }
    }
    return 0;
    return get_sched_policy_from_group(group, policy);
}
}


#else
#else