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

Commit b2379a9c authored by Chih-Yu Huang's avatar Chih-Yu Huang
Browse files

psc: Add ProcessReceiverRecordInternal

This change extracts the  broadcast receiver state management from
ProcessReceiverRecord into a new internal base class,
ProcessReceiverRecordInternal.

Bug: 425766486
Test: m services.core
Test: atest MockingOomAdjusterTests OomAdjusterTests
Test: atest FrameworksServicesTestsRavenwood_ProcessStateController
Flag: EXEMPT pure refactor
Change-Id: I39bdb4945ff3721e4cea4fc7edfe57c270af5c90
parent 3d5007a0
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1855,9 +1855,9 @@ public abstract class OomAdjuster {
        }
    }

    protected boolean isReceivingBroadcast(ProcessRecord app) {
    protected boolean isReceivingBroadcast(ProcessRecordInternal app) {
        if (Flags.pushBroadcastStateToOomadjuster()) {
            return app.mReceivers.isReceivingBroadcast();
            return app.getReceivers().isReceivingBroadcast();
        } else {
            return app.getCachedIsReceivingBroadcast(mTmpSchedGroup);
        }
@@ -2065,7 +2065,7 @@ public abstract class OomAdjuster {
        if (app.mServices.hasForegroundServices()) {
            return CPU_TIME_REASON_OTHER;
        }
        if (app.mReceivers.isReceivingBroadcast()) {
        if (app.getReceivers().isReceivingBroadcast()) {
            return CPU_TIME_REASON_OTHER;
        }
        if (app.hasActiveInstrumentation()) {
@@ -2246,7 +2246,7 @@ public abstract class OomAdjuster {
        }

        final int curSchedGroup = state.getCurrentSchedulingGroup();
        if (app.getWaitingToKill() != null && !app.mReceivers.isReceivingBroadcast()
        if (app.getWaitingToKill() != null && !app.getReceivers().isReceivingBroadcast()
                && ActivityManager.isProcStateBackground(state.getCurProcState())
                && !state.getHasStartedServices()) {
            app.killLocked(app.getWaitingToKill(), ApplicationExitInfo.REASON_USER_REQUESTED,
+1 −1
Original line number Diff line number Diff line
@@ -1326,7 +1326,7 @@ public class OomAdjusterImpl extends OomAdjuster {
            // broadcast as reflected by which queue it's active in.
            adj = FOREGROUND_APP_ADJ;
            if (Flags.pushBroadcastStateToOomadjuster()) {
                schedGroup = app.mReceivers.getBroadcastReceiverSchedGroup();
                schedGroup = app.getReceivers().getBroadcastReceiverSchedGroup();
            } else {
                /// Priority was stored in mTmpSchedGroup by {@link #isReceivingBroadcast)
                schedGroup = mTmpSchedGroup[0];
+1 −1
Original line number Diff line number Diff line
@@ -302,7 +302,7 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
    static final int PAGE_SIZE = (int) Os.sysconf(OsConstants._SC_PAGESIZE);

    // Activity manager's version of an undefined schedule group
    static final int SCHED_GROUP_UNDEFINED = Integer.MIN_VALUE;
    public static final int SCHED_GROUP_UNDEFINED = Integer.MIN_VALUE;
    // Activity manager's version of Process.THREAD_GROUP_BACKGROUND
    public static final int SCHED_GROUP_BACKGROUND = 0;
      // Activity manager's version of Process.THREAD_GROUP_RESTRICTED
+8 −33
Original line number Diff line number Diff line
@@ -19,47 +19,21 @@ package com.android.server.am;
import android.util.ArraySet;

import com.android.internal.annotations.GuardedBy;
import com.android.server.am.psc.ProcessReceiverRecordInternal;

import java.io.PrintWriter;

/**
 * The state info of all broadcast receivers in the process.
 */
final class ProcessReceiverRecord {
    final ProcessRecord mApp;
final class ProcessReceiverRecord extends ProcessReceiverRecordInternal {
    private final ActivityManagerService mService;

    @GuardedBy("mService")
    private boolean mIsReceivingBroadcast;

    @GuardedBy("mService")
    private int mBroadcastReceiverSchedGroup = ProcessList.SCHED_GROUP_UNDEFINED;

    /**
     * All IIntentReceivers that are registered from this process.
     */
    private final ArraySet<ReceiverList> mReceivers = new ArraySet<>();

    @GuardedBy("mService")
    boolean isReceivingBroadcast() {
        return mIsReceivingBroadcast;
    }

    @GuardedBy("mService")
    void setIsReceivingBroadcast(boolean receivingBroadcast) {
        mIsReceivingBroadcast = receivingBroadcast;
    }

    @GuardedBy("mService")
    public void setBroadcastReceiverSchedGroup(int priority) {
        mBroadcastReceiverSchedGroup = priority;
    }

    @GuardedBy("mService")
    public int getBroadcastReceiverSchedGroup() {
        return mBroadcastReceiverSchedGroup;
    }

    int numberOfReceivers() {
        return mReceivers.size();
    }
@@ -72,9 +46,10 @@ final class ProcessReceiverRecord {
        mReceivers.remove(receiver);
    }

    ProcessReceiverRecord(ProcessRecord app) {
        mApp = app;
        mService = app.mService;
    ProcessReceiverRecord(ActivityManagerService service) {
        super(service);

        mService = service;
    }

    @GuardedBy("mService")
@@ -89,11 +64,11 @@ final class ProcessReceiverRecord {
    void dump(PrintWriter pw, String prefix, long nowUptime) {
        pw.print(prefix);
        pw.print("mIsReceivingBroadcast=");
        pw.println(mIsReceivingBroadcast);
        pw.println(isReceivingBroadcast());

        pw.print(prefix);
        pw.print("mBroadcastReceiverSchedGroup=");
        pw.println(mBroadcastReceiverSchedGroup);
        pw.println(getBroadcastReceiverSchedGroup());
        if (mReceivers.size() > 0) {
            pw.print(prefix); pw.println("mReceivers:");
            for (int i = 0, size = mReceivers.size(); i < size; i++) {
+6 −1
Original line number Diff line number Diff line
@@ -608,7 +608,7 @@ class ProcessRecord extends ProcessRecordInternal implements WindowProcessListen
        mProfile = new ProcessProfileRecord(this);
        mServices = new ProcessServiceRecord(this);
        mProviders = new ProcessProviderRecord(this);
        mReceivers = new ProcessReceiverRecord(this);
        mReceivers = new ProcessReceiverRecord(mService);
        mErrorState = new ProcessErrorStateRecord(this);
        mWindowProcessController = new WindowProcessController(
                mService.mActivityTaskManager, info, processName, uid, userId, this, this);
@@ -1176,6 +1176,11 @@ class ProcessRecord extends ProcessRecordInternal implements WindowProcessListen
        return mProviders;
    }

    @Override
    public ProcessReceiverRecord getReceivers() {
        return mReceivers;
    }

    @Override
    public boolean shouldNotFreeze() {
        return mOptRecord.shouldNotFreeze();
Loading