blob: 542adc2ae3c9ec870614058a33d158a9e0626bf3 [file] [log] [blame]
The Android Open Source Project52d4c302009-03-03 19:29:09 -08001// Copyright 2006 The Android Open Source Project
2
3#ifndef GTRACE_H
4#define GTRACE_H
5
6class Gtrace {
7 public:
8 static const int kGtraceEntriesPerBlock = 1024;
9 static const uint32_t kMillion = 1000000;
10 static const uint32_t kTicsPerSecond = 200 * kMillion;
11 static const int kBaseTic = 0x1000;
12
13 struct trace_entry {
14 uint32_t cycle;
15 uint32_t event;
16 };
17
18 struct block_header {
19 uint32_t blockno;
20 uint32_t entry_width;
21 uint32_t block_tic;
22 uint32_t block_time;
23 uint32_t usec_cpu;
24 uint32_t pid;
25 uint32_t bug_count;
26 uint32_t zero_count;
27 };
28
29 struct first_header {
30 block_header common;
31 uint32_t tic;
32 uint32_t one;
33 uint32_t tics_per_second;
34 uint32_t trace_time;
35 uint32_t version;
36 uint32_t file_proc;
37 uint32_t pdate;
38 uint32_t ptime;
39 };
40
41 Gtrace();
42 ~Gtrace();
43
44 void Open(const char *gtrace_file, uint32_t pdate, uint32_t ptime);
45 void WriteFirstHeader(uint32_t start_sec, uint32_t pid);
46 void AddProcedure(int filenum, int procnum, const char *proc_name);
47 void AddProcEntry(int filenum, int procnum, uint32_t cycle, uint32_t pid);
48 void AddProcExit(int filenum, int procnum, uint32_t cycle, uint32_t pid);
49
50 private:
51 void AddGtraceRecord(int filenum, int procnum, uint32_t cycle, uint32_t pid,
52 int is_exit);
53 void FillFirstHeader(uint32_t start_sec, uint32_t pid,
54 first_header *fh);
55 void WriteBlockHeader(uint32_t cycle, uint32_t pid);
56
57 const char *gtrace_file_;
58 char gname_file_[100];
59 FILE *ftrace_;
60 FILE *fnames_;
61 uint32_t start_sec_;
62 uint32_t pdate_;
63 uint32_t ptime_;
64 int num_entries_;
65 int blockno_;
66 uint32_t current_pid_;
67};
68
69#endif // GTRACE_H