diff options
Diffstat (limited to 'perf/helpers.cpp')
-rw-r--r-- | perf/helpers.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/perf/helpers.cpp b/perf/helpers.cpp new file mode 100644 index 0000000..71a38e2 --- /dev/null +++ b/perf/helpers.cpp @@ -0,0 +1,86 @@ +/* + Copyright (c) 2007-2010 iMatix Corporation + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the Lesser GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + Lesser GNU General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <assert.h> +#include <stdlib.h> +#ifdef _WIN32 +# include <windows.h> +#else +# include <sys/time.h> +# include <unistd.h> +#endif +#include "../src/stdint.hpp" + +#ifdef _WIN32 + +static uint64_t now () +{ + // Get the high resolution counter's accuracy. + LARGE_INTEGER ticksPerSecond; + QueryPerformanceFrequency (&ticksPerSecond); + + // What time is it? + LARGE_INTEGER tick; + QueryPerformanceCounter (&tick); + + // Convert the tick number into the number of seconds + // since the system was started. + double ticks_div = (double) (ticksPerSecond.QuadPart / 1000000); + return (uint64_t) (tick.QuadPart / ticks_div); +} + +void perf_sleep (int seconds_) +{ + Sleep (seconds_ * 1000); +} + +#else /* not _WIN32 */ + +static uint64_t now () +{ + struct timeval tv; + int rc; + + rc = gettimeofday (&tv, NULL); + assert (rc == 0); + return (tv.tv_sec * (uint64_t) 1000000 + tv.tv_usec); +} + +void perf_sleep (int seconds_) +{ + sleep (seconds_); +} + +#endif /* _WIN32 */ + +void *stopwatch_start () +{ + uint64_t *watch = (uint64_t*) malloc (sizeof (uint64_t)); + assert (watch); + *watch = now (); + return (void*) watch; +} + +unsigned long stopwatch_stop (void *watch_) +{ + uint64_t end = now (); + uint64_t start = *(uint64_t*) watch_; + free (watch_); + return (unsigned long) (end - start); +} |