1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
// 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
|