You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.5 KiB
91 lines
1.5 KiB
/*
|
|
* tests/tictoc.cpp
|
|
*
|
|
* This work was supported by the Director, Office of Science, Division
|
|
* of Mathematical, Information, and Computational Sciences of the
|
|
* U.S. Department of Energy under contract number DE-AC03-76SF00098.
|
|
*
|
|
* Copyright (c) 2000-2006
|
|
*
|
|
* Contains function used for timing.
|
|
*/
|
|
|
|
#include "tictoc.h"
|
|
|
|
|
|
#ifndef _WIN32
|
|
|
|
#ifdef HAVE_CLOCK_GETTIME
|
|
|
|
#ifdef CLOCK_HIGHRES
|
|
#define SAMPLED_CLOCK CLOCK_HIGHRES
|
|
#else
|
|
#define SAMPLED_CLOCK CLOCK_REALTIME
|
|
#endif
|
|
|
|
void tic(tictoc *tv) {
|
|
if (clock_gettime(SAMPLED_CLOCK, tv))
|
|
tv->tv_sec = tv->tv_nsec = -1;
|
|
}
|
|
|
|
double toc(tictoc *tv) {
|
|
struct timespec tv2;
|
|
|
|
if (clock_gettime(SAMPLED_CLOCK, &tv2))
|
|
tv2.tv_sec = tv2.tv_nsec = -1;
|
|
|
|
double sec = static_cast<double>(tv2.tv_sec - tv->tv_sec);
|
|
double nsec = static_cast<double>(tv2.tv_nsec - tv->tv_nsec);
|
|
|
|
return (sec + 1.0e-9 * nsec);
|
|
}
|
|
#else
|
|
|
|
#ifdef HAVE_GETTIMEOFDAY
|
|
|
|
void tic(tictoc *tv) {
|
|
gettimeofday(tv, 0L);
|
|
}
|
|
|
|
double toc(tictoc *tv) {
|
|
tictoc tv2;
|
|
|
|
gettimeofday(&tv2, 0L);
|
|
double sec = static_cast<double>(tv2.tv_sec - tv->tv_sec);
|
|
double usec = static_cast<double>(tv2.tv_usec - tv->tv_usec);
|
|
|
|
return (sec + 1.0e-6 * usec);
|
|
}
|
|
|
|
#else
|
|
// Fall back to C/C++ low resolution time function.
|
|
|
|
void tic(tictoc *tv) {
|
|
time(tv);
|
|
}
|
|
|
|
double toc(tictoc *tv) {
|
|
tictoc tv2;
|
|
time(&tv2);
|
|
return difftime(tv2, *tv);
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#else
|
|
|
|
// Windows.
|
|
|
|
void tic(tictoc *tv) {
|
|
*tv = GetTickCount();
|
|
}
|
|
|
|
double toc(tictoc *tv) {
|
|
tictoc tv2;
|
|
tv2 = GetTickCount();
|
|
return 1.0e-3 * (tv2 - *tv);
|
|
}
|
|
|
|
#endif
|