diff options
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 15 | ||||
| -rw-r--r-- | core/java/android/app/activity_manager.aconfig | 12 | 
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 +     } +} +  |