diff --git a/meson.build b/meson.build index ebe070aa54a..94d011e4175 100644 --- a/meson.build +++ b/meson.build @@ -1972,6 +1972,14 @@ else dep_lmsensors = null_dep endif +with_perfetto = get_option('perfetto') +with_datasources = get_option('datasources') +with_any_datasource = with_datasources.length() != 0 +if with_perfetto + dep_perfetto = dependency('perfetto', fallback: ['perfetto', 'dep_perfetto']) + pre_args += '-DHAVE_PERFETTO' +endif + # If the compiler supports it, put function and data symbols in their # own sections and GC the sections after linking. This lets drivers # drop shared code unused by that specific driver (particularly @@ -2046,13 +2054,6 @@ endif # as GCC LTO drops them. See: https://bugs.freedesktop.org/show_bug.cgi?id=109391 gcc_lto_quirk = (cc.get_id() == 'gcc') ? ['-fno-lto'] : [] -with_perfetto = get_option('perfetto') -with_datasources = get_option('datasources') -with_any_datasource = with_datasources.length() != 0 -if with_perfetto - dep_perfetto = dependency('perfetto', fallback: ['perfetto', 'dep_perfetto']) -endif - subdir('include') subdir('bin') subdir('src') diff --git a/src/util/meson.build b/src/util/meson.build index 14cc2123511..b187a69cdfd 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -202,6 +202,14 @@ if with_platform_haiku deps_for_libmesa_util += dep_network endif +if with_perfetto + files_mesa_util += files( + 'u_perfetto.cc', + 'u_perfetto.h', + ) + deps_for_libmesa_util += dep_perfetto +endif + _libmesa_util = static_library( 'mesa_util', [files_mesa_util, files_debug_stack, format_srgb], diff --git a/src/util/u_perfetto.cc b/src/util/u_perfetto.cc new file mode 100644 index 00000000000..8de46a03614 --- /dev/null +++ b/src/util/u_perfetto.cc @@ -0,0 +1,45 @@ +/* + * Copyright © 2021 Google, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include + +#include "c11/threads.h" + +#include "u_perfetto.h" + +static void +util_perfetto_init_once(void) +{ + // Connects to the system tracing service + perfetto::TracingInitArgs args; + args.backends = perfetto::kSystemBackend; + perfetto::Tracing::Initialize(args); +} + +static once_flag perfetto_once_flag = ONCE_FLAG_INIT; + +void +util_perfetto_init(void) +{ + call_once(&perfetto_once_flag, util_perfetto_init_once); +} diff --git a/src/util/u_perfetto.h b/src/util/u_perfetto.h new file mode 100644 index 00000000000..a7ff1ddc29e --- /dev/null +++ b/src/util/u_perfetto.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2021 Google, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _UTIL_PERFETTO_H +#define _UTIL_PERFETTO_H + + +#ifdef __cplusplus +extern "C" { +#endif + +void util_perfetto_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _UTIL_PERFETTO_H */