mosesdecoder/moses/Timer.cpp
David Madl 3b63930943 move global Timer to Timer.h
Move ResetUserTime(), PrintUserTime(), GetUserTime() to Timer.h

Do not reset timer in StaticData.
2015-11-17 16:15:13 +00:00

114 lines
2.4 KiB
C++

#include <iostream>
#include <iomanip>
#include "Util.h"
#include "Timer.h"
#include "StaticData.h"
#include "util/usage.hh"
namespace Moses
{
//global variable
Timer g_timer;
void ResetUserTime()
{
g_timer.start();
};
void PrintUserTime(const std::string &message)
{
g_timer.check(message.c_str());
}
double GetUserTime()
{
return g_timer.get_elapsed_time();
}
/***
* Return the total wall time that the timer has been in the "running"
* state since it was first "started".
*/
double Timer::get_elapsed_time() const
{
if (stopped) {
return stop_time - start_time;
}
if (running) {
return util::WallTime() - start_time;
}
return 0;
}
/***
* Start a timer. If it is already running, let it continue running.
* Print an optional message.
*/
void Timer::start(const char* msg)
{
// Print an optional message, something like "Starting timer t";
if (msg) VERBOSE(1, msg << std::endl);
// Return immediately if the timer is already running
if (running && !stopped) return;
// If stopped, recompute start time
if (stopped) {
start_time = util::WallTime() - (stop_time - start_time);
stopped = false;
} else {
start_time = util::WallTime();
running = true;
}
}
/***
* Stop a timer.
* Print an optional message.
*/
void Timer::stop(const char* msg)
{
// Print an optional message, something like "Stopping timer t";
if (msg) VERBOSE(1, msg << std::endl);
// Return immediately if the timer is not running
if (stopped || !running) return;
// Record stopped time
stop_time = util::WallTime();
// Change timer status to running
stopped = true;
}
/***
* Print out an optional message followed by the current timer timing.
*/
void Timer::check(const char* msg)
{
// Print an optional message, something like "Checking timer t";
if (msg) VERBOSE(1, msg << " : ");
// VERBOSE(1, "[" << std::setiosflags(std::ios::fixed) << std::setprecision(2) << (running ? elapsed_time() : 0) << "] seconds\n");
VERBOSE(1, "[" << (running ? get_elapsed_time() : 0) << "] seconds\n");
}
/***
* Allow timers to be printed to ostreams using the syntax 'os << t'
* for an ostream 'os' and a timer 't'. For example, "cout << t" will
* print out the total amount of time 't' has been "running".
*/
std::ostream& operator<<(std::ostream& os, Timer& t)
{
//os << std::setprecision(2) << std::setiosflags(std::ios::fixed) << (t.running ? t.elapsed_time() : 0);
os << (t.running ? t.get_elapsed_time() : 0);
return os;
}
}