summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ActivityManager.java15
-rw-r--r--core/java/android/app/activity_manager.aconfig12
2 files changed, 27 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index be70de20c2e2..e57630bfd5ed 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -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) {
diff --git a/core/java/android/app/activity_manager.aconfig b/core/java/android/app/activity_manager.aconfig
index fa646a76768c..d9594d3e4c31 100644
--- a/core/java/android/app/activity_manager.aconfig
+++ b/core/java/android/app/activity_manager.aconfig
@@ -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
+ }
+}
+