diff --git a/gettimeofday.h b/gettimeofday.h deleted file mode 100644 index 975f754..0000000 --- a/gettimeofday.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifdef WIN32 -#ifndef _GETTIMEOFDAY_H -#define _GETTIMEOFDAY_H - -#include - -struct timezone -{ - __int32 tz_minuteswest; /* minutes W of Greenwich */ - int tz_dsttime; /* type of dst correction */ -}; - -/* - * gettimeofday.c - * Win32 gettimeofday() replacement - * taken from PostgreSQL, according to - * https://stackoverflow.com/questions/1676036/what-should-i-use-to-replace-gettimeofday-on-windows - * - * src/port/gettimeofday.c - * - * Copyright (c) 2003 SRA, Inc. - * Copyright (c) 2003 SKC, Inc. - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose, without fee, and without a - * written agreement is hereby granted, provided that the above - * copyright notice and this paragraph and the following two - * paragraphs appear in all copies. - * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, - * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING - * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS - * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS - * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, - * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - */ - -/* FILETIME of Jan 1 1970 00:00:00. */ -static const unsigned __int64 epoch = ((unsigned __int64) 116444736000000000ULL); - -/* - * timezone information is stored outside the kernel so tzp isn't used anymore. - * - * Note: this function is not for Win32 high precision timing purpose. See - * elapsed_time(). - */ -int -gettimeofday(struct timeval * tp, struct timezone * tzp) -{ - FILETIME file_time; - SYSTEMTIME system_time; - ULARGE_INTEGER ularge; - - GetSystemTime(&system_time); - SystemTimeToFileTime(&system_time, &file_time); - ularge.LowPart = file_time.dwLowDateTime; - ularge.HighPart = file_time.dwHighDateTime; - - tp->tv_sec = (long) ((ularge.QuadPart - epoch) / 10000000L); - tp->tv_usec = (long) (system_time.wMilliseconds * 1000); - - return 0; -} - -#endif /* _GETTIMEOFDAY_H */ -#endif /* WIN32 */ diff --git a/misc.c b/misc.c index a667c73..c265ac1 100644 --- a/misc.c +++ b/misc.c @@ -1,28 +1,90 @@ +#include "minimap.h" + int mm_verbose = 3; int mm_dbg_flag = 0; double mm_realtime0; -#include "minimap.h" +#if defined(WIN32) || defined(_WIN32) +#include -#ifdef WIN32 -#include "gettimeofday.h" +struct timezone +{ + __int32 tz_minuteswest; /* minutes W of Greenwich */ + int tz_dsttime; /* type of dst correction */ +}; + +/* + * gettimeofday.c + * Win32 gettimeofday() replacement + * taken from PostgreSQL, according to + * https://stackoverflow.com/questions/1676036/what-should-i-use-to-replace-gettimeofday-on-windows + * + * src/port/gettimeofday.c + * + * Copyright (c) 2003 SRA, Inc. + * Copyright (c) 2003 SKC, Inc. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without a + * written agreement is hereby granted, provided that the above + * copyright notice and this paragraph and the following two + * paragraphs appear in all copies. + * + * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, + * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS + * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +/* FILETIME of Jan 1 1970 00:00:00. */ +static const unsigned __int64 epoch = ((unsigned __int64) 116444736000000000ULL); + +/* + * timezone information is stored outside the kernel so tzp isn't used anymore. + * + * Note: this function is not for Win32 high precision timing purpose. See + * elapsed_time(). + */ +int gettimeofday(struct timeval * tp, struct timezone *tzp) +{ + FILETIME file_time; + SYSTEMTIME system_time; + ULARGE_INTEGER ularge; + + GetSystemTime(&system_time); + SystemTimeToFileTime(&system_time, &file_time); + ularge.LowPart = file_time.dwLowDateTime; + ularge.HighPart = file_time.dwHighDateTime; + + tp->tv_sec = (long) ((ularge.QuadPart - epoch) / 10000000L); + tp->tv_usec = (long) (system_time.wMilliseconds * 1000); + + return 0; +} // taken from https://stackoverflow.com/questions/5272470/c-get-cpu-usage-on-linux-and-windows -#include -double cputime() { - HANDLE hProcess = GetCurrentProcess(); - FILETIME ftCreation, ftExit, ftKernel, ftUser; - SYSTEMTIME stKernel; - SYSTEMTIME stUser; +double cputime() +{ + HANDLE hProcess = GetCurrentProcess(); + FILETIME ftCreation, ftExit, ftKernel, ftUser; + SYSTEMTIME stKernel; + SYSTEMTIME stUser; - GetProcessTimes(hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); - FileTimeToSystemTime(&ftKernel, &stKernel); - FileTimeToSystemTime(&ftUser, &stUser); + GetProcessTimes(hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); + FileTimeToSystemTime(&ftKernel, &stKernel); + FileTimeToSystemTime(&ftUser, &stUser); - double kernelModeTime = ((stKernel.wHour * 60.) + stKernel.wMinute * 60.) + stKernel.wSecond * 1. + stKernel.wMilliseconds / 1000.; - double userModeTime = ((stUser.wHour * 60.) + stUser.wMinute * 60.) + stUser.wSecond * 1. + stUser.wMilliseconds / 1000.; + double kernelModeTime = ((stKernel.wHour * 60.) + stKernel.wMinute * 60.) + stKernel.wSecond * 1. + stKernel.wMilliseconds / 1000.; + double userModeTime = ((stUser.wHour * 60.) + stUser.wMinute * 60.) + stUser.wSecond * 1. + stUser.wMilliseconds / 1000.; - return kernelModeTime + userModeTime; + return kernelModeTime + userModeTime; } #else #include