Skip to content

Commit 6581043

Browse files
Dianne HackbornAndroid Git Automerger
authored andcommitted
am 7311bd4: 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.
2 parents 3f24589 + 7311bd4 commit 6581043

File tree

1 file changed

+69
-9
lines changed

1 file changed

+69
-9
lines changed

services/java/com/android/server/am/ActivityManagerService.java

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120

121121
import java.io.BufferedInputStream;
122122
import java.io.BufferedOutputStream;
123+
import java.io.BufferedReader;
123124
import java.io.DataInputStream;
124125
import java.io.DataOutputStream;
125126
import java.io.File;
@@ -128,8 +129,10 @@
128129
import java.io.FileNotFoundException;
129130
import java.io.FileOutputStream;
130131
import java.io.IOException;
132+
import java.io.InputStream;
131133
import java.io.InputStreamReader;
132134
import java.io.PrintWriter;
135+
import java.io.StringWriter;
133136
import java.lang.IllegalStateException;
134137
import java.lang.ref.WeakReference;
135138
import java.util.ArrayList;
@@ -857,9 +860,11 @@ public void binderDied() {
857860
static final int SHOW_COMPAT_MODE_DIALOG_MSG = 30;
858861
static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 31;
859862
static final int DISPATCH_PROCESS_DIED = 32;
863+
static final int REPORT_MEM_USAGE = 33;
860864

861865
AlertDialog mUidAlert;
862866
CompatModeDialog mCompatModeDialog;
867+
long mLastMemUsageReportTime = 0;
863868

864869
final Handler mHandler = new Handler() {
865870
//public Handler() {
@@ -1199,6 +1204,56 @@ public void handleMessage(Message msg) {
11991204
dispatchProcessDied(pid, uid);
12001205
break;
12011206
}
1207+
case REPORT_MEM_USAGE: {
1208+
boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
1209+
if (!isDebuggable) {
1210+
return;
1211+
}
1212+
synchronized (ActivityManagerService.this) {
1213+
long now = SystemClock.uptimeMillis();
1214+
if (now < (mLastMemUsageReportTime+10000)) {
1215+
// Don't report more than every 10 seconds to somewhat
1216+
// avoid spamming.
1217+
return;
1218+
}
1219+
mLastMemUsageReportTime = now;
1220+
}
1221+
Thread thread = new Thread() {
1222+
@Override public void run() {
1223+
try {
1224+
java.lang.Process proc = Runtime.getRuntime().exec(new String[] {
1225+
"procrank", });
1226+
final InputStreamReader converter = new InputStreamReader(
1227+
proc.getInputStream());
1228+
BufferedReader in = new BufferedReader(converter);
1229+
String line;
1230+
while (true) {
1231+
line = in.readLine();
1232+
if (line == null) {
1233+
break;
1234+
}
1235+
if (line.length() > 0) {
1236+
Slog.i(TAG, line);
1237+
}
1238+
}
1239+
converter.close();
1240+
} catch (IOException e) {
1241+
}
1242+
StringWriter sw = new StringWriter();
1243+
PrintWriter pw = new PrintWriter(sw);
1244+
dumpApplicationMemoryUsage(null, pw, " ", new String[] { }, true);
1245+
Slog.i(TAG, sw.toString());
1246+
synchronized (ActivityManagerService.this) {
1247+
long now = SystemClock.uptimeMillis();
1248+
if (mLastMemUsageReportTime < now) {
1249+
mLastMemUsageReportTime = now;
1250+
}
1251+
}
1252+
}
1253+
};
1254+
thread.start();
1255+
break;
1256+
}
12021257
}
12031258
}
12041259
};
@@ -1339,7 +1394,7 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
13391394
return;
13401395
}
13411396

1342-
mActivityManagerService.dumpApplicationMemoryUsage(fd, pw, " ", args);
1397+
mActivityManagerService.dumpApplicationMemoryUsage(fd, pw, " ", args, false);
13431398
}
13441399
}
13451400

@@ -2768,6 +2823,7 @@ final void appDiedLocked(ProcessRecord app, int pid,
27682823
addProcessToGcListLocked(rec);
27692824
}
27702825
}
2826+
mHandler.sendEmptyMessage(REPORT_MEM_USAGE);
27712827
scheduleAppGcsLocked();
27722828
}
27732829
}
@@ -9242,7 +9298,7 @@ public int compare(MemItem lhs, MemItem rhs) {
92429298
}
92439299

92449300
final void dumpApplicationMemoryUsage(FileDescriptor fd,
9245-
PrintWriter pw, String prefix, String[] args) {
9301+
PrintWriter pw, String prefix, String[] args, boolean brief) {
92469302
boolean dumpAll = false;
92479303

92489304
int opti = 0;
@@ -9382,15 +9438,19 @@ final void dumpApplicationMemoryUsage(FileDescriptor fd,
93829438
}
93839439
}
93849440

9385-
pw.println();
9386-
pw.println("Total PSS by process:");
9387-
dumpMemItems(pw, " ", procMems, true);
9388-
pw.println();
9441+
if (!brief) {
9442+
pw.println();
9443+
pw.println("Total PSS by process:");
9444+
dumpMemItems(pw, " ", procMems, true);
9445+
pw.println();
9446+
}
93899447
pw.println("Total PSS by OOM adjustment:");
93909448
dumpMemItems(pw, " ", oomMems, false);
9391-
pw.println();
9392-
pw.println("Total PSS by category:");
9393-
dumpMemItems(pw, " ", catMems, true);
9449+
if (!brief) {
9450+
pw.println();
9451+
pw.println("Total PSS by category:");
9452+
dumpMemItems(pw, " ", catMems, true);
9453+
}
93949454
pw.println();
93959455
pw.print("Total PSS: "); pw.print(totalPss); pw.println(" Kb");
93969456
}

0 commit comments

Comments
 (0)