SWDEV-533856: Handle dynamic event for HIP api for perfetto (#225)
* SWDEV-533856: Handle dynamic event for HIP api for perfetto
* Refactor: Generalize function using template
* Format Source
---------
Co-authored-by: David Galiffi <David.Galiffi@amd.com>
[ROCm/rocprofiler-systems commit: abecaa8bf8]
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
a4208bbd94
Коммит
6e4ced65b8
@@ -101,6 +101,20 @@ template <typename CategoryT>
|
||||
auto&
|
||||
get_category_stack();
|
||||
|
||||
template <typename T>
|
||||
auto
|
||||
get_perfetto_string(T& name)
|
||||
{
|
||||
if constexpr(std::is_const_v<T>)
|
||||
{
|
||||
return ::perfetto::StaticString{ name };
|
||||
}
|
||||
else
|
||||
{
|
||||
return ::perfetto::DynamicString{ name };
|
||||
}
|
||||
}
|
||||
|
||||
template <typename CategoryT, typename... Args>
|
||||
inline void
|
||||
push_perfetto(CategoryT, const char*, Args&&...);
|
||||
@@ -387,15 +401,13 @@ push_perfetto(CategoryT, const char* name, Args&&... args)
|
||||
uint64_t _ts = now();
|
||||
if(config::get_perfetto_annotations())
|
||||
{
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value,
|
||||
::perfetto::StaticString(name), _ts, "begin_ns", _ts,
|
||||
std::forward<Args>(args)...);
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value, get_perfetto_string(name),
|
||||
_ts, "begin_ns", _ts, std::forward<Args>(args)...);
|
||||
}
|
||||
else
|
||||
{
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value,
|
||||
::perfetto::StaticString(name), _ts,
|
||||
std::forward<Args>(args)...);
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value, get_perfetto_string(name),
|
||||
_ts, std::forward<Args>(args)...);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -418,7 +430,7 @@ push_perfetto(CategoryT, const char* name, Args&&... args)
|
||||
++get_tracing_stack<CategoryT>();
|
||||
uint64_t _ts = now();
|
||||
TRACE_EVENT_BEGIN(
|
||||
trait::name<CategoryT>::value, ::perfetto::StaticString(name), _ts,
|
||||
trait::name<CategoryT>::value, get_perfetto_string(name), _ts,
|
||||
std::forward<Args>(args)..., [&](::perfetto::EventContext ctx) {
|
||||
if(config::get_perfetto_annotations())
|
||||
{
|
||||
@@ -527,7 +539,7 @@ push_perfetto_ts(CategoryT, const char* name, uint64_t _ts, Args&&... args)
|
||||
if(category_push_disabled<CategoryT>()) return;
|
||||
|
||||
++get_tracing_stack<CategoryT>();
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value, ::perfetto::StaticString(name), _ts,
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value, get_perfetto_string(name), _ts,
|
||||
std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
@@ -555,8 +567,8 @@ push_perfetto_track(CategoryT, const char* name, ::perfetto::Track _track, uint6
|
||||
if(category_push_disabled<CategoryT>()) return;
|
||||
|
||||
++get_tracing_stack<CategoryT>();
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value, ::perfetto::StaticString(name),
|
||||
_track, _ts, std::forward<Args>(args)...);
|
||||
TRACE_EVENT_BEGIN(trait::name<CategoryT>::value, get_perfetto_string(name), _track,
|
||||
_ts, std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename CategoryT, typename... Args>
|
||||
@@ -588,15 +600,13 @@ mark_perfetto(CategoryT, const char* name, Args&&... args)
|
||||
uint64_t _ts = now();
|
||||
if(config::get_perfetto_annotations())
|
||||
{
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value,
|
||||
::perfetto::StaticString(name), _ts, "ns", _ts,
|
||||
std::forward<Args>(args)...);
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, get_perfetto_string(name),
|
||||
_ts, "ns", _ts, std::forward<Args>(args)...);
|
||||
}
|
||||
else
|
||||
{
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value,
|
||||
::perfetto::StaticString(name), _ts,
|
||||
std::forward<Args>(args)...);
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, get_perfetto_string(name),
|
||||
_ts, std::forward<Args>(args)...);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -617,14 +627,14 @@ mark_perfetto(CategoryT, const char* name, Args&&... args)
|
||||
else
|
||||
{
|
||||
uint64_t _ts = now();
|
||||
TRACE_EVENT_INSTANT(
|
||||
trait::name<CategoryT>::value, ::perfetto::StaticString(name), _ts,
|
||||
std::forward<Args>(args)..., [&](::perfetto::EventContext ctx) {
|
||||
if(config::get_perfetto_annotations())
|
||||
{
|
||||
tracing::add_perfetto_annotation(ctx, "ns", _ts);
|
||||
}
|
||||
});
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, get_perfetto_string(name),
|
||||
_ts, std::forward<Args>(args)...,
|
||||
[&](::perfetto::EventContext ctx) {
|
||||
if(config::get_perfetto_annotations())
|
||||
{
|
||||
tracing::add_perfetto_annotation(ctx, "ns", _ts);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -636,8 +646,8 @@ mark_perfetto_ts(CategoryT, const char* name, uint64_t _ts, Args&&... args)
|
||||
// skip if category is disabled
|
||||
if(category_mark_disabled<CategoryT>()) return;
|
||||
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, ::perfetto::StaticString(name),
|
||||
_ts, std::forward<Args>(args)...);
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, get_perfetto_string(name), _ts,
|
||||
std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename CategoryT, typename... Args>
|
||||
@@ -648,8 +658,8 @@ mark_perfetto_track(CategoryT, const char* name, ::perfetto::Track _track, uint6
|
||||
// skip if category is disabled
|
||||
if(category_mark_disabled<CategoryT>()) return;
|
||||
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, ::perfetto::DynamicString{ name },
|
||||
_track, _ts, std::forward<Args>(args)...);
|
||||
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, get_perfetto_string(name), _track,
|
||||
_ts, std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename FuncT>
|
||||
|
||||
Ссылка в новой задаче
Block a user