diff options
author | Jeff Hao <jeffhao@google.com> | 2013-08-28 01:14:20 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-08-28 01:14:20 +0000 |
commit | 366291e2830b96268458dd6c5b15412e46d93145 (patch) | |
tree | cb306ba99b79340b70ab96a770a9c01a8c28129b | |
parent | 3c0624aa1ae9c7d147a3b0f3ea8c05fc4bc4187a (diff) | |
parent | ffee626c3ab32888014a03f69e1048368fdd5c19 (diff) | |
download | frameworks_base-366291e2830b96268458dd6c5b15412e46d93145.zip frameworks_base-366291e2830b96268458dd6c5b15412e46d93145.tar.gz frameworks_base-366291e2830b96268458dd6c5b15412e46d93145.tar.bz2 |
Merge "Add frameworks support for sample profiling from traceview gui."
-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 e0db5e7..e1d359c 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 fd01da9..5de1272 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); } /** |