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

Commit a588f886 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "Fix race condition in process observer" into main am: 05c5ecbe am: 40276f26

parents 6a82727a 40276f26
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -15304,10 +15304,8 @@ public class ActivityManagerService extends IActivityManager.Stub
            }
            psr.setReportedForegroundServiceTypes(fgServiceTypes);
            ProcessChangeItem item = mProcessList.enqueueProcessChangeItemLocked(
                    proc.getPid(), proc.info.uid);
            item.changes |= ProcessChangeItem.CHANGE_FOREGROUND_SERVICES;
            item.foregroundServiceTypes = fgServiceTypes;
            mProcessList.enqueueProcessChangeItemLocked(proc.getPid(), proc.info.uid,
                    ProcessChangeItem.CHANGE_FOREGROUND_SERVICES, fgServiceTypes);
        }
        if (oomAdj) {
            updateOomAdjLocked(proc, OOM_ADJ_REASON_UI_VISIBILITY);
+5 −7
Original line number Diff line number Diff line
@@ -3617,14 +3617,12 @@ public class OomAdjuster {
        if (changes != 0) {
            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG_PROCESS_OBSERVERS,
                    "Changes in " + app + ": " + changes);
            ActivityManagerService.ProcessChangeItem item =
                    mProcessList.enqueueProcessChangeItemLocked(app.getPid(), app.info.uid);
            item.changes |= changes;
            item.foregroundActivities = state.hasRepForegroundActivities();
            mProcessList.enqueueProcessChangeItemLocked(app.getPid(), app.info.uid,
                    changes, state.hasRepForegroundActivities());
            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG_PROCESS_OBSERVERS,
                    "Item " + Integer.toHexString(System.identityHashCode(item))
                            + " " + app.toShortString() + ": changes=" + item.changes
                            + " foreground=" + item.foregroundActivities
                    "Enqueued process change item for "
                            + app.toShortString() + ": changes=" + changes
                            + " foreground=" + state.hasRepForegroundActivities()
                            + " type=" + state.getAdjType() + " source=" + state.getAdjSource()
                            + " target=" + state.getAdjTarget());
        }
+53 −36
Original line number Diff line number Diff line
@@ -4998,8 +4998,26 @@ public final class ProcessList {
    }

    @GuardedBy("mService")
    ProcessChangeItem enqueueProcessChangeItemLocked(int pid, int uid) {
    void enqueueProcessChangeItemLocked(int pid, int uid, int changes, int foregroundServicetypes) {
        synchronized (mProcessChangeLock) {
            final ProcessChangeItem item = enqueueProcessChangeItemLocked(pid, uid);
            item.changes |= changes;
            item.foregroundServiceTypes = foregroundServicetypes;
        }
    }

    @GuardedBy("mService")
    void enqueueProcessChangeItemLocked(int pid, int uid, int changes,
            boolean hasForegroundActivities) {
        synchronized (mProcessChangeLock) {
            final ProcessChangeItem item = enqueueProcessChangeItemLocked(pid, uid);
            item.changes |= changes;
            item.foregroundActivities = hasForegroundActivities;
        }
    }

    @GuardedBy({"mService", "mProcessChangeLock"})
    private ProcessChangeItem enqueueProcessChangeItemLocked(int pid, int uid) {
        int i = mPendingProcessChanges.size() - 1;
        ActivityManagerService.ProcessChangeItem item = null;
        while (i >= 0) {
@@ -5042,7 +5060,6 @@ public final class ProcessList {

        return item;
    }
    }

    @GuardedBy("mService")
    void scheduleDispatchProcessDiedLocked(int pid, int uid) {
+4 −2
Original line number Diff line number Diff line
@@ -229,8 +229,10 @@ public class MockingOomAdjusterTests {
        doCallRealMethod().when(mService).enqueueOomAdjTargetLocked(any(ProcessRecord.class));
        doCallRealMethod().when(mService).updateOomAdjPendingTargetsLocked(OOM_ADJ_REASON_ACTIVITY);
        setFieldValue(AppProfiler.class, profiler, "mProfilerLock", new Object());
        doReturn(new ActivityManagerService.ProcessChangeItem()).when(pr)
                .enqueueProcessChangeItemLocked(anyInt(), anyInt());
        doNothing().when(pr).enqueueProcessChangeItemLocked(anyInt(), anyInt(), anyInt(),
                anyInt());
        doNothing().when(pr).enqueueProcessChangeItemLocked(anyInt(), anyInt(), anyInt(),
                anyBoolean());
        mService.mOomAdjuster = mService.mConstants.ENABLE_NEW_OOMADJ
                ? new OomAdjusterModernImpl(mService, mService.mProcessList,
                        new ActiveUids(mService, false), mInjector)