Set threshold of historical sessions size in PackageInstallerService
In extreme cases, size of historical sessions recorded in PackageInstallerService is very large, resulting in huge memory usage in system server. This commit adds threshold of historical sessions size and the oldest historical sessions will be cleared if the list size reaches the threshold. Bug: 248960979 Fixed: 248960979 Test: presubmit Signed-off-by: Jiaquan Si <sijiaquan@oppo.corp-partner.google.com> Change-Id: Ie0af8f00e73a59bdacc4b9a6f5bea0a2a3f9258b
This commit is contained in:
committed by
Patrick Baumann
parent
98652d2598
commit
82c14a0db7
@@ -154,6 +154,11 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
/** Destroy sessions older than this on storage free request */
|
||||
private static final long MAX_SESSION_AGE_ON_LOW_STORAGE_MILLIS = 8 * DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
/** Threshold of historical sessions size */
|
||||
private static final int HISTORICAL_SESSIONS_THRESHOLD = 500;
|
||||
/** Size of historical sessions to be cleared when reaching threshold */
|
||||
private static final int HISTORICAL_CLEAR_SIZE = 400;
|
||||
|
||||
/**
|
||||
* Allow verification-skipping if it's a development app installed through ADB with
|
||||
* disable verification flag specified.
|
||||
@@ -549,6 +554,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
CharArrayWriter writer = new CharArrayWriter();
|
||||
IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
|
||||
session.dump(pw);
|
||||
if (mHistoricalSessions.size() > HISTORICAL_SESSIONS_THRESHOLD) {
|
||||
Slog.d(TAG, "Historical sessions size reaches threshold, clear the oldest");
|
||||
mHistoricalSessions.subList(0, HISTORICAL_CLEAR_SIZE).clear();
|
||||
}
|
||||
mHistoricalSessions.add(writer.toString());
|
||||
|
||||
int installerUid = session.getInstallerUid();
|
||||
|
||||
Reference in New Issue
Block a user