X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fpmprof.h;h=fe5ab7a4fdde0466c3460e8acb7f021c96221bf6;hb=77ab3017d0bc759ff8f69cec5cb5b7d9eae122c6;hp=7cd2efcbfbfc1a349c5473d41992edee68f053c3;hpb=7d698b43a808b0951537a8d115e0a0c83b233ce2;p=lyx.git diff --git a/src/support/pmprof.h b/src/support/pmprof.h index 7cd2efcbfb..fe5ab7a4fd 100644 --- a/src/support/pmprof.h +++ b/src/support/pmprof.h @@ -8,12 +8,6 @@ * Full author contact details are available in file CREDITS. */ -#ifndef PMPROF_H -#define PMPROF_H - -#include -#include - /** How to use this trivial profiler: * * * at the beginning of the interesting block, just add: @@ -92,21 +86,60 @@ */ +#ifndef PMPROF_H +#define PMPROF_H + +#ifdef _WIN32 +#include +#else +#include +#endif + +#include +#include + + +#if defined(__GNUG__) && defined(_GLIBCXX_DEBUG) +#error Profiling is not usable when run-time debugging is in effect +#endif + +#ifdef _WIN32 +/* This function does not really returns the "time of day", + * but it will suffice to evaluate elapsed times. + */ +int gettimeofday(struct timeval * tv, struct timezone * /*tz*/) +{ + LARGE_INTEGER frequency, t; + QueryPerformanceFrequency(&frequency); + QueryPerformanceCounter(&t); + + tv->tv_sec = long(t.QuadPart / frequency.QuadPart); + tv->tv_usec = long((1000000.0 * (t.QuadPart % frequency.QuadPart)) / frequency.QuadPart); + return 0; +} + +#endif // _WIN32 /* Helper class for gathering data. Instantiate this as a static * variable, so that its destructor will be executed when the program * ends. */ + class PMProfStat { public: PMProfStat(char const * name) - : name_(name), sec_(0), usec_(0), count_(0) {}; + : name_(name), sec_(0), usec_(0), count_(0) {} ~PMProfStat() { - if (count_>0) - std::cerr << "##### " << name_ << ": " - << 1.0 * (sec_ * 1000000 + usec_)/ count_ - << "usec, count=" << count_ << std::endl; + if (count_>0) { + double total = 0.001 * (sec_ * 1000000 + usec_); + std::cerr << std::fixed << std::setprecision(2) + << "#pmprof# " << name_ << ": " + << total / count_ + << "msec, count=" << count_ + << ", total=" << total << "msec" + << std::endl; + } } void add(const long long s, const long long u) {