* autoload.cc (timeGetDevCaps): Define new autoload function.
(timeGetTime): Ditto. (timeBeginPeriod): Ditto. (timeEndPeriod): Ditto. * hires.h (hires_base): New class. Renamed from hires. (hires_us): New class. (hires_ms): New class. * strace.cc (strace::microseconds): Use hires_us class. * times.cc (gettimeofday): Use hires-ms class. (hires_us::prime): Renamed from hires::prime. (hires_us::usecs): Renamed from hires:usecs. (hires_ms::prime): New method. (hires_ms::usecs): New method. (hires_ms::~hires_ms): New destructor.
This commit is contained in:
parent
b841df7954
commit
9d0efbb3ae
@ -1,3 +1,20 @@
|
|||||||
|
2002-06-06 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* autoload.cc (timeGetDevCaps): Define new autoload function.
|
||||||
|
(timeGetTime): Ditto.
|
||||||
|
(timeBeginPeriod): Ditto.
|
||||||
|
(timeEndPeriod): Ditto.
|
||||||
|
* hires.h (hires_base): New class. Renamed from hires.
|
||||||
|
(hires_us): New class.
|
||||||
|
(hires_ms): New class.
|
||||||
|
* strace.cc (strace::microseconds): Use hires_us class.
|
||||||
|
* times.cc (gettimeofday): Use hires-ms class.
|
||||||
|
(hires_us::prime): Renamed from hires::prime.
|
||||||
|
(hires_us::usecs): Renamed from hires:usecs.
|
||||||
|
(hires_ms::prime): New method.
|
||||||
|
(hires_ms::usecs): New method.
|
||||||
|
(hires_ms::~hires_ms): New destructor.
|
||||||
|
|
||||||
2002-06-06 Christopher Faylor <cgf@redhat.com>
|
2002-06-06 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* autoload.cc (noload): Correctly save argument count register.
|
* autoload.cc (noload): Correctly save argument count register.
|
||||||
|
@ -504,4 +504,8 @@ LoadDLLfuncEx (waveOutSetVolume, 8, winmm, 1)
|
|||||||
LoadDLLfuncEx (waveOutUnprepareHeader, 12, winmm, 1)
|
LoadDLLfuncEx (waveOutUnprepareHeader, 12, winmm, 1)
|
||||||
LoadDLLfuncEx (waveOutPrepareHeader, 12, winmm, 1)
|
LoadDLLfuncEx (waveOutPrepareHeader, 12, winmm, 1)
|
||||||
LoadDLLfuncEx (waveOutWrite, 12, winmm, 1)
|
LoadDLLfuncEx (waveOutWrite, 12, winmm, 1)
|
||||||
|
LoadDLLfuncEx (timeGetDevCaps, 8, winmm, 1)
|
||||||
|
LoadDLLfuncEx (timeGetTime, 0, winmm, 1)
|
||||||
|
LoadDLLfuncEx (timeBeginPeriod, 4, winmm, 1)
|
||||||
|
LoadDLLfuncEx (timeEndPeriod, 4, winmm, 1)
|
||||||
}
|
}
|
||||||
|
@ -11,14 +11,37 @@ details. */
|
|||||||
#ifndef __HIRES_H__
|
#ifndef __HIRES_H__
|
||||||
#define __HIRES_H__
|
#define __HIRES_H__
|
||||||
|
|
||||||
class hires
|
#include <mmsystem.h>
|
||||||
|
|
||||||
|
class hires_base
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
int inited;
|
int inited;
|
||||||
|
virtual void prime () {}
|
||||||
|
public:
|
||||||
|
virtual LONGLONG usecs (bool justdelta) {return 0LL;}
|
||||||
|
virtual ~hires_base () {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class hires_us : hires_base
|
||||||
|
{
|
||||||
LARGE_INTEGER primed_ft;
|
LARGE_INTEGER primed_ft;
|
||||||
LARGE_INTEGER primed_pc;
|
LARGE_INTEGER primed_pc;
|
||||||
double freq;
|
double freq;
|
||||||
void prime () __attribute__ ((regparm (1)));
|
void prime ();
|
||||||
public:
|
public:
|
||||||
LONGLONG usecs (bool justdelta) __attribute__ ((regparm (2)));
|
LONGLONG usecs (bool justdelta);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class hires_ms : hires_base
|
||||||
|
{
|
||||||
|
DWORD initime_ms;
|
||||||
|
LARGE_INTEGER initime_us;
|
||||||
|
UINT minperiod;
|
||||||
|
void prime ();
|
||||||
|
public:
|
||||||
|
LONGLONG usecs (bool justdelta);
|
||||||
|
~hires_ms ();
|
||||||
|
};
|
||||||
|
|
||||||
#endif /*__HIRES_H__*/
|
#endif /*__HIRES_H__*/
|
||||||
|
@ -63,7 +63,7 @@ strace::hello()
|
|||||||
int
|
int
|
||||||
strace::microseconds ()
|
strace::microseconds ()
|
||||||
{
|
{
|
||||||
static hires now;
|
static hires_us now;
|
||||||
return (int) now.usecs (true);
|
return (int) now.usecs (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,9 +143,9 @@ totimeval (struct timeval *dst, FILETIME *src, int sub, int flag)
|
|||||||
|
|
||||||
/* FIXME: Make thread safe */
|
/* FIXME: Make thread safe */
|
||||||
extern "C" int
|
extern "C" int
|
||||||
gettimeofday(struct timeval *tv, struct timezone *tz)
|
gettimeofday (struct timeval *tv, struct timezone *tz)
|
||||||
{
|
{
|
||||||
static hires gtod;
|
static hires_ms gtod;
|
||||||
static bool tzflag;
|
static bool tzflag;
|
||||||
LONGLONG now = gtod.usecs (false);
|
LONGLONG now = gtod.usecs (false);
|
||||||
if (now == (LONGLONG) -1)
|
if (now == (LONGLONG) -1)
|
||||||
@ -580,7 +580,7 @@ cygwin_tzset ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
hires::prime ()
|
hires_us::prime ()
|
||||||
{
|
{
|
||||||
LARGE_INTEGER ifreq;
|
LARGE_INTEGER ifreq;
|
||||||
if (!QueryPerformanceFrequency (&ifreq))
|
if (!QueryPerformanceFrequency (&ifreq))
|
||||||
@ -612,7 +612,7 @@ hires::prime ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
LONGLONG
|
LONGLONG
|
||||||
hires::usecs (bool justdelta)
|
hires_us::usecs (bool justdelta)
|
||||||
{
|
{
|
||||||
if (!inited)
|
if (!inited)
|
||||||
prime ();
|
prime ();
|
||||||
@ -633,3 +633,42 @@ hires::usecs (bool justdelta)
|
|||||||
now.QuadPart = (LONGLONG) (freq * (double) (now.QuadPart - primed_pc.QuadPart));
|
now.QuadPart = (LONGLONG) (freq * (double) (now.QuadPart - primed_pc.QuadPart));
|
||||||
return justdelta ? now.QuadPart : primed_ft.QuadPart + now.QuadPart;
|
return justdelta ? now.QuadPart : primed_ft.QuadPart + now.QuadPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hires_ms::prime ()
|
||||||
|
{
|
||||||
|
TIMECAPS tc;
|
||||||
|
FILETIME f;
|
||||||
|
int priority = GetThreadPriority (GetCurrentThread ());
|
||||||
|
SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
|
||||||
|
|
||||||
|
if (timeGetDevCaps (&tc, sizeof (tc)) != TIMERR_NOERROR)
|
||||||
|
minperiod = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
minperiod = min (max(tc.wPeriodMin, 1), tc.wPeriodMax);
|
||||||
|
timeBeginPeriod (minperiod);
|
||||||
|
}
|
||||||
|
initime_ms = timeGetTime ();
|
||||||
|
GetSystemTimeAsFileTime (&f);
|
||||||
|
SetThreadPriority (GetCurrentThread (), priority);
|
||||||
|
initime_us.HighPart = f.dwHighDateTime;
|
||||||
|
initime_us.LowPart = f.dwLowDateTime;
|
||||||
|
initime_us.QuadPart /= 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
LONGLONG
|
||||||
|
hires_ms::usecs (bool justdelta)
|
||||||
|
{
|
||||||
|
if (!inited)
|
||||||
|
prime ();
|
||||||
|
DWORD now = timeGetTime ();
|
||||||
|
// FIXME: Not sure how this will handle the 49.71 day wrap around
|
||||||
|
LONGLONG res = initime_us.QuadPart + ((LONGLONG) (now - initime_ms) * 1000);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
hires_ms::~hires_ms ()
|
||||||
|
{
|
||||||
|
timeEndPeriod (minperiod);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user