diff --git a/include/util/trace.h b/include/util/trace.h new file mode 100644 index 000000000..619daf16c --- /dev/null +++ b/include/util/trace.h @@ -0,0 +1,9 @@ +#ifndef UTIL_TRACE_H +#define UTIL_TRACE_H + +#include + +void wlr_trace(const char *format, ...) _WLR_ATTRIB_PRINTF(1, 2); +void wlr_vtrace(const char *format, va_list args) _WLR_ATTRIB_PRINTF(1, 0); + +#endif diff --git a/util/meson.build b/util/meson.build index d67911e52..b327af3ed 100644 --- a/util/meson.build +++ b/util/meson.build @@ -13,6 +13,7 @@ wlr_files += files( 'shm.c', 'time.c', 'token.c', + 'trace.c', 'transform.c', 'utf8.c', ) diff --git a/util/trace.c b/util/trace.c new file mode 100644 index 000000000..50d87ab2e --- /dev/null +++ b/util/trace.c @@ -0,0 +1,30 @@ +#include +#include "util/trace.h" + +static bool trace_initialized = false; +static FILE *trace_file = NULL; + +void wlr_vtrace(const char *fmt, va_list args) { + if (!trace_initialized) { + trace_initialized = true; + trace_file = fopen("/sys/kernel/tracing/trace_marker", "w"); + if (trace_file != NULL) { + wlr_log(WLR_INFO, "Kernel tracing is enabled"); + } + } + + if (trace_file == NULL) { + return; + } + + vfprintf(trace_file, fmt, args); + fprintf(trace_file, "\n"); + fflush(trace_file); +} + +void wlr_trace(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + wlr_vtrace(fmt, args); + va_end(args); +}