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

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

psc: Add ContentProviderRecordInternal

This change introduces ContentProviderRecordInternal to abstract common
content provider record functionalities. Then it updates OomAdjuster and
OomAdjusterImpl to utilize the new ContentProviderRecordInternal
interface and its methods.

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

Change-Id: Id16fd6a3eb4f088345be55de633bdeb8b5500547
parent ba444030
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROVIDER;
import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;

import android.annotation.UserIdInt;
import android.content.ComponentName;
import android.os.Binder;
import android.os.SystemClock;
import android.util.Slog;
@@ -117,8 +116,8 @@ public final class ContentProviderConnection extends Binder implements
    }

    @Override
    public ComponentName getProviderName() {
        return provider.name;
    public ContentProviderRecord getProvider() {
        return provider;
    }

    public void stopAssociation() {
+23 −4
Original line number Diff line number Diff line
@@ -37,11 +37,13 @@ import android.util.Slog;

import com.android.internal.app.procstats.AssociationState;
import com.android.internal.app.procstats.ProcessStats;
import com.android.server.am.psc.ContentProviderRecordInternal;

import java.io.PrintWriter;
import java.util.ArrayList;

final class ContentProviderRecord implements ComponentName.WithComponentName {
final class ContentProviderRecord extends ContentProviderRecordInternal
        implements ComponentName.WithComponentName {
    // Maximum attempts to bring up the content provider before giving up.
    static final int MAX_RETRY_COUNT = 3;

@@ -49,7 +51,6 @@ final class ContentProviderRecord implements ComponentName.WithComponentName {
    public final ProviderInfo info;
    final int uid;
    final ApplicationInfo appInfo;
    final ComponentName name;
    final boolean singleton;
    public IContentProvider provider;
    public boolean noReleaseNeeded;
@@ -69,22 +70,24 @@ final class ContentProviderRecord implements ComponentName.WithComponentName {

    public ContentProviderRecord(ActivityManagerService _service, ProviderInfo _info,
            ApplicationInfo ai, ComponentName _name, boolean _singleton) {
        super(_name);

        service = _service;
        info = _info;
        uid = ai.uid;
        appInfo = ai;
        name = _name;
        singleton = _singleton;
        noReleaseNeeded = (uid == 0 || uid == Process.SYSTEM_UID)
                && (_name == null || !"com.android.settings".equals(_name.getPackageName()));
    }

    public ContentProviderRecord(ContentProviderRecord cpr) {
        super(cpr.name);

        service = cpr.service;
        info = cpr.info;
        uid = cpr.uid;
        appInfo = cpr.appInfo;
        name = cpr.name;
        singleton = cpr.singleton;
        noReleaseNeeded = cpr.noReleaseNeeded;
    }
@@ -187,6 +190,7 @@ final class ContentProviderRecord implements ComponentName.WithComponentName {
        }
    }

    @Override
    public boolean hasExternalProcessHandles() {
        return (externalProcessTokenToHandle != null || externalProcessNoHandleCount > 0);
    }
@@ -239,6 +243,21 @@ final class ContentProviderRecord implements ComponentName.WithComponentName {
        }
    }

    @Override
    public ProcessRecord getHostProcess() {
        return proc;
    }

    @Override
    public int numberOfConnections() {
        return connections.size();
    }

    @Override
    public ContentProviderConnection getConnectionsAt(int index) {
        return connections.get(index);
    }

    void dump(PrintWriter pw, String prefix, boolean full) {
        if (full) {
            pw.print(prefix); pw.print("package=");
+1 −1
Original line number Diff line number Diff line
@@ -804,7 +804,7 @@ public abstract class OomAdjuster {
            final ProcessProviderRecord ppr = pr.mProviders;
            for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) {
                ContentProviderConnection cpc = ppr.getProviderConnectionAt(i);
                ProcessRecord provider = cpc.provider.proc;
                ProcessRecord provider = cpc.provider.getHostProcess();
                if (provider == null || provider == pr
                        || ((provider.getMaxAdj() >= ProcessList.SYSTEM_ADJ)
                                && (provider.getMaxAdj() < FOREGROUND_APP_ADJ))) {
+6 −5
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ import com.android.server.ServiceThread;
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.ProcessRecordInternal;
import com.android.server.am.psc.ProcessServiceRecordInternal;
import com.android.server.am.psc.ServiceRecordInternal;
@@ -1038,7 +1039,7 @@ public class OomAdjusterImpl extends OomAdjuster {
        final ProcessProviderRecord ppr = app.mProviders;
        for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) {
            ContentProviderConnection cpc = ppr.getProviderConnectionAt(i);
            ProcessRecord provider = cpc.provider.proc;
            ProcessRecord provider = cpc.provider.getHostProcess();
            if (provider == null || provider == app || isHighPriorityProcess(provider)) {
                continue;
            }
@@ -1111,8 +1112,8 @@ public class OomAdjusterImpl extends OomAdjuster {
        final ProcessProviderRecord ppr = app.mProviders;
        for (int i = ppr.numberOfProviders() - 1; i >= 0; i--) {
            final ContentProviderRecord cpr = ppr.getProviderAt(i);
            for (int j = cpr.connections.size() - 1; j >= 0; j--) {
                final ContentProviderConnection conn = cpr.connections.get(j);
            for (int j = cpr.numberOfConnections() - 1; j >= 0; j--) {
                final ContentProviderConnection conn = cpr.getConnectionsAt(j);
                connectionConsumer.accept(conn, conn.client);
            }
        }
@@ -1702,7 +1703,7 @@ public class OomAdjusterImpl extends OomAdjuster {
                        || schedGroup == SCHED_GROUP_BACKGROUND
                        || procState > PROCESS_STATE_TOP);
                provi--) {
            ContentProviderRecord cpr = ppr.getProviderAt(provi);
            ContentProviderRecordInternal cpr = ppr.getProviderAt(provi);
            // If the provider has external (non-framework) process
            // dependencies, ensure that its adjustment is at least
            // FOREGROUND_APP_ADJ.
@@ -2409,7 +2410,7 @@ public class OomAdjusterImpl extends OomAdjuster {
            app.setAdjTypeCode(ActivityManager.RunningAppProcessInfo.REASON_PROVIDER_IN_USE);
            app.setAdjSource(client);
            app.setAdjSourceProcState(clientProcState);
            app.setAdjTarget(conn.getProviderName());
            app.setAdjTarget(conn.getProvider().name);
            if (reportDebugMsgs) {
                reportOomAdjMessageLocked(TAG_OOM_ADJ, "Raise to " + adjType
                        + ": " + app + ", due to " + client
+2 −4
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.server.am.psc;

import android.content.ComponentName;

import com.android.server.am.OomAdjuster;
import com.android.server.am.OomAdjusterImpl;

@@ -29,8 +27,8 @@ public interface ContentProviderConnectionInternal extends OomAdjusterImpl.Conne
    /** Track the given proc state change. */
    void trackProcState(int procState, int seq);

    /** Returns the {@link ComponentName} of the content provider in this connection. */
    ComponentName getProviderName();
    /** Returns the content provider in this connection. */
    ContentProviderRecordInternal getProvider();

    @Override
    default void computeHostOomAdjLSP(OomAdjuster oomAdjuster, ProcessRecordInternal host,
Loading