util/perf: Remove the tracing categories

The slow category remains unused in Mesa currently, readd it once we have
a use for it.

Signed-off-by: Corentin Noël <corentin.noel@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25308>
This commit is contained in:
Corentin Noël 2023-09-20 17:41:05 +02:00 committed by Marge Bot
parent b7a4e78071
commit d64765c200
3 changed files with 49 additions and 110 deletions

View file

@ -13,19 +13,19 @@
#if defined(HAVE_PERFETTO)
/* note that util_perfetto_is_category_enabled always returns false util
/* note that util_perfetto_is_tracing_enabled always returns false util
* util_perfetto_init is called
*/
#define _MESA_TRACE_BEGIN(category, name) \
#define _MESA_TRACE_BEGIN(name) \
do { \
if (unlikely(util_perfetto_is_category_enabled(category))) \
util_perfetto_trace_begin(category, name); \
if (unlikely(util_perfetto_is_tracing_enabled())) \
util_perfetto_trace_begin(name); \
} while (0)
#define _MESA_TRACE_END(category) \
#define _MESA_TRACE_END() \
do { \
if (unlikely(util_perfetto_is_category_enabled(category))) \
util_perfetto_trace_end(category); \
if (unlikely(util_perfetto_is_tracing_enabled())) \
util_perfetto_trace_end(); \
} while (0)
/* NOTE: for now disable atrace for C++ to workaround a ndk bug with ordering
@ -37,14 +37,14 @@
#include <cutils/trace.h>
#define _MESA_TRACE_BEGIN(category, name) \
#define _MESA_TRACE_BEGIN(name) \
atrace_begin(ATRACE_TAG_GRAPHICS, name)
#define _MESA_TRACE_END(category) atrace_end(ATRACE_TAG_GRAPHICS)
#define _MESA_TRACE_END() atrace_end(ATRACE_TAG_GRAPHICS)
#else
#define _MESA_TRACE_BEGIN(category, name)
#define _MESA_TRACE_END(category)
#define _MESA_TRACE_BEGIN(name)
#define _MESA_TRACE_END()
#endif /* HAVE_PERFETTO */
@ -61,16 +61,16 @@
#endif /* HAVE_GPUVIS */
#define _MESA_COMBINED_TRACE_BEGIN(category, name) \
#define _MESA_COMBINED_TRACE_BEGIN(name) \
do { \
_MESA_TRACE_BEGIN(category, name); \
_MESA_TRACE_BEGIN(name); \
_MESA_GPUVIS_TRACE_BEGIN(name); \
} while (0)
#define _MESA_COMBINED_TRACE_END(category) \
#define _MESA_COMBINED_TRACE_END() \
do { \
_MESA_GPUVIS_TRACE_END(); \
_MESA_TRACE_END(category); \
_MESA_TRACE_END(); \
} while (0)
#if __has_attribute(cleanup) && __has_attribute(unused)
@ -86,53 +86,34 @@
*
* to work.
*/
#define _MESA_TRACE_SCOPE(category, name) \
#define _MESA_TRACE_SCOPE(name) \
int _MESA_TRACE_SCOPE_VAR(__LINE__) \
__attribute__((cleanup(_mesa_trace_scope_end), unused)) = \
_mesa_trace_scope_begin(category, name)
_mesa_trace_scope_begin(name)
static inline int
_mesa_trace_scope_begin(enum util_perfetto_category category,
const char *name)
_mesa_trace_scope_begin(const char *name)
{
_MESA_COMBINED_TRACE_BEGIN(category, name);
return category;
_MESA_COMBINED_TRACE_BEGIN(name);
return 0;
}
static inline void
_mesa_trace_scope_end(int *scope)
_mesa_trace_scope_end(UNUSED int *scope)
{
/* we save the category in the scope variable */
_MESA_COMBINED_TRACE_END((enum util_perfetto_category) * scope);
_MESA_COMBINED_TRACE_END();
}
#else
#define _MESA_TRACE_SCOPE(category, name)
#define _MESA_TRACE_SCOPE(name)
#endif /* __has_attribute(cleanup) && __has_attribute(unused) */
/* These use the default category. Drivers or subsystems can use these, or
* define their own categories/macros.
*/
#define MESA_TRACE_BEGIN(name) \
_MESA_COMBINED_TRACE_BEGIN(UTIL_PERFETTO_CATEGORY_DEFAULT, name)
#define MESA_TRACE_END() \
_MESA_COMBINED_TRACE_END(UTIL_PERFETTO_CATEGORY_DEFAULT)
#define MESA_TRACE_SCOPE(name) \
_MESA_TRACE_SCOPE(UTIL_PERFETTO_CATEGORY_DEFAULT, name)
#define MESA_TRACE_FUNC() \
_MESA_TRACE_SCOPE(UTIL_PERFETTO_CATEGORY_DEFAULT, __func__)
/* these use the slow category */
#define MESA_TRACE_BEGIN_SLOW(name) \
_MESA_COMBINED_TRACE_BEGIN(UTIL_PERFETTO_CATEGORY_SLOW, name)
#define MESA_TRACE_END_SLOW() \
_MESA_COMBINED_TRACE_END(UTIL_PERFETTO_CATEGORY_SLOW)
#define MESA_TRACE_SCOPE_SLOW(name) \
_MESA_TRACE_SCOPE(UTIL_PERFETTO_CATEGORY_SLOW, name)
#define MESA_TRACE_FUNC_SLOW() \
_MESA_TRACE_SCOPE(UTIL_PERFETTO_CATEGORY_SLOW, __func__)
#define MESA_TRACE_BEGIN(name) _MESA_COMBINED_TRACE_BEGIN(name)
#define MESA_TRACE_END() _MESA_COMBINED_TRACE_END()
#define MESA_TRACE_SCOPE(name) _MESA_TRACE_SCOPE(name)
#define MESA_TRACE_FUNC() _MESA_TRACE_SCOPE(__func__)
static inline void
util_cpu_trace_init()

View file

@ -30,69 +30,36 @@
/* perfetto requires string literals */
#define UTIL_PERFETTO_CATEGORY_DEFAULT_STR "mesa.default"
#define UTIL_PERFETTO_CATEGORY_SLOW_STR "mesa.slow"
PERFETTO_DEFINE_CATEGORIES(
perfetto::Category(UTIL_PERFETTO_CATEGORY_DEFAULT_STR)
.SetDescription("Mesa default events"),
perfetto::Category(UTIL_PERFETTO_CATEGORY_SLOW_STR)
.SetDescription("Mesa slow events")
.SetTags("slow"));
.SetDescription("Mesa default events"));
PERFETTO_TRACK_EVENT_STATIC_STORAGE();
int util_perfetto_category_states[UTIL_PERFETTO_CATEGORY_COUNT];
int util_perfetto_tracing_state;
static void
util_perfetto_update_category_states(void)
util_perfetto_update_tracing_state(void)
{
#define UPDATE_CATEGORY(cat) \
p_atomic_set( \
&util_perfetto_category_states[UTIL_PERFETTO_CATEGORY_##cat], \
TRACE_EVENT_CATEGORY_ENABLED(UTIL_PERFETTO_CATEGORY_##cat##_STR))
UPDATE_CATEGORY(DEFAULT);
UPDATE_CATEGORY(SLOW);
#undef UPDATE_CATEGORY
p_atomic_set(&util_perfetto_tracing_state,
TRACE_EVENT_CATEGORY_ENABLED(UTIL_PERFETTO_CATEGORY_DEFAULT_STR));
}
void
util_perfetto_trace_begin(enum util_perfetto_category category,
const char *name)
util_perfetto_trace_begin(const char *name)
{
#define TRACE_BEGIN(cat, name) \
TRACE_EVENT_BEGIN( \
UTIL_PERFETTO_CATEGORY_##cat##_STR, nullptr, \
[&](perfetto::EventContext ctx) { ctx.event()->set_name(name); })
switch (category) {
case UTIL_PERFETTO_CATEGORY_DEFAULT:
TRACE_BEGIN(DEFAULT, name);
break;
case UTIL_PERFETTO_CATEGORY_SLOW:
TRACE_BEGIN(SLOW, name);
break;
default:
unreachable("bad perfetto category");
}
#undef TRACE_BEGIN
TRACE_EVENT_BEGIN(
UTIL_PERFETTO_CATEGORY_DEFAULT_STR, nullptr,
[&](perfetto::EventContext ctx) { ctx.event()->set_name(name); });
}
void
util_perfetto_trace_end(enum util_perfetto_category category)
util_perfetto_trace_end(void)
{
#define TRACE_END(cat) TRACE_EVENT_END(UTIL_PERFETTO_CATEGORY_##cat##_STR)
switch (category) {
case UTIL_PERFETTO_CATEGORY_DEFAULT:
TRACE_END(DEFAULT);
break;
case UTIL_PERFETTO_CATEGORY_SLOW:
TRACE_END(SLOW);
break;
default:
unreachable("bad perfetto category");
}
#undef TRACE_END
TRACE_EVENT_END(UTIL_PERFETTO_CATEGORY_DEFAULT_STR);
util_perfetto_update_category_states();
util_perfetto_update_tracing_state();
}
class UtilPerfettoObserver : public perfetto::TrackEventSessionObserver {
@ -101,11 +68,11 @@ class UtilPerfettoObserver : public perfetto::TrackEventSessionObserver {
void OnStart(const perfetto::DataSourceBase::StartArgs &) override
{
util_perfetto_update_category_states();
util_perfetto_update_tracing_state();
}
/* XXX There is no PostStop callback. We have to call
* util_perfetto_update_category_states occasionally to poll.
* util_perfetto_update_tracing_state occasionally to poll.
*/
};

View file

@ -30,29 +30,21 @@
extern "C" {
#endif
enum util_perfetto_category {
UTIL_PERFETTO_CATEGORY_DEFAULT,
UTIL_PERFETTO_CATEGORY_SLOW,
UTIL_PERFETTO_CATEGORY_COUNT,
};
#ifdef HAVE_PERFETTO
extern int util_perfetto_category_states[UTIL_PERFETTO_CATEGORY_COUNT];
extern int util_perfetto_tracing_state;
void util_perfetto_init(void);
static inline bool
util_perfetto_is_category_enabled(enum util_perfetto_category category)
util_perfetto_is_tracing_enabled(void)
{
return p_atomic_read_relaxed(&util_perfetto_category_states[category]);
return p_atomic_read_relaxed(&util_perfetto_tracing_state);
}
void util_perfetto_trace_begin(enum util_perfetto_category category,
const char *name);
void util_perfetto_trace_begin(const char *name);
void util_perfetto_trace_end(enum util_perfetto_category category);
void util_perfetto_trace_end(void);
#else /* HAVE_PERFETTO */
@ -62,19 +54,18 @@ util_perfetto_init(void)
}
static inline bool
util_perfetto_is_category_enabled(enum util_perfetto_category category)
util_perfetto_is_tracing_enabled(void)
{
return false;
}
static inline void
util_perfetto_trace_begin(enum util_perfetto_category category,
const char *name)
util_perfetto_trace_begin(const char *name)
{
}
static inline void
util_perfetto_trace_end(enum util_perfetto_category category)
util_perfetto_trace_end(void)
{
}