mesa/src/util/perf/u_gpuvis.c
Bas Nieuwenhuizen 11198951e6 util/perf: Add gpuvis integration.
Initial integration, still needs the init functions to be changed
across the codebase.

For the context usage https://github.com/mikesart/gpuvis/pull/82 is
needed to display it correctly in gpuvis.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22505>
2023-08-19 23:09:45 +02:00

53 lines
No EOL
1.2 KiB
C

/*
* Copyright 2023 Bas Nieuwenhuizen
* SPDX-License-Identifier: MIT
*/
#include "u_gpuvis.h"
#include <threads.h>
#define GPUVIS_TRACE_IMPLEMENTATION
#include "gpuvis_trace_utils.h"
/* Random base value to prevent collisions. As contexts are considered thread
* global by gpuvis, collisions are quite likely if we start at 0 and there
* are independent libraries tacing
*/
static unsigned int gpuvis_base_ctx;
static _Thread_local unsigned int gpuvis_current_ctx;
static once_flag gpuvis_once_flag = ONCE_FLAG_INIT;
static void
util_gpuvis_init_once()
{
gpuvis_trace_init();
/* Initialize it by address to avoid collisions between libraries using
* this code (e.g. GL & vulkan) */
gpuvis_base_ctx = (uintptr_t) util_gpuvis_init_once >> 12;
}
void
util_gpuvis_init(void)
{
call_once(&gpuvis_once_flag, util_gpuvis_init_once);
}
void
util_gpuvis_begin(const char *name)
{
unsigned int ctx = gpuvis_base_ctx + ++gpuvis_current_ctx;
gpuvis_trace_begin_ctx_printf(ctx, "mesa:%s", name);
}
void
util_gpuvis_end(void)
{
unsigned int ctx = gpuvis_base_ctx + gpuvis_current_ctx--;
/* Use an empty string to avoid warnings about an empty format string. */
gpuvis_trace_end_ctx_printf(ctx, "%s", "");
}