From 619d1513422b35bed79c0bfcf72584fe4ec211db Mon Sep 17 00:00:00 2001 From: ponchio Date: Thu, 1 Jul 2004 21:38:30 +0000 Subject: [PATCH] First draft created. --- apps/nexus/stopwatch.cpp | 88 ++++++++++++++++++++++++++++++++++++++++ apps/nexus/stopwatch.h | 51 +++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 apps/nexus/stopwatch.cpp create mode 100644 apps/nexus/stopwatch.h diff --git a/apps/nexus/stopwatch.cpp b/apps/nexus/stopwatch.cpp new file mode 100644 index 00000000..b5b0c7bf --- /dev/null +++ b/apps/nexus/stopwatch.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +* VCGLib o o * +* Visual and Computer Graphics Library o o * +* _ O _ * +* Copyright(C) 2004 \/)\/ * +* Visual Computing Lab /\/| * +* ISTI - Italian National Research Council | * +* \ * +* All rights reserved. * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program 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 * +* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * +* for more details. * +* * +****************************************************************************/ +/**************************************************************************** + History + +$Log: not supported by cvs2svn $ + +****************************************************************************/ +#include "stopwatch.h" + +StopWatch::StopWatch(): elapsed(0) {} + +#ifdef _WIN32 +void StopWatch::Start(void) { + static int first = 1; + if(first) { + QueryPerformanceFrequency(&freq); + first = 0; + } + QueryPerformanceCounter(&tstart); +} + +void StopWatch::Stop() { + QueryPerformanceCounter(&tend); + elapsed += Diff(); +} + +double StopWatch::Diff() { + return ((double)tend.QuadPart - + (double)tstart.QuadPart)/ + ((double)freq.QuadPart); +} + +#else + +void StopWatch::Start() { + gettimeofday(&tstart, &tz); +} + +void StopWatch::Stop() { + gettimeofday(&tend, &tz); + elapsed += Diff(); +} + +double StopWatch::Diff() { + double t1 = (double)tstart.tv_sec + (double)tstart.tv_usec/(1000*1000); + double t2 = (double)tend.tv_sec + (double)tend.tv_usec/(1000*1000); + return t2 - t1; +} +#endif + +void StopWatch::Reset() { + elapsed = 0; +} + +double StopWatch::Elapsed() { + return elapsed; +} + +int StopWatch::Usec() { +#ifdef _WIN32 + return 0; +#else + struct timeval ttime; + gettimeofday(&ttime, &tz); + return ttime.tv_usec; +#endif +} diff --git a/apps/nexus/stopwatch.h b/apps/nexus/stopwatch.h new file mode 100644 index 00000000..685cc7b6 --- /dev/null +++ b/apps/nexus/stopwatch.h @@ -0,0 +1,51 @@ +/**************************************************************************** +* VCGLib o o * +* Visual and Computer Graphics Library o o * +* _ O _ * +* Copyright(C) 2004 \/)\/ * +* Visual Computing Lab /\/| * +* ISTI - Italian National Research Council | * +* \ * +* All rights reserved. * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program 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 * +* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * +* for more details. * +* * +****************************************************************************/ +/**************************************************************************** + History + +$Log: not supported by cvs2svn $ + +****************************************************************************/ +#include +#include + +class StopWatch { +public: + StopWatch(); + void Start(); + void Stop(); + void Reset(); + double Elapsed(); + int Usec(); +private: + double Diff(); + +#ifdef _WIN32 + static LARGE_INTEGER _tstart, _tend; + static LARGE_INTEGER freq; +#else + struct timeval tstart, tend; + struct timezone tz; +#endif + double elapsed; +};