auto import from //depot/cupcake/@135843
diff --git a/emulator/qtools/dmtrace.h b/emulator/qtools/dmtrace.h
new file mode 100644
index 0000000..6e20921
--- /dev/null
+++ b/emulator/qtools/dmtrace.h
@@ -0,0 +1,61 @@
+// Copyright 2006 The Android Open Source Project
+
+#ifndef DMTRACE_H
+#define DMTRACE_H
+
+#include <vector>
+
+class DmTrace {
+  public:
+    struct Header {
+        uint32_t        magic;
+        uint16_t        version;
+        uint16_t        offset;
+        uint64_t        date_time;
+    };
+
+    DmTrace();
+    ~DmTrace();
+
+    void        open(const char *dmtrace_file, uint64_t startTime);
+    void        close();
+    void        addFunctionEntry(int methodId, uint32_t cycle, uint32_t pid);
+    void        addFunctionExit(int methodId, uint32_t cycle, uint32_t pid);
+    void        addFunction(int functionId, const char *name);
+    void        addFunction(int functionId, const char *clazz, const char *method,
+                            const char *sig);
+    void        parseAndAddFunction(int functionId, const char *name);
+    void        addThread(int threadId, const char *name);
+    void        updateName(int threadId, const char *name);
+
+  private:
+    static const Header header;
+
+    struct ThreadRecord {
+        int             id;
+        const char      *name;
+    };
+
+    struct FunctionRecord {
+        int             id;
+        const char      *name;
+    };
+
+    void        write2LE(FILE* fstream, unsigned short val);
+    void        write4LE(FILE* fstream, unsigned int val);
+    void        write8LE(FILE* fstream, unsigned long long val);
+    void        writeHeader(FILE *fstream, uint64_t startTime);
+    void        writeDataRecord(FILE *fstream, int threadId,
+                                unsigned int methodVal,
+                                unsigned int elapsedTime);
+    void        writeKeyFile(FILE *fstream);
+    void        writeThreads(FILE *fstream);
+    void        writeFunctions(FILE *fstream);
+
+    FILE        *fData;
+    FILE        *fTrace;
+    std::vector<ThreadRecord*> *threads;
+    std::vector<FunctionRecord*> *functions;
+};
+
+#endif  // DMTRACE_H