From 8b8dd6c06a173ffeb8280d7cd0708fea0a5e8ffc Mon Sep 17 00:00:00 2001 From: "wtchang%redhat.com" Date: Tue, 7 Feb 2006 02:14:25 +0000 Subject: [PATCH] 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 git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@189282 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/nsprpub/pr/src/Makefile.in | 4 +- mozilla/nsprpub/pr/src/md/windows/ntinrval.c | 66 ++------------------ 2 files changed, 6 insertions(+), 64 deletions(-) diff --git a/mozilla/nsprpub/pr/src/Makefile.in b/mozilla/nsprpub/pr/src/Makefile.in index 4a3ac42a3a9..edaaa15fbb9 100644 --- a/mozilla/nsprpub/pr/src/Makefile.in +++ b/mozilla/nsprpub/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/mozilla/nsprpub/pr/src/md/windows/ntinrval.c b/mozilla/nsprpub/pr/src/md/windows/ntinrval.c index 494f6e83726..d19735e7222 100644 --- a/mozilla/nsprpub/pr/src/md/windows/ntinrval.c +++ b/mozilla/nsprpub/pr/src/md/windows/ntinrval.c @@ -42,83 +42,25 @@ #include "primpl.h" -#if defined(WIN16) -#include -#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; }