#ifndef PROCESSTRACE_H
#define PROCESSTRACE_H
+#include <string.h>
#include <lttv/traceset.h>
#include <lttv/attribute.h>
#include <lttv/hook.h>
#include <ltt/ltt.h>
-#include <ltt/markers.h>
+#include <ltt/marker.h>
/* This is the generic part of trace processing. All events within a
certain time interval are accessed and processing hooks are called for
guint lttv_process_traceset_middle(LttvTracesetContext *self,
LttTime end,
- guint nb_events,
+ gulong nb_events,
const LttvTracesetContextPosition *end_position);
void lttv_process_traceset_end(LttvTracesetContext *self,
gpointer hook_data;
} LttvTraceHook;
-#define FIELD_ARRAY(val) ((GQuark[]){ (val), 0 })
-
-/* Get the head of marker list correcponding to the given trace hook.
+/* Get the head of marker list corresponding to the given trace hook.
*/
struct marker_info *lttv_trace_hook_get_marker(LttTrace *t, LttvTraceHook *th);
Adds the hooks to the trace_hooks array.
*/
-int lttv_trace_find_hook(LttTrace *t, GQuark marker_name,
+int lttv_trace_find_hook(LttTrace *t, GQuark facility_name, GQuark event_name,
GQuark fields[], LttvHook h, gpointer hook_data, GArray **trace_hooks);
+static inline struct marker_field *
+lttv_trace_get_hook_field(LttvTraceHook *hook, unsigned int index)
+{
+ return g_ptr_array_index(hook->fields, index);
+}
+
+static inline GQuark lttv_merge_facility_event_name(GQuark fac, GQuark ev)
+{
+ char *tmp;
+ const char *sfac, *sev;
+ GQuark ret;
+
+ sfac = g_quark_to_string(fac);
+ sev = g_quark_to_string(ev);
+ tmp = g_new(char, strlen(sfac) + strlen(sev) + 3); /* 3: _ \0 \0 */
+ strcpy(tmp, sfac);
+ strcat(tmp, "_");
+ strcat(tmp, sev);
+ ret = g_quark_from_string(tmp);
+ g_free(tmp);
+ return ret;
+}
+
LttvTracefileContext *lttv_traceset_context_get_current_tfc(
LttvTracesetContext *self);
LttvFilter *filter3,
gpointer data);
+#define FIELD_ARRAY(val...) ((GQuark[]){ val, 0 })
#endif // PROCESSTRACE_H