On Tue, Jan 22, 2019 at 01:22:14PM -0800, Jeff Hostetler via GitGitGadget wrote: > diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c > new file mode 100644 > index 0000000000..035855d883 > --- /dev/null > +++ b/trace2/tr2_tgt_perf.c > @@ -0,0 +1,573 @@ > +static struct strbuf dots = STRBUF_INIT; > +static void perf_fmt_prepare( > + const char *event_name, struct tr2tls_thread_ctx *ctx, > + const char *file, int line, const struct repository *repo, > + uint64_t *p_us_elapsed_absolute, uint64_t *p_us_elapsed_relative, > + const char *category, struct strbuf *buf) > +{ > + int len; > + > + strbuf_setlen(buf,0); > + > + if (!tr2env_perf_brief) { > + > + struct tr2_tbuf tb_now; > + > + tr2_tbuf_local_time(&tb_now); > + strbuf_addstr(buf, tb_now.buf); > + strbuf_addch(buf, ' '); > + > + if (file && *file) > + strbuf_addf(buf, "%s:%d ", file, line); > + while (buf->len < TR2FMT_PERF_FL_WIDTH) > + strbuf_addch(buf, ' '); > + > + strbuf_addstr(buf, "| "); > + } > + > + strbuf_addf(buf, "d%d | ", tr2_sid_depth()); > + strbuf_addf(buf, "%-*s | %-*s | ", > + TR2_MAX_THREAD_NAME, ctx->thread_name.buf, > + TR2FMT_PERF_MAX_EVENT_NAME, event_name); > + > + len = buf->len + TR2FMT_PERF_REPO_WIDTH; > + if (repo) > + strbuf_addf(buf, "r%d ", repo->trace2_repo_id); > + while (buf->len < len) > + strbuf_addch(buf, ' ' ); > + strbuf_addstr(buf, "| "); > + > + if (p_us_elapsed_absolute) > + strbuf_addf(buf, "%9.6f | ", > + ((double)(*p_us_elapsed_absolute)) / 1000000.0); > + else > + strbuf_addf(buf, "%9s | ", " "); > + > + if (p_us_elapsed_relative) > + strbuf_addf(buf, "%9.6f | ", > + ((double)(*p_us_elapsed_relative)) / 1000000.0); > + else > + strbuf_addf(buf, "%9s | ", " "); > + > + strbuf_addf(buf, "%-*s | ", TR2FMT_PERF_CATEGORY_WIDTH, > + (category ? category : "")); > + > + if (ctx->nr_open_regions > 0) { > + int len_indent = TR2_INDENT_LENGTH(ctx); > + while (len_indent > dots.len) { > + strbuf_addf(buf, "%s", dots.buf); Please use the much simpler are more idiomatic strbuf_addbuf() function instead. > + len_indent -= dots.len; > + } > + strbuf_addf(buf, "%.*s", len_indent, dots.buf); > + } > +} > +static void fn_version_fl(const char *file, int line) > +{ > + const char *event_name = "version"; > + struct strbuf buf_payload = STRBUF_INIT; > + > + strbuf_addf(&buf_payload, "%s", git_version_string); strbuf_addstr() > + > + perf_io_write_fl(file, line, event_name, NULL, > + NULL, NULL, NULL, > + &buf_payload); > + strbuf_release(&buf_payload); > +}