|  | // 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 |