X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Ftrace.h;h=e87032dfaf86406575e438f7918b4868fc5e4422;hb=ec7a5af61127aa50a1839eee5be99ce53494c57b;hp=73adc0bffd0adae25032957e113e5c1ed970fe89;hpb=8959a0c85e48eda1a73038bb74708a01b1d0886d;p=lttv.git diff --git a/ltt/branches/poly/ltt/trace.h b/ltt/branches/poly/ltt/trace.h index 73adc0bf..e87032df 100644 --- a/ltt/branches/poly/ltt/trace.h +++ b/ltt/branches/poly/ltt/trace.h @@ -1,5 +1,6 @@ /* This file is part of the Linux Trace Toolkit trace reading library * Copyright (C) 2003-2004 Michel Dagenais + * 2005 Mathieu Desnoyers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,6 +21,45 @@ #define TRACE_H #include +#include +#include +#include + +struct LttTrace { + GQuark pathname; //the pathname of the trace + //LttSystemDescription * system_description;//system description + + guint num_cpu; + + guint32 arch_type; + guint32 arch_variant; + guint8 arch_size; + guint8 ltt_major_version; + guint8 ltt_minor_version; + guint8 flight_recorder; + guint32 freq_scale; + uint64_t start_freq; + uint64_t start_tsc; + uint64_t start_monotonic; + LttTime start_time; + LttTime start_time_from_tsc; + + GData *tracefiles; //tracefiles groups + /* Support for markers */ + GArray *markers; //indexed by marker ID + GHashTable *markers_hash; //indexed by name hash + GHashTable *markers_format_hash; //indexed by name hash +}; + +static inline guint ltt_trace_get_num_cpu(LttTrace *t) +{ + return t->num_cpu; +} + + +extern GQuark LTT_FACILITY_NAME_HEARTBEAT, + LTT_EVENT_NAME_HEARTBEAT, + LTT_EVENT_NAME_HEARTBEAT_FULL; /* A trace is specified as a pathname to the directory containing all the associated data (control tracefiles, per cpu tracefiles, event @@ -32,7 +72,7 @@ */ -LttTrace *ltt_trace_open(const char *pathname); +LttTrace *ltt_trace_open(const gchar *pathname); /* copy reopens a trace * @@ -40,138 +80,145 @@ LttTrace *ltt_trace_open(const char *pathname); */ LttTrace *ltt_trace_copy(LttTrace *self); -char * ltt_trace_name(LttTrace *t); +static inline GQuark ltt_trace_name(const LttTrace *t) +{ + return t->pathname; +} -void ltt_trace_close(LttTrace *t); +void ltt_trace_close(LttTrace *t); LttSystemDescription *ltt_trace_system_description(LttTrace *t); -/* Functions to discover the facilities in the trace. Once the number - of facilities is known, they may be accessed by position. Multiple - versions of a facility (same name, different checksum) have consecutive - positions. */ - -unsigned ltt_trace_facility_number(LttTrace *t); - -LttFacility *ltt_trace_facility_get(LttTrace *t, unsigned i); - -LttFacility * ltt_trace_facility_by_id(LttTrace * trace, unsigned id); - -/* Look for a facility by name. It returns the number of facilities found - and sets the position argument to the first found. Returning 0, the named - facility is unknown, returning 1, the named facility is at the specified - position, returning n, the facilities are from position to - position + n - 1. */ - -unsigned ltt_trace_facility_find(LttTrace *t, char *name, unsigned *position); - - -/* Functions to discover all the event types in the trace */ - -unsigned ltt_trace_eventtype_number(LttTrace *t); - -LttEventType *ltt_trace_eventtype_get(LttTrace *t, unsigned i); - - -/* There is one "per cpu" tracefile for each CPU, numbered from 0 to - the maximum number of CPU in the system. When the number of CPU installed - is less than the maximum, some positions are unused. There are also a - number of "control" tracefiles (facilities, interrupts...). */ - -unsigned ltt_trace_control_tracefile_number(LttTrace *t); - -unsigned ltt_trace_per_cpu_tracefile_number(LttTrace *t); - - -/* It is possible to search for the tracefiles by name or by CPU tracefile - * name. - * The index within the tracefiles of the same type is returned if found - * and a negative value otherwise. - */ - -int ltt_trace_control_tracefile_find(LttTrace *t, const gchar *name); - -int ltt_trace_per_cpu_tracefile_find(LttTrace *t, const gchar *name); +/* Get the start time and end time of the trace */ +void ltt_trace_time_span_get(LttTrace *t, LttTime *start, LttTime *end); -/* Get a specific tracefile */ -LttTracefile *ltt_trace_control_tracefile_get(LttTrace *t, unsigned i); +/* Get the name of a tracefile */ -LttTracefile *ltt_trace_per_cpu_tracefile_get(LttTrace *t, unsigned i); +static inline GQuark ltt_tracefile_name(const LttTracefile *tf) +{ + return tf->name; +} +static inline GQuark ltt_tracefile_long_name(const LttTracefile *tf) +{ + return tf->long_name; +} -/* Get the start time and end time of the trace */ +/* get the cpu number of the tracefile */ -void ltt_trace_time_span_get(LttTrace *t, LttTime *start, LttTime *end); +static inline guint ltt_tracefile_cpu(LttTracefile *tf) +{ + return tf->cpu_num; +} +/* For usertrace */ +static inline guint ltt_tracefile_tid(LttTracefile *tf) +{ + return tf->tid; +} -/* Get the name of a tracefile */ +static inline guint ltt_tracefile_pgid(LttTracefile *tf) +{ + return tf->pgid; +} -char *ltt_tracefile_name(LttTracefile *tf); +static inline guint64 ltt_tracefile_creation(LttTracefile *tf) +{ + return tf->creation; +} +static inline LttTrace *ltt_tracefile_get_trace(LttTracefile *tf) +{ + return tf->trace; +} /* Get the number of blocks in the tracefile */ -unsigned ltt_tracefile_block_number(LttTracefile *tf); +static inline guint ltt_tracefile_block_number(LttTracefile *tf) +{ + return tf->num_blocks; +} /* Seek to the first event of the trace with time larger or equal to time */ -void ltt_tracefile_seek_time(LttTracefile *t, LttTime time); +int ltt_tracefile_seek_time(LttTracefile *t, LttTime time); /* Seek to the first event with position equal or larger to ep */ -void ltt_tracefile_seek_position(LttTracefile *t, +int ltt_tracefile_seek_position(LttTracefile *t, const LttEventPosition *ep); /* Read the next event */ -LttEvent *ltt_tracefile_read(LttTracefile *t, LttEvent *event); +int ltt_tracefile_read(LttTracefile *t); -/* open tracefile */ - -LttTracefile * ltt_tracefile_open(LttTrace *t, char * tracefile_name); - -void ltt_tracefile_open_cpu(LttTrace *t, char * tracefile_name); - -gint ltt_tracefile_open_control(LttTrace *t, char * control_name); +/* ltt_tracefile_read cut down in pieces */ +int ltt_tracefile_read_seek(LttTracefile *t); +int ltt_tracefile_read_update_event(LttTracefile *t); +int ltt_tracefile_read_op(LttTracefile *t); +/* Get the current event of the tracefile : valid until the next read */ +LttEvent *ltt_tracefile_get_event(LttTracefile *tf); /* get the data type size and endian type of the local machine */ void getDataEndianType(LttArchSize * size, LttArchEndian * endian); /* get an integer number */ - -gint64 getIntNumber(int size1, void *evD); - +gint64 get_int(gboolean reverse_byte_order, gint size, void *data); /* get the node name of the system */ -char * ltt_trace_system_description_node_name (LttSystemDescription * s); +gchar * ltt_trace_system_description_node_name (LttSystemDescription * s); /* get the domain name of the system */ -char * ltt_trace_system_description_domain_name (LttSystemDescription * s); +gchar * ltt_trace_system_description_domain_name (LttSystemDescription * s); /* get the description of the system */ -char * ltt_trace_system_description_description (LttSystemDescription * s); +gchar * ltt_trace_system_description_description (LttSystemDescription * s); + + +/* get the NTP start time of the trace */ + +LttTime ltt_trace_start_time(LttTrace *t); + +/* get the monotonic start time of the trace */ + +LttTime ltt_trace_start_time_monotonic(LttTrace *t); + +void get_absolute_pathname(const gchar *pathname, gchar * abs_pathname); + +/* May return a NULL tracefile group */ +GData **ltt_trace_get_tracefiles_groups(LttTrace *trace); + +typedef void (*ForEachTraceFileFunc)(LttTracefile *tf, gpointer func_args); + +struct compute_tracefile_group_args { + ForEachTraceFileFunc func; + gpointer func_args; +}; + +void compute_tracefile_group(GQuark key_id, + GArray *group, + struct compute_tracefile_group_args *args); -/* get the start time of the trace */ +gint64 ltt_get_int(gboolean reverse_byte_order, gint size, void *data); -LttTime ltt_trace_system_description_trace_start_time(LttSystemDescription *s); +guint64 ltt_get_uint(gboolean reverse_byte_order, gint size, void *data); -/* copy tracefile info over another. Used for sync. */ -LttTracefile *ltt_tracefile_new(); -void ltt_tracefile_destroy(LttTracefile *tf); -void ltt_tracefile_copy(LttTracefile *dest, const LttTracefile *src); +LttTime ltt_interpolate_time_from_tsc(LttTracefile *tf, guint64 tsc); +/* Set to enable event debugging output */ +void ltt_event_debug(int state); #endif // TRACE_H