From c69ea31c1988bbb90d17a754555ec25d557e327f Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Thu, 22 Jul 2021 01:36:04 -0700 Subject: [PATCH] Don't reset the reported proc state while cleaning up the process It'll be used to feed into the app kill stats. Meanwhile, use the real process UID instead of the package UID for indexing the app kill stats container internally, it'll be better in terms of aligning with the caller UID in queries. Bug: 194364213 Test: atest ApplicationExitInfoTest Test: atest CtsAppExitTestCases:ActivityManagerAppExitInfoTest Test: Manual - dumpsys activity exit-info Change-Id: I5c966086bb90675294b5dfc1c5cdb0c163f05170 --- .../android/server/am/AppExitInfoTracker.java | 18 ++++++++++++------ .../android/server/am/ProcessStateRecord.java | 2 +- .../server/am/ApplicationExitInfoTest.java | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/am/AppExitInfoTracker.java b/services/core/java/com/android/server/am/AppExitInfoTracker.java index abb8243955788..979a9eed14aab 100644 --- a/services/core/java/com/android/server/am/AppExitInfoTracker.java +++ b/services/core/java/com/android/server/am/AppExitInfoTracker.java @@ -430,7 +430,13 @@ public final class AppExitInfoTracker { final ApplicationExitInfo info = new ApplicationExitInfo(raw); final String[] packages = raw.getPackageList(); - final int uid = raw.getPackageUid(); + int uid = raw.getRealUid(); + if (UserHandle.isIsolated(uid)) { + Integer k = mIsolatedUidRecords.getUidByIsolatedUid(uid); + if (k != null) { + uid = k; + } + } for (int i = 0; i < packages.length; i++) { addExitInfoInnerLocked(packages[i], uid, info); } @@ -833,14 +839,14 @@ public final class AppExitInfoTracker { pw.println(prefix + "package: " + packageName); int size = array.size(); for (int i = 0; i < size; i++) { - pw.println(prefix + " Historical Process Exit for userId=" + array.keyAt(i)); + pw.println(prefix + " Historical Process Exit for uid=" + array.keyAt(i)); array.valueAt(i).dumpLocked(pw, prefix + " ", sdf); } } @GuardedBy("mLock") - private void addExitInfoInnerLocked(String packageName, int userId, ApplicationExitInfo info) { - AppExitInfoContainer container = mData.get(packageName, userId); + private void addExitInfoInnerLocked(String packageName, int uid, ApplicationExitInfo info) { + AppExitInfoContainer container = mData.get(packageName, uid); if (container == null) { container = new AppExitInfoContainer(mAppExitInfoHistoryListSize); if (UserHandle.isIsolated(info.getRealUid())) { @@ -851,7 +857,7 @@ public final class AppExitInfoTracker { } else { container.mUid = info.getRealUid(); } - mData.put(packageName, userId, container); + mData.put(packageName, uid, container); } container.addExitInfoLocked(info); } @@ -997,7 +1003,7 @@ public final class AppExitInfoTracker { info.setPackageList(app.getPackageList()); info.setReason(ApplicationExitInfo.REASON_UNKNOWN); info.setStatus(0); - info.setImportance(procStateToImportance(app.mState.getSetProcState())); + info.setImportance(procStateToImportance(app.mState.getReportedProcState())); info.setPss(app.mProfile.getLastPss()); info.setRss(app.mProfile.getLastRss()); info.setTimestamp(timestamp); diff --git a/services/core/java/com/android/server/am/ProcessStateRecord.java b/services/core/java/com/android/server/am/ProcessStateRecord.java index 7520d88fcd164..dc6bcd8ab9dea 100644 --- a/services/core/java/com/android/server/am/ProcessStateRecord.java +++ b/services/core/java/com/android/server/am/ProcessStateRecord.java @@ -1086,7 +1086,7 @@ final class ProcessStateRecord { mCurRawAdj = mSetRawAdj = mCurAdj = mSetAdj = mVerifiedAdj = ProcessList.INVALID_ADJ; mCurCapability = mSetCapability = PROCESS_CAPABILITY_NONE; mCurSchedGroup = mSetSchedGroup = ProcessList.SCHED_GROUP_BACKGROUND; - mCurProcState = mRepProcState = mCurRawProcState = mSetProcState = mAllowStartFgsState = + mCurProcState = mCurRawProcState = mSetProcState = mAllowStartFgsState = PROCESS_STATE_NONEXISTENT; } diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java index 803a0c10fe1c2..26b5218d2ab4f 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationExitInfoTest.java @@ -1003,7 +1003,7 @@ public class ApplicationExitInfoTest { dummyPackageName, dummyClassName), "", definingUid)); } app.mServices.setConnectionGroup(connectionGroup); - app.mState.setSetProcState(procState); + app.mState.setReportedProcState(procState); app.mProfile.setLastMemInfo(spy(new Debug.MemoryInfo())); app.mProfile.setLastPss(pss); app.mProfile.setLastRss(rss);