diff options
author | wtchang%redhat.com <devnull@localhost> | 2006-04-05 22:11:05 +0000 |
---|---|---|
committer | wtchang%redhat.com <devnull@localhost> | 2006-04-05 22:11:05 +0000 |
commit | a6d60477d1ac6750b68d496b0cc1a2cffa4a15f9 (patch) | |
tree | 7bf486792eb1b4717b49e3daec772123fc3ad558 | |
parent | e570ed50e8b773bd1b238fa55606a056d52c40e1 (diff) | |
download | nspr-hg-a6d60477d1ac6750b68d496b0cc1a2cffa4a15f9.tar.gz |
Bugzilla Bug 307527: implement NSPR interval timer with timeGetTime instead
of QueryPerformanceCounter or GetTickCount. r=darin,bienvenu.
Modified files: pr/src/Makefile.in ntinrval.c
Tag: NSPR_4_6_BRANCH
-rw-r--r-- | pr/src/Makefile.in | 4 | ||||
-rw-r--r-- | pr/src/md/windows/ntinrval.c | 68 |
2 files changed, 4 insertions, 68 deletions
diff --git a/pr/src/Makefile.in b/pr/src/Makefile.in index cf2f5229..d3605901 100644 --- a/pr/src/Makefile.in +++ b/pr/src/Makefile.in @@ -198,9 +198,9 @@ endif ifeq ($(OS_ARCH),WINNT) ifdef NS_USE_GCC -OS_LIBS = -ladvapi32 -lwsock32 +OS_LIBS = -ladvapi32 -lwsock32 -lwinmm else -OS_LIBS = advapi32.lib wsock32.lib +OS_LIBS = advapi32.lib wsock32.lib winmm.lib endif endif diff --git a/pr/src/md/windows/ntinrval.c b/pr/src/md/windows/ntinrval.c index 494f6e83..b8d85831 100644 --- a/pr/src/md/windows/ntinrval.c +++ b/pr/src/md/windows/ntinrval.c @@ -42,83 +42,19 @@ #include "primpl.h" -#if defined(WIN16) -#include <win/compobj.h> -#define QueryPerformanceFrequency(x) FALSE -#define QueryPerformanceCounter(x) FALSE -#endif - -static PRIntn _nt_bitShift = 0; -static PRInt32 _nt_ticksPerSec = -1; - void _PR_MD_INTERVAL_INIT() { - LARGE_INTEGER count; - - if (QueryPerformanceFrequency(&count)) { - /* - * HighPart is signed (LONG). Assert that its sign bit is 0 - * because we will be right shifting it. LowPart is unsigned - * (DWORD). - */ - PR_ASSERT(count.HighPart >= 0); - while(count.HighPart) { - count.LowPart = (count.HighPart << 31) + (count.LowPart >> 1); - count.HighPart >>= 1; - _nt_bitShift++; - } - while(count.LowPart > PR_INTERVAL_MAX) { - count.LowPart >>= 1; - _nt_bitShift++; - } - - /* - * We can't use the performance counter if after - * normalization we are left with fewer than 32 bits. - */ - if (_nt_bitShift <= 32) { - _nt_ticksPerSec = count.LowPart; - PR_ASSERT(_nt_ticksPerSec > PR_INTERVAL_MIN); - return; - } - } - _nt_ticksPerSec = -1; } PRIntervalTime _PR_MD_GET_INTERVAL() { - LARGE_INTEGER count; - - /* Sadly; nspr requires the interval to range from 1000 ticks per second - * to only 100000 ticks per second; QueryPerformanceCounter is too high - * resolution... - */ - if (_nt_ticksPerSec != -1) { - (void)QueryPerformanceCounter(&count); - PR_ASSERT(_nt_bitShift <= 32); - if (_nt_bitShift == 32) { - return (PRUint32)count.HighPart; - } else { - return (PRUint32)((count.HighPart << (32 - _nt_bitShift)) - + (count.LowPart >> _nt_bitShift)); - } - } else -#if defined(__MINGW32__) - return time(); -#elif defined(WIN16) - return clock(); /* milliseconds since application start */ -#else - return GetTickCount(); /* milliseconds since system start */ -#endif + return timeGetTime(); /* milliseconds since system start */ } PRIntervalTime _PR_MD_INTERVAL_PER_SEC() { - if (_nt_ticksPerSec != -1) - return _nt_ticksPerSec; - else - return 1000; + return 1000; } |