Fields Summary |
---|
private final com.android.internal.os.BatteryStatsImpl | mBatteryStats |
final android.content.pm.ApplicationInfo | info |
final boolean | isolated |
final int | uid |
final int | userId |
final String | processName |
final android.util.ArrayMap | pkgList |
android.util.ArraySet | pkgDeps |
android.app.IApplicationThread | thread |
ProcessStats.ProcessState | baseProcessTracker |
BatteryStatsImpl.Uid.Proc | curProcBatteryStats |
int | pid |
int[] | gids |
String | requiredAbi |
String | instructionSet |
boolean | starting |
long | lastActivityTime |
long | lastPssTime |
long | nextPssTime |
long | lastStateTime |
long | initialIdlePss |
long | lastPss |
long | lastCachedPss |
int | maxAdj |
int | curRawAdj |
int | setRawAdj |
int | curAdj |
int | setAdj |
int | curSchedGroup |
int | setSchedGroup |
int | trimMemoryLevel |
int | curProcState |
int | repProcState |
int | setProcState |
int | pssProcState |
boolean | serviceb |
boolean | serviceHighRam |
boolean | setIsForeground |
boolean | notCachedSinceIdle |
boolean | hasClientActivities |
boolean | hasStartedServices |
boolean | foregroundServices |
boolean | foregroundActivities |
boolean | repForegroundActivities |
boolean | systemNoUi |
boolean | hasShownUi |
boolean | pendingUiClean |
boolean | hasAboveClient |
boolean | treatLikeActivity |
boolean | bad |
boolean | killedByAm |
boolean | killed |
boolean | procStateChanged |
String | waitingToKill |
android.os.IBinder | forcingToForeground |
int | adjSeq |
int | lruSeq |
android.content.res.CompatibilityInfo | compat |
IBinder.DeathRecipient | deathRecipient |
android.content.ComponentName | instrumentationClass |
android.content.pm.ApplicationInfo | instrumentationInfo |
String | instrumentationProfileFile |
android.app.IInstrumentationWatcher | instrumentationWatcher |
android.app.IUiAutomationConnection | instrumentationUiAutomationConnection |
android.os.Bundle | instrumentationArguments |
android.content.ComponentName | instrumentationResultClass |
boolean | usingWrapper |
BroadcastRecord | curReceiver |
long | lastWakeTime |
long | lastCpuTime |
long | curCpuTime |
long | lastRequestedGc |
long | lastLowMemory |
boolean | reportLowMemory |
boolean | empty |
boolean | cached |
String | adjType |
int | adjTypeCode |
Object | adjSource |
int | adjSourceProcState |
Object | adjTarget |
Runnable | crashHandler |
final ArrayList | activities |
final android.util.ArraySet | services |
final android.util.ArraySet | executingServices |
final android.util.ArraySet | connections |
final android.util.ArraySet | receivers |
final android.util.ArrayMap | pubProviders |
final ArrayList | conProviders |
boolean | execServicesFg |
boolean | persistent |
boolean | crashing |
android.app.Dialog | crashDialog |
boolean | forceCrashReport |
boolean | notResponding |
android.app.Dialog | anrDialog |
boolean | removed |
boolean | debugging |
boolean | waitedForDebugger |
android.app.Dialog | waitDialog |
String | shortStringName |
String | stringName |
ActivityManager.ProcessErrorStateInfo | crashingReport |
ActivityManager.ProcessErrorStateInfo | notRespondingReport |
android.content.ComponentName | errorReportReceiver |
Methods Summary |
---|
public boolean | addPackage(java.lang.String pkg, int versionCode, ProcessStatsService tracker)
if (!pkgList.containsKey(pkg)) {
ProcessStats.ProcessStateHolder holder = new ProcessStats.ProcessStateHolder(
versionCode);
if (baseProcessTracker != null) {
holder.state = tracker.getProcessStateLocked(
pkg, info.uid, versionCode, processName);
pkgList.put(pkg, holder);
if (holder.state != baseProcessTracker) {
holder.state.makeActive();
}
} else {
pkgList.put(pkg, holder);
}
return true;
}
return false;
|
void | dump(java.io.PrintWriter pw, java.lang.String prefix)
final long now = SystemClock.uptimeMillis();
pw.print(prefix); pw.print("user #"); pw.print(userId);
pw.print(" uid="); pw.print(info.uid);
if (uid != info.uid) {
pw.print(" ISOLATED uid="); pw.print(uid);
}
pw.print(" gids={");
if (gids != null) {
for (int gi=0; gi<gids.length; gi++) {
if (gi != 0) pw.print(", ");
pw.print(gids[gi]);
}
}
pw.println("}");
pw.print(prefix); pw.print("requiredAbi="); pw.print(requiredAbi);
pw.print(" instructionSet="); pw.println(instructionSet);
if (info.className != null) {
pw.print(prefix); pw.print("class="); pw.println(info.className);
}
if (info.manageSpaceActivityName != null) {
pw.print(prefix); pw.print("manageSpaceActivityName=");
pw.println(info.manageSpaceActivityName);
}
pw.print(prefix); pw.print("dir="); pw.print(info.sourceDir);
pw.print(" publicDir="); pw.print(info.publicSourceDir);
pw.print(" data="); pw.println(info.dataDir);
pw.print(prefix); pw.print("packageList={");
for (int i=0; i<pkgList.size(); i++) {
if (i > 0) pw.print(", ");
pw.print(pkgList.keyAt(i));
}
pw.println("}");
if (pkgDeps != null) {
pw.print(prefix); pw.print("packageDependencies={");
for (int i=0; i<pkgDeps.size(); i++) {
if (i > 0) pw.print(", ");
pw.print(pkgDeps.valueAt(i));
}
pw.println("}");
}
pw.print(prefix); pw.print("compat="); pw.println(compat);
if (instrumentationClass != null || instrumentationProfileFile != null
|| instrumentationArguments != null) {
pw.print(prefix); pw.print("instrumentationClass=");
pw.print(instrumentationClass);
pw.print(" instrumentationProfileFile=");
pw.println(instrumentationProfileFile);
pw.print(prefix); pw.print("instrumentationArguments=");
pw.println(instrumentationArguments);
pw.print(prefix); pw.print("instrumentationInfo=");
pw.println(instrumentationInfo);
if (instrumentationInfo != null) {
instrumentationInfo.dump(new PrintWriterPrinter(pw), prefix + " ");
}
}
pw.print(prefix); pw.print("thread="); pw.println(thread);
pw.print(prefix); pw.print("pid="); pw.print(pid); pw.print(" starting=");
pw.println(starting);
pw.print(prefix); pw.print("lastActivityTime=");
TimeUtils.formatDuration(lastActivityTime, now, pw);
pw.print(" lastPssTime=");
TimeUtils.formatDuration(lastPssTime, now, pw);
pw.print(" nextPssTime=");
TimeUtils.formatDuration(nextPssTime, now, pw);
pw.println();
pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq);
pw.print(" lruSeq="); pw.print(lruSeq);
pw.print(" lastPss="); pw.print(lastPss);
pw.print(" lastCachedPss="); pw.println(lastCachedPss);
pw.print(prefix); pw.print("cached="); pw.print(cached);
pw.print(" empty="); pw.println(empty);
if (serviceb) {
pw.print(prefix); pw.print("serviceb="); pw.print(serviceb);
pw.print(" serviceHighRam="); pw.println(serviceHighRam);
}
if (notCachedSinceIdle) {
pw.print(prefix); pw.print("notCachedSinceIdle="); pw.print(notCachedSinceIdle);
pw.print(" initialIdlePss="); pw.println(initialIdlePss);
}
pw.print(prefix); pw.print("oom: max="); pw.print(maxAdj);
pw.print(" curRaw="); pw.print(curRawAdj);
pw.print(" setRaw="); pw.print(setRawAdj);
pw.print(" cur="); pw.print(curAdj);
pw.print(" set="); pw.println(setAdj);
pw.print(prefix); pw.print("curSchedGroup="); pw.print(curSchedGroup);
pw.print(" setSchedGroup="); pw.print(setSchedGroup);
pw.print(" systemNoUi="); pw.print(systemNoUi);
pw.print(" trimMemoryLevel="); pw.println(trimMemoryLevel);
pw.print(prefix); pw.print("curProcState="); pw.print(curProcState);
pw.print(" repProcState="); pw.print(repProcState);
pw.print(" pssProcState="); pw.print(pssProcState);
pw.print(" setProcState="); pw.print(setProcState);
pw.print(" lastStateTime=");
TimeUtils.formatDuration(lastStateTime, now, pw);
pw.println();
if (hasShownUi || pendingUiClean || hasAboveClient || treatLikeActivity) {
pw.print(prefix); pw.print("hasShownUi="); pw.print(hasShownUi);
pw.print(" pendingUiClean="); pw.print(pendingUiClean);
pw.print(" hasAboveClient="); pw.print(hasAboveClient);
pw.print(" treatLikeActivity="); pw.println(treatLikeActivity);
}
if (setIsForeground || foregroundServices || forcingToForeground != null) {
pw.print(prefix); pw.print("setIsForeground="); pw.print(setIsForeground);
pw.print(" foregroundServices="); pw.print(foregroundServices);
pw.print(" forcingToForeground="); pw.println(forcingToForeground);
}
if (persistent || removed) {
pw.print(prefix); pw.print("persistent="); pw.print(persistent);
pw.print(" removed="); pw.println(removed);
}
if (hasClientActivities || foregroundActivities || repForegroundActivities) {
pw.print(prefix); pw.print("hasClientActivities="); pw.print(hasClientActivities);
pw.print(" foregroundActivities="); pw.print(foregroundActivities);
pw.print(" (rep="); pw.print(repForegroundActivities); pw.println(")");
}
if (hasStartedServices) {
pw.print(prefix); pw.print("hasStartedServices="); pw.println(hasStartedServices);
}
if (setProcState >= ActivityManager.PROCESS_STATE_SERVICE) {
long wtime;
synchronized (mBatteryStats) {
wtime = mBatteryStats.getProcessWakeTime(info.uid,
pid, SystemClock.elapsedRealtime());
}
pw.print(prefix); pw.print("lastWakeTime="); pw.print(lastWakeTime);
pw.print(" timeUsed=");
TimeUtils.formatDuration(wtime-lastWakeTime, pw); pw.println("");
pw.print(prefix); pw.print("lastCpuTime="); pw.print(lastCpuTime);
pw.print(" timeUsed=");
TimeUtils.formatDuration(curCpuTime-lastCpuTime, pw); pw.println("");
}
pw.print(prefix); pw.print("lastRequestedGc=");
TimeUtils.formatDuration(lastRequestedGc, now, pw);
pw.print(" lastLowMemory=");
TimeUtils.formatDuration(lastLowMemory, now, pw);
pw.print(" reportLowMemory="); pw.println(reportLowMemory);
if (killed || killedByAm || waitingToKill != null) {
pw.print(prefix); pw.print("killed="); pw.print(killed);
pw.print(" killedByAm="); pw.print(killedByAm);
pw.print(" waitingToKill="); pw.println(waitingToKill);
}
if (debugging || crashing || crashDialog != null || notResponding
|| anrDialog != null || bad) {
pw.print(prefix); pw.print("debugging="); pw.print(debugging);
pw.print(" crashing="); pw.print(crashing);
pw.print(" "); pw.print(crashDialog);
pw.print(" notResponding="); pw.print(notResponding);
pw.print(" " ); pw.print(anrDialog);
pw.print(" bad="); pw.print(bad);
// crashing or notResponding is always set before errorReportReceiver
if (errorReportReceiver != null) {
pw.print(" errorReportReceiver=");
pw.print(errorReportReceiver.flattenToShortString());
}
pw.println();
}
if (activities.size() > 0) {
pw.print(prefix); pw.println("Activities:");
for (int i=0; i<activities.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(activities.get(i));
}
}
if (services.size() > 0) {
pw.print(prefix); pw.println("Services:");
for (int i=0; i<services.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(services.valueAt(i));
}
}
if (executingServices.size() > 0) {
pw.print(prefix); pw.print("Executing Services (fg=");
pw.print(execServicesFg); pw.println(")");
for (int i=0; i<executingServices.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(executingServices.valueAt(i));
}
}
if (connections.size() > 0) {
pw.print(prefix); pw.println("Connections:");
for (int i=0; i<connections.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(connections.valueAt(i));
}
}
if (pubProviders.size() > 0) {
pw.print(prefix); pw.println("Published Providers:");
for (int i=0; i<pubProviders.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(pubProviders.keyAt(i));
pw.print(prefix); pw.print(" -> "); pw.println(pubProviders.valueAt(i));
}
}
if (conProviders.size() > 0) {
pw.print(prefix); pw.println("Connected Providers:");
for (int i=0; i<conProviders.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(conProviders.get(i).toShortString());
}
}
if (curReceiver != null) {
pw.print(prefix); pw.print("curReceiver="); pw.println(curReceiver);
}
if (receivers.size() > 0) {
pw.print(prefix); pw.println("Receivers:");
for (int i=0; i<receivers.size(); i++) {
pw.print(prefix); pw.print(" - "); pw.println(receivers.valueAt(i));
}
}
|
public void | forceProcessStateUpTo(int newState)
if (repProcState > newState) {
curProcState = repProcState = newState;
}
|
public java.lang.String[] | getPackageList()
int size = pkgList.size();
if (size == 0) {
return null;
}
String list[] = new String[size];
for (int i=0; i<pkgList.size(); i++) {
list[i] = pkgList.keyAt(i);
}
return list;
|
public int | getSetAdjWithServices()
if (setAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
if (hasStartedServices) {
return ProcessList.SERVICE_B_ADJ;
}
}
return setAdj;
|
public boolean | isInterestingToUserLocked()This method returns true if any of the activities within the process record are interesting
to the user. See HistoryRecord.isInterestingToUserLocked()
final int size = activities.size();
for (int i = 0 ; i < size ; i++) {
ActivityRecord r = activities.get(i);
if (r.isInterestingToUserLocked()) {
return true;
}
}
return false;
|
void | kill(java.lang.String reason, boolean noisy)
if (!killedByAm) {
if (noisy) {
Slog.i(ActivityManagerService.TAG, "Killing " + toShortString() + " (adj " + setAdj
+ "): " + reason);
}
EventLog.writeEvent(EventLogTags.AM_KILL, userId, pid, processName, setAdj, reason);
Process.killProcessQuiet(pid);
Process.killProcessGroup(info.uid, pid);
if (!persistent) {
killed = true;
killedByAm = true;
}
}
|
public void | makeActive(android.app.IApplicationThread _thread, ProcessStatsService tracker)
if (thread == null) {
final ProcessStats.ProcessState origBase = baseProcessTracker;
if (origBase != null) {
origBase.setState(ProcessStats.STATE_NOTHING,
tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList);
origBase.makeInactive();
}
baseProcessTracker = tracker.getProcessStateLocked(info.packageName, info.uid,
info.versionCode, processName);
baseProcessTracker.makeActive();
for (int i=0; i<pkgList.size(); i++) {
ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
if (holder.state != null && holder.state != origBase) {
holder.state.makeInactive();
}
holder.state = tracker.getProcessStateLocked(pkgList.keyAt(i), info.uid,
info.versionCode, processName);
if (holder.state != baseProcessTracker) {
holder.state.makeActive();
}
}
}
thread = _thread;
|
public java.lang.String | makeAdjReason()
if (adjSource != null || adjTarget != null) {
StringBuilder sb = new StringBuilder(128);
sb.append(' ");
if (adjTarget instanceof ComponentName) {
sb.append(((ComponentName)adjTarget).flattenToShortString());
} else if (adjTarget != null) {
sb.append(adjTarget.toString());
} else {
sb.append("{null}");
}
sb.append("<=");
if (adjSource instanceof ProcessRecord) {
sb.append("Proc{");
sb.append(((ProcessRecord)adjSource).toShortString());
sb.append("}");
} else if (adjSource != null) {
sb.append(adjSource.toString());
} else {
sb.append("{null}");
}
return sb.toString();
}
return null;
|
public void | makeInactive(ProcessStatsService tracker)
thread = null;
final ProcessStats.ProcessState origBase = baseProcessTracker;
if (origBase != null) {
if (origBase != null) {
origBase.setState(ProcessStats.STATE_NOTHING,
tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList);
origBase.makeInactive();
}
baseProcessTracker = null;
for (int i=0; i<pkgList.size(); i++) {
ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
if (holder.state != null && holder.state != origBase) {
holder.state.makeInactive();
}
holder.state = null;
}
}
|
int | modifyRawOomAdj(int adj)
if (hasAboveClient) {
// If this process has bound to any services with BIND_ABOVE_CLIENT,
// then we need to drop its adjustment to be lower than the service's
// in order to honor the request. We want to drop it by one adjustment
// level... but there is special meaning applied to various levels so
// we will skip some of them.
if (adj < ProcessList.FOREGROUND_APP_ADJ) {
// System process will not get dropped, ever
} else if (adj < ProcessList.VISIBLE_APP_ADJ) {
adj = ProcessList.VISIBLE_APP_ADJ;
} else if (adj < ProcessList.PERCEPTIBLE_APP_ADJ) {
adj = ProcessList.PERCEPTIBLE_APP_ADJ;
} else if (adj < ProcessList.CACHED_APP_MIN_ADJ) {
adj = ProcessList.CACHED_APP_MIN_ADJ;
} else if (adj < ProcessList.CACHED_APP_MAX_ADJ) {
adj++;
}
}
return adj;
|
public void | resetPackageList(ProcessStatsService tracker)
final int N = pkgList.size();
if (baseProcessTracker != null) {
long now = SystemClock.uptimeMillis();
baseProcessTracker.setState(ProcessStats.STATE_NOTHING,
tracker.getMemFactorLocked(), now, pkgList);
if (N != 1) {
for (int i=0; i<N; i++) {
ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
if (holder.state != null && holder.state != baseProcessTracker) {
holder.state.makeInactive();
}
}
pkgList.clear();
ProcessStats.ProcessState ps = tracker.getProcessStateLocked(
info.packageName, info.uid, info.versionCode, processName);
ProcessStats.ProcessStateHolder holder = new ProcessStats.ProcessStateHolder(
info.versionCode);
holder.state = ps;
pkgList.put(info.packageName, holder);
if (ps != baseProcessTracker) {
ps.makeActive();
}
}
} else if (N != 1) {
pkgList.clear();
pkgList.put(info.packageName, new ProcessStats.ProcessStateHolder(info.versionCode));
}
|
public void | setPid(int _pid)
pid = _pid;
shortStringName = null;
stringName = null;
|
public void | stopFreezingAllLocked()
int i = activities.size();
while (i > 0) {
i--;
activities.get(i).stopFreezingScreenLocked(true);
}
|
public java.lang.String | toShortString()
if (shortStringName != null) {
return shortStringName;
}
StringBuilder sb = new StringBuilder(128);
toShortString(sb);
return shortStringName = sb.toString();
|
void | toShortString(java.lang.StringBuilder sb)
sb.append(pid);
sb.append(':");
sb.append(processName);
sb.append('/");
if (info.uid < Process.FIRST_APPLICATION_UID) {
sb.append(uid);
} else {
sb.append('u");
sb.append(userId);
int appId = UserHandle.getAppId(info.uid);
if (appId >= Process.FIRST_APPLICATION_UID) {
sb.append('a");
sb.append(appId - Process.FIRST_APPLICATION_UID);
} else {
sb.append('s");
sb.append(appId);
}
if (uid != info.uid) {
sb.append('i");
sb.append(UserHandle.getAppId(uid) - Process.FIRST_ISOLATED_UID);
}
}
|
public java.lang.String | toString()
if (stringName != null) {
return stringName;
}
StringBuilder sb = new StringBuilder(128);
sb.append("ProcessRecord{");
sb.append(Integer.toHexString(System.identityHashCode(this)));
sb.append(' ");
toShortString(sb);
sb.append('}");
return stringName = sb.toString();
|
public void | unlinkDeathRecipient()
if (deathRecipient != null && thread != null) {
thread.asBinder().unlinkToDeath(deathRecipient, 0);
}
deathRecipient = null;
|
void | updateHasAboveClientLocked()
hasAboveClient = false;
for (int i=connections.size()-1; i>=0; i--) {
ConnectionRecord cr = connections.valueAt(i);
if ((cr.flags&Context.BIND_ABOVE_CLIENT) != 0) {
hasAboveClient = true;
break;
}
}
|