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