u_trace: add csv output

Some of my colleagues have scripts using CSV format for measuring
frame timing.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29944>
This commit is contained in:
Lionel Landwerlin 2024-06-28 11:16:38 +03:00 committed by Lionel Landwerlin
parent 78ae7ab856
commit 4b1e3b8515
2 changed files with 59 additions and 0 deletions

View file

@ -185,6 +185,60 @@ static struct u_trace_printer txt_printer = {
.event = &print_txt_event,
};
static void
print_csv_start(struct u_trace_context *utctx)
{
fprintf(utctx->out, "frame,batch,time_ns,event,\n");
}
static void
print_csv_end(struct u_trace_context *utctx)
{
fprintf(utctx->out, "\n");
}
static void
print_csv_start_of_frame(struct u_trace_context *utctx)
{
}
static void
print_csv_end_of_frame(struct u_trace_context *utctx)
{
}
static void
print_csv_start_of_batch(struct u_trace_context *utctx)
{
}
static void
print_csv_end_of_batch(struct u_trace_context *utctx)
{
}
static void
print_csv_event(struct u_trace_context *utctx,
struct u_trace_chunk *chunk,
const struct u_trace_event *evt,
uint64_t ns,
int32_t delta,
const void *indirect)
{
fprintf(utctx->out, "%u,%u,%"PRIu64",%s,\n",
utctx->frame_nr, utctx->batch_nr, ns, evt->tp->name);
}
static struct u_trace_printer csv_printer = {
.start = print_csv_start,
.end = print_csv_end,
.start_of_frame = &print_csv_start_of_frame,
.end_of_frame = &print_csv_end_of_frame,
.start_of_batch = &print_csv_start_of_batch,
.end_of_batch = &print_csv_end_of_batch,
.event = &print_csv_event,
};
static void
print_json_start(struct u_trace_context *utctx)
{
@ -380,6 +434,7 @@ get_chunk(struct u_trace *ut, size_t payload_size)
static const struct debug_named_value config_control[] = {
{ "print", U_TRACE_TYPE_PRINT, "Enable print" },
{ "print_csv", U_TRACE_TYPE_PRINT_CSV, "Enable print in CSV" },
{ "print_json", U_TRACE_TYPE_PRINT_JSON, "Enable print in JSON" },
#ifdef HAVE_PERFETTO
{ "perfetto", U_TRACE_TYPE_PERFETTO_ENV, "Enable perfetto" },
@ -492,6 +547,8 @@ u_trace_context_init(struct u_trace_context *utctx,
if (utctx->enabled_traces & U_TRACE_TYPE_JSON) {
utctx->out_printer = &json_printer;
} else if (utctx->enabled_traces & U_TRACE_TYPE_CSV) {
utctx->out_printer = &csv_printer;
} else {
utctx->out_printer = &txt_printer;
}

View file

@ -187,7 +187,9 @@ enum u_trace_type {
U_TRACE_TYPE_PERFETTO_ENV = 1u << 3,
U_TRACE_TYPE_MARKERS = 1u << 4,
U_TRACE_TYPE_INDIRECTS = 1u << 5,
U_TRACE_TYPE_CSV = 1u << 6,
U_TRACE_TYPE_PRINT_CSV = U_TRACE_TYPE_PRINT | U_TRACE_TYPE_CSV,
U_TRACE_TYPE_PRINT_JSON = U_TRACE_TYPE_PRINT | U_TRACE_TYPE_JSON,
U_TRACE_TYPE_PERFETTO =
U_TRACE_TYPE_PERFETTO_ACTIVE | U_TRACE_TYPE_PERFETTO_ENV,