diff options
author | Ben Cheng <bccheng@android.com> | 2009-06-24 17:27:07 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@android.com> | 2009-06-24 17:27:07 -0700 |
commit | 8b258bfd8562edf1306ea6a5642595186f1f3f36 (patch) | |
tree | 7427977a2a4fded0064f3ecd5b17c13610ab61a2 /vm/compiler/Utility.c | |
parent | ef00a85e7f148f044b14942aa09204e2d0d72738 (diff) | |
download | android_dalvik-8b258bfd8562edf1306ea6a5642595186f1f3f36.tar.gz android_dalvik-8b258bfd8562edf1306ea6a5642595186f1f3f36.tar.bz2 android_dalvik-8b258bfd8562edf1306ea6a5642595186f1f3f36.zip |
Collect per-method code size statistics to show compiled vs overall Dalvik portion and total native code size.
Diffstat (limited to 'vm/compiler/Utility.c')
-rw-r--r-- | vm/compiler/Utility.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/vm/compiler/Utility.c b/vm/compiler/Utility.c index 54f6971da..b0c40e649 100644 --- a/vm/compiler/Utility.c +++ b/vm/compiler/Utility.c @@ -154,17 +154,56 @@ void dvmCompilerDumpCompilationUnit(CompilationUnit *cUnit) } /* + * dvmHashForeach callback. + */ +static int dumpMethodStats(void *compilerMethodStats, void *totalMethodStats) +{ + CompilerMethodStats *methodStats = + (CompilerMethodStats *) compilerMethodStats; + CompilerMethodStats *totalStats = + (CompilerMethodStats *) totalMethodStats; + const Method *method = methodStats->method; + + totalStats->dalvikSize += methodStats->dalvikSize; + totalStats->compiledDalvikSize += methodStats->compiledDalvikSize; + totalStats->nativeSize += methodStats->nativeSize; + + int limit = (methodStats->dalvikSize >> 2) * 3; + + /* If over 3/4 of the Dalvik code is compiled, print something */ + if (methodStats->compiledDalvikSize >= limit) { + LOGD("Method stats: %s%s, %d/%d (compiled/total Dalvik), %d (native)", + method->clazz->descriptor, method->name, + methodStats->compiledDalvikSize, + methodStats->dalvikSize, + methodStats->nativeSize); + } + return 0; +} + +/* * Dump the current stats of the compiler, including number of bytes used in * the code cache, arena size, and work queue length, and various JIT stats. */ void dvmCompilerDumpStats(void) { - LOGD("%d compilations using %d bytes", - gDvmJit.numCompilations, gDvmJit.codeCacheByteUsed); + CompilerMethodStats totalMethodStats; + + memset(&totalMethodStats, 0, sizeof(CompilerMethodStats)); + LOGD("%d compilations using %d + %d bytes", + gDvmJit.numCompilations, + gDvmJit.templateSize, + gDvmJit.codeCacheByteUsed - gDvmJit.templateSize); LOGD("Compiler arena uses %d blocks (%d bytes each)", numArenaBlocks, ARENA_DEFAULT_SIZE); LOGD("Compiler work queue length is %d/%d", gDvmJit.compilerQueueLength, gDvmJit.compilerMaxQueued); dvmJitStats(); dvmCompilerArchDump(); + dvmHashForeach(gDvmJit.methodStatsTable, dumpMethodStats, + &totalMethodStats); + LOGD("Code size stats: %d/%d (compiled/total Dalvik), %d (native)", + totalMethodStats.compiledDalvikSize, + totalMethodStats.dalvikSize, + totalMethodStats.nativeSize); } |