From: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> Teach the Trace2 perf target to allow the thread-name field be specified rather than always inherited from the TLS CTX. This will be used in a future commit for global events that should not be tied to a particular thread, such as a global stopwatch timer. Signed-off-by: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> --- trace2/tr2_tgt_perf.c | 64 +++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c index c3e57fcb3c0..47293e99d4b 100644 --- a/trace2/tr2_tgt_perf.c +++ b/trace2/tr2_tgt_perf.c @@ -64,9 +64,14 @@ static void perf_fmt_prepare(const char *event_name, int line, const struct repository *repo, uint64_t *p_us_elapsed_absolute, uint64_t *p_us_elapsed_relative, - const char *category, struct strbuf *buf) + const char *category, struct strbuf *buf, + const char *thread_name_override) { int len; + const char *thread_name = + ((thread_name_override && *thread_name_override) + ? thread_name_override + : ctx->thread_name); strbuf_setlen(buf, 0); @@ -106,7 +111,7 @@ static void perf_fmt_prepare(const char *event_name, strbuf_addf(buf, "d%d | ", tr2_sid_depth()); strbuf_addf(buf, "%-*s | %-*s | ", TR2_MAX_THREAD_NAME, - ctx->thread_name, TR2FMT_PERF_MAX_EVENT_NAME, + thread_name, TR2FMT_PERF_MAX_EVENT_NAME, event_name); len = buf->len + TR2FMT_PERF_REPO_WIDTH; @@ -140,14 +145,15 @@ static void perf_io_write_fl(const char *file, int line, const char *event_name, uint64_t *p_us_elapsed_absolute, uint64_t *p_us_elapsed_relative, const char *category, - const struct strbuf *buf_payload) + const struct strbuf *buf_payload, + const char *thread_name_override) { struct tr2tls_thread_ctx *ctx = tr2tls_get_self(); struct strbuf buf_line = STRBUF_INIT; perf_fmt_prepare(event_name, ctx, file, line, repo, p_us_elapsed_absolute, p_us_elapsed_relative, category, - &buf_line); + &buf_line, thread_name_override); strbuf_addbuf(&buf_line, buf_payload); tr2_dst_write_line(&tr2dst_perf, &buf_line); strbuf_release(&buf_line); @@ -161,7 +167,7 @@ static void fn_version_fl(const char *file, int line) strbuf_addstr(&buf_payload, git_version_string); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -174,7 +180,7 @@ static void fn_start_fl(const char *file, int line, sq_append_quote_argv_pretty(&buf_payload, argv); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -187,7 +193,7 @@ static void fn_exit_fl(const char *file, int line, uint64_t us_elapsed_absolute, strbuf_addf(&buf_payload, "code:%d", code); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -199,7 +205,7 @@ static void fn_signal(uint64_t us_elapsed_absolute, int signo) strbuf_addf(&buf_payload, "signo:%d", signo); perf_io_write_fl(__FILE__, __LINE__, event_name, NULL, - &us_elapsed_absolute, NULL, NULL, &buf_payload); + &us_elapsed_absolute, NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -211,7 +217,7 @@ static void fn_atexit(uint64_t us_elapsed_absolute, int code) strbuf_addf(&buf_payload, "code:%d", code); perf_io_write_fl(__FILE__, __LINE__, event_name, NULL, - &us_elapsed_absolute, NULL, NULL, &buf_payload); + &us_elapsed_absolute, NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -237,7 +243,7 @@ static void fn_error_va_fl(const char *file, int line, const char *fmt, maybe_append_string_va(&buf_payload, fmt, ap); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -249,7 +255,7 @@ static void fn_command_path_fl(const char *file, int line, const char *pathname) strbuf_addstr(&buf_payload, pathname); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -264,7 +270,7 @@ static void fn_command_ancestry_fl(const char *file, int line, const char **pare strbuf_addch(&buf_payload, ']'); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -279,7 +285,7 @@ static void fn_command_name_fl(const char *file, int line, const char *name, strbuf_addf(&buf_payload, " (%s)", hierarchy); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -291,7 +297,7 @@ static void fn_command_mode_fl(const char *file, int line, const char *mode) strbuf_addstr(&buf_payload, mode); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -306,7 +312,7 @@ static void fn_alias_fl(const char *file, int line, const char *alias, strbuf_addch(&buf_payload, ']'); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -342,7 +348,7 @@ static void fn_child_start_fl(const char *file, int line, strbuf_addch(&buf_payload, ']'); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -356,7 +362,7 @@ static void fn_child_exit_fl(const char *file, int line, strbuf_addf(&buf_payload, "[ch%d] pid:%d code:%d", cid, pid, code); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - &us_elapsed_child, NULL, &buf_payload); + &us_elapsed_child, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -370,7 +376,7 @@ static void fn_child_ready_fl(const char *file, int line, strbuf_addf(&buf_payload, "[ch%d] pid:%d ready:%s", cid, pid, ready); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - &us_elapsed_child, NULL, &buf_payload); + &us_elapsed_child, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -381,7 +387,7 @@ static void fn_thread_start_fl(const char *file, int line, struct strbuf buf_payload = STRBUF_INIT; perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -393,7 +399,7 @@ static void fn_thread_exit_fl(const char *file, int line, struct strbuf buf_payload = STRBUF_INIT; perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - &us_elapsed_thread, NULL, &buf_payload); + &us_elapsed_thread, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -414,7 +420,7 @@ static void fn_exec_fl(const char *file, int line, uint64_t us_elapsed_absolute, strbuf_addch(&buf_payload, ']'); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -430,7 +436,7 @@ static void fn_exec_result_fl(const char *file, int line, strbuf_addf(&buf_payload, " err:%s", strerror(code)); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -443,7 +449,7 @@ static void fn_param_fl(const char *file, int line, const char *param, strbuf_addf(&buf_payload, "%s:%s", param, value); perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -457,7 +463,7 @@ static void fn_repo_fl(const char *file, int line, sq_quote_buf_pretty(&buf_payload, repo->worktree); perf_io_write_fl(file, line, event_name, repo, NULL, NULL, NULL, - &buf_payload); + &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -479,7 +485,7 @@ static void fn_region_enter_printf_va_fl(const char *file, int line, } perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute, - NULL, category, &buf_payload); + NULL, category, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -499,7 +505,7 @@ static void fn_region_leave_printf_va_fl( } perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute, - &us_elapsed_region, category, &buf_payload); + &us_elapsed_region, category, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -514,7 +520,7 @@ static void fn_data_fl(const char *file, int line, uint64_t us_elapsed_absolute, strbuf_addf(&buf_payload, "%s:%s", key, value); perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute, - &us_elapsed_region, category, &buf_payload); + &us_elapsed_region, category, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -530,7 +536,7 @@ static void fn_data_json_fl(const char *file, int line, strbuf_addf(&buf_payload, "%s:%s", key, value->json.buf); perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute, - &us_elapsed_region, category, &buf_payload); + &us_elapsed_region, category, &buf_payload, NULL); strbuf_release(&buf_payload); } @@ -544,7 +550,7 @@ static void fn_printf_va_fl(const char *file, int line, maybe_append_string_va(&buf_payload, fmt, ap); perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute, - NULL, NULL, &buf_payload); + NULL, NULL, &buf_payload, NULL); strbuf_release(&buf_payload); } -- gitgitgadget