From 796e54ef37c2ecad97841d467702ba549ff8cc49 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 27 Nov 2011 19:50:42 +0000 Subject: [PATCH] Use wxGetUTCTimeUSec() in wxStopWatch under Unix for higher precision. If gettimeofday() is available we can achieve better than millisecond precision (even if it usually isn't as high as microsecond), so use it as clock source in wxStopWatch. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 3 ++- src/common/stopwatch.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/changes.txt b/docs/changes.txt index 68cf93d967..fc1a6a4837 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -459,7 +459,8 @@ All: - Fix crash in wxArray::insert() overload taking iterator range (wsu). - Added wxEventFilter class and wxEvtHandler::{Add,Remove}Filter(). - Added convenient wxCmdLineParser::AddLong{Option,Switch}() wrappers. -- Added wxStopWatch::TimeInMicro() and wxGetUTCTimeUSec(). +- Added wxStopWatch::TimeInMicro() and wxGetUTCTimeUSec() and improved + wxStopWatch precision. - Made wxGetLocalTimeMillis() really return local time, added wxGetUTCTimeMillis() returning what this function used to return. diff --git a/src/common/stopwatch.cpp b/src/common/stopwatch.cpp index b0e6ddde40..f077378b3a 100644 --- a/src/common/stopwatch.cpp +++ b/src/common/stopwatch.cpp @@ -112,8 +112,15 @@ 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) @@ -134,7 +141,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 -- 2.45.2