Merge "Defer the Pss sampling on app processes post the boot" into main
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index a97f005..b43b986 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1532,6 +1532,11 @@
*/
int mBootPhase;
+ /**
+ * The time stamp that all apps have received BOOT_COMPLETED.
+ */
+ volatile long mBootCompletedTimestamp;
+
@GuardedBy("this")
boolean mDeterministicUidIdle = false;
@@ -5164,10 +5169,14 @@
public void performReceive(Intent intent, int resultCode,
String data, Bundle extras, boolean ordered,
boolean sticky, int sendingUser) {
- synchronized (mProcLock) {
- mAppProfiler.requestPssAllProcsLPr(
- SystemClock.uptimeMillis(), true, false);
- }
+ mBootCompletedTimestamp = SystemClock.uptimeMillis();
+ // Defer the full Pss collection as the system is really busy now.
+ mHandler.postDelayed(() -> {
+ synchronized (mProcLock) {
+ mAppProfiler.requestPssAllProcsLPr(
+ SystemClock.uptimeMillis(), true, false);
+ }
+ }, mConstants.FULL_PSS_MIN_INTERVAL);
}
});
maybeLogUserspaceRebootEvent();
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 4572766..e0e6cad 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -1439,7 +1439,7 @@
}
public static long computeNextPssTime(int procState, ProcStateMemTracker tracker, boolean test,
- boolean sleeping, long now) {
+ boolean sleeping, long now, long earliest) {
boolean first;
float scalingFactor;
final int memState = sProcStateToProcMem[procState];
@@ -1470,7 +1470,7 @@
if (delay > PSS_MAX_INTERVAL) {
delay = PSS_MAX_INTERVAL;
}
- return now + delay;
+ return Math.max(now + delay, earliest);
}
long getMemLevel(int adjustment) {
diff --git a/services/core/java/com/android/server/am/ProcessProfileRecord.java b/services/core/java/com/android/server/am/ProcessProfileRecord.java
index c1f86e0..940c58b 100644
--- a/services/core/java/com/android/server/am/ProcessProfileRecord.java
+++ b/services/core/java/com/android/server/am/ProcessProfileRecord.java
@@ -575,7 +575,11 @@
@GuardedBy("mProfilerLock")
long computeNextPssTime(int procState, boolean test, boolean sleeping, long now) {
- return ProcessList.computeNextPssTime(procState, mProcStateMemTracker, test, sleeping, now);
+ return ProcessList.computeNextPssTime(procState, mProcStateMemTracker, test, sleeping, now,
+ // Cap the Pss time to make sure no Pss is collected during the very few
+ // minutes after the system is boot, given the system is already busy.
+ Math.max(mService.mBootCompletedTimestamp, mService.mLastIdleTime)
+ + mService.mConstants.FULL_PSS_MIN_INTERVAL);
}
private static void commitNextPssTime(ProcStateMemTracker tracker) {