2 * Copyright (C) 1995-2007, Index Data ApS
3 * See the file LICENSE for details.
5 * $Id: timing.c,v 1.5 2007-05-06 20:12:20 adam Exp $
10 * \brief Timing Utilities
23 #include <sys/times.h>
30 #include <yaz/xmalloc.h>
31 #include <yaz/timing.h>
35 struct tms tms1, tms2;
38 struct timeval start_time, end_time;
41 ULONGLONG start_time, end_time;
42 ULONGLONG start_time_sys, start_time_user;
43 ULONGLONG end_time_sys, end_time_user;
45 double real_sec, user_sec, sys_sec;
48 yaz_timing_t yaz_timing_create(void)
50 yaz_timing_t t = (yaz_timing_t) xmalloc(sizeof(*t));
56 static void get_process_time(ULONGLONG *lp_user, ULONGLONG *lp_sys)
58 FILETIME create_t, exit_t, sys_t, user_t;
61 GetProcessTimes(GetCurrentProcess(), &create_t, &exit_t, &sys_t, &user_t);
62 li.LowPart = user_t.dwLowDateTime;
63 li.HighPart = user_t.dwHighDateTime;
64 *lp_user = li.QuadPart;
66 li.LowPart = sys_t.dwLowDateTime;
67 li.HighPart = sys_t.dwHighDateTime;
68 *lp_sys = li.QuadPart;
70 static void get_date_as_largeinteger(ULONGLONG *lp)
74 GetSystemTimeAsFileTime(&f);
75 li.LowPart = f.dwLowDateTime;
76 li.HighPart = f.dwHighDateTime;
82 void yaz_timing_start(yaz_timing_t t)
94 gettimeofday(&t->start_time, 0);
101 get_date_as_largeinteger(&t->start_time);
102 get_process_time(&t->start_time_user, &t->start_time_sys);
106 void yaz_timing_stop(yaz_timing_t t)
111 t->user_sec = (double) (t->tms2.tms_utime - t->tms1.tms_utime)/100;
112 t->sys_sec = (double) (t->tms2.tms_stime - t->tms1.tms_stime)/100;
115 gettimeofday(&t->end_time, 0);
116 t->real_sec = ((t->end_time.tv_sec - t->start_time.tv_sec) * 1000000.0 +
117 t->end_time.tv_usec - t->start_time.tv_usec) / 1000000;
121 get_date_as_largeinteger(&t->end_time);
122 t->real_sec = (t->end_time - t->start_time) / 10000000.0;
124 get_process_time(&t->end_time_user, &t->end_time_sys);
125 t->user_sec = (t->end_time_user - t->start_time_user) / 10000000.0;
126 t->sys_sec = (t->end_time_sys - t->start_time_sys) / 10000000.0;
130 double yaz_timing_get_real(yaz_timing_t t)
135 double yaz_timing_get_user(yaz_timing_t t)
140 double yaz_timing_get_sys(yaz_timing_t t)
145 void yaz_timing_destroy(yaz_timing_t *tp)
157 * indent-tabs-mode: nil
159 * vim: shiftwidth=4 tabstop=8 expandtab