aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/qtools/gtrace.h
blob: 542adc2ae3c9ec870614058a33d158a9e0626bf3 (plain)
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