X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e16458826d99c9c76c93ee46933a22d89a38a388..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/stopwatch.cpp?ds=sidebyside diff --git a/src/common/stopwatch.cpp b/src/common/stopwatch.cpp index b0e6ddde40..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__ +#ifdef HAVE_GETTIMEOFDAY + return wxGetUTCTimeUSec(); +#else // !HAVE_GETTIMEOFDAY return wxGetUTCTimeMillis(); +#endif // HAVE_GETTIMEOFDAY/!HAVE_GETTIMEOFDAY } wxLongLong wxStopWatch::TimeInMicro() const