X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ftiming.c;h=352c03deb89c169105ab4ae415fef5d4999bf138;hp=31f1095fabb57032a92fc135067a8edbba552aab;hb=43a9d38d20c1b1bcd1a03b2445a501d27526bd35;hpb=6f2f78ce0e63f8d0afcde6c0f2bbf0e9079fd323 diff --git a/src/timing.c b/src/timing.c index 31f1095..352c03d 100644 --- a/src/timing.c +++ b/src/timing.c @@ -1,8 +1,6 @@ -/* - * Copyright (C) 1995-2007, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2011 Index Data * See the file LICENSE for details. - * - * $Id: timing.c,v 1.2 2007-01-05 11:44:49 adam Exp $ */ /** @@ -14,6 +12,9 @@ #include #endif +#ifdef WIN32 +#include +#endif #include #if HAVE_SYS_TIMES_H @@ -33,17 +34,50 @@ struct yaz_timing { #endif #if HAVE_SYS_TIME_H struct timeval start_time, end_time; +#else +#ifdef WIN32 + LONGLONG start_time, end_time; + LONGLONG start_time_sys, start_time_user; + LONGLONG end_time_sys, end_time_user; +#endif #endif double real_sec, user_sec, sys_sec; }; yaz_timing_t yaz_timing_create(void) { - yaz_timing_t t = xmalloc(sizeof(*t)); + yaz_timing_t t = (yaz_timing_t) xmalloc(sizeof(*t)); yaz_timing_start(t); return t; } +#ifdef WIN32 +static void get_process_time(ULONGLONG *lp_user, ULONGLONG *lp_sys) +{ + FILETIME create_t, exit_t, sys_t, user_t; + ULARGE_INTEGER li; + + GetProcessTimes(GetCurrentProcess(), &create_t, &exit_t, &sys_t, &user_t); + li.LowPart = user_t.dwLowDateTime; + li.HighPart = user_t.dwHighDateTime; + *lp_user = li.QuadPart; + + li.LowPart = sys_t.dwLowDateTime; + li.HighPart = sys_t.dwHighDateTime; + *lp_sys = li.QuadPart; +} +static void get_date_as_largeinteger(LONGLONG *lp) +{ + FILETIME f; + ULARGE_INTEGER li; + GetSystemTimeAsFileTime(&f); + li.LowPart = f.dwLowDateTime; + li.HighPart = f.dwHighDateTime; + + *lp = li.QuadPart; +} +#endif + void yaz_timing_start(yaz_timing_t t) { #if HAVE_SYS_TIMES_H @@ -54,11 +88,18 @@ void yaz_timing_start(yaz_timing_t t) t->user_sec = -1.0; t->sys_sec = -1.0; #endif + t->real_sec = -1.0; #if HAVE_SYS_TIME_H gettimeofday(&t->start_time, 0); t->real_sec = 0.0; #else - t->real_sec = -1.0; +#ifdef WIN32 + t->real_sec = 0.0; + t->user_sec = 0.0; + t->sys_sec = 0.0; + get_date_as_largeinteger(&t->start_time); + get_process_time(&t->start_time_user, &t->start_time_sys); +#endif #endif } @@ -74,7 +115,15 @@ void yaz_timing_stop(yaz_timing_t t) gettimeofday(&t->end_time, 0); t->real_sec = ((t->end_time.tv_sec - t->start_time.tv_sec) * 1000000.0 + t->end_time.tv_usec - t->start_time.tv_usec) / 1000000; - +#else +#ifdef WIN32 + get_date_as_largeinteger(&t->end_time); + t->real_sec = (t->end_time - t->start_time) / 10000000.0; + + get_process_time(&t->end_time_user, &t->end_time_sys); + t->user_sec = (t->end_time_user - t->start_time_user) / 10000000.0; + t->sys_sec = (t->end_time_sys - t->start_time_sys) / 10000000.0; +#endif #endif } @@ -105,6 +154,7 @@ void yaz_timing_destroy(yaz_timing_t *tp) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab