Skip to content

Commit

Permalink
libtraceevent: Reintroduce ce4f209
Browse files Browse the repository at this point in the history
  • Loading branch information
flibitijibibo authored and mikesart committed Jul 28, 2022
1 parent bad7a26 commit 2804a89
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 38 deletions.
9 changes: 6 additions & 3 deletions src/libtraceevent/src/event-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -5434,7 +5434,8 @@ static void print_field_raw(struct trace_seq *s, void *data,
if (field->flags & TEP_FIELD_IS_LONG)
trace_seq_printf(s, "0x%x", (int)val);
else
trace_seq_printf(s, "%d", (int)val);
trace_seq_put_sval(s, val); /* gpuvis change! */
/* trace_seq_printf(s, "%d", (int)val); */
break;
case 2:
trace_seq_printf(s, "%2d", (short)val);
Expand All @@ -5443,13 +5444,15 @@ static void print_field_raw(struct trace_seq *s, void *data,
trace_seq_printf(s, "%1d", (char)val);
break;
default:
trace_seq_printf(s, "%lld", val);
trace_seq_put_sval(s, val); /* gpuvis change! */
/* trace_seq_printf(s, "%lld", val); */
}
} else {
if (field->flags & TEP_FIELD_IS_LONG)
trace_seq_printf(s, "0x%llx", val);
else
trace_seq_printf(s, "%llu", val);
trace_seq_put_uval(s, val); /* gpuvis change! */
/* trace_seq_printf(s, "%llu", val); */
}
}
}
Expand Down
61 changes: 26 additions & 35 deletions src/libtraceevent/src/trace-seq.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,26 @@ static char *format_signed(char buf[BUFFER_SIZE], long long value)
return str;
}

int trace_seq_put_sval(struct trace_seq *s, long long val)
{
const char *str;
char buf[BUFFER_SIZE];

str = format_signed(buf, val);
trace_seq_puts(s, str);
return 1;
}

int trace_seq_put_uval(struct trace_seq *s, unsigned long long val)
{
const char *str;
char buf[BUFFER_SIZE];

str = format_decimal(buf, val);
trace_seq_puts(s, str);
return 1;
}

/* End gpuvis change! */

/**
Expand All @@ -209,46 +229,17 @@ trace_seq_printf(struct trace_seq *s, const char *fmt, ...)

/* gpuvis change! Optimization:
* ~30% of several traces appear to have constant "%s" fmts.
* ~69.9% have %d or %lld
*/
if (fmt[ 0 ] == '%')
if (fmt[ 0 ] == '%' && fmt[ 1 ] == 's' && fmt[ 2 ] == '\0')
{
const char *str;
char buf[BUFFER_SIZE];

if (fmt[ 1 ] == 's' && fmt[ 2 ] == '\0')
{
va_start(ap, fmt);
str = va_arg(ap, const char *);
va_end(ap);

trace_seq_puts(s, str);
return 1;
}
else if (fmt[ 1 ] == 'd' && fmt[ 2 ] == '\0')
{
int num;

va_start(ap, fmt);
num = va_arg(ap, int);
va_end(ap);
va_start(ap, fmt);
str = va_arg(ap, const char *);
va_end(ap);

str = format_signed(buf, num);
trace_seq_puts(s, str);
return 1;
}
else if (fmt[ 1 ] == 'l' && fmt[ 2 ] == 'l' && fmt[ 3 ] == 'd' && fmt[ 4 ] == '\0')
{
long long num;

va_start(ap, fmt);
num = va_arg(ap, long long);
va_end(ap);

str = format_signed(buf, num);
trace_seq_puts(s, str);
return 1;
}
trace_seq_puts(s, str);
return 1;
}

try_again:
Expand Down
4 changes: 4 additions & 0 deletions src/libtraceevent/src/trace-seq.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ extern int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args)
extern int trace_seq_puts(struct trace_seq *s, const char *str);
extern int trace_seq_putc(struct trace_seq *s, unsigned char c);

/* gpuvis change! */
extern int trace_seq_put_sval(struct trace_seq *s, long long val);
extern int trace_seq_put_uval(struct trace_seq *s, unsigned long long val);

extern void trace_seq_terminate(struct trace_seq *s);

extern int trace_seq_do_fprintf(struct trace_seq *s, FILE *fp);
Expand Down

0 comments on commit 2804a89

Please sign in to comment.