am 7311bd4b: Merge "Print out memory info when we get into a low memory situation." into ics-mr0

* commit '7311bd4b709750384b058d8e988e2e983c97b3f2':
  Print out memory info when we get into a low memory situation.
This commit is contained in:
Dianne Hackborn
2011-11-05 07:34:03 +00:00
committed by Android Git Automerger

View File

@ -120,6 +120,7 @@ import android.view.WindowManagerPolicy;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.File; import java.io.File;
@ -128,8 +129,10 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.IllegalStateException; import java.lang.IllegalStateException;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
@ -857,9 +860,11 @@ public final class ActivityManagerService extends ActivityManagerNative
static final int SHOW_COMPAT_MODE_DIALOG_MSG = 30; static final int SHOW_COMPAT_MODE_DIALOG_MSG = 30;
static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 31; static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 31;
static final int DISPATCH_PROCESS_DIED = 32; static final int DISPATCH_PROCESS_DIED = 32;
static final int REPORT_MEM_USAGE = 33;
AlertDialog mUidAlert; AlertDialog mUidAlert;
CompatModeDialog mCompatModeDialog; CompatModeDialog mCompatModeDialog;
long mLastMemUsageReportTime = 0;
final Handler mHandler = new Handler() { final Handler mHandler = new Handler() {
//public Handler() { //public Handler() {
@ -1199,6 +1204,56 @@ public final class ActivityManagerService extends ActivityManagerNative
dispatchProcessDied(pid, uid); dispatchProcessDied(pid, uid);
break; break;
} }
case REPORT_MEM_USAGE: {
boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
if (!isDebuggable) {
return;
}
synchronized (ActivityManagerService.this) {
long now = SystemClock.uptimeMillis();
if (now < (mLastMemUsageReportTime+10000)) {
// Don't report more than every 10 seconds to somewhat
// avoid spamming.
return;
}
mLastMemUsageReportTime = now;
}
Thread thread = new Thread() {
@Override public void run() {
try {
java.lang.Process proc = Runtime.getRuntime().exec(new String[] {
"procrank", });
final InputStreamReader converter = new InputStreamReader(
proc.getInputStream());
BufferedReader in = new BufferedReader(converter);
String line;
while (true) {
line = in.readLine();
if (line == null) {
break;
}
if (line.length() > 0) {
Slog.i(TAG, line);
}
}
converter.close();
} catch (IOException e) {
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
dumpApplicationMemoryUsage(null, pw, " ", new String[] { }, true);
Slog.i(TAG, sw.toString());
synchronized (ActivityManagerService.this) {
long now = SystemClock.uptimeMillis();
if (mLastMemUsageReportTime < now) {
mLastMemUsageReportTime = now;
}
}
}
};
thread.start();
break;
}
} }
} }
}; };
@ -1339,7 +1394,7 @@ public final class ActivityManagerService extends ActivityManagerNative
return; return;
} }
mActivityManagerService.dumpApplicationMemoryUsage(fd, pw, " ", args); mActivityManagerService.dumpApplicationMemoryUsage(fd, pw, " ", args, false);
} }
} }
@ -2768,6 +2823,7 @@ public final class ActivityManagerService extends ActivityManagerNative
addProcessToGcListLocked(rec); addProcessToGcListLocked(rec);
} }
} }
mHandler.sendEmptyMessage(REPORT_MEM_USAGE);
scheduleAppGcsLocked(); scheduleAppGcsLocked();
} }
} }
@ -9242,7 +9298,7 @@ public final class ActivityManagerService extends ActivityManagerNative
} }
final void dumpApplicationMemoryUsage(FileDescriptor fd, final void dumpApplicationMemoryUsage(FileDescriptor fd,
PrintWriter pw, String prefix, String[] args) { PrintWriter pw, String prefix, String[] args, boolean brief) {
boolean dumpAll = false; boolean dumpAll = false;
int opti = 0; int opti = 0;
@ -9382,15 +9438,19 @@ public final class ActivityManagerService extends ActivityManagerNative
} }
} }
pw.println(); if (!brief) {
pw.println("Total PSS by process:"); pw.println();
dumpMemItems(pw, " ", procMems, true); pw.println("Total PSS by process:");
pw.println(); dumpMemItems(pw, " ", procMems, true);
pw.println();
}
pw.println("Total PSS by OOM adjustment:"); pw.println("Total PSS by OOM adjustment:");
dumpMemItems(pw, " ", oomMems, false); dumpMemItems(pw, " ", oomMems, false);
pw.println(); if (!brief) {
pw.println("Total PSS by category:"); pw.println();
dumpMemItems(pw, " ", catMems, true); pw.println("Total PSS by category:");
dumpMemItems(pw, " ", catMems, true);
}
pw.println(); pw.println();
pw.print("Total PSS: "); pw.print(totalPss); pw.println(" Kb"); pw.print("Total PSS: "); pw.print(totalPss); pw.println(" Kb");
} }