WallclockTimer added

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1673 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hellwig
2012-09-21 14:08:10 +00:00
parent d983aecf73
commit 63264b8075
3 changed files with 134 additions and 0 deletions

View File

@ -12,6 +12,8 @@ set(SRCS
SynchronizedCounter.hpp
SynchronizedMap.hpp
SynchronizedQueue.hpp
WallclockTimer.cc
WallclockTimer.hpp
)
# required by ProtoStream.cc:

View File

@ -0,0 +1,77 @@
#include <iostream>
#include <string>
#include <sstream>
#include "WallclockTimer.hpp"
namespace fail {
WallclockTimer::WallclockTimer() {
m_log.setDescription("WallclockTimer");
m_log.showTime(false);
isRunning = false;
}
void WallclockTimer::startTimer() {
if (isRunning) {
m_log << "WallclockTimer is already running." << std::endl;
} else {
isRunning = true;
gettimeofday(&start, NULL);
m_log << "WallclockTimer started." << std::endl;
}
}
std::string WallclockTimer::getRuntime() {
int length;
long t1,t2, duration;
std::stringstream lengthinfo, resultstring;
if (isRunning) {
gettimeofday(&current, NULL);
t1 = (start.tv_sec*1000000)+start.tv_usec;
t2 = (current.tv_sec*1000000)+current.tv_usec;
} else {
t1 = (start.tv_sec*1000000)+start.tv_usec;
t2 = (end.tv_sec*1000000)+end.tv_usec;
}
duration = t2-t1;
lengthinfo << duration-((duration/1000000)*1000000);
length = lengthinfo.str().length();
resultstring << (int) duration/1000000 << ".";
if (length < 6) {
int i;
for (i = 0 ; i< 6-length ; i++){
resultstring << "0";
}
}
resultstring << (int) duration-((duration/1000000)*1000000);
return resultstring.str();
}
void WallclockTimer::stopTimer() {
if (isRunning) {
isRunning = false;
gettimeofday(&end, NULL);
m_log << "WallclockTimer stopped." << std::endl;
} else {
m_log << "WallclockTimer is already stopped." << std::endl;
}
}
void WallclockTimer::reset() {
isRunning = false;
start.tv_sec = 0;
start.tv_usec = 0;
current.tv_sec = 0;
current.tv_usec = 0;
end.tv_sec = 0;
end.tv_usec = 0;
m_log << "WallclockTimer reseted." << std::endl;
}
} // end-of-namespace: fail

View File

@ -0,0 +1,55 @@
/**
* \brief The WallclockTimer measures the elapsed time
*
* The WallclockTimer measures the time which is elapsed between start and stop of the timer.
*/
#ifndef __WALLCLOCKTIMER_HPP__
#define __WALLCLOCKTIMER_HPP__
#include <string>
#include <sys/time.h>
#include "Logger.hpp"
namespace fail {
/**
* \class WallclockTimer
*
* The class WallclockTimer contains all functions for start, stop, reset and to get the elapsed
* time.
*/
class WallclockTimer {
private:
bool isRunning;
struct timeval start,end,current;
Logger m_log;
public:
WallclockTimer();
virtual ~WallclockTimer() { }
/**
* Starts the timer.
*/
void startTimer();
/**
* Returns the elapsed time. This works while the timer is running, and if it is stopped.
*/
std::string getRuntime();
/**
* Stops the timer.
*/
void stopTimer();
/**
* Resets the timer. The timer is after a call of reset stopped.
*/
void reset();
};
} // end-of-namespace: fail
#endif // __WALLCLOCKTIMER_HPP__