From 065483dae36df452c5e512707c91f68c218c98de Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Sat, 18 Dec 2010 18:40:21 +0000 Subject: [PATCH] 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 --- src/support/Timeout.cpp | 83 +++++++++++++++++++++++++++++++++++++++++ src/support/Timeout.h | 21 +++++++++++ 2 files changed, 104 insertions(+) diff --git a/src/support/Timeout.cpp b/src/support/Timeout.cpp index 127d3bd008..7639fa600d 100644 --- a/src/support/Timeout.cpp +++ b/src/support/Timeout.cpp @@ -17,6 +17,10 @@ #include #include +#include +#include +#include + 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(¤t_time); + tm * timeinfo = localtime(¤t_time); + return asctime(timeinfo); +} + } // namespace lyx diff --git a/src/support/Timeout.h b/src/support/Timeout.h index 28b00333be..de3062ae73 100644 --- a/src/support/Timeout.h +++ b/src/support/Timeout.h @@ -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