diff options
author | buzbee <buzbee@google.com> | 2011-03-14 12:25:24 -0700 |
---|---|---|
committer | buzbee <buzbee@google.com> | 2011-03-14 12:25:24 -0700 |
commit | d82cebc13cf8ff110f2ad1a299782c9d1e8aada6 (patch) | |
tree | 8adda7f37843cb4a25231e3eb520ed8ce50ee302 | |
parent | 8f28ebb65f231d2134f52f5d140d8524f7b85ed7 (diff) | |
download | android_dalvik-d82cebc13cf8ff110f2ad1a299782c9d1e8aada6.tar.gz android_dalvik-d82cebc13cf8ff110f2ad1a299782c9d1e8aada6.tar.bz2 android_dalvik-d82cebc13cf8ff110f2ad1a299782c9d1e8aada6.zip |
Add trace description dump routine for debugging
New dvmJitDumpTraceDescription prints out a trace descriptor.
Change-Id: I613fe17cf75e4ee26ad976b15c2cf89ce4552192
-rw-r--r-- | vm/interp/Jit.c | 42 | ||||
-rw-r--r-- | vm/interp/Jit.h | 1 |
2 files changed, 43 insertions, 0 deletions
diff --git a/vm/interp/Jit.c b/vm/interp/Jit.c index 1a5a10d12..6a4615d3e 100644 --- a/vm/interp/Jit.c +++ b/vm/interp/Jit.c @@ -639,6 +639,45 @@ static JitEntry *lookupAndAdd(const u2* dPC, bool callerLocked, return (idx == chainEndMarker) ? NULL : &gDvmJit.pJitEntryTable[idx]; } +/* Dump a trace description */ +void dvmJitDumpTraceDesc(JitTraceDescription *trace) +{ + int i; + bool done = false; + const u2* dpc; + const u2* dpcBase; + int curFrag = 0; + LOGD("==========================================="); + LOGD("Trace dump 0x%x, Method %s starting offset 0x%x",(int)trace, + trace->method->name,trace->trace[curFrag].info.frag.startOffset); + dpcBase = trace->method->insns; + while (!done) { + DecodedInstruction decInsn; + if (trace->trace[curFrag].isCode) { + LOGD("Frag[%d]- Insts: %d, start: 0x%x, hint: 0x%x, end: %d", + curFrag, trace->trace[curFrag].info.frag.numInsts, + trace->trace[curFrag].info.frag.startOffset, + trace->trace[curFrag].info.frag.hint, + trace->trace[curFrag].info.frag.runEnd); + dpc = dpcBase + trace->trace[curFrag].info.frag.startOffset; + for (i=0; i<trace->trace[curFrag].info.frag.numInsts; i++) { + dexDecodeInstruction(dpc, &decInsn); + LOGD(" 0x%04x - %s",(dpc-dpcBase), + dexGetOpcodeName(decInsn.opcode)); + dpc += dexGetWidthFromOpcode(decInsn.opcode); + } + if (trace->trace[curFrag].info.frag.runEnd) { + done = true; + } + } else { + LOGD("Frag[%d]- META info: 0x%08x", curFrag, + (int)trace->trace[curFrag].info.meta); + } + curFrag++; + } + LOGD("-------------------------------------------"); +} + /* * Append the class ptr of "this" and the current method ptr to the current * trace. That is, the trace runs will contain the following components: @@ -898,6 +937,9 @@ int dvmCheckJit(const u2* pc, Thread* self, const ClassObject* thisClass, if (dvmCompilerWorkEnqueue( self->currTraceHead,kWorkOrderTrace,desc)) { /* Work order successfully enqueued */ +#if defined(SHOW_TRACE) + dvmJitDumpTraceDesc(desc); +#endif if (gDvmJit.blockingMode) { dvmCompilerDrainQueue(); } diff --git a/vm/interp/Jit.h b/vm/interp/Jit.h index 9597f2f16..6d5d9711e 100644 --- a/vm/interp/Jit.h +++ b/vm/interp/Jit.h @@ -161,5 +161,6 @@ JitTraceCounter_t *dvmJitNextTraceCounter(void); void dvmJitTraceProfilingOff(void); void dvmJitTraceProfilingOn(void); void dvmJitChangeProfileMode(TraceProfilingModes newState); +void dvmJitDumpTraceDesc(JitTraceDescription *trace); #endif /*_DALVIK_INTERP_JIT*/ |