opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
perf.h
Go to the documentation of this file.
1#pragma once
2
6#include <liboscar/oscar_config.h>
7
8#include <string_view>
9#include <vector>
10
11namespace osc
12{
14 std::vector<PerfMeasurement> get_all_perf_measurements();
15
16 // internal details needed for `OSC_PERF` to work
17 namespace detail
18 {
20 std::string_view label,
21 std::string_view filename,
22 unsigned int line
23 );
24
26 size_t id,
27 PerfClock::time_point start,
28 PerfClock::time_point end
29 );
30
32 public:
33 explicit PerfTimer(size_t id) : id_{id} {}
34 PerfTimer(PerfTimer const&) = delete;
39 {
40 submit_perf_measurement(id_, start_time_, PerfClock::now());
41 }
42 private:
43 size_t id_;
44 PerfClock::time_point start_time_ = PerfClock::now();
45 };
46 }
47}
48
49#if OPYN_RUNTIME_PERF_MEASUREMENTS_ENABLED
50 #define OSC_PERF_TOKENPASTE(x, y) x##y
51 #define OSC_PERF_TOKENPASTE2(x, y) OSC_PERF_TOKENPASTE(x, y)
52 #define OSC_PERF(label) \
53 static const size_t OSC_PERF_TOKENPASTE2(s_TimerID, __LINE__) = osc::detail::allocate_perf_mesurement_id(label, osc::extract_filename(__FILE__), __LINE__); \
54 const osc::detail::PerfTimer OSC_PERF_TOKENPASTE2(timer, __LINE__) (OSC_PERF_TOKENPASTE2(s_TimerID, __LINE__));
55#else
56 #define OSC_PERF(label)
57#endif
Definition perf.h:31
PerfTimer(PerfTimer &&) noexcept=delete
PerfTimer(size_t id)
Definition perf.h:33
PerfTimer(PerfTimer const &)=delete
size_t allocate_perf_mesurement_id(std::string_view label, std::string_view filename, unsigned int line)
void submit_perf_measurement(size_t id, PerfClock::time_point start, PerfClock::time_point end)
Definition custom_decoration_generator.h:5
std::vector< PerfMeasurement > get_all_perf_measurements()
void clear_all_perf_measurements()
constexpr U to(T &&value)
Definition conversion.h:56