auto import from //depot/cupcake/@135843
diff --git a/emulator/qtools/gtrace.h b/emulator/qtools/gtrace.h
new file mode 100644
index 0000000..542adc2
--- /dev/null
+++ b/emulator/qtools/gtrace.h
@@ -0,0 +1,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