diff options
author | Josh Steadmon <steadmon@google.com> | 2024-08-22 23:57:45 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2024-08-23 00:02:31 +0200 |
commit | cbe140754bc1eb4380ffe820de121e49357a9af8 (patch) | |
tree | 850e955f9173a3165f27d0db183ed4fd9b94551a /trace2 | |
parent | The seventh batch (diff) | |
download | git-cbe140754bc1eb4380ffe820de121e49357a9af8.tar.xz git-cbe140754bc1eb4380ffe820de121e49357a9af8.zip |
trace2: implement trace2_printf() for event target
The trace2 event target does not have an implementation for
trace2_printf(). While the event target is for structured events, and
trace2_printf() is for unstructured, human-readable messages, it may
still be useful to wrap these unstructured messages in a structured JSON
object. Among other things, it may reduce confusion when manually
debugging using event trace data.
Add a simple implementation for the event target that wraps
trace2_printf() messages in a minimal JSON object. Document this in
Documentation/technical/api-trace2.txt, and bump the event format
version since we're adding a new event type.
Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'trace2')
-rw-r--r-- | trace2/tr2_tgt_event.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c index 59910a1a4f..45b0850a5e 100644 --- a/trace2/tr2_tgt_event.c +++ b/trace2/tr2_tgt_event.c @@ -24,7 +24,7 @@ static struct tr2_dst tr2dst_event = { * a new field to an existing event, do not require an increment to the EVENT * format version. */ -#define TR2_EVENT_VERSION "3" +#define TR2_EVENT_VERSION "4" /* * Region nesting limit for messages written to the event target. @@ -622,6 +622,24 @@ static void fn_data_json_fl(const char *file, int line, } } +static void fn_printf_va_fl(const char *file, int line, + uint64_t us_elapsed_absolute, + const char *fmt, va_list ap) +{ + const char *event_name = "printf"; + struct json_writer jw = JSON_WRITER_INIT; + double t_abs = (double)us_elapsed_absolute / 1000000.0; + + jw_object_begin(&jw, 0); + event_fmt_prepare(event_name, file, line, NULL, &jw); + jw_object_double(&jw, "t_abs", 6, t_abs); + maybe_add_string_va(&jw, "msg", fmt, ap); + jw_end(&jw); + + tr2_dst_write_line(&tr2dst_event, &jw.json); + jw_release(&jw); +} + static void fn_timer(const struct tr2_timer_metadata *meta, const struct tr2_timer *timer, int is_final_data) @@ -694,7 +712,7 @@ struct tr2_tgt tr2_tgt_event = { .pfn_region_leave_printf_va_fl = fn_region_leave_printf_va_fl, .pfn_data_fl = fn_data_fl, .pfn_data_json_fl = fn_data_json_fl, - .pfn_printf_va_fl = NULL, + .pfn_printf_va_fl = fn_printf_va_fl, .pfn_timer = fn_timer, .pfn_counter = fn_counter, }; |