mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-02-03 12:28:07 +00:00
u/trace_marker: Refactor init to fix bug
This commit is contained in:
parent
c2c49cb6d3
commit
aa3f071d2b
src/xrt
auxiliary/util
targets
|
@ -15,10 +15,11 @@
|
|||
|
||||
#include "util/u_trace_marker.h"
|
||||
|
||||
#ifdef XRT_FEATURE_TRACING
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
|
||||
#ifdef XRT_FEATURE_TRACING
|
||||
|
||||
PERCETTO_CATEGORY_DEFINE(U_TRACE_CATEGORIES)
|
||||
|
||||
PERCETTO_TRACK_DEFINE(rt_cpu, PERCETTO_TRACK_EVENTS);
|
||||
|
@ -31,13 +32,14 @@ PERCETTO_TRACK_DEFINE(rt_present, PERCETTO_TRACK_EVENTS);
|
|||
PERCETTO_TRACK_DEFINE(ft_cpu, PERCETTO_TRACK_EVENTS);
|
||||
PERCETTO_TRACK_DEFINE(ft_draw, PERCETTO_TRACK_EVENTS);
|
||||
|
||||
|
||||
static enum u_trace_which static_which;
|
||||
static bool static_inited = false;
|
||||
|
||||
void
|
||||
u_tracer_maker_init(enum u_trace_which which)
|
||||
u_trace_marker_setup(enum u_trace_which which)
|
||||
{
|
||||
int ret = PERCETTO_INIT(PERCETTO_CLOCK_MONOTONIC);
|
||||
if (ret != 0) {
|
||||
return;
|
||||
}
|
||||
static_which = which;
|
||||
|
||||
I_PERCETTO_TRACK_PTR(rt_cpu)->name = "RT 1 Sleep";
|
||||
I_PERCETTO_TRACK_PTR(rt_allotted)->name = "RT 2 Allotted time";
|
||||
|
@ -49,8 +51,22 @@ u_tracer_maker_init(enum u_trace_which which)
|
|||
|
||||
I_PERCETTO_TRACK_PTR(ft_cpu)->name = "FT 1 App";
|
||||
I_PERCETTO_TRACK_PTR(ft_draw)->name = "FT 2 Draw";
|
||||
}
|
||||
|
||||
if (which == U_TRACE_WHICH_SERVICE) {
|
||||
void
|
||||
u_trace_marker_init(void)
|
||||
{
|
||||
if (static_inited) {
|
||||
return;
|
||||
}
|
||||
static_inited = true;
|
||||
|
||||
int ret = PERCETTO_INIT(PERCETTO_CLOCK_MONOTONIC);
|
||||
if (ret != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (static_which == U_TRACE_WHICH_SERVICE) {
|
||||
PERCETTO_REGISTER_TRACK(rt_cpu);
|
||||
PERCETTO_REGISTER_TRACK(rt_allotted);
|
||||
PERCETTO_REGISTER_TRACK(rt_gpu);
|
||||
|
@ -62,27 +78,22 @@ u_tracer_maker_init(enum u_trace_which which)
|
|||
PERCETTO_REGISTER_TRACK(ft_cpu);
|
||||
PERCETTO_REGISTER_TRACK(ft_draw);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Hack to get consistent names.
|
||||
* https://github.com/olvaffe/percetto/issues/15
|
||||
*
|
||||
*/
|
||||
|
||||
os_nanosleep(1000 * 1000);
|
||||
|
||||
// But also shows when the app was started.
|
||||
XRT_TRACE_MARKER();
|
||||
}
|
||||
|
||||
#else /* XRT_FEATURE_TRACING */
|
||||
|
||||
void
|
||||
u_tracer_maker_init(enum u_trace_which which)
|
||||
u_trace_marker_setup(enum u_trace_which which)
|
||||
{
|
||||
(void)which;
|
||||
|
||||
// Noop
|
||||
}
|
||||
|
||||
void
|
||||
u_trace_marker_init(void)
|
||||
{
|
||||
// Noop
|
||||
}
|
||||
|
||||
#endif /* XRT_FEATURE_TRACING */
|
||||
|
|
|
@ -37,12 +37,20 @@ enum u_trace_which
|
|||
};
|
||||
|
||||
/*!
|
||||
* Internal init function, use @ref U_TRACE_TARGET_INIT, see @ref tracing.
|
||||
* Internal setup function, use @ref U_TRACE_TARGET_SETUP, see @ref tracing.
|
||||
*
|
||||
* @ingroup aux_util
|
||||
*/
|
||||
void
|
||||
u_tracer_maker_init(enum u_trace_which which);
|
||||
u_trace_marker_setup(enum u_trace_which which);
|
||||
|
||||
/*!
|
||||
* Must be called from a non-static/global constructor context.
|
||||
*
|
||||
* @ingroup aux_util
|
||||
*/
|
||||
void
|
||||
u_trace_marker_init(void);
|
||||
|
||||
#define VK_TRACE_IDENT(IDENT) U_TRACE_EVENT(vk, #IDENT)
|
||||
#define XRT_TRACE_MARKER() U_TRACE_EVENT(xrt, __func__)
|
||||
|
@ -100,12 +108,12 @@ PERCETTO_TRACK_DECLARE(ft_draw);
|
|||
TRACE_ANY_WITH_ARGS(PERCETTO_EVENT_INSTANT, CATEGORY, &g_percetto_track_##TRACK, TIME, NAME, 0)
|
||||
#define U_TRACE_DATA(fd, type, data) u_trace_data(fd, type, (void *)&(data), sizeof(data))
|
||||
|
||||
#define U_TRACE_TARGET_INIT(WHICH) \
|
||||
void __attribute__((constructor(101))) u_trace_maker_constructor(void); \
|
||||
#define U_TRACE_TARGET_SETUP(WHICH) \
|
||||
void __attribute__((constructor(101))) u_trace_marker_constructor(void); \
|
||||
\
|
||||
void u_trace_maker_constructor(void) \
|
||||
void u_trace_marker_constructor(void) \
|
||||
{ \
|
||||
u_tracer_maker_init(WHICH); \
|
||||
u_trace_marker_setup(WHICH); \
|
||||
}
|
||||
|
||||
|
||||
|
@ -145,7 +153,7 @@ PERCETTO_TRACK_DECLARE(ft_draw);
|
|||
*
|
||||
* @ingroup aux_util
|
||||
*/
|
||||
#define U_TRACE_TARGET_INIT(WHICH)
|
||||
#define U_TRACE_TARGET_SETUP(WHICH)
|
||||
|
||||
#endif // XRT_FEATURE_TRACING
|
||||
|
||||
|
|
|
@ -6,16 +6,23 @@
|
|||
* @author Jakob Bornecrantz <jakob@collabora.com>
|
||||
*/
|
||||
|
||||
#include "xrt/xrt_gfx_native.h"
|
||||
#include "util/u_trace_marker.h"
|
||||
|
||||
#include "target_instance_parts.h"
|
||||
|
||||
#include "xrt/xrt_gfx_native.h"
|
||||
|
||||
/*
|
||||
*
|
||||
* Internal functions.
|
||||
*
|
||||
*/
|
||||
|
||||
static int
|
||||
t_instance_create_system_compositor(struct xrt_instance *xinst,
|
||||
struct xrt_device *xdev,
|
||||
struct xrt_system_compositor **out_xsysc)
|
||||
{
|
||||
|
||||
struct xrt_system_compositor *xsysc = NULL;
|
||||
xrt_result_t ret = xrt_gfx_provider_create_system(xdev, &xsysc);
|
||||
if (ret < 0 || xsysc == NULL) {
|
||||
|
@ -27,6 +34,7 @@ t_instance_create_system_compositor(struct xrt_instance *xinst,
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Exported function(s).
|
||||
|
@ -38,6 +46,8 @@ xrt_instance_create(struct xrt_instance_info *i_info, struct xrt_instance **out_
|
|||
{
|
||||
struct xrt_prober *xp = NULL;
|
||||
|
||||
u_trace_marker_init();
|
||||
|
||||
int ret = xrt_prober_create_with_lists(&xp, &target_lists);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
|
||||
#ifdef XRT_FEATURE_SERVICE
|
||||
|
||||
// Insert the on load constructor to init trace marker.
|
||||
U_TRACE_TARGET_INIT(U_TRACE_WHICH_OPENXR)
|
||||
// Insert the on load constructor to setup trace marker.
|
||||
U_TRACE_TARGET_SETUP(U_TRACE_WHICH_OPENXR)
|
||||
|
||||
#include "xrt/xrt_instance.h"
|
||||
|
||||
|
@ -25,6 +25,8 @@ ipc_instance_create(struct xrt_instance_info *i_info, struct xrt_instance **out_
|
|||
int
|
||||
xrt_instance_create(struct xrt_instance_info *i_info, struct xrt_instance **out_xinst)
|
||||
{
|
||||
u_trace_marker_init();
|
||||
|
||||
XRT_TRACE_MARKER();
|
||||
|
||||
return ipc_instance_create(i_info, out_xinst);
|
||||
|
@ -32,8 +34,8 @@ xrt_instance_create(struct xrt_instance_info *i_info, struct xrt_instance **out_
|
|||
|
||||
#else
|
||||
|
||||
// Insert the on load constructor to init trace marker.
|
||||
U_TRACE_TARGET_INIT(U_TRACE_WHICH_SERVICE)
|
||||
// Insert the on load constructor to setup trace marker.
|
||||
U_TRACE_TARGET_SETUP(U_TRACE_WHICH_SERVICE)
|
||||
|
||||
/*
|
||||
* For non-service runtime, xrt_instance_create defined in target_instance
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
|
||||
// Insert the on load constructor to init trace marker.
|
||||
U_TRACE_TARGET_INIT(U_TRACE_WHICH_SERVICE)
|
||||
U_TRACE_TARGET_SETUP(U_TRACE_WHICH_SERVICE)
|
||||
|
||||
int
|
||||
ipc_server_main(int argc, char *argv[]);
|
||||
|
@ -23,5 +23,7 @@ ipc_server_main(int argc, char *argv[]);
|
|||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
u_trace_marker_init();
|
||||
|
||||
return ipc_server_main(argc, argv);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue