|
@@ -58,18 +58,14 @@ using TracerFlushCallback = void (*)(void* userData, ThreadId tid, ConstWeakArra
|
|
|
ConstWeakArray<TracerCounter> counters);
|
|
ConstWeakArray<TracerCounter> counters);
|
|
|
|
|
|
|
|
/// Tracer.
|
|
/// Tracer.
|
|
|
-class Tracer
|
|
|
|
|
|
|
+class Tracer : public MakeSingleton<Tracer>
|
|
|
{
|
|
{
|
|
|
-public:
|
|
|
|
|
- Tracer(BaseMemoryPool* pool)
|
|
|
|
|
- : m_pool(pool)
|
|
|
|
|
- {
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ template<typename>
|
|
|
|
|
+ friend class MakeSingleton;
|
|
|
|
|
|
|
|
|
|
+public:
|
|
|
Tracer(const Tracer&) = delete; // Non-copyable
|
|
Tracer(const Tracer&) = delete; // Non-copyable
|
|
|
|
|
|
|
|
- ~Tracer();
|
|
|
|
|
-
|
|
|
|
|
Tracer& operator=(const Tracer&) = delete; // Non-copyable
|
|
Tracer& operator=(const Tracer&) = delete; // Non-copyable
|
|
|
|
|
|
|
|
/// Begin a new event.
|
|
/// Begin a new event.
|
|
@@ -117,6 +113,13 @@ private:
|
|
|
|
|
|
|
|
Bool m_enabled = false;
|
|
Bool m_enabled = false;
|
|
|
|
|
|
|
|
|
|
+ Tracer(BaseMemoryPool* pool)
|
|
|
|
|
+ : m_pool(pool)
|
|
|
|
|
+ {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ~Tracer();
|
|
|
|
|
+
|
|
|
/// Get the thread local ThreadLocal structure.
|
|
/// Get the thread local ThreadLocal structure.
|
|
|
/// @note Thread-safe.
|
|
/// @note Thread-safe.
|
|
|
ThreadLocal& getThreadLocal();
|
|
ThreadLocal& getThreadLocal();
|
|
@@ -125,16 +128,13 @@ private:
|
|
|
Chunk& getOrCreateChunk(ThreadLocal& tlocal);
|
|
Chunk& getOrCreateChunk(ThreadLocal& tlocal);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-/// The global tracer.
|
|
|
|
|
-using TracerSingleton = SingletonInit<Tracer>;
|
|
|
|
|
-
|
|
|
|
|
/// Scoped tracer event.
|
|
/// Scoped tracer event.
|
|
|
class TracerScopedEvent
|
|
class TracerScopedEvent
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
TracerScopedEvent(const char* name)
|
|
TracerScopedEvent(const char* name)
|
|
|
: m_name(name)
|
|
: m_name(name)
|
|
|
- , m_tracer(&TracerSingleton::get())
|
|
|
|
|
|
|
+ , m_tracer(&Tracer::getSingleton())
|
|
|
{
|
|
{
|
|
|
m_handle = m_tracer->beginEvent();
|
|
m_handle = m_tracer->beginEvent();
|
|
|
}
|
|
}
|
|
@@ -153,9 +153,9 @@ private:
|
|
|
#if ANKI_ENABLE_TRACE
|
|
#if ANKI_ENABLE_TRACE
|
|
|
# define ANKI_TRACE_SCOPED_EVENT(name_) TracerScopedEvent _tse##name_(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)))
|
|
# define ANKI_TRACE_SCOPED_EVENT(name_) TracerScopedEvent _tse##name_(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)))
|
|
|
# define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) \
|
|
# define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) \
|
|
|
- TracerSingleton::get().addCustomEvent(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)), start_, duration_)
|
|
|
|
|
|
|
+ Tracer::getSingleton().addCustomEvent(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)), start_, duration_)
|
|
|
# define ANKI_TRACE_INC_COUNTER(name_, val_) \
|
|
# define ANKI_TRACE_INC_COUNTER(name_, val_) \
|
|
|
- TracerSingleton::get().incrementCounter(ANKI_STRINGIZE(ANKI_CONCATENATE(c, name_)), val_)
|
|
|
|
|
|
|
+ Tracer::getSingleton().incrementCounter(ANKI_STRINGIZE(ANKI_CONCATENATE(c, name_)), val_)
|
|
|
#else
|
|
#else
|
|
|
# define ANKI_TRACE_SCOPED_EVENT(name_) ((void)0)
|
|
# define ANKI_TRACE_SCOPED_EVENT(name_) ((void)0)
|
|
|
# define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) ((void)0)
|
|
# define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) ((void)0)
|