X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Fprint.c;h=c98c2425cc1a9810a8b903e2440b8dd70e1773dd;hb=91346f59cc3db03777b8d6f6c8a803a5bd37785f;hp=89dad9a4ac423e6dabacd81eb48bfe8b5e9a4b7f;hpb=5290ec02dda002f243ef98cd018f31ee44e07843;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/print.c b/ltt/branches/poly/lttv/lttv/print.c index 89dad9a4..c98c2425 100644 --- a/ltt/branches/poly/lttv/lttv/print.c +++ b/ltt/branches/poly/lttv/lttv/print.c @@ -1,4 +1,3 @@ - /* This file is part of the Linux Trace Toolkit viewer * Copyright (C) 2003-2004 Michel Dagenais * 2005 Mathieu Desnoyers @@ -38,137 +37,233 @@ #include #include #include -#include #include -#include #include +#include +#include +#include -void lttv_print_field(LttEvent *e, LttField *f, GString *s, - gboolean field_names) { - - LttType *type; - - LttField *element; - +void lttv_print_field(LttEvent *e, struct marker_field *f, GString *s, + gboolean field_names) +{ GQuark name; - int nb, i; + //int nb, i; - type = ltt_field_type(f); - switch(ltt_type_class(type)) { - case LTT_INT: - case LTT_LONG: - case LTT_SSIZE_T: - g_string_append_printf(s, " %lld", ltt_event_get_long_int(e,f)); - break; + switch(f->type) { + case LTT_TYPE_SIGNED_INT: + if(field_names) { + name = f->name; + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } - case LTT_UINT: - case LTT_ULONG: - case LTT_SIZE_T: - case LTT_OFF_T: - g_string_append_printf(s, " %llu", ltt_event_get_long_unsigned(e,f)); + g_string_append_printf(s, "%lld", ltt_event_get_long_int(e,f)); + //g_string_append_printf(s, type->fmt, ltt_event_get_long_int(e,f)); break; + case LTT_TYPE_UNSIGNED_INT: + if(field_names) { + name = f->name; + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + g_string_append_printf(s, "%llu", ltt_event_get_long_unsigned(e,f)); + //g_string_append_printf(s, type->fmt, ltt_event_get_long_unsigned(e,f)); + break; + +#if 0 + case LTT_CHAR: + case LTT_UCHAR: + { + unsigned car = ltt_event_get_unsigned(e,f); + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + if(isprint(car)) { + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + //g_string_append_printf(s, "%c", car); + g_string_append_printf(s, type->fmt, car); + } else { + g_string_append_printf(s, "\\%x", car); + } + } + break; case LTT_FLOAT: - g_string_append_printf(s, " %g", ltt_event_get_double(e,f)); + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + //g_string_append_printf(s, "%g", ltt_event_get_double(e,f)); + g_string_append_printf(s, type->fmt, ltt_event_get_double(e,f)); break; +#endif - case LTT_POINTER: - g_string_append_printf(s, " 0x%llx", ltt_event_get_long_unsigned(e,f)); + case LTT_TYPE_POINTER: + if(field_names) { + name = f->name; + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + g_string_append_printf(s, "0x%llx", ltt_event_get_long_unsigned(e,f)); + //g_string_append_printf(s, type->fmt, ltt_event_get_long_unsigned(e,f)); break; - case LTT_STRING: - g_string_append_printf(s, " \"%s\"", ltt_event_get_string(e,f)); + case LTT_TYPE_STRING: + if(field_names) { + name = f->name; + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + g_string_append_printf(s, "\"%s\"", ltt_event_get_string(e,f)); break; +#if 0 case LTT_ENUM: - g_string_append_printf(s, " %s", - g_quark_to_string(ltt_enum_string_get(type, - ltt_event_get_unsigned(e,f)-1))); + { + GQuark value = ltt_enum_string_get(type, ltt_event_get_unsigned(e,f)); + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + if(value) + g_string_append_printf(s, "%s", g_quark_to_string(value)); + else + g_string_append_printf(s, "%lld", ltt_event_get_long_int(e,f)); + } break; case LTT_ARRAY: case LTT_SEQUENCE: - g_string_append_printf(s, " {"); + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + // g_string_append_printf(s, "{ "); + //Insert header + g_string_append_printf(s, type->header);//tested, works fine. + + nb = ltt_event_field_element_number(e,f); - element = ltt_field_element(f); for(i = 0 ; i < nb ; i++) { - ltt_event_field_element_select(e,f,i); - lttv_print_field(e, element, s, field_names); + LttField *child = ltt_event_field_element_select(e,f,i); + lttv_print_field(e, child, s, field_names, i); + if(iseparator); } - g_string_append_printf(s, " }"); + //g_string_append_printf(s, " }"); + //Insert footer + g_string_append_printf(s, type->footer);//tested, works fine. break; case LTT_STRUCT: - g_string_append_printf(s, " {"); + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + // g_string_append_printf(s, "{ "); + //Insert header + g_string_append_printf(s, type->header); + nb = ltt_type_member_number(type); for(i = 0 ; i < nb ; i++) { + LttField *element; element = ltt_field_member(f,i); - if(field_names) { - ltt_type_member_type(type, i, &name); - g_string_append_printf(s, " %s = ", g_quark_to_string(name)); - } - lttv_print_field(e, element, s, field_names); + lttv_print_field(e, element, s, field_names, i); + if(i < nb-1) + g_string_append_printf(s,type->separator); } - g_string_append_printf(s, " }"); + //g_string_append_printf(s, " }"); + //Insert footer + g_string_append_printf(s, type->footer); break; case LTT_UNION: - g_string_append_printf(s, " {"); + if(field_names) { + name = ltt_field_name(f); + if(name) + g_string_append_printf(s, "%s = ", g_quark_to_string(name)); + } + // g_string_append_printf(s, "{ "); + g_string_append_printf(s, type->header); + nb = ltt_type_member_number(type); for(i = 0 ; i < nb ; i++) { + LttField *element; element = ltt_field_member(f,i); - if(field_names) { - ltt_type_member_type(type, i, &name); - g_string_append_printf(s, " %s = ", g_quark_to_string(name)); - } - lttv_print_field(e, element, s, field_names); + lttv_print_field(e, element, s, field_names, i); + if(iseparator); } - g_string_append_printf(s, " }"); + // g_string_append_printf(s, " }"); + g_string_append_printf(s, type->footer); + break; +#endif + case LTT_TYPE_COMPACT: + g_error("compact type printing not implemented"); + break; + case LTT_TYPE_NONE: break; - } } - void lttv_event_to_string(LttEvent *e, GString *s, gboolean mandatory_fields, gboolean field_names, LttvTracefileState *tfs) { - LttFacility *facility; - - LttEventType *event_type; - - LttField *field; + struct marker_field *field; + struct marker_info *info; LttTime time; - guint cpu = ltt_tracefile_num(tfs->parent.tf); + guint cpu = tfs->cpu; LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context; LttvProcessState *process = ts->running_process[cpu]; + LttTrace *trace = ts->parent.t; - g_string_set_size(s,0); + s = g_string_set_size(s,0); - facility = ltt_event_facility(e); - event_type = ltt_event_eventtype(e); - field = ltt_event_field(e); + info = marker_get_info_from_id(trace, e->event_id); if(mandatory_fields) { time = ltt_event_time(e); - g_string_append_printf(s,"%s.%s: %ld.%09ld (%s_%u)", - g_quark_to_string(ltt_facility_name(facility)), - g_quark_to_string(ltt_eventtype_name(event_type)), + g_string_append_printf(s,"%s: %ld.%09ld (%s%s_%u)", + g_quark_to_string(info->name), (long)time.tv_sec, time.tv_nsec, + g_quark_to_string( + ltt_trace_name(ltt_tracefile_get_trace(tfs->parent.tf))), g_quark_to_string(ltt_tracefile_name(tfs->parent.tf)), cpu); /* Print the process id and the state/interrupt type of the process */ - g_string_append_printf(s,", %u, %u, %s", process->pid, - process->ppid, - g_quark_to_string(process->state->t)); + g_string_append_printf(s,", %u, %u, %s, %s, %u, 0x%llX, %s", process->pid, + process->tgid, + g_quark_to_string(process->name), + g_quark_to_string(process->brand), + process->ppid, process->current_function, + g_quark_to_string(process->state->t)); } - - if(field) + + if(marker_get_num_fields(info) == 0) return; + g_string_append_printf(s, " "); + g_string_append_printf(s, "{ "); + for (field = marker_get_field(info, 0); + field != marker_get_field(info, marker_get_num_fields(info)); + field++) { + if(field != marker_get_field(info, 0)) + g_string_append_printf(s, ", "); lttv_print_field(e, field, s, field_names); + } + g_string_append_printf(s, " }"); } static void init() @@ -180,6 +275,6 @@ static void destroy() } LTTV_MODULE("print", "Print events", \ - "Produce a detailed text printout of events", \ - init, destroy) + "Produce a detailed text printout of events", \ + init, destroy)