From d7fd1b88b89ca762afe5609d84a8eedfb611cbe1 Mon Sep 17 00:00:00 2001 From: Brian Carlstrom Date: Tue, 7 Dec 2010 14:45:29 -0800 Subject: Adding binary hprof support to SamplingProfiler SamplingProfiler refactored: - HprofData is now a separate class, the common data structure - SamplingProfiler uses HprofData as its runtime format - AsciiHprofWriter refactored from profiler, takes an HprofData - new BinaryHprofWriter to output HprofData in binary format - new BinaryHprofReader can recreate HprofData from binary file - new HprofBinaryToAscii command line tool to convert formats dalvik/src/main/java/dalvik/system/SamplingProfiler.java SamplingProfilerTest expanded to cover new HprofData class directly. Includes testing of conversion from various hand constructed HprofData to ascii and binary formats as well as from binary back to HprofData with out loss of data. dalvik/src/test/java/dalvik/system/SamplingProfilerTest.java Change-Id: I6fe06f5dbdbf2f0bf2de228d9761f84d75290ba7 --- .../main/java/dalvik/system/SamplingProfiler.java | 1585 +++++++++++++++++--- .../java/dalvik/system/SamplingProfilerTest.java | 261 +++- luni/src/main/java/libcore/base/Objects.java | 4 + 3 files changed, 1646 insertions(+), 204 deletions(-) diff --git a/dalvik/src/main/java/dalvik/system/SamplingProfiler.java b/dalvik/src/main/java/dalvik/system/SamplingProfiler.java index a0c9637..b741377 100644 --- a/dalvik/src/main/java/dalvik/system/SamplingProfiler.java +++ b/dalvik/src/main/java/dalvik/system/SamplingProfiler.java @@ -16,11 +16,17 @@ package dalvik.system; -import java.io.BufferedOutputStream; +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.EOFException; import java.io.File; -import java.io.FileOutputStream; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintStream; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -34,6 +40,8 @@ import java.util.Map; import java.util.Set; import java.util.Timer; import java.util.TimerTask; +import libcore.base.Objects; +import libcore.io.IoUtils; /** * A sampling profiler. It currently is implemented without any @@ -62,39 +70,1288 @@ import java.util.TimerTask; * // another period of measurement * profiler.stop(); * profiler.shutdown(); - * profiler.writeHprofData(System.out); + * HprofWriter writer = new AsciiHprofWriter(profiler.getHprofData(), System.out); + * writer.write(); * } * * @hide */ public final class SamplingProfiler { - /* - * Real hprof output examples don't start the thread and trace - * identifiers at one but seem to start at these arbitrary - * constants. It certainly seems useful to have relatively unique - * identifers when manual searching hprof output. + /** + * Represents sampling profiler data. Can be converted to ASCII or + * binary hprof-style output using {@link AsciiHprofWriter} or + * {@link BinaryHprofWriter}. + *

+ * The data includes: + *