Merge "[Bugfix] Don't delete mPendingUids if PendingTopPid is added later than updateOomAdj started" am: 8f321a616b am: c9c23976a9 am: a0be2d5cc5

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2036403

Change-Id: I278a9e0c7cf4f42431a40c054738873888bf033f
This commit is contained in:
Hui Yu
2022-03-24 17:17:09 +00:00
committed by Automerger Merge Worker
5 changed files with 14 additions and 7 deletions

View File

@@ -630,8 +630,9 @@ public abstract class ActivityManagerInternal {
/**
* Delete uid from the ActivityManagerService PendingStartActivityUids list.
* @param uid uid
* @param nowElapsed starting time of updateOomAdj
*/
public abstract void deletePendingTopUid(int uid);
public abstract void deletePendingTopUid(int uid, long nowElapsed);
/**
* Is the uid in ActivityManagerService PendingStartActivityUids list?

View File

@@ -17265,8 +17265,8 @@ public class ActivityManagerService extends IActivityManager.Stub
}
@Override
public void deletePendingTopUid(int uid) {
mPendingStartActivityUids.delete(uid);
public void deletePendingTopUid(int uid, long nowElapsed) {
mPendingStartActivityUids.delete(uid, nowElapsed);
}
@Override

View File

@@ -1254,7 +1254,7 @@ public class OomAdjuster {
mService.mServices.foregroundServiceProcStateChangedLocked(uidRec);
}
}
mService.mInternal.deletePendingTopUid(uidRec.getUid());
mService.mInternal.deletePendingTopUid(uidRec.getUid(), nowElapsed);
}
if (mLocalPowerManager != null) {
mLocalPowerManager.finishUidChanges();

View File

@@ -55,9 +55,15 @@ final class PendingStartActivityUids {
return false;
}
synchronized void delete(int uid) {
synchronized void delete(int uid, long nowElapsed) {
final Pair<Integer, Long> pendingPid = mPendingUids.get(uid);
if (pendingPid != null) {
if (nowElapsed < pendingPid.second) {
Slog.i(TAG,
"updateOomAdj start time is before than pendingPid added,"
+ " don't delete it");
return;
}
final long delay = SystemClock.elapsedRealtime() - pendingPid.second;
if (delay >= 1000 /*ms*/) {
Slog.i(TAG,
@@ -87,4 +93,4 @@ final class PendingStartActivityUids {
synchronized boolean isPendingTopUid(int uid) {
return mPendingUids.get(uid) != null;
}
}
}

View File

@@ -284,7 +284,7 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase {
.setCreateActivity(true).build().getTopMostActivity();
activity2.getTask().setResumedActivity(activity2, "test");
mAtm.mAmInternal.deletePendingTopUid(activity1.getUid());
mAtm.mAmInternal.deletePendingTopUid(activity1.getUid(), Long.MAX_VALUE);
clearInvocations(mAtm);
activity1.moveFocusableActivityToTop("test");
assertTrue(mAtm.mAmInternal.isPendingTopUid(activity1.getUid()));