Small Timer helper class useful for performance investigation in src/.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36940 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2010-12-18 18:40:21 +00:00
parent 2ab1601311
commit 065483dae3
2 changed files with 104 additions and 0 deletions

View File

@ -17,6 +17,10 @@
#include <QObject>
#include <QTimerEvent>
#include <ctime>
#include <iomanip>
#include <sstream>
using namespace std;
namespace lyx {
@ -142,4 +146,83 @@ Timeout & Timeout::setTimeout(unsigned int msec)
}
struct Timer::Private
{
time_t start_time;
};
Timer::Timer() : d(new Private)
{
restart();
}
void Timer::restart()
{
time(&d->start_time);
}
int Timer::elapsed() const
{
time_t end_time;
time(&end_time);
double diff = difftime(end_time, d->start_time);
return int(diff);
}
string Timer::timeStr(char separator) const
{
tm * timeinfo = localtime(&d->start_time);
// With less flexibility we could also use:
//strftime(buffer, 10, "%X", timeinfo);
ostringstream out;
out << setw(2) << setfill('0');
if (separator) {
out << separator << setw(2) << setfill('0') << timeinfo->tm_hour
<< separator << setw(2) << setfill('0') << timeinfo->tm_min
<< separator << setw(2) << setfill('0') << timeinfo->tm_sec;
} else {
out << setw(2) << setfill('0') << timeinfo->tm_hour
<< setw(2) << setfill('0') << timeinfo->tm_min
<< setw(2) << setfill('0') << timeinfo->tm_sec;
}
return out.str();
}
string Timer::dateStr(char separator) const
{
tm * timeinfo = localtime(&d->start_time);
// With less flexibility we could also use:
//res = strftime(buffer, 10, "%d%m%y", timeinfo);
ostringstream out;
out << setw(2) << setfill('0') << timeinfo->tm_mday;
if (separator)
out << separator;
out << setw(2) << setfill('0') << timeinfo->tm_mon;
if (separator)
out << separator;
out << setw(2) << setfill('0') << timeinfo->tm_year - 100;
return out.str();
}
string Timer::toStr() const
{
tm * timeinfo = localtime(&d->start_time);
return asctime(timeinfo);
}
string Timer::currentToStr()
{
time_t current_time;
time(&current_time);
tm * timeinfo = localtime(&current_time);
return asctime(timeinfo);
}
} // namespace lyx

View File

@ -64,6 +64,27 @@ private:
unsigned int timeout_ms;
};
// Small Timer class useful for debugging and performance investigation.
class Timer
{
public:
Timer();
///
void restart();
///
int elapsed() const;
///
std::string dateStr(char separator = 0) const;
///
std::string timeStr(char separator = 0) const;
///
std::string toStr() const;
///
static std::string currentToStr();
private:
struct Private;
Private * d;
};
} // namespace lyx