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

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

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

View File

@@ -586,8 +586,9 @@ public abstract class ActivityManagerInternal {
/** /**
* Delete uid from the ActivityManagerService PendingStartActivityUids list. * Delete uid from the ActivityManagerService PendingStartActivityUids list.
* @param uid uid * @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? * Is the uid in ActivityManagerService PendingStartActivityUids list?

View File

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

View File

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

View File

@@ -50,9 +50,15 @@ final class PendingStartActivityUids {
} }
} }
synchronized void delete(int uid) { synchronized void delete(int uid, long nowElapsed) {
final Pair<Integer, Long> pendingPid = mPendingUids.get(uid); final Pair<Integer, Long> pendingPid = mPendingUids.get(uid);
if (pendingPid != null) { 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; final long delay = SystemClock.elapsedRealtime() - pendingPid.second;
if (delay >= 1000 /*ms*/) { if (delay >= 1000 /*ms*/) {
Slog.i(TAG, Slog.i(TAG,

View File

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