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

Commit ba66019b authored by Amith Yamasani's avatar Amith Yamasani Committed by Android (Google) Code Review
Browse files

Merge "Add a rate limiter to the getRunningAppProcesses() call" into main

parents 53391a0f 46b42e3b
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ import com.android.internal.os.TransferPipe;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.MemInfoReader;
import com.android.internal.util.Preconditions;
import com.android.internal.util.RateLimitingCache;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
import com.android.server.LocalServices;
@@ -228,6 +229,10 @@ public class ActivityManager {

    final ArrayMap<OnUidImportanceListener, MyUidObserver> mImportanceListeners = new ArrayMap<>();

    /** Rate-Limiting Cache that allows no more than 400 calls to the service per second. */
    private static final RateLimitingCache<List<RunningAppProcessInfo>> mRunningProcessesCache =
            new RateLimitingCache<>(10, 4);

    /**
     * Map of callbacks that have registered for {@link UidFrozenStateChanged} events.
     * Will be called when a Uid has become frozen or unfrozen.
@@ -4213,6 +4218,16 @@ public class ActivityManager {
     * specified.
     */
    public List<RunningAppProcessInfo> getRunningAppProcesses() {
        if (!Flags.rateLimitGetRunningAppProcesses()) {
            return getRunningAppProcessesInternal();
        } else {
            return mRunningProcessesCache.get(() -> {
                return getRunningAppProcessesInternal();
            });
        }
    }

    private List<RunningAppProcessInfo> getRunningAppProcessesInternal() {
        try {
            return getService().getRunningAppProcesses();
        } catch (RemoteException e) {
+12 −0
Original line number Diff line number Diff line
@@ -81,3 +81,15 @@ flag {
         purpose: PURPOSE_BUGFIX
     }
}

flag {
     namespace: "backstage_power"
     name: "rate_limit_get_running_app_processes"
     description: "Rate limit calls to getRunningAppProcesses using a cache"
     is_fixed_read_only: true
     bug: "360374604"
     metadata {
         purpose: PURPOSE_BUGFIX
     }
}