Merge "Eagerly serialize historical sessions" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c7ea7effde
@@ -81,8 +81,10 @@ import android.util.ExceptionUtils;
|
|||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import android.util.SparseBooleanArray;
|
import android.util.SparseBooleanArray;
|
||||||
|
import android.util.SparseIntArray;
|
||||||
import android.util.Xml;
|
import android.util.Xml;
|
||||||
|
|
||||||
|
import java.io.CharArrayWriter;
|
||||||
import libcore.io.IoUtils;
|
import libcore.io.IoUtils;
|
||||||
|
|
||||||
import com.android.internal.R;
|
import com.android.internal.R;
|
||||||
@@ -195,7 +197,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
|||||||
|
|
||||||
/** Historical sessions kept around for debugging purposes */
|
/** Historical sessions kept around for debugging purposes */
|
||||||
@GuardedBy("mSessions")
|
@GuardedBy("mSessions")
|
||||||
private final SparseArray<PackageInstallerSession> mHistoricalSessions = new SparseArray<>();
|
private final List<String> mHistoricalSessions = new ArrayList<>();
|
||||||
|
|
||||||
|
@GuardedBy("mSessions")
|
||||||
|
private final SparseIntArray mHistoricalSessionsByInstaller = new SparseIntArray();
|
||||||
|
|
||||||
/** Sessions allocated to legacy users */
|
/** Sessions allocated to legacy users */
|
||||||
@GuardedBy("mSessions")
|
@GuardedBy("mSessions")
|
||||||
@@ -371,7 +376,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
|||||||
// Since this is early during boot we don't send
|
// Since this is early during boot we don't send
|
||||||
// any observer events about the session, but we
|
// any observer events about the session, but we
|
||||||
// keep details around for dumpsys.
|
// keep details around for dumpsys.
|
||||||
mHistoricalSessions.put(session.sessionId, session);
|
addHistoricalSessionLocked(session);
|
||||||
}
|
}
|
||||||
mAllocatedSessions.put(session.sessionId, true);
|
mAllocatedSessions.put(session.sessionId, true);
|
||||||
}
|
}
|
||||||
@@ -386,6 +391,18 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addHistoricalSessionLocked(PackageInstallerSession session) {
|
||||||
|
CharArrayWriter writer = new CharArrayWriter();
|
||||||
|
IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
|
||||||
|
session.dump(pw);
|
||||||
|
mHistoricalSessions.add(writer.toString());
|
||||||
|
|
||||||
|
// Increment the number of sessions by this installerUid.
|
||||||
|
mHistoricalSessionsByInstaller.put(
|
||||||
|
session.installerUid,
|
||||||
|
mHistoricalSessionsByInstaller.get(session.installerUid) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
private PackageInstallerSession readSessionLocked(XmlPullParser in) throws IOException,
|
private PackageInstallerSession readSessionLocked(XmlPullParser in) throws IOException,
|
||||||
XmlPullParserException {
|
XmlPullParserException {
|
||||||
final int sessionId = readIntAttribute(in, ATTR_SESSION_ID);
|
final int sessionId = readIntAttribute(in, ATTR_SESSION_ID);
|
||||||
@@ -676,7 +693,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
|||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Too many active sessions for UID " + callingUid);
|
"Too many active sessions for UID " + callingUid);
|
||||||
}
|
}
|
||||||
final int historicalCount = getSessionCount(mHistoricalSessions, callingUid);
|
final int historicalCount = mHistoricalSessionsByInstaller.get(callingUid);
|
||||||
if (historicalCount >= MAX_HISTORICAL_SESSIONS) {
|
if (historicalCount >= MAX_HISTORICAL_SESSIONS) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Too many historical sessions for UID " + callingUid);
|
"Too many historical sessions for UID " + callingUid);
|
||||||
@@ -1228,8 +1245,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
|||||||
pw.increaseIndent();
|
pw.increaseIndent();
|
||||||
N = mHistoricalSessions.size();
|
N = mHistoricalSessions.size();
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
final PackageInstallerSession session = mHistoricalSessions.valueAt(i);
|
pw.print(mHistoricalSessions.get(i));
|
||||||
session.dump(pw);
|
|
||||||
pw.println();
|
pw.println();
|
||||||
}
|
}
|
||||||
pw.println();
|
pw.println();
|
||||||
@@ -1264,7 +1280,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
|||||||
public void run() {
|
public void run() {
|
||||||
synchronized (mSessions) {
|
synchronized (mSessions) {
|
||||||
mSessions.remove(session.sessionId);
|
mSessions.remove(session.sessionId);
|
||||||
mHistoricalSessions.put(session.sessionId, session);
|
addHistoricalSessionLocked(session);
|
||||||
|
|
||||||
final File appIconFile = buildAppIconFile(session.sessionId);
|
final File appIconFile = buildAppIconFile(session.sessionId);
|
||||||
if (appIconFile.exists()) {
|
if (appIconFile.exists()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user