1 /* This file is part of the Linux Trace Toolkit trace reading library
2 * Copyright (C) 2003-2004 Michel Dagenais
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License Version 2.1 as published by the Free Software Foundation.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 02111-1307, USA.
24 extern GQuark LTT_FACILITY_NAME_HEARTBEAT
,
25 LTT_EVENT_NAME_HEARTBEAT
;
27 /* A trace is specified as a pathname to the directory containing all the
28 associated data (control tracefiles, per cpu tracefiles, event
31 When a trace is closed, all the associated facilities, types and fields
34 return value is NULL if there is an error when opening the trace.
38 LttTrace
*ltt_trace_open(const gchar
*pathname
);
40 /* copy reopens a trace
42 * return value NULL if error while opening the trace
44 LttTrace
*ltt_trace_copy(LttTrace
*self
);
46 GQuark
ltt_trace_name(const LttTrace
*t
);
48 void ltt_trace_close(LttTrace
*t
);
50 guint
ltt_trace_get_num_cpu(LttTrace
*t
);
52 LttSystemDescription
*ltt_trace_system_description(LttTrace
*t
);
55 /* Functions to discover the facilities in the trace. Once the number
56 of facilities is known, they may be accessed by position. Multiple
57 versions of a facility (same name, different checksum) have consecutive
60 unsigned ltt_trace_facility_number(LttTrace
*t
);
62 LttFacility
*ltt_trace_facility_get(LttTrace
*t
, unsigned i
);
64 LttFacility
* ltt_trace_facility_by_id(LttTrace
* trace
, guint8 id
);
66 /* Returns an array of indexes (guint) that matches the facility name */
67 GArray
*ltt_trace_facility_get_by_name(LttTrace
*t
, GQuark name
);
69 /* Functions to discover all the event types in the trace */
71 unsigned ltt_trace_eventtype_number(LttTrace
*t
);
73 LttEventType
*ltt_trace_eventtype_get(LttTrace
*t
, unsigned i
);
76 /* Get the start time and end time of the trace */
78 void ltt_trace_time_span_get(LttTrace
*t
, LttTime
*start
, LttTime
*end
);
81 /* Get the name of a tracefile */
83 GQuark
ltt_tracefile_name(const LttTracefile
*tf
);
84 GQuark
ltt_tracefile_long_name(const LttTracefile
*tf
);
86 /* get the cpu number of the tracefile */
88 guint
ltt_tracefile_num(LttTracefile
*tf
);
90 LttTrace
*ltt_tracefile_get_trace(LttTracefile
*tf
);
92 /* Get the number of blocks in the tracefile */
94 unsigned ltt_tracefile_block_number(LttTracefile
*tf
);
97 /* Seek to the first event of the trace with time larger or equal to time */
99 int ltt_tracefile_seek_time(LttTracefile
*t
, LttTime time
);
101 /* Seek to the first event with position equal or larger to ep */
103 int ltt_tracefile_seek_position(LttTracefile
*t
,
104 const LttEventPosition
*ep
);
106 /* Read the next event */
108 int ltt_tracefile_read(LttTracefile
*t
);
110 /* ltt_tracefile_read cut down in pieces */
111 int ltt_tracefile_read_seek(LttTracefile
*t
);
112 int ltt_tracefile_read_update_event(LttTracefile
*t
);
113 int ltt_tracefile_read_op(LttTracefile
*t
);
115 /* Get the current event of the tracefile : valid until the next read */
116 LttEvent
*ltt_tracefile_get_event(LttTracefile
*tf
);
120 gint
ltt_tracefile_open(LttTrace
*t
, gchar
* fileName
, LttTracefile
*tf
);
122 /* get the data type size and endian type of the local machine */
124 void getDataEndianType(LttArchSize
* size
, LttArchEndian
* endian
);
126 /* get an integer number */
127 gint64
get_int(gboolean reverse_byte_order
, gint size
, void *data
);
129 /* get the node name of the system */
131 gchar
* ltt_trace_system_description_node_name (LttSystemDescription
* s
);
134 /* get the domain name of the system */
136 gchar
* ltt_trace_system_description_domain_name (LttSystemDescription
* s
);
139 /* get the description of the system */
141 gchar
* ltt_trace_system_description_description (LttSystemDescription
* s
);
144 /* get the start time of the trace */
146 LttTime
ltt_trace_system_description_trace_start_time(LttSystemDescription
*s
);
148 /* copy tracefile info over another. Used for sync. */
149 LttTracefile
*ltt_tracefile_new();
150 void ltt_tracefile_destroy(LttTracefile
*tf
);
151 void ltt_tracefile_copy(LttTracefile
*dest
, const LttTracefile
*src
);
153 void get_absolute_pathname(const gchar
*pathname
, gchar
* abs_pathname
);
155 /* May return a NULL tracefile group */
156 GData
**ltt_trace_get_tracefiles_groups(LttTrace
*trace
);
158 typedef void (*ForEachTraceFileFunc
)(LttTracefile
*tf
, gpointer func_args
);
160 struct compute_tracefile_group_args
{
161 ForEachTraceFileFunc func
;
166 void compute_tracefile_group(GQuark key_id
,
168 struct compute_tracefile_group_args
*args
);
170 LttFacility
*ltt_trace_get_facility_by_num(LttTrace
*t
, guint num
);
173 gint
check_fields_compatibility(LttEventType
*event_type1
,
174 LttEventType
*event_type2
,
175 LttField
*field1
, LttField
*field2
);
177 gint64
ltt_get_int(gboolean reverse_byte_order
, gint size
, void *data
);
179 guint64
ltt_get_uint(gboolean reverse_byte_order
, gint size
, void *data
);