X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/173a5ddc77ceb29b7a0dba6d9feeea95ebbbd72b..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/stopwatch.cpp diff --git a/src/common/stopwatch.cpp b/src/common/stopwatch.cpp index 476237c9cf..f36696dff0 100644 --- a/src/common/stopwatch.cpp +++ b/src/common/stopwatch.cpp @@ -37,6 +37,7 @@ #include "wx/msw/wrapwin.h" #endif #include "wx/log.h" + #include "wx/thread.h" #endif //WX_PRECOMP // ============================================================================ @@ -64,7 +65,7 @@ struct PerfCounter return freq.QuadPart != 0; } - wxCriticalSection cs; + wxCRIT_SECT_DECLARE_MEMBER(cs); LARGE_INTEGER freq; bool init; } gs_perfCounter; @@ -82,7 +83,7 @@ void wxStopWatch::DoStart() #ifdef __WXMSW__ if ( !gs_perfCounter.init ) { - wxCriticalSectionLocker lock(gs_perfCounter.cs); + wxCRIT_SECT_LOCKER(lock, gs_perfCounter.cs); ::QueryPerformanceFrequency(&gs_perfCounter.freq); // Just a sanity check: it's not supposed to happen but verify that @@ -112,12 +113,23 @@ wxLongLong wxStopWatch::GetClockFreq() const return gs_perfCounter.freq.QuadPart; #endif // __WXMSW__ +#ifdef HAVE_GETTIMEOFDAY + // With gettimeofday() we can have nominally microsecond precision and + // while this is not the case in practice, it's still better than + // millisecond. + return MICROSECONDS_PER_SECOND; +#else // !HAVE_GETTIMEOFDAY // Currently milliseconds are used everywhere else. return MILLISECONDS_PER_SECOND; +#endif // HAVE_GETTIMEOFDAY/!HAVE_GETTIMEOFDAY } void wxStopWatch::Start(long t0) { + // Calling Start() makes the stop watch run however many times it was + // paused before. + m_pauseCount = 0; + DoStart(); m_t0 -= (wxLongLong(t0)*GetClockFreq())/MILLISECONDS_PER_SECOND; @@ -134,7 +146,11 @@ wxLongLong wxStopWatch::GetCurrentClockValue() const } #endif // __WXMSW__ - return wxGetLocalTimeMillis(); +#ifdef HAVE_GETTIMEOFDAY + return wxGetUTCTimeUSec(); +#else // !HAVE_GETTIMEOFDAY + return wxGetUTCTimeMillis(); +#endif // HAVE_GETTIMEOFDAY/!HAVE_GETTIMEOFDAY } wxLongLong wxStopWatch::TimeInMicro() const @@ -158,14 +174,14 @@ static wxLongLong wxStartTime = 0l; // starts the global timer void wxStartTimer() { - wxStartTime = wxGetLocalTimeMillis(); + wxStartTime = wxGetUTCTimeMillis(); } // Returns elapsed time in milliseconds long wxGetElapsedTime(bool resetTimer) { wxLongLong oldTime = wxStartTime; - wxLongLong newTime = wxGetLocalTimeMillis(); + wxLongLong newTime = wxGetUTCTimeMillis(); if ( resetTimer ) wxStartTime = newTime;