File: litl_print.c

package info (click to toggle)
litl 0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 564 kB
  • sloc: ansic: 3,407; makefile: 36; sh: 18
file content (131 lines) | stat: -rw-r--r-- 3,950 bytes parent folder | download | duplicates (6)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* -*- c-file-style: "GNU" -*- */
/*
 * Copyright © Télécom SudParis.
 * See COPYING in top-level directory.
 */

/**
 *  \file utils/litl_print.c
 *  \brief litl_print A utility for reading events from both regular trace
 *  files and archives of traces
 *
 *  \authors
 *    Developers are: \n
 *        Roman Iakymchuk   -- roman.iakymchuk@telecom-sudparis.eu \n
 *        Francois Trahay   -- francois.trahay@telecom-sudparis.eu \n
 */

#include <string.h>
#include <stdlib.h>

#include "litl_tools.h"
#include "litl_read.h"

static char* __input_filename = "trace";

static void __litl_read_usage(int argc __attribute__((unused)), char **argv) {
  fprintf(stderr, "Usage: %s [-f input_filename] \n", argv[0]);
  printf("       -?, -h:    Display this help and exit\n");
}

static void __litl_read_parse_args(int argc, char **argv) {
  int i;

  for (i = 1; i < argc; i++) {
    if ((strcmp(argv[i], "-f") == 0)) {
      __input_filename = argv[++i];
    } else if ((strcmp(argv[i], "-h") || strcmp(argv[i], "-?")) == 0) {
      __litl_read_usage(argc, argv);
      exit(-1);
    } else if (argv[i][0] == '-') {
      fprintf(stderr, "Unknown option %s\n", argv[i]);
      __litl_read_usage(argc, argv);
      exit(-1);
    }
  }

  if (strcmp(__input_filename, "trace") == 0) {
    __litl_read_usage(argc, argv);
    exit(-1);
  }
}

int main(int argc, char **argv) {
  litl_med_size_t i;
  litl_read_event_t* event;
  litl_read_trace_t *trace;
  litl_general_header_t* trace_header;
  litl_process_header_t* process_header;

  // parse the arguments passed to this program
  __litl_read_parse_args(argc, argv);

  trace = litl_read_open_trace(__input_filename);

  litl_read_init_processes(trace);

  trace_header = litl_read_get_trace_header(trace);
  process_header = litl_read_get_process_header(trace->processes[0]);

  // print the header
  printf(" LiTL v.%s\n", trace_header->litl_ver);
  printf(" %s\n", trace_header->sysinfo);
  printf(" nb_processes \t %d\n", trace_header->nb_processes);
  if (trace_header->nb_processes == 1)
    printf(" nb_threads \t %d\n", process_header->nb_threads);
  printf(
      " buffer_size \t %d\n",
      trace->processes[0]->header->buffer_size
        - __litl_get_reg_event_size(LITL_MAX_PARAMS)
        - __litl_get_reg_event_size(0));

  printf(
      "[Timestamp]\t[ThreadID]\t[EventType]\t[EventCode]\t[NbParam]\t[Parameters]\n");
  while (1) {
    event = litl_read_next_event(trace);

    if (event == NULL )
      break;

    switch (LITL_READ_GET_TYPE(event)) {
    case LITL_TYPE_REGULAR: { // regular event
      printf("%"PRTIu64" \t%"PRTIu64" \t  Reg   %"PRTIx32" \t %"PRTIu32,
             LITL_READ_GET_TIME(event), LITL_READ_GET_TID(event),
             LITL_READ_GET_CODE(event), LITL_READ_REGULAR(event)->nb_params);

      for (i = 0; i < LITL_READ_REGULAR(event)->nb_params; i++)
        printf("\t %"PRTIx64, LITL_READ_REGULAR(event)->param[i]);
      break;
    }
    case LITL_TYPE_RAW: { // raw event
      printf("%"PRTIu64"\t%"PRTIu64" \t  Raw   %"PRTIx32" \t %"PRTIu32,
             LITL_READ_GET_TIME(event), LITL_READ_GET_TID(event),
             LITL_READ_GET_CODE(event), LITL_READ_RAW(event)->size);
      printf("\t %s", (litl_data_t *) LITL_READ_RAW(event)->data);
      break;
    }
    case LITL_TYPE_PACKED: { // packed event
      printf("%"PRTIu64" \t%"PRTIu64" \t  Packed   %"PRTIx32" \t %"PRTIu32"\t",
             LITL_READ_GET_TIME(event), LITL_READ_GET_TID(event),
             LITL_READ_GET_CODE(event), LITL_READ_PACKED(event)->size);
      for (i = 0; i < LITL_READ_PACKED(event)->size; i++) {
        printf(" %x", LITL_READ_PACKED(event)->param[i]);
      }
      break;
    }
    case LITL_TYPE_OFFSET: { // offset event
      continue;
    }
    default: {
      fprintf(stderr, "Unknown event type %d\n", LITL_READ_GET_TYPE(event));
      abort();
    }
    }

    printf("\n");
  }

  litl_read_finalize_trace(trace);

  return EXIT_SUCCESS;
}