diff options
| author | Jeff Hao <jeffhao@google.com> | 2013-08-22 15:53:12 -0700 |
|---|---|---|
| committer | Jeff Hao <jeffhao@google.com> | 2013-08-27 17:46:18 -0700 |
| commit | ffee626c3ab32888014a03f69e1048368fdd5c19 (patch) | |
| tree | cb306ba99b79340b70ab96a770a9c01a8c28129b /core/java | |
| parent | 3c0624aa1ae9c7d147a3b0f3ea8c05fc4bc4187a (diff) | |
Add frameworks support for sample profiling from traceview gui.
(cherry picked from commit ca307d3138ff1e5d0bcf190eb24f3b8dbcabfaa9)
Change-Id: Ic193ddadf01c42905fc7c35a1a8bf89fba4556e9
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/ddm/DdmHandleProfiling.java | 52 | ||||
| -rw-r--r-- | core/java/android/os/Debug.java | 5 |
2 files changed, 54 insertions, 3 deletions
diff --git a/core/java/android/ddm/DdmHandleProfiling.java b/core/java/android/ddm/DdmHandleProfiling.java index e0db5e788845..e1d359c0aa0c 100644 --- a/core/java/android/ddm/DdmHandleProfiling.java +++ b/core/java/android/ddm/DdmHandleProfiling.java @@ -34,6 +34,8 @@ public class DdmHandleProfiling extends ChunkHandler { public static final int CHUNK_MPSS = type("MPSS"); public static final int CHUNK_MPSE = type("MPSE"); public static final int CHUNK_MPRQ = type("MPRQ"); + public static final int CHUNK_SPSS = type("SPSS"); + public static final int CHUNK_SPSE = type("SPSE"); private static DdmHandleProfiling mInstance = new DdmHandleProfiling(); @@ -50,6 +52,8 @@ public class DdmHandleProfiling extends ChunkHandler { DdmServer.registerHandler(CHUNK_MPSS, mInstance); DdmServer.registerHandler(CHUNK_MPSE, mInstance); DdmServer.registerHandler(CHUNK_MPRQ, mInstance); + DdmServer.registerHandler(CHUNK_SPSS, mInstance); + DdmServer.registerHandler(CHUNK_SPSE, mInstance); } /** @@ -82,6 +86,10 @@ public class DdmHandleProfiling extends ChunkHandler { return handleMPSE(request); } else if (type == CHUNK_MPRQ) { return handleMPRQ(request); + } else if (type == CHUNK_SPSS) { + return handleSPSS(request); + } else if (type == CHUNK_SPSE) { + return handleSPSE(request); } else { throw new RuntimeException("Unknown packet " + ChunkHandler.name(type)); @@ -144,7 +152,7 @@ public class DdmHandleProfiling extends ChunkHandler { } try { - Debug.startMethodTracingDdms(bufferSize, flags); + Debug.startMethodTracingDdms(bufferSize, flags, false, 0); return null; // empty response } catch (RuntimeException re) { return createFailChunk(1, re.getMessage()); @@ -184,5 +192,47 @@ public class DdmHandleProfiling extends ChunkHandler { byte[] reply = { (byte) result }; return new Chunk(CHUNK_MPRQ, reply, 0, reply.length); } + + /* + * Handle a "Sample Profiling w/Streaming Start" request. + */ + private Chunk handleSPSS(Chunk request) { + ByteBuffer in = wrapChunk(request); + + int bufferSize = in.getInt(); + int flags = in.getInt(); + int interval = in.getInt(); + if (false) { + Log.v("ddm-heap", "Sample prof stream start: size=" + bufferSize + + ", flags=" + flags + ", interval=" + interval); + } + + try { + Debug.startMethodTracingDdms(bufferSize, flags, true, interval); + return null; // empty response + } catch (RuntimeException re) { + return createFailChunk(1, re.getMessage()); + } + } + + /* + * Handle a "Sample Profiling w/Streaming End" request. + */ + private Chunk handleSPSE(Chunk request) { + if (false) { + Log.v("ddm-heap", "Sample prof stream end"); + } + + try { + Debug.stopMethodTracing(); + } catch (RuntimeException re) { + Log.w("ddm-heap", "Sample prof stream end failed: " + + re.getMessage()); + return createFailChunk(1, re.getMessage()); + } + + /* VM sent the (perhaps very large) response directly */ + return null; + } } diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index fd01da9f8afa..5de12727b788 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -518,8 +518,9 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo * * @hide */ - public static void startMethodTracingDdms(int bufferSize, int flags) { - VMDebug.startMethodTracingDdms(bufferSize, flags); + public static void startMethodTracingDdms(int bufferSize, int flags, + boolean samplingEnabled, int intervalUs) { + VMDebug.startMethodTracingDdms(bufferSize, flags, samplingEnabled, intervalUs); } /** |
