Commit | Line | Data |
---|---|---|
9c312311 | 1 | /* This file is part of the Linux Trace Toolkit trace reading library |
2 | * Copyright (C) 2003-2004 Michel Dagenais | |
1b44b0b5 | 3 | * 2005 Mathieu Desnoyers |
9c312311 | 4 | * |
5 | * This library is free software; you can redistribute it and/or | |
6 | * modify it under the terms of the GNU Lesser General Public | |
7 | * License Version 2.1 as published by the Free Software Foundation. | |
8 | * | |
9 | * This library is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | * Lesser General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU Lesser General Public | |
15 | * License along with this library; if not, write to the | |
16 | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
17 | * Boston, MA 02111-1307, USA. | |
18 | */ | |
19 | ||
963b5f2d | 20 | #ifndef TRACE_H |
21 | #define TRACE_H | |
1b82f325 | 22 | |
23 | #include <ltt/ltt.h> | |
f4e57537 | 24 | #include <ltt/ltt-private.h> |
29af7cfd | 25 | #include <stdint.h> |
26 | #include <glib.h> | |
27 | ||
28 | struct LttTrace { | |
29 | GQuark pathname; //the pathname of the trace | |
30 | //LttSystemDescription * system_description;//system description | |
31 | ||
29af7cfd | 32 | guint num_cpu; |
33 | ||
34 | guint32 arch_type; | |
35 | guint32 arch_variant; | |
36 | guint8 arch_size; | |
37 | guint8 ltt_major_version; | |
38 | guint8 ltt_minor_version; | |
39 | guint8 flight_recorder; | |
40 | guint32 freq_scale; | |
41 | uint64_t start_freq; | |
42 | uint64_t start_tsc; | |
43 | uint64_t start_monotonic; | |
44 | LttTime start_time; | |
45 | LttTime start_time_from_tsc; | |
29af7cfd | 46 | |
47 | GData *tracefiles; //tracefiles groups | |
29af7cfd | 48 | }; |
49 | ||
8655430b | 50 | static inline guint ltt_trace_get_num_cpu(LttTrace *t) |
51 | { | |
52 | return t->num_cpu; | |
53 | } | |
29af7cfd | 54 | |
1b82f325 | 55 | /* A trace is specified as a pathname to the directory containing all the |
290dfc8c | 56 | associated data (control tracefiles, per cpu tracefiles, event |
1b82f325 | 57 | descriptions...). |
58 | ||
59 | When a trace is closed, all the associated facilities, types and fields | |
2a74fbf4 | 60 | are released as well. |
61 | ||
62 | return value is NULL if there is an error when opening the trace. | |
63 | ||
64 | */ | |
1b82f325 | 65 | |
45e14832 | 66 | LttTrace *ltt_trace_open(const gchar *pathname); |
f7afe191 | 67 | |
2a74fbf4 | 68 | /* copy reopens a trace |
69 | * | |
70 | * return value NULL if error while opening the trace | |
71 | */ | |
f7afe191 | 72 | LttTrace *ltt_trace_copy(LttTrace *self); |
1b82f325 | 73 | |
8655430b | 74 | static inline GQuark ltt_trace_name(const LttTrace *t) |
75 | { | |
76 | return t->pathname; | |
77 | } | |
49bf71b5 | 78 | |
1b82f325 | 79 | |
8655430b | 80 | void ltt_trace_close(LttTrace *t); |
1b82f325 | 81 | |
963b5f2d | 82 | LttSystemDescription *ltt_trace_system_description(LttTrace *t); |
1b82f325 | 83 | |
1b82f325 | 84 | |
487ad181 | 85 | /* Get the start time and end time of the trace */ |
86 | ||
87 | void ltt_trace_time_span_get(LttTrace *t, LttTime *start, LttTime *end); | |
88 | ||
89 | ||
290dfc8c | 90 | /* Get the name of a tracefile */ |
1b82f325 | 91 | |
8655430b | 92 | static inline GQuark ltt_tracefile_name(const LttTracefile *tf) |
93 | { | |
94 | return tf->name; | |
95 | } | |
96 | ||
97 | static inline GQuark ltt_tracefile_long_name(const LttTracefile *tf) | |
98 | { | |
99 | return tf->long_name; | |
100 | } | |
1b82f325 | 101 | |
d3d34f49 | 102 | /* get the cpu number of the tracefile */ |
103 | ||
8655430b | 104 | static inline guint ltt_tracefile_cpu(LttTracefile *tf) |
105 | { | |
106 | return tf->cpu_num; | |
107 | } | |
ae3d0f50 | 108 | |
109 | /* For usertrace */ | |
8655430b | 110 | static inline guint ltt_tracefile_tid(LttTracefile *tf) |
111 | { | |
112 | return tf->tid; | |
113 | } | |
114 | ||
115 | static inline guint ltt_tracefile_pgid(LttTracefile *tf) | |
116 | { | |
117 | return tf->pgid; | |
118 | } | |
119 | ||
120 | static inline guint64 ltt_tracefile_creation(LttTracefile *tf) | |
121 | { | |
122 | return tf->creation; | |
123 | } | |
124 | ||
125 | static inline LttTrace *ltt_tracefile_get_trace(LttTracefile *tf) | |
126 | { | |
127 | return tf->trace; | |
128 | } | |
1b82f325 | 129 | |
80da81ad | 130 | /* Get the number of blocks in the tracefile */ |
131 | ||
8655430b | 132 | static inline guint ltt_tracefile_block_number(LttTracefile *tf) |
133 | { | |
134 | return tf->num_blocks; | |
135 | } | |
80da81ad | 136 | |
137 | ||
1b82f325 | 138 | /* Seek to the first event of the trace with time larger or equal to time */ |
139 | ||
3aee1200 | 140 | int ltt_tracefile_seek_time(LttTracefile *t, LttTime time); |
1b82f325 | 141 | |
80da81ad | 142 | /* Seek to the first event with position equal or larger to ep */ |
143 | ||
3aee1200 | 144 | int ltt_tracefile_seek_position(LttTracefile *t, |
04b44e05 | 145 | const LttEventPosition *ep); |
1b82f325 | 146 | |
147 | /* Read the next event */ | |
148 | ||
3aee1200 | 149 | int ltt_tracefile_read(LttTracefile *t); |
a5dcde2f | 150 | |
3aee1200 | 151 | /* ltt_tracefile_read cut down in pieces */ |
152 | int ltt_tracefile_read_seek(LttTracefile *t); | |
153 | int ltt_tracefile_read_update_event(LttTracefile *t); | |
154 | int ltt_tracefile_read_op(LttTracefile *t); | |
a5dcde2f | 155 | |
eed2ef37 | 156 | /* Get the current event of the tracefile : valid until the next read */ |
157 | LttEvent *ltt_tracefile_get_event(LttTracefile *tf); | |
158 | ||
a5dcde2f | 159 | /* get the data type size and endian type of the local machine */ |
160 | ||
161 | void getDataEndianType(LttArchSize * size, LttArchEndian * endian); | |
162 | ||
163 | /* get an integer number */ | |
3aee1200 | 164 | gint64 get_int(gboolean reverse_byte_order, gint size, void *data); |
a5dcde2f | 165 | |
166 | /* get the node name of the system */ | |
167 | ||
45e14832 | 168 | gchar * ltt_trace_system_description_node_name (LttSystemDescription * s); |
a5dcde2f | 169 | |
170 | ||
171 | /* get the domain name of the system */ | |
172 | ||
45e14832 | 173 | gchar * ltt_trace_system_description_domain_name (LttSystemDescription * s); |
a5dcde2f | 174 | |
175 | ||
176 | /* get the description of the system */ | |
177 | ||
45e14832 | 178 | gchar * ltt_trace_system_description_description (LttSystemDescription * s); |
a5dcde2f | 179 | |
180 | ||
bf33dd50 | 181 | /* get the NTP start time of the trace */ |
a5dcde2f | 182 | |
7bd563ec | 183 | LttTime ltt_trace_start_time(LttTrace *t); |
a5dcde2f | 184 | |
bf33dd50 | 185 | /* get the monotonic start time of the trace */ |
186 | ||
187 | LttTime ltt_trace_start_time_monotonic(LttTrace *t); | |
188 | ||
45e14832 | 189 | void get_absolute_pathname(const gchar *pathname, gchar * abs_pathname); |
18206708 | 190 | |
e45551ac | 191 | /* May return a NULL tracefile group */ |
3865ea09 | 192 | GData **ltt_trace_get_tracefiles_groups(LttTrace *trace); |
77175651 | 193 | |
194 | typedef void (*ForEachTraceFileFunc)(LttTracefile *tf, gpointer func_args); | |
195 | ||
196 | struct compute_tracefile_group_args { | |
197 | ForEachTraceFileFunc func; | |
198 | gpointer func_args; | |
199 | }; | |
200 | ||
3865ea09 | 201 | void compute_tracefile_group(GQuark key_id, |
202 | GArray *group, | |
203 | struct compute_tracefile_group_args *args); | |
77175651 | 204 | |
3aee1200 | 205 | |
a0c1f622 | 206 | gint64 ltt_get_int(gboolean reverse_byte_order, gint size, void *data); |
207 | ||
208 | guint64 ltt_get_uint(gboolean reverse_byte_order, gint size, void *data); | |
209 | ||
ae3d0f50 | 210 | LttTime ltt_interpolate_time_from_tsc(LttTracefile *tf, guint64 tsc); |
211 | ||
91f8d488 | 212 | /* Set to enable event debugging output */ |
213 | void ltt_event_debug(int state); | |
214 | ||
dd69719a WB |
215 | /* A structure representing the version number of the trace */ |
216 | struct LttTraceVersion { | |
217 | guint8 ltt_major_version; | |
218 | guint8 ltt_minor_version; | |
219 | }; | |
220 | ||
221 | /* To get the version number of a trace */ | |
38e79169 | 222 | int ltt_get_trace_version(const gchar *pathname, struct LttTraceVersion * version_number); |
dd69719a | 223 | |
1b82f325 | 224 | #endif // TRACE_H |