X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fptimer.c;h=c53b5e7215cd08c6d4ed62763e01bd9325d504eb;hp=afa618a74107542c03ff3865f8ec15f14036d2a9;hb=320cfdcb658e8d6556ae9dfd902c2db1db866a6b;hpb=3d5863424bd4a4354311c449e9d318057996d16e diff --git a/src/ptimer.c b/src/ptimer.c index afa618a7..c53b5e72 100644 --- a/src/ptimer.c +++ b/src/ptimer.c @@ -1,11 +1,12 @@ /* Portable timers. - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software + Foundation, Inc. This file is part of GNU Wget. GNU Wget 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 +the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GNU Wget is distributed in the hope that it will be useful, @@ -14,18 +15,18 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Wget; if not, write to the Free Software Foundation, Inc., -51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - -In addition, as a special exception, the Free Software Foundation -gives permission to link the code of its release of Wget with the -OpenSSL project's "OpenSSL" library (or with modified versions of it -that use the same license as the "OpenSSL" library), and distribute -the linked executables. You must obey the GNU General Public License -in all respects for all of the code used other than "OpenSSL". If you -modify this file, you may extend this exception to your version of the -file, but you are not obligated to do so. If you do not wish to do -so, delete this exception statement from your version. */ +along with Wget. If not, see . + +Additional permission under GNU GPL version 3 section 7 + +If you modify this program, or any covered work, by linking or +combining it with the OpenSSL project's OpenSSL library (or a +modified version of that library), containing parts covered by the +terms of the OpenSSL or SSLeay licenses, the Free Software Foundation +grants you additional permission to convey the resulting work. +Corresponding Source for a non-source form of such a combination +shall include the source code for the parts of OpenSSL used as well +as that of the covered work. */ /* This file implements "portable timers" (ptimers), objects that measure elapsed time using the primitives most appropriate for the @@ -34,7 +35,7 @@ so, delete this exception statement from your version. */ ptimer_new -- creates a timer. ptimer_reset -- resets the timer's elapsed time to zero. ptimer_measure -- measure and return the time elapsed since - creation or last reset. + creation or last reset. ptimer_read -- reads the last measured elapsed value. ptimer_destroy -- destroy the timer. ptimer_granularity -- returns the approximate granularity of the timers. @@ -50,19 +51,15 @@ so, delete this exception statement from your version. */ double secs = ptimer_measure (); printf ("The loop took %.2fs\n", secs); */ -#include +#include "wget.h" #include #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif +#include #include -#ifdef HAVE_SYS_TIME_H -# include -#endif +#include /* Cygwin currently (as of 2005-04-08, Cygwin 1.5.14) lacks clock_getres, but still defines _POSIX_TIMERS! Because of that we simply use the @@ -71,7 +68,7 @@ so, delete this exception statement from your version. */ # include #endif -#include "wget.h" +#include "utils.h" #include "ptimer.h" /* Depending on the OS, one and only one of PTIMER_POSIX, @@ -82,11 +79,11 @@ so, delete this exception statement from your version. */ #undef PTIMER_WINDOWS #if defined(WINDOWS) || defined(__CYGWIN__) -# define PTIMER_WINDOWS /* use Windows timers */ +# define PTIMER_WINDOWS /* use Windows timers */ #elif _POSIX_TIMERS - 0 > 0 -# define PTIMER_POSIX /* use POSIX timers (clock_gettime) */ +# define PTIMER_POSIX /* use POSIX timers (clock_gettime) */ #else -# define PTIMER_GETTIMEOFDAY /* use gettimeofday */ +# define PTIMER_GETTIMEOFDAY /* use gettimeofday */ #endif #ifdef PTIMER_POSIX @@ -133,7 +130,7 @@ posix_init (void) #endif { CLOCK_REALTIME, NO_SYSCONF_CHECK }, }; - int i; + size_t i; /* Determine the clock we can use. For a clock to be usable, it must be confirmed with sysconf (where applicable) and with @@ -143,23 +140,23 @@ posix_init (void) { struct timespec r; if (clocks[i].sysconf_name != NO_SYSCONF_CHECK) - if (sysconf (clocks[i].sysconf_name) < 0) - continue; /* sysconf claims this clock is unavailable */ + if (sysconf (clocks[i].sysconf_name) < 0) + continue; /* sysconf claims this clock is unavailable */ if (clock_getres (clocks[i].id, &r) < 0) - continue; /* clock_getres doesn't work for this clock */ + continue; /* clock_getres doesn't work for this clock */ posix_clock_id = clocks[i].id; posix_clock_resolution = (double) r.tv_sec + r.tv_nsec / 1e9; /* Guard against nonsense returned by a broken clock_getres. */ if (posix_clock_resolution == 0) - posix_clock_resolution = 1e-3; + posix_clock_resolution = 1e-3; break; } if (i == countof (clocks)) { /* If no clock was found, it means that clock_getres failed for - the realtime clock. */ + the realtime clock. */ logprintf (LOG_NOTQUIET, _("Cannot get REALTIME clock frequency: %s\n"), - strerror (errno)); + strerror (errno)); /* Use CLOCK_REALTIME, but invent a plausible resolution. */ posix_clock_id = CLOCK_REALTIME; posix_clock_resolution = 1e-3; @@ -176,7 +173,7 @@ static inline double posix_diff (ptimer_system_time *pst1, ptimer_system_time *pst2) { return ((pst1->tv_sec - pst2->tv_sec) - + (pst1->tv_nsec - pst2->tv_nsec) / 1e9); + + (pst1->tv_nsec - pst2->tv_nsec) / 1e9); } static inline double @@ -184,7 +181,7 @@ posix_resolution (void) { return posix_clock_resolution; } -#endif /* PTIMER_POSIX */ +#endif /* PTIMER_POSIX */ #ifdef PTIMER_GETTIMEOFDAY /* Elapsed time measurement using gettimeofday: system time is held in @@ -209,7 +206,7 @@ static inline double gettimeofday_diff (ptimer_system_time *pst1, ptimer_system_time *pst2) { return ((pst1->tv_sec - pst2->tv_sec) - + (pst1->tv_usec - pst2->tv_usec) / 1e6); + + (pst1->tv_usec - pst2->tv_usec) / 1e6); } static inline double @@ -220,7 +217,7 @@ gettimeofday_resolution (void) than 1ms. Assume 100 usecs. */ return 0.1; } -#endif /* PTIMER_GETTIMEOFDAY */ +#endif /* PTIMER_GETTIMEOFDAY */ #ifdef PTIMER_WINDOWS /* Elapsed time measurement on Windows: where high-resolution timers @@ -291,9 +288,9 @@ windows_resolution (void) if (windows_hires_timers) return 1.0 / windows_hires_freq; else - return 10; /* according to MSDN */ + return 10; /* according to MSDN */ } -#endif /* PTIMER_WINDOWS */ +#endif /* PTIMER_WINDOWS */ /* The code below this point is independent of timer implementation. */ @@ -352,7 +349,7 @@ ptimer_reset (struct ptimer *pt) } /* Measure the elapsed time since timer creation/reset. This causes - the timer to internally call clock_gettime (or gettimeofday, etc.) + the timer to internally call clock_gettime (or gettimeofday, etc.) to update its idea of current time. The time is returned, but is also stored for later access through ptimer_read().