You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
#ifndef ANDROID_PDX_TRACE_H_
|
|
#define ANDROID_PDX_TRACE_H_
|
|
|
|
#include <array>
|
|
|
|
#include <utils/Trace.h>
|
|
|
|
// Enables internal tracing in libpdx. This is disabled by default to avoid
|
|
// spamming the trace buffers during normal trace activities. libpdx must be
|
|
// built with this set to true to enable internal tracing.
|
|
#ifndef PDX_LIB_TRACE_ENABLED
|
|
#define PDX_LIB_TRACE_ENABLED false
|
|
#endif
|
|
|
|
namespace android {
|
|
namespace pdx {
|
|
|
|
// Utility to generate scoped tracers with arguments.
|
|
class ScopedTraceArgs {
|
|
public:
|
|
template <typename... Args>
|
|
ScopedTraceArgs(uint64_t tag, const char* format, Args&&... args)
|
|
: tag_{tag} {
|
|
if (atrace_is_tag_enabled(tag_)) {
|
|
std::array<char, 1024> buffer;
|
|
snprintf(buffer.data(), buffer.size(), format,
|
|
std::forward<Args>(args)...);
|
|
atrace_begin(tag_, buffer.data());
|
|
}
|
|
}
|
|
|
|
~ScopedTraceArgs() { atrace_end(tag_); }
|
|
|
|
private:
|
|
uint64_t tag_;
|
|
|
|
ScopedTraceArgs(const ScopedTraceArgs&) = delete;
|
|
void operator=(const ScopedTraceArgs&) = delete;
|
|
};
|
|
|
|
// Utility to generate scoped tracers.
|
|
class ScopedTrace {
|
|
public:
|
|
template <typename... Args>
|
|
ScopedTrace(uint64_t tag, bool enabled, const char* name)
|
|
: tag_{tag}, enabled_{enabled} {
|
|
if (enabled_)
|
|
atrace_begin(tag_, name);
|
|
}
|
|
|
|
~ScopedTrace() {
|
|
if (enabled_)
|
|
atrace_end(tag_);
|
|
}
|
|
|
|
private:
|
|
uint64_t tag_;
|
|
bool enabled_;
|
|
|
|
ScopedTrace(const ScopedTrace&) = delete;
|
|
void operator=(const ScopedTrace&) = delete;
|
|
};
|
|
|
|
} // namespace pdx
|
|
} // namespace android
|
|
|
|
// Macro to define a scoped tracer with arguments. Uses PASTE(x, y) macro
|
|
// defined in utils/Trace.h.
|
|
#define PDX_TRACE_FORMAT(format, ...) \
|
|
::android::pdx::ScopedTraceArgs PASTE(__tracer, __LINE__) { \
|
|
ATRACE_TAG, format, ##__VA_ARGS__ \
|
|
}
|
|
|
|
// TODO(eieio): Rename this to PDX_LIB_TRACE_NAME() for internal use by libpdx
|
|
// and rename internal uses inside the library. This version is only enabled
|
|
// when PDX_LIB_TRACE_ENABLED is true.
|
|
#define PDX_TRACE_NAME(name) \
|
|
::android::pdx::ScopedTrace PASTE(__tracer, __LINE__) { \
|
|
ATRACE_TAG, PDX_LIB_TRACE_ENABLED, name \
|
|
}
|
|
|
|
#endif // ANDROID_PDX_TRACE_H_
|