#include <errno.h>
#include <ltt/time.h>
+#include <babeltrace/context.h>
+#include <babeltrace/iterator.h>
+
+#include <babeltrace/ctf/events.h>
+#include <babeltrace/ctf/iterator.h>
+
gint compare_tracefile(gconstpointer a, gconstpointer b)
{
gint comparison = 0;
GData **tracefiles_groups;
struct compute_tracefile_group_args args;
+
+ struct bt_iter_pos begin_pos;
nb_trace = lttv_traceset_number(ts);
self->ts = ts;
self->traces = g_new(LttvTraceContext *, nb_trace);
self->a = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL);
self->ts_a = lttv_traceset_attribute(ts);
+
+ begin_pos.type = BT_SEEK_BEGIN;
+
+ self->iter = bt_ctf_iter_create(lttv_traceset_get_context(ts),
+ &begin_pos,
+ NULL);
+ self->event_hooks = lttv_hooks_new();
+#ifdef BABEL_CLEANUP
for(i = 0 ; i < nb_trace ; i++) {
tc = LTTV_TRACESET_CONTEXT_GET_CLASS(self)->new_trace_context(self);
self->traces[i] = tc;
&args);
}
-#if 0
- nb_control = ltt_trace_control_tracefile_number(tc->t);
- nb_per_cpu = ltt_trace_per_cpu_tracefile_number(tc->t);
- nb_tracefile = nb_control + nb_per_cpu;
- tc->tracefiles = g_new(LttvTracefileContext *, nb_tracefile);
-
- for(j = 0 ; j < nb_tracefile ; j++) {
- tfc = LTTV_TRACESET_CONTEXT_GET_CLASS(self)->new_tracefile_context(self);
- tc->tracefiles[j] = tfc;
- tfc->index = j;
-
- if(j < nb_control) {
- tfc->control = TRUE;
- tfc->tf = ltt_trace_control_tracefile_get(tc->t, j);
- } else {
- tfc->control = FALSE;
- tfc->tf = ltt_trace_per_cpu_tracefile_get(tc->t, j - nb_control);
- }
-
- tfc->t_context = tc;
- tfc->e = ltt_event_new();
- tfc->event = lttv_hooks_new();
- tfc->event_by_id = lttv_hooks_by_id_new();
- tfc->a = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL);
- }
-#endif //0
}
+#endif
self->sync_position = lttv_traceset_context_position_new(self);
self->pqueue = g_tree_new(compare_tracefile);
lttv_process_traceset_seek_time(self, ltt_time_zero);
LttvTraceContext *tc;
lttv_hooks_call(before_traceset, self);
+
+ lttv_hooks_add_list(self->event_hooks, event);
nb_trace = lttv_traceset_number(ts);
gulong nb_events,
const LttvTracesetContextPosition *end_position)
{
+
+ unsigned count = 0;
+
+ struct bt_ctf_event *event;
+
+ while(TRUE) {
+
+ if((count >= nb_events) && (nb_events != G_MAXULONG)) {
+ break;
+ }
+
+ if((event = bt_ctf_iter_read_event(self->iter)) != NULL) {
+
+ count++;
+
+ /* TODO ybrosseau: encapsulate the event into something */
+ lttv_hooks_call(self->event_hooks, event);
+
+ if(bt_iter_next(bt_ctf_get_iter(self->iter)) < 0) {
+ printf("ERROR NEXT\n");
+ break;
+ }
+ } else {
+ /* READ FAILED */
+
+ break;
+
+ }
+ }
+
+
+
+ return count;
+#ifdef BABEL_CLEANUP
GTree *pqueue = self->pqueue;
LttvTracefileContext *tfc;
} else {
return count;
}
+
+#endif /* BABEL_CLEANUP */
}
*/
void lttv_process_trace_seek_time(LttvTraceContext *self, LttTime start)
{
+
+
+#ifdef BABEL_CLEANUP
guint i, nb_tracefile;
gint ret;
g_debug("test tree after seek_time");
g_tree_foreach(pqueue, test_tree, NULL);
#endif //DEBUG
+#endif
}
/****************************************************************************
}
void lttv_process_traceset_seek_time(LttvTracesetContext *self, LttTime start)
-{
+{
+#ifdef WAIT_FOR_BABELTRACE_FIX_SEEK_ZERO
+ struct bt_iter_pos seekpos;
+ int ret;
+ seekpos.type = BT_SEEK_TIME;
+ seekpos.u.seek_time = ltt_time_to_uint64(start);
+ ret = bt_iter_set_pos(bt_ctf_get_iter(self->iter), &seekpos);
+ if(ret < 0) {
+ printf("Seek by time error: %s,\n",strerror(-ret));
+ }
+#else
+#warning Seek time disabled because of babeltrace bugs
+#endif
+
+#ifdef BABEL_CLEANUP
guint i, nb_trace;
+
+
LttvTraceContext *tc;
//g_tree_destroy(self->pqueue);
tc = self->traces[i];
lttv_process_trace_seek_time(tc, start);
}
+#endif
}
#include <ltt/trace.h>
#include <lttv/sync/sync_chain_lttv.h>
+#include <babeltrace/context.h>
+
static LttvTraceset *traceset;
static LttvHooks
void lttv_trace_option(void *hook_data)
{
- LttTrace *trace;
-
+ //LttTrace *trace;
+ //trace_collection *trace;
+ //format *fmt = bt_lookup_format(g_quark_from_static_string("ctf"));
+ /*
if(a_live) {
- trace = ltt_trace_open_live(a_trace);
+ //trace = ltt_trace_open_live(a_trace);
} else {
- trace = ltt_trace_open(a_trace);
+ bt_create_context();
+ //trace = bt_add_trace(a_trace,"ctf");
}
if(trace == NULL) g_critical("cannot open trace %s", a_trace);
- lttv_traceset_add(traceset, lttv_trace_new(trace));
+ lttv_traceset_add(traceset, lttv_trace_new(trace));*/
+ if(bt_context_add_trace(lttv_traceset_get_context(traceset),
+ a_trace,
+ "ctf",
+ NULL,
+ NULL,
+ NULL) < 0) {
+ printf("Cannot add trace %s", a_trace);
+ }
}
end.tv_nsec = G_MAXULONG;
g_info("BatchAnalysis process traceset");
-
+
lttv_process_traceset_seek_time(tc, start);
/* Read as long a we do not reach the end (0) */
unsigned int count;
#include <stdio.h>
#include <inttypes.h>
+#include <babeltrace/ctf/events.h>
+
static gboolean
a_noevent,
a_no_field_names,
LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
+ struct bt_ctf_event *event = (struct bt_ctf_event *)call_data;
+#ifdef BABEL_CLEANUP
LttvTracefileContext *tfc = (LttvTracefileContext *)call_data;
LttvTracefileState *tfs = (LttvTracefileState *)call_data;
if(!lttv_filter_tree_parse(filter->head,e,tfc->tf,
tfc->t_context->t,tfc,NULL,NULL))
return FALSE;
-
+#endif
+#ifdef BABEL_CLEANUP
lttv_event_to_string(e, a_string, TRUE, !a_no_field_names, tfs);
-
+#endif
+ g_string_set_size(a_string,0);
+ g_string_append_printf(a_string, " %s %llu",
+ bt_ctf_event_name(event),
+ bt_ctf_get_timestamp_raw(event));
+#ifdef BABEL_CLEANUP
if(a_state) {
g_string_append_printf(a_string, " %s ",
g_quark_to_string(process->state->s));
}
+#endif
g_string_append_printf(a_string,"\n");
fputs(a_string->str, a_file);
+
return FALSE;
}