70 lines
1.7 KiB
C++
70 lines
1.7 KiB
C++
// 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
|