util/perfetto: Add one-time init

Various places around mesa which might want to register a data-source,
etc, should call util_perfetto_init() first to ensure we connect to the
tracing service.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Antonio Caggiano <antonio.caggiano@collabora.com>
Acked-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9901>
This commit is contained in:
Rob Clark 2021-03-22 10:55:35 -07:00 committed by Marge Bot
parent 7327c051d0
commit ecfb00fb09
4 changed files with 99 additions and 7 deletions

View File

@ -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')

View File

@ -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],

45
src/util/u_perfetto.cc Normal file
View File

@ -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 <perfetto.h>
#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);
}

38
src/util/u_perfetto.h Normal file
View File

@ -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 */