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

Commit b2f929d7 authored by Tim Murray's avatar Tim Murray
Browse files

bind android.bg in system_server to small cores

android.bg in system_server primarily handles PSS collection, which is
not performance critical. Accordingly, bind it to little cores.

However, because threads in zygote-derived applications are only in a
single cpuset at a time, this also means the scheduling policy for
system_servershould never be reset by applyOomAdjLocked(). The only
time this happens is when system_server's ProcessRecord is first
created, and its scheduler configuration is already controlled by
init.rc. Configure the right defaults for system_server's scheduling
group so it's never modified from applyOomAdjLocked().

Test: android.bg is in background, rest of system_server is in fg
bug 70859548

Change-Id: Id8582e6d493c6b2d3390fdc45ac2396390744f06
parent d46652a2
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -3005,6 +3005,16 @@ public class ActivityManagerService extends IActivityManager.Stub
        Watchdog.getInstance().addMonitor(this);
        Watchdog.getInstance().addThread(mHandler);
        // bind background thread to little cores
        // this is expected to fail inside of framework tests because apps can't touch cpusets directly
        try {
            Process.setThreadGroupAndCpuset(BackgroundThread.get().getThreadId(),
                    Process.THREAD_GROUP_BG_NONINTERACTIVE);
        } catch (Exception e) {
            Slog.w(TAG, "Setting background thread cpuset failed");
        }
    }
    protected ActivityStackSupervisor createStackSupervisor() {
@@ -12648,6 +12658,9 @@ public class ActivityManagerService extends IActivityManager.Stub
        if (!mBooted && !mBooting
                && userId == UserHandle.USER_SYSTEM
                && (info.flags & PERSISTENT_MASK) == PERSISTENT_MASK) {
            // The system process is initialized to SCHED_GROUP_DEFAULT in init.rc.
            r.curSchedGroup = ProcessList.SCHED_GROUP_DEFAULT;
            r.setSchedGroup = ProcessList.SCHED_GROUP_DEFAULT;
            r.persistent = true;
            r.maxAdj = ProcessList.PERSISTENT_PROC_ADJ;
        }