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