7#ifndef LIBCARLA_ENABLE_LIFETIME_PROFILER
8# define LIBCARLA_ENABLE_LIFETIME_PROFILER
16#include <unordered_map>
22 template <
typename ... Args>
23 static inline void log(Args && ... args) {
31 std::lock_guard<std::mutex> lock(
_mutex);
33 log(
"WARNING! the following objects were not destructed.");
35 log(item.second,
"still alive.");
42 void Register(
void *
object, std::string display_name) {
43#if LIBCARLA_LOG_LEVEL <= LIBCARLA_LOG_LEVEL_DEBUG
44 log(
'+', display_name);
46 std::lock_guard<std::mutex> lock(
_mutex);
47 _objects.emplace(
object, std::move(display_name));
52 std::lock_guard<std::mutex> lock(
_mutex);
55#if LIBCARLA_LOG_LEVEL <= LIBCARLA_LOG_LEVEL_DEBUG
65 std::unordered_map<void *, std::string>
_objects;
74 LifetimeProfiled::~LifetimeProfiled() {
#define DEBUG_ASSERT(predicate)
LifetimeProfiled()=default
std::unordered_map< void *, std::string > _objects
void Deregister(void *object)
void Register(void *object, std::string display_name)
static LIBCARLA_NOINLINE void write_to_stream(std::ostream &out, Arg &&arg, Args &&... args)
static void log(Args &&... args)
static LifetimeProfiler PROFILER