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

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

psc: Add ProcessProviderRecordInternal

This change introduces ProcessProviderRecordInternal to serve
as an internal abstraction for OomAdjuster's access to content
provider data.

Now some of OomAdjusterImpl's methods use ProcessProviderRecordInternal,
decoupling from the concrete ProcessProviderRecord implementation.

Bug: 425766486
Test: m services.core
Test: atest MockingOomAdjusterTests OomAdjusterTests
Test: atest FrameworksServicesTestsRavenwood_ProcessStateController
Flag: EXEMPT pure refactor

Change-Id: I313288c0b4a4fe2722ecb530a1317011eaa32dba
parent 62d97ff3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -801,7 +801,7 @@ public abstract class OomAdjuster {
                queue.offer(service);
                service.setReachable(true);
            }
            final ProcessProviderRecord ppr = pr.mProviders;
            final ProcessProviderRecord ppr = pr.getProviders();
            for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) {
                ContentProviderConnection cpc = ppr.getProviderConnectionAt(i);
                ProcessRecord provider = cpc.provider.getHostProcess();
+4 −3
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ import com.android.server.am.psc.ActiveUidsInternal;
import com.android.server.am.psc.ConnectionRecordInternal;
import com.android.server.am.psc.ContentProviderConnectionInternal;
import com.android.server.am.psc.ContentProviderRecordInternal;
import com.android.server.am.psc.ProcessProviderRecordInternal;
import com.android.server.am.psc.ProcessRecordInternal;
import com.android.server.am.psc.ProcessServiceRecordInternal;
import com.android.server.am.psc.ServiceRecordInternal;
@@ -1036,7 +1037,7 @@ public class OomAdjusterImpl extends OomAdjuster {
            connectionConsumer.accept(cr, service);
        }

        final ProcessProviderRecord ppr = app.mProviders;
        final ProcessProviderRecord ppr = app.getProviders();
        for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) {
            ContentProviderConnection cpc = ppr.getProviderConnectionAt(i);
            ProcessRecord provider = cpc.provider.getHostProcess();
@@ -1109,7 +1110,7 @@ public class OomAdjusterImpl extends OomAdjuster {
            }
        }

        final ProcessProviderRecord ppr = app.mProviders;
        final ProcessProviderRecord ppr = app.getProviders();
        for (int i = ppr.numberOfProviders() - 1; i >= 0; i--) {
            final ContentProviderRecord cpr = ppr.getProviderAt(i);
            for (int j = cpr.numberOfConnections() - 1; j >= 0; j--) {
@@ -1697,7 +1698,7 @@ public class OomAdjusterImpl extends OomAdjuster {
            }
        }

        final ProcessProviderRecord ppr = app.mProviders;
        final ProcessProviderRecordInternal ppr = app.getProviders();
        for (int provi = ppr.numberOfProviders() - 1;
                provi >= 0 && (adj > FOREGROUND_APP_ADJ
                        || schedGroup == SCHED_GROUP_BACKGROUND
+1 −1
Original line number Diff line number Diff line
@@ -4164,7 +4164,7 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
                }
            }
        }
        final ProcessProviderRecord ppr = app.mProviders;
        final ProcessProviderRecord ppr = app.getProviders();
        for (int j = ppr.numberOfProviderConnections() - 1; j >= 0; j--) {
            ContentProviderRecord cpr = ppr.getProviderConnectionAt(j).provider;
            if (cpr.proc != null && cpr.proc.getLruSeq() != mLruSeq
+12 −20
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.util.ArrayMap;
import android.util.TimeUtils;

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

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -27,15 +28,10 @@ import java.util.ArrayList;
/**
 * The state info of all content providers in the process.
 */
final class ProcessProviderRecord {
final class ProcessProviderRecord extends ProcessProviderRecordInternal {
    final ProcessRecord mApp;
    private final ActivityManagerService mService;

    /**
     * The last time someone else was using a provider in this process.
     */
    private long mLastProviderTime = Long.MIN_VALUE;

    /**
     * class (String) -> ContentProviderRecord.
     */
@@ -46,14 +42,6 @@ final class ProcessProviderRecord {
     */
    private final ArrayList<ContentProviderConnection> mConProviders = new ArrayList<>();

    long getLastProviderTime() {
        return mLastProviderTime;
    }

    void setLastProviderTime(long lastProviderTime) {
        mLastProviderTime = lastProviderTime;
    }

    boolean hasProvider(String name) {
        return mPubProviders.containsKey(name);
    }
@@ -62,11 +50,13 @@ final class ProcessProviderRecord {
        return mPubProviders.get(name);
    }

    int numberOfProviders() {
    @Override
    public int numberOfProviders() {
        return mPubProviders.size();
    }

    ContentProviderRecord getProviderAt(int index) {
    @Override
    public ContentProviderRecord getProviderAt(int index) {
        return mPubProviders.valueAt(index);
    }

@@ -82,11 +72,13 @@ final class ProcessProviderRecord {
        mPubProviders.ensureCapacity(capacity);
    }

    int numberOfProviderConnections() {
    @Override
    public int numberOfProviderConnections() {
        return mConProviders.size();
    }

    ContentProviderConnection getProviderConnectionAt(int index) {
    @Override
    public ContentProviderConnection getProviderConnectionAt(int index) {
        return mConProviders.get(index);
    }

@@ -152,9 +144,9 @@ final class ProcessProviderRecord {
    }

    void dump(PrintWriter pw, String prefix, long nowUptime) {
        if (mLastProviderTime > 0) {
        if (getLastProviderTime() > 0) {
            pw.print(prefix); pw.print("lastProviderTime=");
            TimeUtils.formatDuration(mLastProviderTime, nowUptime, pw);
            TimeUtils.formatDuration(getLastProviderTime(), nowUptime, pw);
            pw.println();
        }
        if (mPubProviders.size() > 0) {
+5 −0
Original line number Diff line number Diff line
@@ -1179,6 +1179,11 @@ class ProcessRecord extends ProcessRecordInternal implements WindowProcessListen
        mServices.setTreatLikeActivity(treatLikeActivity);
    }

    @Override
    public ProcessProviderRecord getProviders() {
        return mProviders;
    }

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