Add trace description dump routine for debugging

New dvmJitDumpTraceDescription prints out a trace descriptor.

Change-Id: I613fe17cf75e4ee26ad976b15c2cf89ce4552192
diff --git a/vm/interp/Jit.c b/vm/interp/Jit.c
index 1a5a10d..6a4615d 100644
--- a/vm/interp/Jit.c
+++ b/vm/interp/Jit.c
@@ -639,6 +639,45 @@
     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 @@
                 if (dvmCompilerWorkEnqueue(
                        self->currTraceHead,kWorkOrderTrace,desc)) {
                     /* Work order successfully enqueued */
+#if defined(SHOW_TRACE)
+                    dvmJitDumpTraceDesc(desc);
+#endif
                     if (gDvmJit.blockingMode) {
                         dvmCompilerDrainQueue();
                     }