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; | |
9c9bf2d4 BP |
44 | double drift; |
45 | double offset; | |
29af7cfd | 46 | LttTime start_time; |
47 | LttTime start_time_from_tsc; | |
29af7cfd | 48 | |
49 | GData *tracefiles; //tracefiles groups | |
29af7cfd | 50 | }; |
51 | ||
8655430b | 52 | static inline guint ltt_trace_get_num_cpu(LttTrace *t) |
53 | { | |
54 | return t->num_cpu; | |
55 | } | |
29af7cfd | 56 | |
1b82f325 | 57 | /* A trace is specified as a pathname to the directory containing all the |
290dfc8c | 58 | associated data (control tracefiles, per cpu tracefiles, event |
1b82f325 | 59 | descriptions...). |
60 | ||
61 | When a trace is closed, all the associated facilities, types and fields | |
2a74fbf4 | 62 | are released as well. |
63 | ||
64 | return value is NULL if there is an error when opening the trace. | |
65 | ||
66 | */ | |
1b82f325 | 67 | |
45e14832 | 68 | LttTrace *ltt_trace_open(const gchar *pathname); |
f7afe191 | 69 | |
2a74fbf4 | 70 | /* copy reopens a trace |
71 | * | |
72 | * return value NULL if error while opening the trace | |
73 | */ | |
f7afe191 | 74 | LttTrace *ltt_trace_copy(LttTrace *self); |
1b82f325 | 75 | |
8655430b | 76 | static inline GQuark ltt_trace_name(const LttTrace *t) |
77 | { | |
78 | return t->pathname; | |
79 | } | |
49bf71b5 | 80 | |
1b82f325 | 81 | |
8655430b | 82 | void ltt_trace_close(LttTrace *t); |
1b82f325 | 83 | |
963b5f2d | 84 | LttSystemDescription *ltt_trace_system_description(LttTrace *t); |
1b82f325 | 85 | |
1b82f325 | 86 | |
487ad181 | 87 | /* Get the start time and end time of the trace */ |
88 | ||
89 | void ltt_trace_time_span_get(LttTrace *t, LttTime *start, LttTime *end); | |
90 | ||
91 | ||
290dfc8c | 92 | /* Get the name of a tracefile */ |
1b82f325 | 93 | |
8655430b | 94 | static inline GQuark ltt_tracefile_name(const LttTracefile *tf) |
95 | { | |
96 | return tf->name; | |
97 | } | |
98 | ||
99 | static inline GQuark ltt_tracefile_long_name(const LttTracefile *tf) | |
100 | { | |
101 | return tf->long_name; | |
102 | } | |
1b82f325 | 103 | |
d3d34f49 | 104 | /* get the cpu number of the tracefile */ |
105 | ||
8655430b | 106 | static inline guint ltt_tracefile_cpu(LttTracefile *tf) |
107 | { | |
108 | return tf->cpu_num; | |
109 | } | |
ae3d0f50 | 110 | |
111 | /* For usertrace */ | |
8655430b | 112 | static inline guint ltt_tracefile_tid(LttTracefile *tf) |
113 | { | |
114 | return tf->tid; | |
115 | } | |
116 | ||
117 | static inline guint ltt_tracefile_pgid(LttTracefile *tf) | |
118 | { | |
119 | return tf->pgid; | |
120 | } | |
121 | ||
122 | static inline guint64 ltt_tracefile_creation(LttTracefile *tf) | |
123 | { | |
124 | return tf->creation; | |
125 | } | |
126 | ||
127 | static inline LttTrace *ltt_tracefile_get_trace(LttTracefile *tf) | |
128 | { | |
129 | return tf->trace; | |
130 | } | |
1b82f325 | 131 | |
80da81ad | 132 | /* Get the number of blocks in the tracefile */ |
133 | ||
8655430b | 134 | static inline guint ltt_tracefile_block_number(LttTracefile *tf) |
135 | { | |
136 | return tf->num_blocks; | |
137 | } | |
80da81ad | 138 | |
139 | ||
1b82f325 | 140 | /* Seek to the first event of the trace with time larger or equal to time */ |
141 | ||
3aee1200 | 142 | int ltt_tracefile_seek_time(LttTracefile *t, LttTime time); |
1b82f325 | 143 | |
80da81ad | 144 | /* Seek to the first event with position equal or larger to ep */ |
145 | ||
3aee1200 | 146 | int ltt_tracefile_seek_position(LttTracefile *t, |
04b44e05 | 147 | const LttEventPosition *ep); |
1b82f325 | 148 | |
149 | /* Read the next event */ | |
150 | ||
3aee1200 | 151 | int ltt_tracefile_read(LttTracefile *t); |
a5dcde2f | 152 | |
3aee1200 | 153 | /* ltt_tracefile_read cut down in pieces */ |
154 | int ltt_tracefile_read_seek(LttTracefile *t); | |
155 | int ltt_tracefile_read_update_event(LttTracefile *t); | |
156 | int ltt_tracefile_read_op(LttTracefile *t); | |
a5dcde2f | 157 | |
eed2ef37 | 158 | /* Get the current event of the tracefile : valid until the next read */ |
159 | LttEvent *ltt_tracefile_get_event(LttTracefile *tf); | |
160 | ||
a5dcde2f | 161 | /* get the data type size and endian type of the local machine */ |
162 | ||
163 | void getDataEndianType(LttArchSize * size, LttArchEndian * endian); | |
164 | ||
165 | /* get an integer number */ | |
3aee1200 | 166 | gint64 get_int(gboolean reverse_byte_order, gint size, void *data); |
a5dcde2f | 167 | |
168 | /* get the node name of the system */ | |
169 | ||
45e14832 | 170 | gchar * ltt_trace_system_description_node_name (LttSystemDescription * s); |
a5dcde2f | 171 | |
172 | ||
173 | /* get the domain name of the system */ | |
174 | ||
45e14832 | 175 | gchar * ltt_trace_system_description_domain_name (LttSystemDescription * s); |
a5dcde2f | 176 | |
177 | ||
178 | /* get the description of the system */ | |
179 | ||
45e14832 | 180 | gchar * ltt_trace_system_description_description (LttSystemDescription * s); |
a5dcde2f | 181 | |
182 | ||
bf33dd50 | 183 | /* get the NTP start time of the trace */ |
a5dcde2f | 184 | |
7bd563ec | 185 | LttTime ltt_trace_start_time(LttTrace *t); |
a5dcde2f | 186 | |
bf33dd50 | 187 | /* get the monotonic start time of the trace */ |
188 | ||
189 | LttTime ltt_trace_start_time_monotonic(LttTrace *t); | |
190 | ||
45e14832 | 191 | void get_absolute_pathname(const gchar *pathname, gchar * abs_pathname); |
18206708 | 192 | |
e45551ac | 193 | /* May return a NULL tracefile group */ |
3865ea09 | 194 | GData **ltt_trace_get_tracefiles_groups(LttTrace *trace); |
77175651 | 195 | |
196 | typedef void (*ForEachTraceFileFunc)(LttTracefile *tf, gpointer func_args); | |
197 | ||
198 | struct compute_tracefile_group_args { | |
199 | ForEachTraceFileFunc func; | |
200 | gpointer func_args; | |
201 | }; | |
202 | ||
3865ea09 | 203 | void compute_tracefile_group(GQuark key_id, |
204 | GArray *group, | |
205 | struct compute_tracefile_group_args *args); | |
77175651 | 206 | |
3aee1200 | 207 | |
a0c1f622 | 208 | gint64 ltt_get_int(gboolean reverse_byte_order, gint size, void *data); |
209 | ||
210 | guint64 ltt_get_uint(gboolean reverse_byte_order, gint size, void *data); | |
211 | ||
9c9bf2d4 BP |
212 | guint64 tsc_to_uint64(guint32 freq_scale, uint64_t start_freq, guint64 tsc); |
213 | ||
ae3d0f50 | 214 | LttTime ltt_interpolate_time_from_tsc(LttTracefile *tf, guint64 tsc); |
215 | ||
91f8d488 | 216 | /* Set to enable event debugging output */ |
217 | void ltt_event_debug(int state); | |
218 | ||
1b82f325 | 219 | #endif // TRACE_H |