X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Ftimer.cpp;h=b6c3a6b81487dcb34789e6552cf94315cba0d922;hp=fff91e7dc44db0420ed2fcc0fb860bfa11f4b132;hb=4102c379eb11a8b9e10adfe4229995e9823c6851;hpb=da64e515abf7243bc4c84ca3631470931c4e6691 diff --git a/check/timer.cpp b/check/timer.cpp index fff91e7d..b6c3a6b8 100644 --- a/check/timer.cpp +++ b/check/timer.cpp @@ -20,47 +20,83 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_RUSAGE #include #include +#include +#else +#include +#endif #include "timer.h" timer::timer() : on(false) { +#ifdef HAVE_RUSAGE getrusage(RUSAGE_SELF, &used1); - getrusage(RUSAGE_SELF, &used2); + used2.ru_utime = used1.ru_utime; + used2.ru_stime = used1.ru_stime; +#else + used1 = clock(); + used2 = used1; +#endif } void timer::start() { on = true; +#ifdef HAVE_RUSAGE getrusage(RUSAGE_SELF, &used1); - getrusage(RUSAGE_SELF, &used2); + used2.ru_utime = used1.ru_utime; + used2.ru_stime = used1.ru_stime; +#else + used1 = clock(); + used2 = used1; +#endif } void timer::stop() { on = false; +#ifdef HAVE_RUSAGE getrusage(RUSAGE_SELF, &used2); +#else + used2 = clock(); +#endif } void timer::reset() { +#ifdef HAVE_RUSAGE getrusage(RUSAGE_SELF, &used1); - getrusage(RUSAGE_SELF, &used2); + used2.ru_utime = used1.ru_utime; + used2.ru_stime = used1.ru_stime; +#else + used1 = clock(); + used2 = used1; +#endif } double timer::read() { double elapsed; - if (this->running()) +#ifdef HAVE_RUSAGE + if (running()) getrusage(RUSAGE_SELF, &used2); elapsed = ((used2.ru_utime.tv_sec - used1.ru_utime.tv_sec) + - (used2.ru_stime.tv_sec - used1.ru_stime.tv_sec) + - (used2.ru_utime.tv_usec - used1.ru_utime.tv_usec) / 1e6 + - (used2.ru_stime.tv_usec - used1.ru_stime.tv_usec) / 1e6); - // round to 10ms for safety: + (used2.ru_stime.tv_sec - used1.ru_stime.tv_sec) + + (used2.ru_utime.tv_usec - used1.ru_utime.tv_usec) * 1e-6 + + (used2.ru_stime.tv_usec - used1.ru_stime.tv_usec) * 1e-6); +#else + if (running()) + used2 = clock(); + elapsed = double(used2 - used1)/CLOCKS_PER_SEC; +#endif + // Results more accurate than 10ms are pointless: + return elapsed; return 0.01*int(elapsed*100+0.5); }