From 426f61498e1ff44cee86fb295c05eef566f5e932 Mon Sep 17 00:00:00 2001 From: compudj Date: Mon, 27 Oct 2008 20:55:48 +0000 Subject: [PATCH] trace version 2.2 git-svn-id: http://ltt.polymtl.ca/svn@3133 04897980-b3bd-0310-b5e0-8ef037075253 --- trunk/lttv/ltt/ltt-private.h | 16 +++++++++++++--- trunk/lttv/ltt/tracefile.c | 19 +++++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/trunk/lttv/ltt/ltt-private.h b/trunk/lttv/ltt/ltt-private.h index 24e82f29..4b2b4a32 100644 --- a/trunk/lttv/ltt/ltt-private.h +++ b/trunk/lttv/ltt/ltt-private.h @@ -66,7 +66,7 @@ typedef guint32 uint32_t; typedef guint64 uint64_t; /* Subbuffer header */ -struct ltt_subbuffer_header_2_1 { +struct ltt_subbuffer_header_2_2 { uint64_t cycle_count_begin; /* Cycle count at subbuffer start */ uint64_t cycle_count_end; /* Cycle count at subbuffer end */ uint32_t magic_number; /* @@ -86,10 +86,18 @@ struct ltt_subbuffer_header_2_1 { uint32_t freq_scale; /* Frequency scaling */ uint32_t lost_size; /* Size unused at end of subbuffer */ uint32_t buf_size; /* Size of this subbuffer */ + uint32_t events_lost; /* + * Events lost in this subbuffer since + * last subbuffer switch. + */ + uint32_t subbuf_corrupt; /* + * Corrupted (lost) subbuffers since + * the begginig of the trace. + */ char header_end[0]; /* End of header */ }; -typedef struct ltt_subbuffer_header_2_1 ltt_subbuffer_header_t; +typedef struct ltt_subbuffer_header_2_2 ltt_subbuffer_header_t; /* * Return header size without padding after the structure. Don't use packed @@ -147,7 +155,9 @@ struct LttTracefile { uint8_t tscbits; uint8_t eventbits; uint64_t tsc_mask; - uint64_t tsc_mask_next_bit; //next MSB after the mask + uint64_t tsc_mask_next_bit; //next MSB after the mask< + uint32_t events_lost; + uint32_t subbuf_corrupt; /* Current event */ LttEvent event; //Event currently accessible in the trace diff --git a/trunk/lttv/ltt/tracefile.c b/trunk/lttv/ltt/tracefile.c index 1d411e3e..7aaf232c 100644 --- a/trunk/lttv/ltt/tracefile.c +++ b/trunk/lttv/ltt/tracefile.c @@ -152,9 +152,9 @@ static int parse_trace_header(ltt_subbuffer_header_t *header, break; case 2: switch(header->minor_version) { - case 1: + case 2: { - struct ltt_subbuffer_header_2_1 *vheader = header; + struct ltt_subbuffer_header_2_2 *vheader = header; tf->buffer_header_size = ltt_subbuffer_header_size(); tf->tscbits = 27; tf->eventbits = 5; @@ -265,6 +265,8 @@ static gint ltt_tracefile_open(LttTrace *t, gchar * fileName, LttTracefile *tf) tf->file_size = lTDFStat.st_size; tf->buf_size = ltt_get_uint32(LTT_GET_BO(tf), &header->buf_size); tf->num_blocks = tf->file_size / tf->buf_size; + tf->events_lost = 0; + tf->subbuf_corrupt = 0; if(munmap(tf->buffer.head, PAGE_ALIGN(ltt_subbuffer_header_size()))) { @@ -1385,6 +1387,19 @@ static gint map_block(LttTracefile * tf, guint block_num) tf->event.block = block_num; tf->event.offset = 0; + if (tf->events_lost != header->events_lost) { + g_warning("%d events lost in tracefile %s", + tf->events_lost - header->events_lost, + g_quark_to_string(tf->long_name)); + tf->events_lost = header->events_lost; + } + if (tf->subbuf_corrupt != header->subbuf_corrupt) { + g_warning("%d subbuffer(s) corrupted in tracefile %s", + tf->subbuf_corrupt - header->subbuf_corrupt, + g_quark_to_string(tf->long_name)); + tf->subbuf_corrupt = header->subbuf_corrupt; + } + return 0; map_error: -- 2.34.1