diff options
19 files changed, 143 insertions, 53 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 62ed697..d65a6a2 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -21,6 +21,7 @@ import android.os.IBinder; import com.android.internal.app.IUsageStats; import com.android.internal.os.PkgUsageStats; import com.android.internal.os.TransferPipe; +import com.android.internal.util.FastPrintWriter; import com.android.internal.util.MemInfoReader; import android.content.ComponentName; @@ -2206,12 +2207,14 @@ public class ActivityManager { */ public static void dumpPackageStateStatic(FileDescriptor fd, String packageName) { FileOutputStream fout = new FileOutputStream(fd); - PrintWriter pw = new PrintWriter(fout); - dumpService(pw, fd, Context.ACTIVITY_SERVICE, new String[] { "package", packageName}); + PrintWriter pw = new FastPrintWriter(fout); + dumpService(pw, fd, Context.ACTIVITY_SERVICE, new String[] { "package", packageName }); pw.println(); - dumpService(pw, fd, "package", new String[] { packageName}); + dumpService(pw, fd, "procstats", new String[] { packageName }); pw.println(); - dumpService(pw, fd, BatteryStats.SERVICE_NAME, new String[] { packageName}); + dumpService(pw, fd, "package", new String[] { packageName }); + pw.println(); + dumpService(pw, fd, BatteryStats.SERVICE_NAME, new String[] { packageName }); pw.flush(); } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 066775d..bf89fa6 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -93,6 +93,7 @@ import android.security.AndroidKeyStoreProvider; import com.android.internal.os.BinderInternal; import com.android.internal.os.RuntimeInit; import com.android.internal.os.SamplingProfilerIntegration; +import com.android.internal.util.FastPrintWriter; import com.android.internal.util.Objects; import com.android.org.conscrypt.OpenSSLSocketImpl; @@ -899,7 +900,7 @@ public final class ActivityThread { public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) { FileOutputStream fout = new FileOutputStream(fd); - PrintWriter pw = new PrintWriter(fout); + PrintWriter pw = new FastPrintWriter(fout); try { return dumpMemInfo(pw, checkin, dumpInfo, dumpDalvik); } finally { @@ -1176,7 +1177,7 @@ public final class ActivityThread { @Override public void dumpDbInfo(FileDescriptor fd, String[] args) { - PrintWriter pw = new PrintWriter(new FileOutputStream(fd)); + PrintWriter pw = new FastPrintWriter(new FileOutputStream(fd)); PrintWriterPrinter printer = new PrintWriterPrinter(pw); SQLiteDebug.dump(printer, args); pw.flush(); @@ -2730,7 +2731,8 @@ public final class ActivityThread { try { Service s = mServices.get(info.token); if (s != null) { - PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); + PrintWriter pw = new FastPrintWriter(new FileOutputStream( + info.fd.getFileDescriptor())); s.dump(info.fd.getFileDescriptor(), pw, info.args); pw.flush(); } @@ -2745,7 +2747,8 @@ public final class ActivityThread { try { ActivityClientRecord r = mActivities.get(info.token); if (r != null && r.activity != null) { - PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); + PrintWriter pw = new FastPrintWriter(new FileOutputStream( + info.fd.getFileDescriptor())); r.activity.dump(info.prefix, info.fd.getFileDescriptor(), pw, info.args); pw.flush(); } @@ -2760,7 +2763,8 @@ public final class ActivityThread { try { ProviderClientRecord r = mLocalProviders.get(info.token); if (r != null && r.mLocalProvider != null) { - PrintWriter pw = new PrintWriter(new FileOutputStream(info.fd.getFileDescriptor())); + PrintWriter pw = new FastPrintWriter(new FileOutputStream( + info.fd.getFileDescriptor())); r.mLocalProvider.dump(info.fd.getFileDescriptor(), pw, info.args); pw.flush(); } diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java index 954476d..c117486 100644 --- a/core/java/android/app/ApplicationErrorReport.java +++ b/core/java/android/app/ApplicationErrorReport.java @@ -28,6 +28,7 @@ import android.os.SystemClock; import android.os.SystemProperties; import android.provider.Settings; import android.util.Printer; +import com.android.internal.util.FastPrintWriter; import java.io.PrintWriter; import java.io.StringWriter; @@ -327,7 +328,9 @@ public class ApplicationErrorReport implements Parcelable { */ public CrashInfo(Throwable tr) { StringWriter sw = new StringWriter(); - tr.printStackTrace(new PrintWriter(sw)); + PrintWriter pw = new FastPrintWriter(sw, false, 256); + tr.printStackTrace(pw); + pw.flush(); stackTrace = sw.toString(); exceptionMessage = tr.getMessage(); diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java index 1b1d341..89ee145 100644 --- a/core/java/android/app/BackStackRecord.java +++ b/core/java/android/app/BackStackRecord.java @@ -21,6 +21,7 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.Log; import android.util.LogWriter; +import com.android.internal.util.FastPrintWriter; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -583,8 +584,9 @@ final class BackStackRecord extends FragmentTransaction implements if (FragmentManagerImpl.DEBUG) { Log.v(TAG, "Commit: " + this); LogWriter logw = new LogWriter(Log.VERBOSE, TAG); - PrintWriter pw = new PrintWriter(logw); + PrintWriter pw = new FastPrintWriter(logw, false, 1024); dump(" ", null, pw, null); + pw.flush(); } mCommitted = true; if (mAddToBackStack) { @@ -691,8 +693,9 @@ final class BackStackRecord extends FragmentTransaction implements if (FragmentManagerImpl.DEBUG) { Log.v(TAG, "popFromBackStack: " + this); LogWriter logw = new LogWriter(Log.VERBOSE, TAG); - PrintWriter pw = new PrintWriter(logw); + PrintWriter pw = new FastPrintWriter(logw, false, 1024); dump(" ", null, pw, null); + pw.flush(); } bumpBackStackNesting(-1); diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 72c9156..7358f73 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -36,6 +36,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import com.android.internal.util.FastPrintWriter; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -445,12 +446,13 @@ final class FragmentManagerImpl extends FragmentManager { private void throwException(RuntimeException ex) { Log.e(TAG, ex.getMessage()); LogWriter logw = new LogWriter(Log.ERROR, TAG); - PrintWriter pw = new PrintWriter(logw); + PrintWriter pw = new FastPrintWriter(logw, false, 1024); if (mActivity != null) { Log.e(TAG, "Activity state:"); try { mActivity.dump(" ", null, pw, new String[] { }); } catch (Exception e) { + pw.flush(); Log.e(TAG, "Failed dumping state", e); } } else { @@ -458,9 +460,11 @@ final class FragmentManagerImpl extends FragmentManager { try { dump(" ", null, pw, new String[] { }); } catch (Exception e) { + pw.flush(); Log.e(TAG, "Failed dumping state", e); } } + pw.flush(); throw ex; } @@ -1806,8 +1810,9 @@ final class FragmentManagerImpl extends FragmentManager { Log.v(TAG, "restoreAllState: back stack #" + i + " (index " + bse.mIndex + "): " + bse); LogWriter logw = new LogWriter(Log.VERBOSE, TAG); - PrintWriter pw = new PrintWriter(logw); + PrintWriter pw = new FastPrintWriter(logw, false, 1024); bse.dump(" ", pw, false); + pw.flush(); } mBackStack.add(bse); if (bse.mIndex >= 0) { diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index 362ae29..c5f473e 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -16,6 +16,7 @@ package android.os; +import com.android.internal.util.FastPrintWriter; import com.android.internal.util.TypedProperties; import android.util.Log; @@ -476,7 +477,7 @@ public final class Debug PrintWriter outStream = null; try { FileOutputStream fos = new FileOutputStream(SYSFS_QEMU_TRACE_STATE); - outStream = new PrintWriter(new OutputStreamWriter(fos)); + outStream = new FastPrintWriter(fos); outStream.println("1"); } catch (Exception e) { } finally { @@ -504,7 +505,7 @@ public final class Debug PrintWriter outStream = null; try { FileOutputStream fos = new FileOutputStream(SYSFS_QEMU_TRACE_STATE); - outStream = new PrintWriter(new OutputStreamWriter(fos)); + outStream = new FastPrintWriter(fos); outStream.println("0"); } catch (Exception e) { // We could print an error message here but we probably want diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index a9abdc5..d794ca6 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -32,6 +32,7 @@ import android.view.IWindowManager; import com.android.internal.os.RuntimeInit; +import com.android.internal.util.FastPrintWriter; import dalvik.system.BlockGuard; import dalvik.system.CloseGuard; import dalvik.system.VMDebug; @@ -1700,7 +1701,9 @@ public final class StrictMode { /* package */ static void readAndHandleBinderCallViolations(Parcel p) { // Our own stack trace to append StringWriter sw = new StringWriter(); - new LogStackTrace().printStackTrace(new PrintWriter(sw)); + PrintWriter pw = new FastPrintWriter(sw, false, 256); + new LogStackTrace().printStackTrace(pw); + pw.flush(); String ourStack = sw.toString(); int policyMask = getThreadPolicyMask(); diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java index 1c3709f..6a6f027 100644 --- a/core/java/android/util/Log.java +++ b/core/java/android/util/Log.java @@ -17,6 +17,7 @@ package android.util; import com.android.internal.os.RuntimeInit; +import com.android.internal.util.FastPrintWriter; import java.io.PrintWriter; import java.io.StringWriter; @@ -315,8 +316,9 @@ public final class Log { } StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 256); tr.printStackTrace(pw); + pw.flush(); return sw.toString(); } diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java index 7cda01c..0eb6d63 100644 --- a/core/java/android/view/WindowManagerGlobal.java +++ b/core/java/android/view/WindowManagerGlobal.java @@ -29,6 +29,7 @@ import android.util.AndroidRuntimeException; import android.util.ArraySet; import android.util.Log; import android.view.inputmethod.InputMethodManager; +import com.android.internal.util.FastPrintWriter; import java.io.FileDescriptor; import java.io.FileOutputStream; @@ -414,7 +415,7 @@ public final class WindowManagerGlobal { public void dumpGfxInfo(FileDescriptor fd) { FileOutputStream fout = new FileOutputStream(fd); - PrintWriter pw = new PrintWriter(fout); + PrintWriter pw = new FastPrintWriter(fout); try { synchronized (mLock) { final int count = mViews.size(); diff --git a/core/java/com/android/internal/logging/AndroidHandler.java b/core/java/com/android/internal/logging/AndroidHandler.java index 12f6a4f..f55a31f 100644 --- a/core/java/com/android/internal/logging/AndroidHandler.java +++ b/core/java/com/android/internal/logging/AndroidHandler.java @@ -17,6 +17,7 @@ package com.android.internal.logging; import android.util.Log; +import com.android.internal.util.FastPrintWriter; import dalvik.system.DalvikLogging; import dalvik.system.DalvikLogHandler; @@ -91,7 +92,7 @@ public class AndroidHandler extends Handler implements DalvikLogHandler { Throwable thrown = r.getThrown(); if (thrown != null) { StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 256); sw.write(r.getMessage()); sw.write("\n"); thrown.printStackTrace(pw); diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 949a499..f95bb4c 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -47,6 +47,7 @@ import android.util.TimeUtils; import com.android.internal.annotations.GuardedBy; import com.android.internal.net.NetworkStatsFactory; +import com.android.internal.util.FastPrintWriter; import com.android.internal.util.JournaledFile; import com.google.android.collect.Sets; @@ -4461,12 +4462,13 @@ public final class BatteryStatsImpl extends BatteryStats { Slog.w(TAG, "New history ends before old history!"); } else if (!out.same(mHistoryReadTmp)) { long now = getHistoryBaseTime() + SystemClock.elapsedRealtime(); - PrintWriter pw = new PrintWriter(new LogWriter(android.util.Log.WARN, TAG)); + PrintWriter pw = new FastPrintWriter(new LogWriter(android.util.Log.WARN, TAG)); pw.println("Histories differ!"); pw.println("Old history:"); (new HistoryPrinter()).printNextItem(pw, out, now); pw.println("New history:"); (new HistoryPrinter()).printNextItem(pw, mHistoryReadTmp, now); + pw.flush(); } } return true; diff --git a/core/java/com/android/internal/os/ProcessStats.java b/core/java/com/android/internal/os/ProcessStats.java index bd0914d..b63dce5 100644 --- a/core/java/com/android/internal/os/ProcessStats.java +++ b/core/java/com/android/internal/os/ProcessStats.java @@ -22,6 +22,7 @@ import android.os.Process; import android.os.StrictMode; import android.os.SystemClock; import android.util.Slog; +import com.android.internal.util.FastPrintWriter; import java.io.File; import java.io.FileInputStream; @@ -675,13 +676,14 @@ public class ProcessStats { final public String printCurrentLoad() { StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 128); pw.print("Load: "); pw.print(mLoad1); pw.print(" / "); pw.print(mLoad5); pw.print(" / "); pw.println(mLoad15); + pw.flush(); return sw.toString(); } @@ -689,7 +691,7 @@ public class ProcessStats { buildWorkingProcs(); StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 1024); pw.print("CPU usage from "); if (now > mLastSampleTime) { @@ -740,7 +742,8 @@ public class ProcessStats { printProcessCPU(pw, "", -1, "TOTAL", totalTime, mRelUserTime, mRelSystemTime, mRelIoWaitTime, mRelIrqTime, mRelSoftIrqTime, 0, 0); - + + pw.flush(); return sw.toString(); } diff --git a/core/java/com/android/internal/util/DumpUtils.java b/core/java/com/android/internal/util/DumpUtils.java index 7b8c582..65b56ec 100644 --- a/core/java/com/android/internal/util/DumpUtils.java +++ b/core/java/com/android/internal/util/DumpUtils.java @@ -40,7 +40,7 @@ public final class DumpUtils { if (handler.runWithScissors(new Runnable() { @Override public void run() { - PrintWriter lpw = new PrintWriter(sw); + PrintWriter lpw = new FastPrintWriter(sw); dump.dump(lpw); lpw.close(); } diff --git a/core/java/com/android/internal/util/FastPrintWriter.java b/core/java/com/android/internal/util/FastPrintWriter.java index 25dc80e..fa53cfa 100644 --- a/core/java/com/android/internal/util/FastPrintWriter.java +++ b/core/java/com/android/internal/util/FastPrintWriter.java @@ -13,8 +13,6 @@ import java.nio.charset.CoderResult; import java.nio.charset.CodingErrorAction; public class FastPrintWriter extends PrintWriter { - private static final int BUFFER_LEN = 8192; - private static Writer sDummyWriter = new Writer() { @Override public void close() throws IOException { @@ -34,15 +32,19 @@ public class FastPrintWriter extends PrintWriter { } }; - private final char[] mText = new char[BUFFER_LEN]; + private final int mBufferLen; + private final char[] mText; private int mPos; final private OutputStream mOutputStream; - final private Writer mWriter; final private boolean mAutoFlush; final private String mSeparator; + + final private Writer mWriter; + private CharsetEncoder mCharset; - final private ByteBuffer mBytes = ByteBuffer.allocate(BUFFER_LEN); + final private ByteBuffer mBytes; + private boolean mIoError; /** @@ -56,12 +58,7 @@ public class FastPrintWriter extends PrintWriter { * if {@code out} is {@code null}. */ public FastPrintWriter(OutputStream out) { - super(sDummyWriter); - mOutputStream = out; - mWriter = null; - mAutoFlush = false; - mSeparator = System.lineSeparator(); - initDefaultEncoder(); + this(out, false, 8192); } /** @@ -79,7 +76,34 @@ public class FastPrintWriter extends PrintWriter { * if {@code out} is {@code null}. */ public FastPrintWriter(OutputStream out, boolean autoFlush) { + this(out, autoFlush, 8192); + } + + /** + * Constructs a new {@code PrintWriter} with {@code out} as its target + * stream and a custom buffer size. The parameter {@code autoFlush} determines + * if the print writer automatically flushes its contents to the target stream + * when a newline is encountered. + * + * @param out + * the target output stream. + * @param autoFlush + * indicates whether contents are flushed upon encountering a + * newline sequence. + * @param bufferLen + * specifies the size of the FastPrintWriter's internal buffer; the + * default is 8192. + * @throws NullPointerException + * if {@code out} is {@code null}. + */ + public FastPrintWriter(OutputStream out, boolean autoFlush, int bufferLen) { super(sDummyWriter, autoFlush); + if (out == null) { + throw new NullPointerException("out is null"); + } + mBufferLen = bufferLen; + mText = new char[bufferLen]; + mBytes = ByteBuffer.allocate(mBufferLen); mOutputStream = out; mWriter = null; mAutoFlush = autoFlush; @@ -92,18 +116,17 @@ public class FastPrintWriter extends PrintWriter { * writer. By default, the new print writer does not automatically flush its * contents to the target writer when a newline is encountered. * + * <p>NOTE: Unlike PrintWriter, this version will still do buffering inside of + * FastPrintWriter before sending data to the Writer. This means you must call + * flush() before retrieving any data from the Writer.</p> + * * @param wr * the target writer. * @throws NullPointerException * if {@code wr} is {@code null}. */ public FastPrintWriter(Writer wr) { - super(sDummyWriter); - mOutputStream = null; - mWriter = wr; - mAutoFlush = false; - mSeparator = System.lineSeparator(); - initDefaultEncoder(); + this(wr, false, 8192); } /** @@ -121,7 +144,34 @@ public class FastPrintWriter extends PrintWriter { * if {@code out} is {@code null}. */ public FastPrintWriter(Writer wr, boolean autoFlush) { + this(wr, autoFlush, 8192); + } + + /** + * Constructs a new {@code PrintWriter} with {@code out} as its target + * writer and a custom buffer size. The parameter {@code autoFlush} determines + * if the print writer automatically flushes its contents to the target writer + * when a newline is encountered. + * + * @param wr + * the target writer. + * @param autoFlush + * indicates whether to flush contents upon encountering a + * newline sequence. + * @param bufferLen + * specifies the size of the FastPrintWriter's internal buffer; the + * default is 8192. + * @throws NullPointerException + * if {@code wr} is {@code null}. + */ + public FastPrintWriter(Writer wr, boolean autoFlush, int bufferLen) { super(sDummyWriter, autoFlush); + if (wr == null) { + throw new NullPointerException("wr is null"); + } + mBufferLen = bufferLen; + mText = new char[bufferLen]; + mBytes = null; mOutputStream = null; mWriter = wr; mAutoFlush = autoFlush; @@ -181,7 +231,7 @@ public class FastPrintWriter extends PrintWriter { private void appendLocked(char c) throws IOException { int pos = mPos; - if (pos >= (BUFFER_LEN-1)) { + if (pos >= (mBufferLen-1)) { flushLocked(); pos = mPos; } @@ -190,6 +240,7 @@ public class FastPrintWriter extends PrintWriter { } private void appendLocked(String str, int i, final int length) throws IOException { + final int BUFFER_LEN = mBufferLen; if (length > BUFFER_LEN) { final int end = i + length; while (i < end) { @@ -209,6 +260,7 @@ public class FastPrintWriter extends PrintWriter { } private void appendLocked(char[] buf, int i, final int length) throws IOException { + final int BUFFER_LEN = mBufferLen; if (length > BUFFER_LEN) { final int end = i + length; while (i < end) { diff --git a/location/lib/java/com/android/location/provider/LocationProviderBase.java b/location/lib/java/com/android/location/provider/LocationProviderBase.java index 8a5a739..150c289 100644 --- a/location/lib/java/com/android/location/provider/LocationProviderBase.java +++ b/location/lib/java/com/android/location/provider/LocationProviderBase.java @@ -35,6 +35,7 @@ import android.util.Log; import com.android.internal.location.ILocationProvider; import com.android.internal.location.ProviderProperties; import com.android.internal.location.ProviderRequest; +import com.android.internal.util.FastPrintWriter; /** * Base class for location providers implemented as unbundled services. @@ -106,7 +107,7 @@ public abstract class LocationProviderBase { } @Override public void dump(FileDescriptor fd, String[] args) { - PrintWriter pw = new PrintWriter(new FileOutputStream(fd)); + PrintWriter pw = new FastPrintWriter(new FileOutputStream(fd)); onDump(fd, pw, args); pw.flush(); } diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java index 32fc18e..12a0549 100644 --- a/services/java/com/android/server/BatteryService.java +++ b/services/java/com/android/server/BatteryService.java @@ -16,6 +16,7 @@ package com.android.server; +import android.os.BatteryStats; import com.android.internal.app.IBatteryStats; import com.android.server.am.BatteryStatsService; @@ -89,7 +90,6 @@ public final class BatteryService extends Binder { private static final int DUMP_MAX_LENGTH = 24 * 1024; private static final String[] DUMPSYS_ARGS = new String[] { "--checkin", "--unplugged" }; - private static final String BATTERY_STATS_SERVICE_NAME = "batteryinfo"; private static final String DUMPSYS_DATA_PATH = "/data/system/"; @@ -509,7 +509,7 @@ public final class BatteryService extends Binder { } private void logBatteryStatsLocked() { - IBinder batteryInfoService = ServiceManager.getService(BATTERY_STATS_SERVICE_NAME); + IBinder batteryInfoService = ServiceManager.getService(BatteryStats.SERVICE_NAME); if (batteryInfoService == null) return; DropBoxManager db = (DropBoxManager) mContext.getSystemService(Context.DROPBOX_SERVICE); @@ -519,7 +519,7 @@ public final class BatteryService extends Binder { FileOutputStream dumpStream = null; try { // dump the service to a file - dumpFile = new File(DUMPSYS_DATA_PATH + BATTERY_STATS_SERVICE_NAME + ".dump"); + dumpFile = new File(DUMPSYS_DATA_PATH + BatteryStats.SERVICE_NAME + ".dump"); dumpStream = new FileOutputStream(dumpFile); batteryInfoService.dump(dumpStream.getFD(), DUMPSYS_ARGS); FileUtils.sync(dumpStream); diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 6b13fc7..351849b 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -33,6 +33,7 @@ import com.android.internal.app.IAppOpsService; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.ProcessStats; import com.android.internal.os.TransferPipe; +import com.android.internal.util.FastPrintWriter; import com.android.internal.util.FastXmlSerializer; import com.android.server.AppOpsService; import com.android.server.AttributeCache; @@ -1367,9 +1368,9 @@ public final class ActivityManagerService extends ActivityManagerNative StringBuilder dropBuilder = new StringBuilder(1024); StringBuilder logBuilder = new StringBuilder(1024); StringWriter oomSw = new StringWriter(); - PrintWriter oomPw = new PrintWriter(oomSw); + PrintWriter oomPw = new FastPrintWriter(oomSw, false, 256); StringWriter catSw = new StringWriter(); - PrintWriter catPw = new PrintWriter(catSw); + PrintWriter catPw = new FastPrintWriter(catSw, false, 256); String[] emptyArgs = new String[] { }; StringBuilder tag = new StringBuilder(128); StringBuilder stack = new StringBuilder(128); @@ -1379,6 +1380,7 @@ public final class ActivityManagerService extends ActivityManagerNative dropBuilder.append(stack); dropBuilder.append('\n'); dropBuilder.append('\n'); + oomPw.flush(); String oomString = oomSw.toString(); dropBuilder.append(oomString); dropBuilder.append('\n'); @@ -1414,6 +1416,7 @@ public final class ActivityManagerService extends ActivityManagerNative catPw.println(); dumpActivitiesLocked(null, catPw, emptyArgs, 0, false, false, null); } + catPw.flush(); dropBuilder.append(catSw.toString()); addErrorToDropBox("lowmem", null, "system_server", null, null, tag.toString(), dropBuilder.toString(), null, null); diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 9ea4262..9308feb 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -35,6 +35,7 @@ import com.android.internal.app.IMediaContainerService; import com.android.internal.app.ResolverActivity; import com.android.internal.content.NativeLibraryHelper; import com.android.internal.content.PackageHelper; +import com.android.internal.util.FastPrintWriter; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; import com.android.server.DeviceStorageMonitorService; @@ -3363,7 +3364,7 @@ public class PackageManagerService extends IPackageManager.Stub { try { File fname = getSettingsProblemFile(); FileOutputStream out = new FileOutputStream(fname, true); - PrintWriter pw = new PrintWriter(out); + PrintWriter pw = new FastPrintWriter(out); SimpleDateFormat formatter = new SimpleDateFormat(); String dateString = formatter.format(new Date(System.currentTimeMillis())); pw.println(dateString + ": " + msg); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 65ca00d..0babeea 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -28,6 +28,7 @@ import android.view.IWindowId; import com.android.internal.app.IBatteryStats; import com.android.internal.policy.PolicyManager; import com.android.internal.policy.impl.PhoneWindowManager; +import com.android.internal.util.FastPrintWriter; import com.android.internal.view.IInputContext; import com.android.internal.view.IInputMethodClient; import com.android.internal.view.IInputMethodManager; @@ -5318,8 +5319,9 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_SCREEN_ON || DEBUG_BOOT) Slog.i(TAG, "******************** ENABLING SCREEN!"); if (false) { StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 1024); this.dump(null, pw, null); + pw.flush(); Slog.i(TAG, sw.toString()); } try { @@ -7898,7 +7900,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState ws = mRebuildTmp[i]; if (ws.mRebuilding) { StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 1024); ws.dump(pw, "", true); pw.flush(); Slog.w(TAG, "This window was lost: " + ws); @@ -10473,7 +10475,7 @@ public class WindowManagerService extends IWindowManager.Stub */ public void saveANRStateLocked(AppWindowToken appWindowToken, WindowState windowState) { StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + PrintWriter pw = new FastPrintWriter(sw, false, 1024); pw.println(" ANR time: " + DateFormat.getInstance().format(new Date())); if (appWindowToken != null) { pw.println(" Application at fault: " + appWindowToken.stringName); |