155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <stdio.h>
255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <stdlib.h>
355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <inttypes.h>
455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include "trace_reader.h"
555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectint main(int argc, char **argv) {
755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  if (argc != 2) {
855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    fprintf(stderr, "Usage: %s trace_file\n", argv[0]);
955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    exit(1);
1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  }
1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  char *trace_filename = argv[1];
1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  TraceReaderBase *trace = new TraceReaderBase;
1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  trace->Open(trace_filename);
1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  while (1) {
1755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    PidEvent event;
1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    if (trace->ReadPidEvent(&event))
1955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      break;
2055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    switch (event.rec_type) {
2155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidFork:
2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld fork tgid %d pid %d\n", event.time, event.tgid, event.pid);
2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidClone:
2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld clone tgid %d pid %d\n", event.time, event.tgid, event.pid);
2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidSwitch:
2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld switch %d\n", event.time, event.pid);
2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidExit:
3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld exit %d\n", event.time, event.pid);
3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidMmap:
3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld mmap %08x - %08x, offset %08x '%s'\n",
3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project               event.time, event.vstart, event.vend, event.offset, event.path);
3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        delete[] event.path;
3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidMunmap:
3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld munmap %08x - %08x\n",
4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project               event.time, event.vstart, event.vend);
4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidSymbolAdd:
4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld add sym %08x '%s'\n",
4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project               event.time, event.vstart, event.path);
4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        delete[] event.path;
4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidSymbolRemove:
4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld remove %08x\n", event.time, event.vstart);
4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidExec:
5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld argc: %d\n", event.time, event.argc);
5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        for (int ii = 0; ii < event.argc; ++ii) {
5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project          printf("  argv[%d]: %s\n", ii, event.argv[ii]);
5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project          delete[] event.argv[ii];
5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        delete[] event.argv;
5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidKthreadName:
5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld kthread tgid %d pid %d %s\n",
6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project               event.time, event.tgid, event.pid, event.path);
6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        delete[] event.path;
6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project      case kPidName:
6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        printf("t%lld name %d %s\n",
6555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project               event.time, event.pid, event.path);
6655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        delete[] event.path;
6755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        break;
6855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  }
7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project  return 0;
7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project}
72