]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/stopwatch.h
supporting clang memory management annotations
[wxWidgets.git] / include / wx / stopwatch.h
index 52773f969de7b177f6a67e990ab0e528c9690595..9ef3b1fc0535b3041dcfb9a079ce0b9349feae63 100644 (file)
@@ -1,61 +1,88 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        wx/stopwatch.h
 // Purpose:     wxStopWatch and global time-related functions
-// Author:      Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch)
+// Author:      Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch),
+//              Vadim Zeitlin (time functions, current wxStopWatch)
 // Created:     26.06.03 (extracted from wx/timer.h)
 // RCS-ID:      $Id$
-// Copyright:   (c) 1998-2003 wxWindows team
+// Copyright:   (c) 1998-2003 Julian Smart, Sylvain Bougnoux
+//              (c) 2011 Vadim Zeitlin
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_STOPWATCH_H_
 #define _WX_STOPWATCH_H_
-//
+
+#include "wx/defs.h"
+#include "wx/longlong.h"
+
+// Time-related functions are also available via this header for compatibility
+// but you should include wx/time.h directly if you need only them and not
+// wxStopWatch itself.
+#include "wx/time.h"
+
 // ----------------------------------------------------------------------------
 // wxStopWatch: measure time intervals with up to 1ms resolution
 // ----------------------------------------------------------------------------
 
 #if wxUSE_STOPWATCH
 
-class WXDLLEXPORT wxStopWatch
+class WXDLLIMPEXP_BASE wxStopWatch
 {
 public:
     // ctor starts the stop watch
     wxStopWatch() { m_pauseCount = 0; Start(); }
 
-    // start the stop watch at the moment t0
+    // Start the stop watch at the moment t0 expressed in milliseconds (i.e.
+    // calling Time() immediately afterwards returns t0). This can be used to
+    // restart an existing stopwatch.
     void Start(long t0 = 0);
 
     // pause the stop watch
     void Pause()
     {
-        if ( !m_pauseCount++ )
-            m_pause = GetElapsedTime();
+        if ( m_pauseCount++ == 0 )
+            m_elapsedBeforePause = GetCurrentClockValue() - m_t0;
     }
 
     // resume it
     void Resume()
     {
         wxASSERT_MSG( m_pauseCount > 0,
-                      _T("Resuming stop watch which is not paused") );
+                      wxT("Resuming stop watch which is not paused") );
 
-        if ( !--m_pauseCount )
-            Start(m_pause);
+        if ( --m_pauseCount == 0 )
+        {
+            DoStart();
+            m_t0 -= m_elapsedBeforePause;
+        }
     }
 
-    // get elapsed time since the last Start() in milliseconds
-    long Time() const;
+    // Get elapsed time since the last Start() in microseconds.
+    wxLongLong TimeInMicro() const;
 
-protected:
-    // returns the elapsed time since t0
-    long GetElapsedTime() const;
+    // get elapsed time since the last Start() in milliseconds
+    long Time() const { return (TimeInMicro()/1000).ToLong(); }
 
 private:
-    // the time of the last Start()
+    // Really starts the stop watch. The initial time is set to current clock
+    // value.
+    void DoStart();
+
+    // Returns the current clock value in its native units.
+    wxLongLong GetCurrentClockValue() const;
+
+    // Return the frequency of the clock used in its ticks per second.
+    wxLongLong GetClockFreq() const;
+
+
+    // The clock value when the stop watch was last started. Its units vary
+    // depending on the platform.
     wxLongLong m_t0;
 
-    // the time of the last Pause() (only valid if m_pauseCount > 0)
-    long m_pause;
+    // The elapsed time as of last Pause() call (only valid if m_pauseCount >
+    // 0) in the same units as m_t0.
+    wxLongLong m_elapsedBeforePause;
 
     // if > 0, the stop watch is paused, otherwise it is running
     int m_pauseCount;
@@ -63,34 +90,16 @@ private:
 
 #endif // wxUSE_STOPWATCH
 
-#if wxUSE_LONGLONG
+#if wxUSE_LONGLONG && WXWIN_COMPATIBILITY_2_6
 
-// Starts a global timer
-// -- DEPRECATED: use wxStopWatch instead
-void WXDLLEXPORT wxStartTimer();
+    // Starts a global timer
+    // -- DEPRECATED: use wxStopWatch instead
+    wxDEPRECATED( void WXDLLIMPEXP_BASE wxStartTimer() );
 
-// Gets elapsed milliseconds since last wxStartTimer or wxGetElapsedTime
-// -- DEPRECATED: use wxStopWatch instead
-long WXDLLEXPORT wxGetElapsedTime(bool resetTimer = TRUE);
+    // Gets elapsed milliseconds since last wxStartTimer or wxGetElapsedTime
+    // -- DEPRECATED: use wxStopWatch instead
+    wxDEPRECATED( long WXDLLIMPEXP_BASE wxGetElapsedTime(bool resetTimer = true) );
 
-#endif // wxUSE_LONGLONG
-
-// ----------------------------------------------------------------------------
-// global time functions
-// ----------------------------------------------------------------------------
-
-// Get number of seconds since local time 00:00:00 Jan 1st 1970.
-extern long WXDLLEXPORT wxGetLocalTime();
-
-// Get number of seconds since GMT 00:00:00, Jan 1st 1970.
-extern long WXDLLEXPORT wxGetUTCTime();
-
-#if wxUSE_LONGLONG
-// Get number of milliseconds since local time 00:00:00 Jan 1st 1970
-extern wxLongLong WXDLLEXPORT wxGetLocalTimeMillis();
-#endif // wxUSE_LONGLONG
-
-#define wxGetCurrentTime() wxGetLocalTime()
+#endif // wxUSE_LONGLONG && WXWIN_COMPATIBILITY_2_6
 
 #endif // _WX_STOPWATCH_H_
-