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:
18 std::string name;
19
23 SolveProfiler() = default;
24
30 explicit SolveProfiler(std::string_view name) : name{name} {}
31
35 void start() {
36#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
37 m_current_solve_start_time = std::chrono::steady_clock::now();
38#endif
39 }
40
45 void stop() {
46#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
47 m_current_solve_stop_time = std::chrono::steady_clock::now();
48 m_current_solve_duration =
49 m_current_solve_stop_time - m_current_solve_start_time;
50 m_total_solve_duration += m_current_solve_duration;
51
52 ++m_num_solves;
53 m_average_solve_duration =
54 (m_num_solves - 1.0) / m_num_solves * m_average_solve_duration +
55 1.0 / m_num_solves * m_current_solve_duration;
56#endif
57 }
58
64 int num_solves() const { return m_num_solves; }
65
71 const std::chrono::duration<double>& current_duration() const {
72 return m_current_solve_duration;
73 }
74
80 const std::chrono::duration<double>& average_duration() const {
81 return m_average_solve_duration;
82 }
83
89 const std::chrono::duration<double>& total_duration() const {
90 return m_total_solve_duration;
91 }
92
93 private:
94 std::chrono::steady_clock::time_point m_current_solve_start_time;
95 std::chrono::steady_clock::time_point m_current_solve_stop_time;
96 std::chrono::duration<double> m_current_solve_duration{0.0};
97 std::chrono::duration<double> m_total_solve_duration{0.0};
98
99 int m_num_solves = 0;
100 std::chrono::duration<double> m_average_solve_duration{0.0};
101};
102
103} // namespace slp
Definition solve_profiler.hpp:15
const std::chrono::duration< double > & average_duration() const
Definition solve_profiler.hpp:80
const std::chrono::duration< double > & current_duration() const
Definition solve_profiler.hpp:71
SolveProfiler(std::string_view name)
Definition solve_profiler.hpp:30
SolveProfiler()=default
const std::chrono::duration< double > & total_duration() const
Definition solve_profiler.hpp:89
std::string name
Name of measurement to show in diagnostics.
Definition solve_profiler.hpp:18
void start()
Definition solve_profiler.hpp:35
int num_solves() const
Definition solve_profiler.hpp:64
void stop()
Definition solve_profiler.hpp:45