diff options
author | wtchang%redhat.com <devnull@localhost> | 2006-02-07 02:14:25 +0000 |
---|---|---|
committer | wtchang%redhat.com <devnull@localhost> | 2006-02-07 02:14:25 +0000 |
commit | 8dfbb00bb2ec758549ed8843b7a851f4188020ed (patch) | |
tree | 8f98d0102692c75175701e1b057fd4221a4a1701 | |
parent | 696fa68c2253b63990c209a23b26db59bbf9a06d (diff) | |
download | nspr-hg-8dfbb00bb2ec758549ed8843b7a851f4188020ed.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: NSPRPUB_PRE_4_2_CLIENT_BRANCH
-rw-r--r-- | pr/src/Makefile.in | 4 | ||||
-rw-r--r-- | pr/src/md/windows/ntinrval.c | 66 |
2 files changed, 6 insertions, 64 deletions
diff --git a/pr/src/Makefile.in b/pr/src/Makefile.in index 4a3ac42a..edaaa15f 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..d19735e7 100644 --- a/pr/src/md/windows/ntinrval.c +++ b/pr/src/md/windows/ntinrval.c @@ -42,83 +42,25 @@ #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(); + return time(); #elif defined(WIN16) - return clock(); /* milliseconds since application start */ + return clock(); /* milliseconds since application start */ #else - return GetTickCount(); /* milliseconds since system start */ + return timeGetTime(); /* milliseconds since system start */ #endif } PRIntervalTime _PR_MD_INTERVAL_PER_SEC() { - if (_nt_ticksPerSec != -1) - return _nt_ticksPerSec; - else - return 1000; + return 1000; } |