diff options
Diffstat (limited to 'third_party/git/trace2/tr2_tgt_perf.c')
-rw-r--r-- | third_party/git/trace2/tr2_tgt_perf.c | 108 |
1 files changed, 46 insertions, 62 deletions
diff --git a/third_party/git/trace2/tr2_tgt_perf.c b/third_party/git/trace2/tr2_tgt_perf.c index a8018f18cc87..ea0cbbe13ee0 100644 --- a/third_party/git/trace2/tr2_tgt_perf.c +++ b/third_party/git/trace2/tr2_tgt_perf.c @@ -11,7 +11,7 @@ #include "trace2/tr2_tgt.h" #include "trace2/tr2_tls.h" -static struct tr2_dst tr2dst_perf = { TR2_SYSENV_PERF, 0, 0, 0, 0 }; +static struct tr2_dst tr2dst_perf = { TR2_SYSENV_PERF, 0, 0, 0 }; /* * Use TR2_SYSENV_PERF_BRIEF to omit the "<time> <file>:<line>" @@ -21,14 +21,17 @@ static struct tr2_dst tr2dst_perf = { TR2_SYSENV_PERF, 0, 0, 0, 0 }; */ static int tr2env_perf_be_brief; -#define TR2FMT_PERF_FL_WIDTH (28) +#define TR2FMT_PERF_FL_WIDTH (50) #define TR2FMT_PERF_MAX_EVENT_NAME (12) -#define TR2FMT_PERF_REPO_WIDTH (3) -#define TR2FMT_PERF_CATEGORY_WIDTH (12) +#define TR2FMT_PERF_REPO_WIDTH (4) +#define TR2FMT_PERF_CATEGORY_WIDTH (10) +#define TR2_DOTS_BUFFER_SIZE (100) #define TR2_INDENT (2) #define TR2_INDENT_LENGTH(ctx) (((ctx)->nr_open_regions - 1) * TR2_INDENT) +static struct strbuf dots = STRBUF_INIT; + static int fn_init(void) { int want = tr2_dst_trace_want(&tr2dst_perf); @@ -38,6 +41,8 @@ static int fn_init(void) if (!want) return want; + strbuf_addchars(&dots, '.', TR2_DOTS_BUFFER_SIZE); + brief = tr2_sysenv_get(TR2_SYSENV_PERF_BRIEF); if (brief && *brief && ((want_brief = git_parse_maybe_bool(brief)) != -1)) @@ -49,6 +54,8 @@ static int fn_init(void) static void fn_term(void) { tr2_dst_trace_disable(&tr2dst_perf); + + strbuf_release(&dots); } /* @@ -72,36 +79,17 @@ static void perf_fmt_prepare(const char *event_name, if (!tr2env_perf_be_brief) { struct tr2_tbuf tb_now; - size_t fl_end_col; tr2_tbuf_local_time(&tb_now); strbuf_addstr(buf, tb_now.buf); strbuf_addch(buf, ' '); - fl_end_col = buf->len + TR2FMT_PERF_FL_WIDTH; - - if (file && *file) { - struct strbuf buf_fl = STRBUF_INIT; - - strbuf_addf(&buf_fl, "%s:%d", file, line); - - if (buf_fl.len <= TR2FMT_PERF_FL_WIDTH) - strbuf_addbuf(buf, &buf_fl); - else { - size_t avail = TR2FMT_PERF_FL_WIDTH - 3; - strbuf_addstr(buf, "..."); - strbuf_add(buf, - &buf_fl.buf[buf_fl.len - avail], - avail); - } - - strbuf_release(&buf_fl); - } - - while (buf->len < fl_end_col) + if (file && *file) + strbuf_addf(buf, "%s:%d ", file, line); + while (buf->len < TR2FMT_PERF_FL_WIDTH) strbuf_addch(buf, ' '); - strbuf_addstr(buf, " | "); + strbuf_addstr(buf, "| "); } strbuf_addf(buf, "d%d | ", tr2_sid_depth()); @@ -114,7 +102,7 @@ static void perf_fmt_prepare(const char *event_name, strbuf_addf(buf, "r%d ", repo->trace2_repo_id); while (buf->len < len) strbuf_addch(buf, ' '); - strbuf_addstr(buf, " | "); + strbuf_addstr(buf, "| "); if (p_us_elapsed_absolute) strbuf_addf(buf, "%9.6f | ", @@ -128,11 +116,17 @@ static void perf_fmt_prepare(const char *event_name, else strbuf_addf(buf, "%9s | ", " "); - strbuf_addf(buf, "%-*.*s | ", TR2FMT_PERF_CATEGORY_WIDTH, - TR2FMT_PERF_CATEGORY_WIDTH, (category ? category : "")); + strbuf_addf(buf, "%-*s | ", TR2FMT_PERF_CATEGORY_WIDTH, + (category ? category : "")); - if (ctx->nr_open_regions > 0) - strbuf_addchars(buf, '.', TR2_INDENT_LENGTH(ctx)); + if (ctx->nr_open_regions > 0) { + int len_indent = TR2_INDENT_LENGTH(ctx); + while (len_indent > dots.len) { + strbuf_addbuf(buf, &dots); + len_indent -= dots.len; + } + strbuf_addf(buf, "%.*s", len_indent, dots.buf); + } } static void perf_io_write_fl(const char *file, int line, const char *event_name, @@ -171,7 +165,7 @@ static void fn_start_fl(const char *file, int line, const char *event_name = "start"; struct strbuf buf_payload = STRBUF_INIT; - sq_append_quote_argv_pretty(&buf_payload, argv); + sq_quote_argv_pretty(&buf_payload, argv); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, NULL, NULL, &buf_payload); @@ -226,6 +220,11 @@ static void maybe_append_string_va(struct strbuf *buf, const char *fmt, va_end(copy_ap); return; } + + if (fmt && *fmt) { + strbuf_addstr(buf, fmt); + return; + } } static void fn_error_va_fl(const char *file, int line, const char *fmt, @@ -286,9 +285,8 @@ static void fn_alias_fl(const char *file, int line, const char *alias, const char *event_name = "alias"; struct strbuf buf_payload = STRBUF_INIT; - strbuf_addf(&buf_payload, "alias:%s argv:[", alias); - sq_append_quote_argv_pretty(&buf_payload, argv); - strbuf_addch(&buf_payload, ']'); + strbuf_addf(&buf_payload, "alias:%s argv:", alias); + sq_quote_argv_pretty(&buf_payload, argv); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, &buf_payload); @@ -317,14 +315,10 @@ static void fn_child_start_fl(const char *file, int line, sq_quote_buf_pretty(&buf_payload, cmd->dir); } - strbuf_addstr(&buf_payload, " argv:["); - if (cmd->git_cmd) { - strbuf_addstr(&buf_payload, "git"); - if (cmd->argv[0]) - strbuf_addch(&buf_payload, ' '); - } - sq_append_quote_argv_pretty(&buf_payload, cmd->argv); - strbuf_addch(&buf_payload, ']'); + strbuf_addstr(&buf_payload, " argv:"); + if (cmd->git_cmd) + strbuf_addstr(&buf_payload, " git"); + sq_quote_argv_pretty(&buf_payload, cmd->argv); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, NULL, NULL, &buf_payload); @@ -375,14 +369,10 @@ static void fn_exec_fl(const char *file, int line, uint64_t us_elapsed_absolute, struct strbuf buf_payload = STRBUF_INIT; strbuf_addf(&buf_payload, "id:%d ", exec_id); - strbuf_addstr(&buf_payload, "argv:["); - if (exe) { - strbuf_addstr(&buf_payload, exe); - if (argv[0]) - strbuf_addch(&buf_payload, ' '); - } - sq_append_quote_argv_pretty(&buf_payload, argv); - strbuf_addch(&buf_payload, ']'); + strbuf_addstr(&buf_payload, "argv:"); + if (exe) + strbuf_addf(&buf_payload, " %s", exe); + sq_quote_argv_pretty(&buf_payload, argv); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, NULL, NULL, &buf_payload); @@ -443,11 +433,8 @@ static void fn_region_enter_printf_va_fl(const char *file, int line, struct strbuf buf_payload = STRBUF_INIT; if (label) - strbuf_addf(&buf_payload, "label:%s", label); - if (fmt && *fmt) { - strbuf_addch(&buf_payload, ' '); - maybe_append_string_va(&buf_payload, fmt, ap); - } + strbuf_addf(&buf_payload, "label:%s ", label); + maybe_append_string_va(&buf_payload, fmt, ap); perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute, NULL, category, &buf_payload); @@ -463,11 +450,8 @@ static void fn_region_leave_printf_va_fl( struct strbuf buf_payload = STRBUF_INIT; if (label) - strbuf_addf(&buf_payload, "label:%s", label); - if (fmt && *fmt) { - strbuf_addch(&buf_payload, ' ' ); - maybe_append_string_va(&buf_payload, fmt, ap); - } + strbuf_addf(&buf_payload, "label:%s ", label); + maybe_append_string_va(&buf_payload, fmt, ap); perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute, &us_elapsed_region, category, &buf_payload); |