12#ifndef MCRL2_UTILITIES_EXECUTION_TIMER_H
13#define MCRL2_UTILITIES_EXECUTION_TIMER_H
53 std::chrono::steady_clock::time_point
start;
54 std::chrono::steady_clock::time_point
finish;
73 std::ios::fmtflags oldflags = s.setf(std::ios::fixed, std::ios::floatfield);
77 <<
" timing:" << std::endl;
79 for (std::map<std::string, timing>::const_iterator i =
m_timings.begin(); i !=
m_timings.end(); ++i)
81 if (i->second.finish == std::chrono::steady_clock::time_point())
83 s <<
" " << i->first <<
": did not finish. " << std::endl;
85 else if (i->second.start > i->second.finish)
91 s <<
" " << i->first <<
": "
92 << std::chrono::duration_cast<std::chrono::milliseconds>(i->second.finish - i->second.start).count() / 1000.0
93 <<
"s (user: " <<
static_cast<double>(i->second.finish_user - i->second.start_user) / CLOCKS_PER_SEC <<
"s)"
105 execution_timer(
const std::string& tool_name =
"", std::string
const& filename =
"") :
118 void start(
const std::string& timing_name)
120 std::map<std::string, timing>::iterator t =
m_timings.lower_bound(timing_name);
121 if (t !=
m_timings.end() && t->first == timing_name)
123 throw mcrl2::runtime_error(
"Starting already known timing '" + timing_name +
"'. This causes unreliable results.");
127 t->second.start = std::chrono::steady_clock::now();
128 t->second.start_user = clock();
135 void finish(
const std::string& timing_name)
137 std::chrono::steady_clock::time_point
finish = std::chrono::steady_clock::now();
138 const std::map<std::string, timing>::iterator t =
m_timings.find(timing_name);
143 if (std::chrono::steady_clock::time_point() != t->second.finish)
148 t->second.finish =
finish;
149 t->second.finish_user = clock();
Standard exception class for reporting runtime errors.
Simple timer to time the CPU time used by a piece of code.
void write_report(std::ostream &s)
Write the report to an output stream.
std::map< std::string, timing > m_timings
collection of timings
void start(const std::string &timing_name)
Start measurement with a hint.
std::string m_filename
name of the file to write timings to
void finish(const std::string &timing_name)
Finish a measurement with a hint.
void report()
Write all timing information that has been recorded.
execution_timer(const std::string &tool_name="", std::string const &filename="")
Constructor of a simple execution timer.
~execution_timer()
Destructor.
std::string m_tool_name
name of the tool we are timing
Exception classes for use in libraries and tools.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
Pair of start and finish times.
std::chrono::steady_clock::time_point finish
std::chrono::steady_clock::time_point start