9#ifndef LIBCARLA_ENABLE_PROFILER
10# define LIBCARLA_ENABLE_PROFILER
17#include "carla/Version.h"
41template <
typename Arg,
typename ... Args>
46 out << std::boolalpha << std::left << std::setw(44) << std::forward<Arg>(arg);
49 out << std::right << std::fixed << std::setprecision(2);
54 using expander =
int[];
55 (void)expander{0, (void(out <<
", " << std::setw(10) << std::forward<Args>(args)), 0)...};
65 std::string header =
"# LibCarla Profiler ";
66 header += carla::version();
68 header +=
" (release)";
73 write_line(
"# context",
"average",
"maximum",
"minimum",
"units",
"times");
77 template <
typename ... Args>
79 write_to_file(std::ios_base::app|std::ios_base::out, std::forward<Args>(args)...);
85 template <
typename ... Args>
88 static std::mutex MUTEX;
89 std::lock_guard<std::mutex> guard(MUTEX);
100ProfilerData::~ProfilerData() {
104 PROFILER.write_line(_name, fps(average()), fps(minimum()), fps(maximum()),
"FPS", _count);
106 PROFILER.write_line(_name, average(), maximum(), minimum(),
"ms", _count);
109 log_error(
"profiler", _name,
" was never run!");
void write_to_file(std::ios_base::openmode mode, Args &&... args)
void write_line(Args &&... args)
StaticProfiler(std::string filename)
const std::string _filename
static void log(Args &&... args)
static void write_csv_to_stream(std::ostream &out, Arg &&arg, Args &&... args)
static LifetimeProfiler PROFILER
static void log_error(Args &&... args)