/* * static void startMethodTracingFd(String traceFileName, FileDescriptor fd, * int bufferSize, int flags, boolean samplingEnabled, int intervalUs) * * Start method trace profiling, sending results to a file descriptor. */ static void Dalvik_dalvik_system_VMDebug_startMethodTracingFd(const u4* args, JValue* pResult) { StringObject* traceFileStr = (StringObject*) args[0]; Object* traceFd = (Object*) args[1]; int bufferSize = args[2]; int flags = args[3]; bool samplingEnabled = args[4]; int intervalUs = args[5]; int origFd = getFileDescriptor(traceFd); if (origFd < 0) RETURN_VOID(); int fd = dup(origFd); if (fd < 0) { dvmThrowExceptionFmt(gDvm.exRuntimeException, "dup(%d) failed: %s", origFd, strerror(errno)); RETURN_VOID(); } char* traceFileName = dvmCreateCstrFromString(traceFileStr); if (traceFileName == NULL) { RETURN_VOID(); } dvmMethodTraceStart(traceFileName, fd, bufferSize, flags, false, samplingEnabled, intervalUs); free(traceFileName); RETURN_VOID(); }
/* * static void startMethodTracingDdmsImpl(int bufferSize, int flags, * boolean samplingEnabled, int intervalUs) * * Start method trace profiling, sending results directly to DDMS. */ static void Dalvik_dalvik_system_VMDebug_startMethodTracingDdmsImpl(const u4* args, JValue* pResult) { int bufferSize = args[0]; int flags = args[1]; bool samplingEnabled = args[2]; int intervalUs = args[3]; dvmMethodTraceStart("[DDMS]", -1, bufferSize, flags, true, samplingEnabled, intervalUs); RETURN_VOID(); }
/* * static void startMethodTracingFilename(String traceFileName, int bufferSize, * int flags, boolean samplingEnabled, int intervalUs) * * Start method trace profiling, sending results to a file. */ static void Dalvik_dalvik_system_VMDebug_startMethodTracingFilename(const u4* args, JValue* pResult) { StringObject* traceFileStr = (StringObject*) args[0]; int bufferSize = args[1]; int flags = args[2]; bool samplingEnabled = args[3]; int intervalUs = args[4]; char* traceFileName = dvmCreateCstrFromString(traceFileStr); if (traceFileName == NULL) { RETURN_VOID(); } dvmMethodTraceStart(traceFileName, -1, bufferSize, flags, false, samplingEnabled, intervalUs); free(traceFileName); RETURN_VOID(); }
/* * static void startMethodTracingNative(String traceFileName, * FileDescriptor fd, int bufferSize, int flags) * * Start method trace profiling. * * If both "traceFileName" and "fd" are null, the result will be sent * directly to DDMS. (The non-DDMS versions of the calls are expected * to enforce non-NULL filenames.) */ static void Dalvik_dalvik_system_VMDebug_startMethodTracingNative(const u4* args, JValue* pResult) { StringObject* traceFileStr = (StringObject*) args[0]; Object* traceFd = (Object*) args[1]; int bufferSize = args[2]; int flags = args[3]; if (bufferSize == 0) { // Default to 8MB per the documentation. bufferSize = 8 * 1024 * 1024; } if (bufferSize < 1024) { dvmThrowException("Ljava/lang/IllegalArgumentException;", NULL); RETURN_VOID(); } char* traceFileName = NULL; if (traceFileStr != NULL) traceFileName = dvmCreateCstrFromString(traceFileStr); int fd = -1; if (traceFd != NULL) { int origFd = getFileDescriptor(traceFd); if (origFd < 0) RETURN_VOID(); fd = dup(origFd); if (fd < 0) { dvmThrowExceptionFmt("Ljava/lang/RuntimeException;", "dup(%d) failed: %s", origFd, strerror(errno)); RETURN_VOID(); } } dvmMethodTraceStart(traceFileName != NULL ? traceFileName : "[DDMS]", fd, bufferSize, flags, (traceFileName == NULL && fd == -1)); free(traceFileName); RETURN_VOID(); }