OpenFPGA/libs/libvtrutil/src/vtr_time.h

96 lines
2.2 KiB
C++

#ifndef VTR_TIME_H
#define VTR_TIME_H
#include <chrono>
#include <string>
namespace vtr {
//Class for tracking time elapsed since construction
class Timer {
public:
Timer();
virtual ~Timer() = default;
//No copy
Timer(Timer&) = delete;
Timer& operator=(Timer&) = delete;
//No move
Timer(Timer&&) = delete;
Timer& operator=(Timer&&) = delete;
//Return elapsed time in seconds
float elapsed_sec() const;
//Return peak memory resident set size (in MiB)
float max_rss_mib() const;
//Return change in peak memory resident set size (in MiB)
float delta_max_rss_mib() const;
private:
using clock = std::chrono::steady_clock;
std::chrono::time_point<clock> start_;
size_t initial_max_rss_; //Maximum resident set size In bytes
constexpr static float BYTE_TO_MIB = 1024 * 1024;
};
class ScopedActionTimer : public Timer {
public:
ScopedActionTimer(const std::string action);
~ScopedActionTimer();
void quiet(bool value);
bool quiet() const;
std::string action() const;
protected:
int depth() const;
std::string pad() const;
private:
const std::string action_;
bool quiet_ = false;
int depth_;
};
//Scoped elapsed time class which prints the time elapsed for
//the specified action when it is destructed.
//
//For example:
//
// {
// vtr::ScopedFinishTimer timer("my_action");
//
// //Do other work
//
// //Will print: 'my_action took X.XX seconds' when out-of-scope
// }
class ScopedFinishTimer : public ScopedActionTimer {
public:
ScopedFinishTimer(const std::string action);
~ScopedFinishTimer();
};
//Scoped elapsed time class which prints out the action when
//initialized and again both the action and elapsed time
//when destructed.
//For example:
//
// {
// vtr::ScopedStartFinishTimer timer("my_action") //Will print: 'my_action'
//
// //Do other work
//
// //Will print 'my_action took X.XX seconds' when out of scope
// }
class ScopedStartFinishTimer : public ScopedActionTimer {
public:
ScopedStartFinishTimer(const std::string action);
~ScopedStartFinishTimer();
};
} // namespace vtr
#endif