2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 /* Elapsed time package */
11 /* See rx_clock.h for calling conventions */
13 #include <afsconfig.h>
14 #include <afs/param.h>
26 void clock_UpdateTime(void); /* forward reference */
28 struct clock clock_now; /* The last elapsed time ready by clock_GetTimer */
30 /* This is set to 1 whenever the time is read, and reset to 0 whenever
31 * clock_NewTime is called. This is to allow the caller to control the
32 * frequency with which the actual time is re-evaluated.
34 int clock_haveCurrentTime;
36 int clock_nUpdates; /* The actual number of clock updates */
37 static int clockInitialized = 0;
39 /* Timing tests show that we can compute times at about 4uS per call. */
40 LARGE_INTEGER rxi_clock0;
41 LARGE_INTEGER rxi_clockFreq;
43 #undef clock_UpdateTime
44 void clock_UpdateTime(void);
49 if (!QueryPerformanceFrequency(&rxi_clockFreq)) {
50 printf("No High Performance clock, exiting.\n");
55 (void)QueryPerformanceCounter(&rxi_clock0);
61 /* Make clock uninitialized. */
71 clock_UpdateTime(void)
73 LARGE_INTEGER now, delta;
76 (void)QueryPerformanceCounter(&now);
78 delta.QuadPart = now.QuadPart - rxi_clock0.QuadPart;
80 seconds = (double)delta.QuadPart / (double)rxi_clockFreq.QuadPart;
82 clock_now.sec = (int)seconds;
83 clock_now.usec = (int)((seconds - (double)clock_now.sec)
85 clock_haveCurrentTime = 1;
89 #endif /* AFS_NT40_ENV */