From 16bae885e8ae3ce82fef70e4a72bc543377505ac Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 24 Jan 2023 12:16:20 -0800 Subject: [PATCH] Allow tests to query processes frozen state. Bug: 265999823 Test: atest tests/app/BroadcastsTest/src/android/app/cts/broadcasts/BroadcastDeferralTest.java Change-Id: I7809d7dedd1a763e5dea12ec3e0f1750e92e3039 --- core/java/android/app/ActivityManager.java | 14 ++++++++++++++ core/java/android/app/IActivityManager.aidl | 4 ++++ .../android/server/am/ActivityManagerService.java | 6 ++++++ .../android/server/am/BroadcastProcessQueue.java | 1 + .../com/android/server/am/CachedAppOptimizer.java | 6 ++++++ 5 files changed, 31 insertions(+) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index b6264939c91cf..4430ec0918456 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -5345,6 +5345,20 @@ public class ActivityManager { } } + /** + * Checks if the process represented by the given {@code pid} is frozen. + * + * @hide + */ + @RequiresPermission(android.Manifest.permission.DUMP) + public boolean isProcessFrozen(int pid) { + try { + return getService().isProcessFrozen(pid); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * @return The reason code of whether or not the given UID should be exempted from background * restrictions here. diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 0866d945b1bd5..9dc8ce6ad9c8d 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -779,6 +779,10 @@ interface IActivityManager { @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.DUMP)") boolean isModernBroadcastQueueEnabled(); + /** Checks if the process represented by the given pid is frozen. */ + @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.DUMP)") + boolean isProcessFrozen(int pid); + /** * @return The reason code of whether or not the given UID should be exempted from background * restrictions here. diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 09c4eb2b42bdf..1794a4936e5cf 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -18538,6 +18538,12 @@ public class ActivityManagerService extends IActivityManager.Stub return mEnableModernQueue; } + @Override + public boolean isProcessFrozen(int pid) { + enforceCallingPermission(permission.DUMP, "isProcessFrozen()"); + return mOomAdjuster.mCachedAppOptimizer.isProcessFrozen(pid); + } + @Override @ReasonCode public int getBackgroundRestrictionExemptionReason(int uid) { diff --git a/services/core/java/com/android/server/am/BroadcastProcessQueue.java b/services/core/java/com/android/server/am/BroadcastProcessQueue.java index d7cca60b6df43..a440f18b43f9a 100644 --- a/services/core/java/com/android/server/am/BroadcastProcessQueue.java +++ b/services/core/java/com/android/server/am/BroadcastProcessQueue.java @@ -1113,6 +1113,7 @@ class BroadcastProcessQueue { pw.print(" because "); pw.print(reasonToString(mRunnableAtReason)); pw.println(); + pw.print("mProcessCached="); pw.println(mProcessCached); pw.increaseIndent(); if (mActive != null) { dumpRecord("ACTIVE", now, pw, mActive, mActiveIndex); diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index f54e2b06cc9aa..c50cde48c51d8 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -1509,6 +1509,12 @@ public final class CachedAppOptimizer { return profile; } + boolean isProcessFrozen(int pid) { + synchronized (mProcLock) { + return mFrozenProcesses.contains(pid); + } + } + @VisibleForTesting static final class SingleCompactionStats { private static final float STATSD_SAMPLE_RATE = 0.1f;