// Copyright 2006 The Android Open Source Project #ifndef GTRACE_H #define GTRACE_H class Gtrace { public: static const int kGtraceEntriesPerBlock = 1024; static const uint32_t kMillion = 1000000; static const uint32_t kTicsPerSecond = 200 * kMillion; static const int kBaseTic = 0x1000; struct trace_entry { uint32_t cycle; uint32_t event; }; struct block_header { uint32_t blockno; uint32_t entry_width; uint32_t block_tic; uint32_t block_time; uint32_t usec_cpu; uint32_t pid; uint32_t bug_count; uint32_t zero_count; }; struct first_header { block_header common; uint32_t tic; uint32_t one; uint32_t tics_per_second; uint32_t trace_time; uint32_t version; uint32_t file_proc; uint32_t pdate; uint32_t ptime; }; Gtrace(); ~Gtrace(); void Open(const char *gtrace_file, uint32_t pdate, uint32_t ptime); void WriteFirstHeader(uint32_t start_sec, uint32_t pid); void AddProcedure(int filenum, int procnum, const char *proc_name); void AddProcEntry(int filenum, int procnum, uint32_t cycle, uint32_t pid); void AddProcExit(int filenum, int procnum, uint32_t cycle, uint32_t pid); private: void AddGtraceRecord(int filenum, int procnum, uint32_t cycle, uint32_t pid, int is_exit); void FillFirstHeader(uint32_t start_sec, uint32_t pid, first_header *fh); void WriteBlockHeader(uint32_t cycle, uint32_t pid); const char *gtrace_file_; char gname_file_[100]; FILE *ftrace_; FILE *fnames_; uint32_t start_sec_; uint32_t pdate_; uint32_t ptime_; int num_entries_; int blockno_; uint32_t current_pid_; }; #endif // GTRACE_H