17b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project/* 27b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * 47b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * you may not use this file except in compliance with the License. 67b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * You may obtain a copy of the License at 77b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * 87b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * 107b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * See the License for the specific language governing permissions and 147b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * limitations under the License. 157b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 167b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 177b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectpackage android.ddm; 187b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 197b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport org.apache.harmony.dalvik.ddmc.Chunk; 207b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport org.apache.harmony.dalvik.ddmc.ChunkHandler; 217b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport org.apache.harmony.dalvik.ddmc.DdmServer; 227b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport android.os.Debug; 237b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport android.util.Log; 247b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport java.io.IOException; 257b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectimport java.nio.ByteBuffer; 267b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 277b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project/** 287b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Handle profiling requests. 297b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 307b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Projectpublic class DdmHandleProfiling extends ChunkHandler { 317b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 327b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public static final int CHUNK_MPRS = type("MPRS"); 337b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public static final int CHUNK_MPRE = type("MPRE"); 3472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden public static final int CHUNK_MPSS = type("MPSS"); 3572a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden public static final int CHUNK_MPSE = type("MPSE"); 367b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public static final int CHUNK_MPRQ = type("MPRQ"); 377be3a138d57713bbe6d624998620081807e65b71Jeff Hao public static final int CHUNK_SPSS = type("SPSS"); 387be3a138d57713bbe6d624998620081807e65b71Jeff Hao public static final int CHUNK_SPSE = type("SPSE"); 397b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 407b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project private static DdmHandleProfiling mInstance = new DdmHandleProfiling(); 417b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 427b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 437b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /* singleton, do not instantiate */ 447b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project private DdmHandleProfiling() {} 457b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 467b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /** 477b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Register for the messages we're interested in. 487b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 497b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public static void register() { 507b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project DdmServer.registerHandler(CHUNK_MPRS, mInstance); 517b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project DdmServer.registerHandler(CHUNK_MPRE, mInstance); 5272a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden DdmServer.registerHandler(CHUNK_MPSS, mInstance); 5372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden DdmServer.registerHandler(CHUNK_MPSE, mInstance); 547b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project DdmServer.registerHandler(CHUNK_MPRQ, mInstance); 557be3a138d57713bbe6d624998620081807e65b71Jeff Hao DdmServer.registerHandler(CHUNK_SPSS, mInstance); 567be3a138d57713bbe6d624998620081807e65b71Jeff Hao DdmServer.registerHandler(CHUNK_SPSE, mInstance); 577b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 587b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 597b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /** 607b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Called when the DDM server connects. The handler is allowed to 617b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * send messages to the server. 627b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 637b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public void connected() {} 647b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 657b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /** 667b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Called when the DDM server disconnects. Can be used to disable 677b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * periodic transmissions or clean up saved state. 687b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 697b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public void disconnected() {} 707b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 717b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /** 727b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Handle a chunk of data. 737b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 747b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project public Chunk handleChunk(Chunk request) { 7543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) 767b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project Log.v("ddm-heap", "Handling " + name(request.type) + " chunk"); 777b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project int type = request.type; 787b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 797b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project if (type == CHUNK_MPRS) { 807b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return handleMPRS(request); 817b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } else if (type == CHUNK_MPRE) { 827b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return handleMPRE(request); 8372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } else if (type == CHUNK_MPSS) { 8472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden return handleMPSS(request); 8572a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } else if (type == CHUNK_MPSE) { 8672a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden return handleMPSE(request); 877b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } else if (type == CHUNK_MPRQ) { 887b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return handleMPRQ(request); 897be3a138d57713bbe6d624998620081807e65b71Jeff Hao } else if (type == CHUNK_SPSS) { 907be3a138d57713bbe6d624998620081807e65b71Jeff Hao return handleSPSS(request); 917be3a138d57713bbe6d624998620081807e65b71Jeff Hao } else if (type == CHUNK_SPSE) { 927be3a138d57713bbe6d624998620081807e65b71Jeff Hao return handleSPSE(request); 937b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } else { 947b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project throw new RuntimeException("Unknown packet " 957b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project + ChunkHandler.name(type)); 967b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 977b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 987b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 997b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /* 1007b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Handle a "Method PRofiling Start" request. 1017b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 1027b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project private Chunk handleMPRS(Chunk request) { 1037b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project ByteBuffer in = wrapChunk(request); 1047b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1057b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project int bufferSize = in.getInt(); 1067b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project int flags = in.getInt(); 1077b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project int len = in.getInt(); 1087b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project String fileName = getString(in, len); 10943a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) 1107b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project Log.v("ddm-heap", "Method profiling start: filename='" + fileName 1117b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project + "', size=" + bufferSize + ", flags=" + flags); 1127b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1137b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project try { 1147b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project Debug.startMethodTracing(fileName, bufferSize, flags); 1157b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return null; // empty response 1167b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } catch (RuntimeException re) { 1177b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return createFailChunk(1, re.getMessage()); 1187b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 1197b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 1207b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1217b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /* 1227b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Handle a "Method PRofiling End" request. 1237b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 1247b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project private Chunk handleMPRE(Chunk request) { 1257b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project byte result; 1267b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1277b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project try { 1287b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project Debug.stopMethodTracing(); 1297b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project result = 0; 1307b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } catch (RuntimeException re) { 1317b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project Log.w("ddm-heap", "Method profiling end failed: " 1327b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project + re.getMessage()); 1337b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project result = 1; 1347b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 1357b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1367b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /* create a non-empty reply so the handler fires on completion */ 1377b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project byte[] reply = { result }; 1387b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return new Chunk(CHUNK_MPRE, reply, 0, reply.length); 1397b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 1407b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1417b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /* 14272a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden * Handle a "Method Profiling w/Streaming Start" request. 14372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden */ 14472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden private Chunk handleMPSS(Chunk request) { 14572a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden ByteBuffer in = wrapChunk(request); 14672a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 14772a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden int bufferSize = in.getInt(); 14872a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden int flags = in.getInt(); 14943a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) { 15072a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden Log.v("ddm-heap", "Method prof stream start: size=" + bufferSize 15172a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden + ", flags=" + flags); 15272a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } 15372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 15472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden try { 1557be3a138d57713bbe6d624998620081807e65b71Jeff Hao Debug.startMethodTracingDdms(bufferSize, flags, false, 0); 15672a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden return null; // empty response 15772a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } catch (RuntimeException re) { 15872a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden return createFailChunk(1, re.getMessage()); 15972a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } 16072a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } 16172a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 16272a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden /* 16372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden * Handle a "Method Profiling w/Streaming End" request. 16472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden */ 16572a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden private Chunk handleMPSE(Chunk request) { 16672a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden byte result; 16772a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 16843a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) { 16972a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden Log.v("ddm-heap", "Method prof stream end"); 17072a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } 17172a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 17272a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden try { 17372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden Debug.stopMethodTracing(); 17472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden result = 0; 17572a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } catch (RuntimeException re) { 17672a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden Log.w("ddm-heap", "Method prof stream end failed: " 17772a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden + re.getMessage()); 17872a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden return createFailChunk(1, re.getMessage()); 17972a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } 18072a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 18172a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden /* VM sent the (perhaps very large) response directly */ 18272a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden return null; 18372a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden } 18472a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden 18572a20db0c71c6bddaa9fd2e4046242fc9d540e1cAndy McFadden /* 1867b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project * Handle a "Method PRofiling Query" request. 1877b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project */ 1887b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project private Chunk handleMPRQ(Chunk request) { 189ac27705f75e74f022de8c7888b14b49fed899176Jeff Hao int result = Debug.getMethodTracingMode(); 1907b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 1917b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project /* create a non-empty reply so the handler fires on completion */ 1927b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project byte[] reply = { (byte) result }; 1937b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project return new Chunk(CHUNK_MPRQ, reply, 0, reply.length); 1947b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project } 1957be3a138d57713bbe6d624998620081807e65b71Jeff Hao 1967be3a138d57713bbe6d624998620081807e65b71Jeff Hao /* 1977be3a138d57713bbe6d624998620081807e65b71Jeff Hao * Handle a "Sample Profiling w/Streaming Start" request. 1987be3a138d57713bbe6d624998620081807e65b71Jeff Hao */ 1997be3a138d57713bbe6d624998620081807e65b71Jeff Hao private Chunk handleSPSS(Chunk request) { 2007be3a138d57713bbe6d624998620081807e65b71Jeff Hao ByteBuffer in = wrapChunk(request); 2017be3a138d57713bbe6d624998620081807e65b71Jeff Hao 2027be3a138d57713bbe6d624998620081807e65b71Jeff Hao int bufferSize = in.getInt(); 2037be3a138d57713bbe6d624998620081807e65b71Jeff Hao int flags = in.getInt(); 2047be3a138d57713bbe6d624998620081807e65b71Jeff Hao int interval = in.getInt(); 2057be3a138d57713bbe6d624998620081807e65b71Jeff Hao if (false) { 2067be3a138d57713bbe6d624998620081807e65b71Jeff Hao Log.v("ddm-heap", "Sample prof stream start: size=" + bufferSize 2077be3a138d57713bbe6d624998620081807e65b71Jeff Hao + ", flags=" + flags + ", interval=" + interval); 2087be3a138d57713bbe6d624998620081807e65b71Jeff Hao } 2097be3a138d57713bbe6d624998620081807e65b71Jeff Hao 2107be3a138d57713bbe6d624998620081807e65b71Jeff Hao try { 2117be3a138d57713bbe6d624998620081807e65b71Jeff Hao Debug.startMethodTracingDdms(bufferSize, flags, true, interval); 2127be3a138d57713bbe6d624998620081807e65b71Jeff Hao return null; // empty response 2137be3a138d57713bbe6d624998620081807e65b71Jeff Hao } catch (RuntimeException re) { 2147be3a138d57713bbe6d624998620081807e65b71Jeff Hao return createFailChunk(1, re.getMessage()); 2157be3a138d57713bbe6d624998620081807e65b71Jeff Hao } 2167be3a138d57713bbe6d624998620081807e65b71Jeff Hao } 2177be3a138d57713bbe6d624998620081807e65b71Jeff Hao 2187be3a138d57713bbe6d624998620081807e65b71Jeff Hao /* 2197be3a138d57713bbe6d624998620081807e65b71Jeff Hao * Handle a "Sample Profiling w/Streaming End" request. 2207be3a138d57713bbe6d624998620081807e65b71Jeff Hao */ 2217be3a138d57713bbe6d624998620081807e65b71Jeff Hao private Chunk handleSPSE(Chunk request) { 2227be3a138d57713bbe6d624998620081807e65b71Jeff Hao if (false) { 2237be3a138d57713bbe6d624998620081807e65b71Jeff Hao Log.v("ddm-heap", "Sample prof stream end"); 2247be3a138d57713bbe6d624998620081807e65b71Jeff Hao } 2257be3a138d57713bbe6d624998620081807e65b71Jeff Hao 2267be3a138d57713bbe6d624998620081807e65b71Jeff Hao try { 2277be3a138d57713bbe6d624998620081807e65b71Jeff Hao Debug.stopMethodTracing(); 2287be3a138d57713bbe6d624998620081807e65b71Jeff Hao } catch (RuntimeException re) { 2297be3a138d57713bbe6d624998620081807e65b71Jeff Hao Log.w("ddm-heap", "Sample prof stream end failed: " 2307be3a138d57713bbe6d624998620081807e65b71Jeff Hao + re.getMessage()); 2317be3a138d57713bbe6d624998620081807e65b71Jeff Hao return createFailChunk(1, re.getMessage()); 2327be3a138d57713bbe6d624998620081807e65b71Jeff Hao } 2337be3a138d57713bbe6d624998620081807e65b71Jeff Hao 2347be3a138d57713bbe6d624998620081807e65b71Jeff Hao /* VM sent the (perhaps very large) response directly */ 2357be3a138d57713bbe6d624998620081807e65b71Jeff Hao return null; 2367be3a138d57713bbe6d624998620081807e65b71Jeff Hao } 2377b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project} 2387b0b1ed979aa665175bf3952c8902ce13c763ab8The Android Open Source Project 239