Bug 863777 - Get native stack in ANR report; r=blassey

This commit is contained in:
Jim Chen 2013-06-14 12:42:10 -04:00
parent af22401d62
commit 632fc54b12

View File

@ -30,6 +30,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.util.UUID;
@ -445,7 +446,8 @@ public final class ANRReporter extends BroadcastReceiver
return total;
}
private static void fillPingFooter(OutputStream ping, MessageDigest checksum)
private static void fillPingFooter(OutputStream ping, MessageDigest checksum,
boolean haveNativeStack)
throws IOException {
// We are at the end of ANR data
@ -473,6 +475,17 @@ public final class ANRReporter extends BroadcastReceiver
Log.w(LOGTAG, e);
}
if (haveNativeStack) {
total += writePingPayload(ping, checksum, ("\"," +
"\"androidNativeStack\":\""));
String nativeStack = String.valueOf(getNativeStack());
int size = fillPingBlock(ping, checksum, new StringReader(nativeStack), null);
if (DEBUG) {
Log.d(LOGTAG, "wrote native stack, size = " + String.valueOf(size));
}
}
total += writePingPayload(ping, checksum, "\"}");
String base64Checksum = Base64.encodeToString(checksum.digest(), Base64.NO_WRAP);
@ -490,6 +503,8 @@ public final class ANRReporter extends BroadcastReceiver
}
private static void processTraces(Reader traces, File pingFile) {
boolean haveNativeStack = requestNativeStack();
try {
OutputStream ping = new BufferedOutputStream(
new FileOutputStream(pingFile), TRACES_BLOCK_SIZE);
@ -511,13 +526,16 @@ public final class ANRReporter extends BroadcastReceiver
if (DEBUG) {
Log.d(LOGTAG, "wrote traces, size = " + String.valueOf(size));
}
fillPingFooter(ping, checksum);
fillPingFooter(ping, checksum, haveNativeStack);
if (DEBUG) {
Log.d(LOGTAG, "finished creating ping file");
}
return;
} finally {
ping.close();
if (haveNativeStack) {
releaseNativeStack();
}
}
} catch (GeneralSecurityException e) {
Log.w(LOGTAG, e);