Sleipnir C++ API
Loading...
Searching...
No Matches
solve_profiler.hpp
1// Copyright (c) Sleipnir contributors
2
3#pragma once
4
5#include <chrono>
6#include <string>
7#include <string_view>
8
9namespace slp {
10
16 public:
22 explicit SolveProfiler(std::string_view name) : m_name{name} {}
23
27 void start() {
28#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
29 m_current_solve_start_time = std::chrono::steady_clock::now();
30#endif
31 }
32
37 void stop() {
38#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
39 m_current_solve_stop_time = std::chrono::steady_clock::now();
40 m_current_solve_duration =
41 m_current_solve_stop_time - m_current_solve_start_time;
42 m_total_solve_duration += m_current_solve_duration;
43
44 ++m_num_solves;
45 m_average_solve_duration =
46 (m_num_solves - 1.0) / m_num_solves * m_average_solve_duration +
47 1.0 / m_num_solves * m_current_solve_duration;
48#endif
49 }
50
56 std::string_view name() const { return m_name; }
57
63 int num_solves() const { return m_num_solves; }
64
70 const std::chrono::duration<double>& current_duration() const {
71 return m_current_solve_duration;
72 }
73
79 const std::chrono::duration<double>& average_duration() const {
80 return m_average_solve_duration;
81 }
82
88 const std::chrono::duration<double>& total_duration() const {
89 return m_total_solve_duration;
90 }
91
92 private:
94 std::string m_name;
95
96 std::chrono::steady_clock::time_point m_current_solve_start_time;
97 std::chrono::steady_clock::time_point m_current_solve_stop_time;
98 std::chrono::duration<double> m_current_solve_duration{0.0};
99 std::chrono::duration<double> m_total_solve_duration{0.0};
100
101 int m_num_solves = 0;
102 std::chrono::duration<double> m_average_solve_duration{0.0};
103};
104
105} // namespace slp
Definition solve_profiler.hpp:15
const std::chrono::duration< double > & average_duration() const
Definition solve_profiler.hpp:79
const std::chrono::duration< double > & current_duration() const
Definition solve_profiler.hpp:70
SolveProfiler(std::string_view name)
Definition solve_profiler.hpp:22
const std::chrono::duration< double > & total_duration() const
Definition solve_profiler.hpp:88
std::string_view name() const
Definition solve_profiler.hpp:56
void start()
Definition solve_profiler.hpp:27
int num_solves() const
Definition solve_profiler.hpp:63
void stop()
Definition solve_profiler.hpp:37