am b7304593: Merge "Cap the size of StrictMode buffering we do before calling DropBox." into gingerbread
Merge commit 'b73045935cd8ec5d1a1c5e7a7ca800448b5789ea' into gingerbread-plus-aosp * commit 'b73045935cd8ec5d1a1c5e7a7ca800448b5789ea': Cap the size of StrictMode buffering we do before calling DropBox.
This commit is contained in:
@@ -6173,7 +6173,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return;
|
||||
|
||||
boolean bufferWasEmpty;
|
||||
|
||||
boolean needsFlush;
|
||||
final StringBuilder sb = isSystemApp ? mStrictModeBuffer : new StringBuilder(1024);
|
||||
synchronized (sb) {
|
||||
bufferWasEmpty = sb.length() == 0;
|
||||
@@ -6188,18 +6188,32 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
sb.append(crashInfo.stackTrace);
|
||||
}
|
||||
sb.append("\n");
|
||||
|
||||
// Only buffer up to ~64k. Various logging bits truncate
|
||||
// things at 128k.
|
||||
needsFlush = (sb.length() > 64 * 1024);
|
||||
}
|
||||
|
||||
// Non-system apps are isolated with a different tag & policy.
|
||||
// They're also not batched. Batching is useful during system
|
||||
// boot with strict system-wide logging policies and lots of
|
||||
// things firing, but not common with regular apps, which
|
||||
// won't ship with StrictMode dropboxing enabled.
|
||||
if (!isSystemApp) {
|
||||
// Flush immediately if the buffer's grown too large, or this
|
||||
// is a non-system app. Non-system apps are isolated with a
|
||||
// different tag & policy and not batched.
|
||||
//
|
||||
// Batching is useful during internal testing with
|
||||
// StrictMode settings turned up high. Without batching,
|
||||
// thousands of separate files could be created on boot.
|
||||
if (!isSystemApp || needsFlush) {
|
||||
new Thread("Error dump: " + dropboxTag) {
|
||||
@Override
|
||||
public void run() {
|
||||
dbox.addText(dropboxTag, sb.toString());
|
||||
String report;
|
||||
synchronized (sb) {
|
||||
report = sb.toString();
|
||||
sb.delete(0, sb.length());
|
||||
sb.trimToSize();
|
||||
}
|
||||
if (report.length() != 0) {
|
||||
dbox.addText(dropboxTag, report);
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
return;
|
||||
@@ -6207,8 +6221,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
|
||||
// System app batching:
|
||||
if (!bufferWasEmpty) {
|
||||
// An existing dropbox-writing thread is outstanding and
|
||||
// will handle it.
|
||||
// An existing dropbox-writing thread is outstanding, so
|
||||
// we don't need to start it up. The existing thread will
|
||||
// catch the buffer appends we just did.
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user