X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ftracecontext.c;h=1886d39f07bd7b35d71f7a95c95ade0b7fe46515;hb=3a686a8b8e3a4808c8c905168a33b461bc740a6b;hp=5d24e11bc75f66e9c88d694b6867ae696bf9ca82;hpb=04f2543ebde7de5ec5102e37dbcb4d280c3a87ed;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/tracecontext.c b/ltt/branches/poly/lttv/lttv/tracecontext.c index 5d24e11b..1886d39f 100644 --- a/ltt/branches/poly/lttv/lttv/tracecontext.c +++ b/ltt/branches/poly/lttv/lttv/tracecontext.c @@ -1337,7 +1337,10 @@ struct seek_back_data { guint events_found; guint n; /* number of events requested */ GPtrArray *array; /* array of LttvTracesetContextPositions pointers */ - LttvFilter *filter; + LttvFilter *filter1; + LttvFilter *filter2; + LttvFilter *filter3; + gpointer data; check_handler *check; gboolean *stop_flag; guint raw_event_count; @@ -1350,18 +1353,35 @@ static gint seek_back_event_hook(void *hook_data, void* call_data) LttvTracesetContext *tsc = tfc->t_context->ts_context; LttvTracesetContextPosition *pos; - if(sd->check && sd->check(sd->raw_event_count, sd->stop_flag)) return TRUE; + if(sd->check && sd->check(sd->raw_event_count, sd->stop_flag, sd->data)) + return TRUE; sd->raw_event_count++; - if(sd->filter != NULL && sd->filter->head != NULL) { - if(!lttv_filter_tree_parse(sd->filter->head, + if(sd->filter1 != NULL && sd->filter1->head != NULL && + !lttv_filter_tree_parse(sd->filter1->head, ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) - return FALSE; + tfc,NULL,NULL)) { + return FALSE; } - + if(sd->filter2 != NULL && sd->filter2->head != NULL && + !lttv_filter_tree_parse(sd->filter2->head, + ltt_tracefile_get_event(tfc->tf), + tfc->tf, + tfc->t_context->t, + tfc,NULL,NULL)) { + return FALSE; + } + if(sd->filter3 != NULL && sd->filter3->head != NULL && + !lttv_filter_tree_parse(sd->filter3->head, + ltt_tracefile_get_event(tfc->tf), + tfc->tf, + tfc->t_context->t, + tfc,NULL,NULL)) { + return FALSE; + } + pos = (LttvTracesetContextPosition*)g_ptr_array_index (sd->array, sd->first_event); @@ -1404,9 +1424,12 @@ static gint seek_back_event_hook(void *hook_data, void* call_data) guint lttv_process_traceset_seek_n_backward(LttvTracesetContext *self, guint n, LttTime first_offset, seek_time_fct time_seeker, - LttvFilter *filter, check_handler *check, - gboolean *stop_flag) + gboolean *stop_flag, + LttvFilter *filter1, + LttvFilter *filter2, + LttvFilter *filter3, + gpointer data) { if(lttv_traceset_number(self->ts) == 0) return 0; g_assert(ltt_time_compare(first_offset, ltt_time_zero) != 0); @@ -1427,7 +1450,10 @@ guint lttv_process_traceset_seek_n_backward(LttvTracesetContext *self, sd.first_event = 0; sd.events_found = 0; sd.array = g_ptr_array_sized_new(n); - sd.filter = filter; + sd.filter1 = filter1; + sd.filter2 = filter2; + sd.filter3 = filter3; + sd.data = data; sd.n = n; sd.check = check; sd.stop_flag = stop_flag; @@ -1537,7 +1563,10 @@ guint lttv_process_traceset_seek_n_backward(LttvTracesetContext *self, struct seek_forward_data { guint event_count; /* event counter */ guint n; /* requested number of events to jump over */ - LttvFilter *filter; + LttvFilter *filter1; + LttvFilter *filter2; + LttvFilter *filter3; + gpointer data; check_handler *check; gboolean *stop_flag; guint raw_event_count; /* event counter */ @@ -1548,19 +1577,38 @@ static gint seek_forward_event_hook(void *hook_data, void* call_data) struct seek_forward_data *sd = (struct seek_forward_data*)hook_data; LttvTracefileContext *tfc = (LttvTracefileContext*)call_data; - if(sd->check && sd->check(sd->raw_event_count, sd->stop_flag)) return TRUE; + if(sd->check && sd->check(sd->raw_event_count, sd->stop_flag, sd->data)) + return TRUE; sd->raw_event_count++; - if(sd->filter == NULL || lttv_filter_tree_parse(sd->filter->head, + if(sd->filter1 != NULL && sd->filter1->head != NULL && + !lttv_filter_tree_parse(sd->filter1->head, ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { - sd->event_count++; - if(sd->event_count >= sd->n) - return TRUE; + tfc,NULL,NULL)) { + return FALSE; } - return FALSE; + if(sd->filter2 != NULL && sd->filter2->head != NULL && + !lttv_filter_tree_parse(sd->filter2->head, + ltt_tracefile_get_event(tfc->tf), + tfc->tf, + tfc->t_context->t, + tfc,NULL,NULL)) { + return FALSE; + } + if(sd->filter3 != NULL && sd->filter3->head != NULL && + !lttv_filter_tree_parse(sd->filter3->head, + ltt_tracefile_get_event(tfc->tf), + tfc->tf, + tfc->t_context->t, + tfc,NULL,NULL)) { + return FALSE; + } + + sd->event_count++; + if(sd->event_count >= sd->n) + return TRUE; } /* Seek back n events forward from the current position (1 to n) @@ -1574,14 +1622,21 @@ static gint seek_forward_event_hook(void *hook_data, void* call_data) * returns : the number of events jumped over (may be less than requested if end * of traceset reached) */ guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self, - guint n, LttvFilter *filter, + guint n, check_handler *check, - gboolean *stop_flag) + gboolean *stop_flag, + LttvFilter *filter1, + LttvFilter *filter2, + LttvFilter *filter3, + gpointer data) { struct seek_forward_data sd; sd.event_count = 0; sd.n = n; - sd.filter = filter; + sd.filter1 = filter1; + sd.filter2 = filter2; + sd.filter3 = filter3; + sd.data = data; sd.check = check; sd.stop_flag = stop_flag; sd.raw_event_count = 0;