X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ftracecontext.c;h=8f1ad49bc8e2cbee8533d05c48b8c0e09b145823;hb=b1794effb12e2cc4c0c67dbf661792b86588f694;hp=ca7f4ea414c9370b4d7e4a33cb541b1ea72c380c;hpb=fb3d60478f102a4c2bb0746effa6e2ab049747ba;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/tracecontext.c b/ltt/branches/poly/lttv/lttv/tracecontext.c index ca7f4ea4..8f1ad49b 100644 --- a/ltt/branches/poly/lttv/lttv/tracecontext.c +++ b/ltt/branches/poly/lttv/lttv/tracecontext.c @@ -24,9 +24,7 @@ #include #include #include -#include #include -#include #include #include @@ -955,11 +953,18 @@ gboolean lttv_process_traceset_seek_position(LttvTracesetContext *self, static LttField * find_field(LttEventType *et, const GQuark field) { - GQuark name; + LttField *f; if(field == 0) return NULL; - return ltt_eventtype_field_by_name(et, field); + f = ltt_eventtype_field_by_name(et, field); + if (!f) { + g_warning("Cannot find field %s in event %s.%s", g_quark_to_string(field), + g_quark_to_string(ltt_facility_name(ltt_eventtype_facility(et))), + g_quark_to_string(ltt_eventtype_name(et))); + } + + return f; } LttvTraceHookByFacility *lttv_trace_hook_get_fac(LttvTraceHook *th, @@ -968,11 +973,7 @@ LttvTraceHookByFacility *lttv_trace_hook_get_fac(LttvTraceHook *th, return &g_array_index(th->fac_index, LttvTraceHookByFacility, facility_id); } -/* Get the first facility corresponding to the name. As the types must be - * compatible, it is relevant to use the field name and sizes of the first - * facility to create data structures and assume the data will be compatible - * thorough the trace */ -LttvTraceHookByFacility *lttv_trace_hook_get_first(LttvTraceHook *th) +struct marker_info *lttv_trace_hook_get_marker(LttvTraceHook *th) { g_assert(th->fac_list->len > 0); return g_array_index(th->fac_list, LttvTraceHookByFacility*, 0); @@ -981,51 +982,29 @@ LttvTraceHookByFacility *lttv_trace_hook_get_first(LttvTraceHook *th) /* Returns 0 on success, -1 if fails. */ gint -lttv_trace_find_hook(LttTrace *t, GQuark facility, GQuark event, +lttv_trace_find_hook(LttTrace *t, GQuark event, GQuark field1, GQuark field2, GQuark field3, LttvHook h, gpointer hook_data, LttvTraceHook *th) { - LttFacility *f; - LttEventType *et, *first_et; - GArray *facilities; - - guint i, fac_id, ev_id; - - LttvTraceHookByFacility *thf, *first_thf; + struct marker_info *info; - facilities = ltt_trace_facility_get_by_name(t, facility); + guint i, ev_id; - if(unlikely(facilities == NULL)) goto facility_error; + head = marker_get_info_from_name(t, event); - th->fac_index = g_array_sized_new(FALSE, TRUE, - sizeof(LttvTraceHookByFacility), - NUM_FACILITIES); - th->fac_index = g_array_set_size(th->fac_index, NUM_FACILITIES); - - th->fac_list = g_array_sized_new(FALSE, TRUE, - sizeof(LttvTraceHookByFacility*), - facilities->len); - th->fac_list = g_array_set_size(th->fac_list, facilities->len); - - fac_id = g_array_index(facilities, guint, 0); - f = ltt_trace_get_facility_by_num(t, fac_id); - - et = ltt_facility_eventtype_get_by_name(f, event); - if(unlikely(et == NULL)) goto event_error; - - thf = &g_array_index(th->fac_index, LttvTraceHookByFacility, fac_id); - g_array_index(th->fac_list, LttvTraceHookByFacility*, 0) = thf; + if(unlikely(head == NULL)) + goto facility_error; - ev_id = ltt_eventtype_id(et); + ev_id = marker_get_id_from_info(t, info); - thf->h = h; - thf->id = GET_HOOK_ID(fac_id, ev_id); - thf->f1 = find_field(et, field1); - thf->f2 = find_field(et, field2); - thf->f3 = find_field(et, field3); - thf->hook_data = hook_data; + th->h = h; + th->id = ev_id; + th->f1 = find_field(et, field1); + th->f2 = find_field(et, field2); + th->f3 = find_field(et, field3); + th->hook_data = hook_data; first_thf = thf; first_et = et; @@ -1362,7 +1341,7 @@ static gint seek_back_event_hook(void *hook_data, void* call_data) ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { + tfc,NULL,NULL)) { return FALSE; } if(sd->filter2 != NULL && sd->filter2->head != NULL && @@ -1370,7 +1349,7 @@ static gint seek_back_event_hook(void *hook_data, void* call_data) ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { + tfc,NULL,NULL)) { return FALSE; } if(sd->filter3 != NULL && sd->filter3->head != NULL && @@ -1378,7 +1357,7 @@ static gint seek_back_event_hook(void *hook_data, void* call_data) ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { + tfc,NULL,NULL)) { return FALSE; } @@ -1586,7 +1565,7 @@ static gint seek_forward_event_hook(void *hook_data, void* call_data) ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { + tfc,NULL,NULL)) { return FALSE; } if(sd->filter2 != NULL && sd->filter2->head != NULL && @@ -1594,7 +1573,7 @@ static gint seek_forward_event_hook(void *hook_data, void* call_data) ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { + tfc,NULL,NULL)) { return FALSE; } if(sd->filter3 != NULL && sd->filter3->head != NULL && @@ -1602,7 +1581,7 @@ static gint seek_forward_event_hook(void *hook_data, void* call_data) ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) { + tfc,NULL,NULL)) { return FALSE; }